From 0a0e9974a672abbceb4f5477cf67e9e1fdecd9f6 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Tue, 29 Jan 2019 13:32:56 +0800 Subject: [PATCH 001/391] =?UTF-8?q?fix[litemall-db]=EF=BC=9A=20=E8=B4=AD?= =?UTF-8?q?=E7=89=A9=E8=BD=A6=E5=95=86=E5=93=81=E6=98=AF=E5=90=A6=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E9=9C=80=E8=A6=81=E8=BF=87=E6=BB=A4=E5=B7=B2=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=95=86=E5=93=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/linlinjava/litemall/db/service/LitemallCartService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCartService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCartService.java index 712cbf2c..10e2e5b0 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCartService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCartService.java @@ -114,7 +114,7 @@ public class LitemallCartService { public boolean checkExist(Integer goodsId) { LitemallCartExample example = new LitemallCartExample(); - example.or().andGoodsIdEqualTo(goodsId).andCheckedEqualTo(true); + example.or().andGoodsIdEqualTo(goodsId).andCheckedEqualTo(true).andDeletedEqualTo(false); return cartMapper.countByExample(example) != 0; } } -- Gitee From 714870bfc326f7d8ceb5e2d5559c7273dd73f10a Mon Sep 17 00:00:00 2001 From: DongGuoChao Date: Wed, 30 Jan 2019 10:53:05 +0800 Subject: [PATCH 002/391] =?UTF-8?q?=E8=BF=87=E6=BB=A4=E6=8E=89=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E5=B7=B2=E7=BB=8F=E9=A2=86=E5=8F=96=E6=8E=89=E7=9A=84?= =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../db/service/LitemallCouponService.java | 44 +++++++++++++++---- .../litemall/wx/web/WxHomeController.java | 13 ++++-- litemall-wx/pages/index/index.wxml | 2 +- 3 files changed, 47 insertions(+), 12 deletions(-) diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponService.java index a3f8bb47..e99f0663 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponService.java @@ -3,10 +3,9 @@ package org.linlinjava.litemall.db.service; import com.alibaba.druid.util.StringUtils; import com.github.pagehelper.PageHelper; import org.linlinjava.litemall.db.dao.LitemallCouponMapper; -import org.linlinjava.litemall.db.domain.LitemallCoupon; +import org.linlinjava.litemall.db.dao.LitemallCouponUserMapper; +import org.linlinjava.litemall.db.domain.*; import org.linlinjava.litemall.db.domain.LitemallCoupon.Column; -import org.linlinjava.litemall.db.domain.LitemallCouponExample; -import org.linlinjava.litemall.db.domain.LitemallCouponUser; import org.linlinjava.litemall.db.util.CouponConstant; import org.springframework.stereotype.Service; @@ -14,18 +13,21 @@ import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; import java.util.Random; +import java.util.stream.Collectors; @Service public class LitemallCouponService { @Resource private LitemallCouponMapper couponMapper; + @Resource + private LitemallCouponUserMapper couponUserMapper; private Column[] result = new Column[]{Column.id, Column.name, Column.desc, Column.tag, Column.days, Column.startTime, Column.endTime, Column.discount, Column.min}; /** - * 查询 + * 查询,空参数 * * @param offset * @param limit @@ -34,11 +36,24 @@ public class LitemallCouponService { * @return */ public List queryList(int offset, int limit, String sort, String order) { - LitemallCouponExample example = new LitemallCouponExample(); - example.or().andTypeEqualTo(CouponConstant.TYPE_COMMON).andStatusEqualTo(CouponConstant.STATUS_NORMAL).andDeletedEqualTo(false); - example.setOrderByClause(sort + " " + order); + return queryList(LitemallCouponExample.newAndCreateCriteria(), offset, limit, sort, order); + } + + /** + * 查询 + * + * @param criteria 可扩展的条件 + * @param offset + * @param limit + * @param sort + * @param order + * @return + */ + public List queryList(LitemallCouponExample.Criteria criteria, int offset, int limit, String sort, String order) { + criteria.andTypeEqualTo(CouponConstant.TYPE_COMMON).andStatusEqualTo(CouponConstant.STATUS_NORMAL).andDeletedEqualTo(false); + criteria.example().setOrderByClause(sort + " " + order); PageHelper.startPage(offset, limit); - return couponMapper.selectByExampleSelective(example, result); + return couponMapper.selectByExampleSelective(criteria.example(), result); } public int queryTotal() { @@ -47,6 +62,19 @@ public class LitemallCouponService { return (int) couponMapper.countByExample(example); } + public List queryAvailableList(Integer userId, int offset, int limit) { + assert userId != null; + // 过滤掉登录账号已经领取过的coupon + LitemallCouponExample.Criteria c = LitemallCouponExample.newAndCreateCriteria(); + List used = couponUserMapper.selectByExample( + LitemallCouponUserExample.newAndCreateCriteria().andUserIdEqualTo(userId).example() + ); + if(used!=null && !used.isEmpty()){ + c.andIdNotIn(used.stream().map(LitemallCouponUser::getCouponId).collect(Collectors.toList())); + } + return queryList(c, offset, limit, "add_time", "desc"); + } + public List queryList(int offset, int limit) { return queryList(offset, limit, "add_time", "desc"); } diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxHomeController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxHomeController.java index 21ddba92..3d2941ca 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxHomeController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxHomeController.java @@ -7,6 +7,7 @@ import org.linlinjava.litemall.core.util.ResponseUtil; import org.linlinjava.litemall.db.domain.LitemallCategory; import org.linlinjava.litemall.db.domain.LitemallGoods; import org.linlinjava.litemall.db.service.*; +import org.linlinjava.litemall.wx.annotation.LoginUser; import org.linlinjava.litemall.wx.service.HomeCacheManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; @@ -70,11 +71,11 @@ public class WxHomeController { /** * 首页数据 - * + * @param userId 当用户已经登录时,非空。为登录状态为null * @return 首页数据 */ @GetMapping("/index") - public Object index() { + public Object index(@LoginUser Integer userId) { //优先从缓存中读取 if (HomeCacheManager.hasData(HomeCacheManager.INDEX)) { return ResponseUtil.ok(HomeCacheManager.getCacheData(HomeCacheManager.INDEX)); @@ -87,7 +88,13 @@ public class WxHomeController { Callable channelListCallable = () -> categoryService.queryChannel(); - Callable couponListCallable = () -> couponService.queryList(0, 3); + Callable couponListCallable; + if(userId == null){ + couponListCallable = () -> couponService.queryList(0, 3); + } else { + couponListCallable = () -> couponService.queryAvailableList(userId,0, 3); + } + Callable newGoodsListCallable = () -> goodsService.queryByNew(0, SystemConfig.getNewLimit()); diff --git a/litemall-wx/pages/index/index.wxml b/litemall-wx/pages/index/index.wxml index c2705083..e6b8ea48 100644 --- a/litemall-wx/pages/index/index.wxml +++ b/litemall-wx/pages/index/index.wxml @@ -24,7 +24,7 @@ - + {{item.tag}} -- Gitee From fbc7dc6a39717fc6c8eae411e74eb99f74b8b663 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Wed, 30 Jan 2019 22:17:58 +0800 Subject: [PATCH 003/391] =?UTF-8?q?chore[litemall-admin-api,=20litemall-wx?= =?UTF-8?q?-api]=EF=BC=9A=20=E5=8F=96=E6=B6=88=E7=BC=96=E7=A8=8B=E5=BC=8F?= =?UTF-8?q?=E4=BA=8B=E5=8A=A1=E7=AE=A1=E7=90=86=EF=BC=8C=E9=87=87=E7=94=A8?= =?UTF-8?q?@Transactional=E6=B3=A8=E8=A7=A3=E4=BA=8B=E5=8A=A1=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../litemall/admin/job/OrderJob.java | 54 +- .../admin/service/AdminGoodsService.java | 333 +++++++ .../admin/service/AdminOrderService.java | 246 +++++ .../admin/web/AdminGoodsController.java | 386 +------- .../admin/web/AdminOrderController.java | 251 +---- .../litemall/wx/service/WxOrderService.java | 928 ++++++++++++++++++ .../litemall/wx/web/WxOrderController.java | 829 +--------------- 7 files changed, 1621 insertions(+), 1406 deletions(-) create mode 100644 litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminGoodsService.java create mode 100644 litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminOrderService.java create mode 100644 litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/job/OrderJob.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/job/OrderJob.java index 16a354ae..30f7b01a 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/job/OrderJob.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/job/OrderJob.java @@ -5,15 +5,14 @@ import org.apache.commons.logging.LogFactory; import org.linlinjava.litemall.db.domain.LitemallGoodsProduct; import org.linlinjava.litemall.db.domain.LitemallOrder; import org.linlinjava.litemall.db.domain.LitemallOrderGoods; -import org.linlinjava.litemall.db.service.*; +import org.linlinjava.litemall.db.service.LitemallGoodsProductService; +import org.linlinjava.litemall.db.service.LitemallOrderGoodsService; +import org.linlinjava.litemall.db.service.LitemallOrderService; import org.linlinjava.litemall.db.util.OrderUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import org.springframework.transaction.PlatformTransactionManager; -import org.springframework.transaction.TransactionDefinition; -import org.springframework.transaction.TransactionStatus; -import org.springframework.transaction.support.DefaultTransactionDefinition; +import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.List; @@ -25,9 +24,6 @@ import java.util.List; public class OrderJob { private final Log logger = LogFactory.getLog(OrderJob.class); - @Autowired - private PlatformTransactionManager txManager; - @Autowired private LitemallOrderGoodsService orderGoodsService; @Autowired @@ -46,6 +42,7 @@ public class OrderJob { * 这里可以进一步地配合用户订单查询时订单未付款检查,如果订单超时半小时则取消。 */ @Scheduled(fixedDelay = 30 * 60 * 1000) + @Transactional public void checkOrderUnpaid() { logger.info("系统开启任务检查订单是否已经超期自动取消订单"); @@ -58,35 +55,24 @@ public class OrderJob { continue; } - // 开启事务管理 - DefaultTransactionDefinition def = new DefaultTransactionDefinition(); - def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); - TransactionStatus status = txManager.getTransaction(def); - try { - // 设置订单已取消状态 - order.setOrderStatus(OrderUtil.STATUS_AUTO_CANCEL); - order.setEndTime(LocalDateTime.now()); - if (orderService.updateWithOptimisticLocker(order) == 0) { - throw new Exception("更新数据已失效"); - } + // 设置订单已取消状态 + order.setOrderStatus(OrderUtil.STATUS_AUTO_CANCEL); + order.setEndTime(LocalDateTime.now()); + if (orderService.updateWithOptimisticLocker(order) == 0) { + throw new RuntimeException("更新数据已失效"); + } - // 商品货品数量增加 - Integer orderId = order.getId(); - List orderGoodsList = orderGoodsService.queryByOid(orderId); - for (LitemallOrderGoods orderGoods : orderGoodsList) { - Integer productId = orderGoods.getProductId(); - LitemallGoodsProduct product = productService.findById(productId); - Short number = orderGoods.getNumber(); - if (productService.addStock(productId, number) == 0) { - throw new Exception("商品货品库存增加失败"); - } + // 商品货品数量增加 + Integer orderId = order.getId(); + List orderGoodsList = orderGoodsService.queryByOid(orderId); + for (LitemallOrderGoods orderGoods : orderGoodsList) { + Integer productId = orderGoods.getProductId(); + LitemallGoodsProduct product = productService.findById(productId); + Short number = orderGoods.getNumber(); + if (productService.addStock(productId, number) == 0) { + throw new RuntimeException("商品货品库存增加失败"); } - } catch (Exception ex) { - txManager.rollback(status); - logger.info("订单 ID=" + order.getId() + " 数据更新失败,放弃自动确认收货"); - return; } - txManager.commit(status); logger.info("订单 ID=" + order.getId() + " 已经超期自动取消订单"); } } diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminGoodsService.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminGoodsService.java new file mode 100644 index 00000000..e0ceaf8d --- /dev/null +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminGoodsService.java @@ -0,0 +1,333 @@ +package org.linlinjava.litemall.admin.service; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.linlinjava.litemall.admin.dao.GoodsAllinone; +import org.linlinjava.litemall.admin.util.CatVo; +import org.linlinjava.litemall.core.qcode.QCodeService; +import org.linlinjava.litemall.core.util.ResponseUtil; +import org.linlinjava.litemall.db.domain.*; +import org.linlinjava.litemall.db.service.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.linlinjava.litemall.admin.util.AdminResponseCode.GOODS_NAME_EXIST; +import static org.linlinjava.litemall.admin.util.AdminResponseCode.GOODS_UPDATE_NOT_ALLOWED; + +@Service +public class AdminGoodsService { + private final Log logger = LogFactory.getLog(AdminGoodsService.class); + + @Autowired + private LitemallGoodsService goodsService; + @Autowired + private LitemallGoodsSpecificationService specificationService; + @Autowired + private LitemallGoodsAttributeService attributeService; + @Autowired + private LitemallGoodsProductService productService; + @Autowired + private LitemallCategoryService categoryService; + @Autowired + private LitemallBrandService brandService; + @Autowired + private LitemallCartService cartService; + @Autowired + private LitemallOrderGoodsService orderGoodsService; + + @Autowired + private QCodeService qCodeService; + + public Object list(String goodsSn, String name, + Integer page, Integer limit, String sort, String order) { + List goodsList = goodsService.querySelective(goodsSn, name, page, limit, sort, order); + int total = goodsService.countSelective(goodsSn, name, page, limit, sort, order); + Map data = new HashMap<>(); + data.put("total", total); + data.put("items", goodsList); + + return ResponseUtil.ok(data); + } + + private Object validate(GoodsAllinone goodsAllinone) { + LitemallGoods goods = goodsAllinone.getGoods(); + String name = goods.getName(); + if (StringUtils.isEmpty(name)) { + return ResponseUtil.badArgument(); + } + String goodsSn = goods.getGoodsSn(); + if (StringUtils.isEmpty(goodsSn)) { + return ResponseUtil.badArgument(); + } + // 品牌商可以不设置,如果设置则需要验证品牌商存在 + Integer brandId = goods.getBrandId(); + if (brandId != null && brandId != 0) { + if (brandService.findById(brandId) == null) { + return ResponseUtil.badArgumentValue(); + } + } + // 分类可以不设置,如果设置则需要验证分类存在 + Integer categoryId = goods.getCategoryId(); + if (categoryId != null && categoryId != 0) { + if (categoryService.findById(categoryId) == null) { + return ResponseUtil.badArgumentValue(); + } + } + + LitemallGoodsAttribute[] attributes = goodsAllinone.getAttributes(); + for (LitemallGoodsAttribute attribute : attributes) { + String attr = attribute.getAttribute(); + if (StringUtils.isEmpty(attr)) { + return ResponseUtil.badArgument(); + } + String value = attribute.getValue(); + if (StringUtils.isEmpty(value)) { + return ResponseUtil.badArgument(); + } + } + + LitemallGoodsSpecification[] specifications = goodsAllinone.getSpecifications(); + for (LitemallGoodsSpecification specification : specifications) { + String spec = specification.getSpecification(); + if (StringUtils.isEmpty(spec)) { + return ResponseUtil.badArgument(); + } + String value = specification.getValue(); + if (StringUtils.isEmpty(value)) { + return ResponseUtil.badArgument(); + } + } + + LitemallGoodsProduct[] products = goodsAllinone.getProducts(); + for (LitemallGoodsProduct product : products) { + Integer number = product.getNumber(); + if (number == null || number < 0) { + return ResponseUtil.badArgument(); + } + + BigDecimal price = product.getPrice(); + if (price == null) { + return ResponseUtil.badArgument(); + } + + String[] productSpecifications = product.getSpecifications(); + if (productSpecifications.length == 0) { + return ResponseUtil.badArgument(); + } + } + + return null; + } + + /** + * 编辑商品 + *

+ * TODO + * 目前商品修改的逻辑是 + * 1. 更新litemall_goods表 + * 2. 逻辑删除litemall_goods_specification、litemall_goods_attribute、litemall_goods_product + * 3. 添加litemall_goods_specification、litemall_goods_attribute、litemall_goods_product + *

+ * 这里商品三个表的数据采用删除再添加的策略是因为 + * 商品编辑页面,支持管理员添加删除商品规格、添加删除商品属性,因此这里仅仅更新是不可能的, + * 只能删除三个表旧的数据,然后添加新的数据。 + * 但是这里又会引入新的问题,就是存在订单商品货品ID指向了失效的商品货品表。 + * 因此这里会拒绝管理员编辑商品,如果订单或购物车中存在商品。 + * 所以这里可能需要重新设计。 + */ + @Transactional + public Object update(GoodsAllinone goodsAllinone) { + Object error = validate(goodsAllinone); + if (error != null) { + return error; + } + + LitemallGoods goods = goodsAllinone.getGoods(); + LitemallGoodsAttribute[] attributes = goodsAllinone.getAttributes(); + LitemallGoodsSpecification[] specifications = goodsAllinone.getSpecifications(); + LitemallGoodsProduct[] products = goodsAllinone.getProducts(); + + Integer id = goods.getId(); + // 检查是否存在购物车商品或者订单商品 + // 如果存在则拒绝修改商品。 + if (orderGoodsService.checkExist(id)) { + return ResponseUtil.fail(GOODS_UPDATE_NOT_ALLOWED, "商品已经在订单中,不能修改"); + } + if (cartService.checkExist(id)) { + return ResponseUtil.fail(GOODS_UPDATE_NOT_ALLOWED, "商品已经在购物车中,不能修改"); + } + + //将生成的分享图片地址写入数据库 + String url = qCodeService.createGoodShareImage(goods.getId().toString(), goods.getPicUrl(), goods.getName()); + goods.setShareUrl(url); + + // 商品基本信息表litemall_goods + if (goodsService.updateById(goods) == 0) { + throw new RuntimeException("更新数据失败"); + } + + Integer gid = goods.getId(); + specificationService.deleteByGid(gid); + attributeService.deleteByGid(gid); + productService.deleteByGid(gid); + + // 商品规格表litemall_goods_specification + for (LitemallGoodsSpecification specification : specifications) { + specification.setGoodsId(goods.getId()); + specificationService.add(specification); + } + + // 商品参数表litemall_goods_attribute + for (LitemallGoodsAttribute attribute : attributes) { + attribute.setGoodsId(goods.getId()); + attributeService.add(attribute); + } + + // 商品货品表litemall_product + for (LitemallGoodsProduct product : products) { + product.setGoodsId(goods.getId()); + productService.add(product); + } + qCodeService.createGoodShareImage(goods.getId().toString(), goods.getPicUrl(), goods.getName()); + + return ResponseUtil.ok(); + } + + @Transactional + public Object delete(LitemallGoods goods) { + Integer id = goods.getId(); + if (id == null) { + return ResponseUtil.badArgument(); + } + + Integer gid = goods.getId(); + goodsService.deleteById(gid); + specificationService.deleteByGid(gid); + attributeService.deleteByGid(gid); + productService.deleteByGid(gid); + return ResponseUtil.ok(); + } + + @Transactional + public Object create(GoodsAllinone goodsAllinone) { + Object error = validate(goodsAllinone); + if (error != null) { + return error; + } + + LitemallGoods goods = goodsAllinone.getGoods(); + LitemallGoodsAttribute[] attributes = goodsAllinone.getAttributes(); + LitemallGoodsSpecification[] specifications = goodsAllinone.getSpecifications(); + LitemallGoodsProduct[] products = goodsAllinone.getProducts(); + + String name = goods.getName(); + if (goodsService.checkExistByName(name)) { + return ResponseUtil.fail(GOODS_NAME_EXIST, "商品名已经存在"); + } + + // 商品基本信息表litemall_goods + goodsService.add(goods); + + //将生成的分享图片地址写入数据库 + String url = qCodeService.createGoodShareImage(goods.getId().toString(), goods.getPicUrl(), goods.getName()); + if (!StringUtils.isEmpty(url)) { + goods.setShareUrl(url); + if (goodsService.updateById(goods) == 0) { + throw new RuntimeException("更新数据失败"); + } + } + + // 商品规格表litemall_goods_specification + for (LitemallGoodsSpecification specification : specifications) { + specification.setGoodsId(goods.getId()); + specificationService.add(specification); + } + + // 商品参数表litemall_goods_attribute + for (LitemallGoodsAttribute attribute : attributes) { + attribute.setGoodsId(goods.getId()); + attributeService.add(attribute); + } + + // 商品货品表litemall_product + for (LitemallGoodsProduct product : products) { + product.setGoodsId(goods.getId()); + productService.add(product); + } + return ResponseUtil.ok(); + } + + public Object list2() { + // http://element-cn.eleme.io/#/zh-CN/component/cascader + // 管理员设置“所属分类” + List l1CatList = categoryService.queryL1(); + List categoryList = new ArrayList<>(l1CatList.size()); + + for (LitemallCategory l1 : l1CatList) { + CatVo l1CatVo = new CatVo(); + l1CatVo.setValue(l1.getId()); + l1CatVo.setLabel(l1.getName()); + + List l2CatList = categoryService.queryByPid(l1.getId()); + List children = new ArrayList<>(l2CatList.size()); + for (LitemallCategory l2 : l2CatList) { + CatVo l2CatVo = new CatVo(); + l2CatVo.setValue(l2.getId()); + l2CatVo.setLabel(l2.getName()); + children.add(l2CatVo); + } + l1CatVo.setChildren(children); + + categoryList.add(l1CatVo); + } + + // http://element-cn.eleme.io/#/zh-CN/component/select + // 管理员设置“所属品牌商” + List list = brandService.all(); + List> brandList = new ArrayList<>(l1CatList.size()); + for (LitemallBrand brand : list) { + Map b = new HashMap<>(2); + b.put("value", brand.getId()); + b.put("label", brand.getName()); + brandList.add(b); + } + + Map data = new HashMap<>(); + data.put("categoryList", categoryList); + data.put("brandList", brandList); + return ResponseUtil.ok(data); + } + + public Object detail(Integer id) { + LitemallGoods goods = goodsService.findById(id); + List products = productService.queryByGid(id); + List specifications = specificationService.queryByGid(id); + List attributes = attributeService.queryByGid(id); + + Integer categoryId = goods.getCategoryId(); + LitemallCategory category = categoryService.findById(categoryId); + Integer[] categoryIds = new Integer[]{}; + if (category != null) { + Integer parentCategoryId = category.getPid(); + categoryIds = new Integer[]{parentCategoryId, categoryId}; + } + + Map data = new HashMap<>(); + data.put("goods", goods); + data.put("specifications", specifications); + data.put("products", products); + data.put("attributes", attributes); + data.put("categoryIds", categoryIds); + + return ResponseUtil.ok(data); + } + +} diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminOrderService.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminOrderService.java new file mode 100644 index 00000000..28b941e2 --- /dev/null +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminOrderService.java @@ -0,0 +1,246 @@ +package org.linlinjava.litemall.admin.service; + +import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest; +import com.github.binarywang.wxpay.bean.result.WxPayRefundResult; +import com.github.binarywang.wxpay.exception.WxPayException; +import com.github.binarywang.wxpay.service.WxPayService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.linlinjava.litemall.core.notify.NotifyService; +import org.linlinjava.litemall.core.notify.NotifyType; +import org.linlinjava.litemall.core.util.JacksonUtil; +import org.linlinjava.litemall.core.util.ResponseUtil; +import org.linlinjava.litemall.db.domain.LitemallComment; +import org.linlinjava.litemall.db.domain.LitemallOrder; +import org.linlinjava.litemall.db.domain.LitemallOrderGoods; +import org.linlinjava.litemall.db.domain.UserVo; +import org.linlinjava.litemall.db.service.*; +import org.linlinjava.litemall.db.util.OrderUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.linlinjava.litemall.admin.util.AdminResponseCode.*; + +@Service + +public class AdminOrderService { + private final Log logger = LogFactory.getLog(AdminOrderService.class); + + @Autowired + private LitemallOrderGoodsService orderGoodsService; + @Autowired + private LitemallOrderService orderService; + @Autowired + private LitemallGoodsProductService productService; + @Autowired + private LitemallUserService userService; + @Autowired + private LitemallCommentService commentService; + @Autowired + private WxPayService wxPayService; + @Autowired + private NotifyService notifyService; + + public Object list(Integer userId, String orderSn, List orderStatusArray, + Integer page, Integer limit, String sort, String order) { + List orderList = orderService.querySelective(userId, orderSn, orderStatusArray, page, limit, sort, order); + int total = orderService.countSelective(userId, orderSn, orderStatusArray, page, limit, sort, order); + + Map data = new HashMap<>(); + data.put("total", total); + data.put("items", orderList); + + return ResponseUtil.ok(data); + } + + public Object detail(Integer id) { + LitemallOrder order = orderService.findById(id); + List orderGoods = orderGoodsService.queryByOid(id); + UserVo user = userService.findUserVoById(order.getUserId()); + Map data = new HashMap<>(); + data.put("order", order); + data.put("orderGoods", orderGoods); + data.put("user", user); + + return ResponseUtil.ok(data); + } + + /** + * 订单退款 + *

+ * 1. 检测当前订单是否能够退款; + * 2. 微信退款操作; + * 3. 设置订单退款确认状态; + * 4. 订单商品库存回库。 + *

+ * TODO + * 虽然接入了微信退款API,但是从安全角度考虑,建议开发者删除这里微信退款代码,采用以下两步走步骤: + * 1. 管理员登录微信官方支付平台点击退款操作进行退款 + * 2. 管理员登录litemall管理后台点击退款操作进行订单状态修改和商品库存回库 + * + * @param body 订单信息,{ orderId:xxx } + * @return 订单退款操作结果 + */ + @Transactional + public Object refund(String body) { + Integer orderId = JacksonUtil.parseInteger(body, "orderId"); + String refundMoney = JacksonUtil.parseString(body, "refundMoney"); + if (orderId == null) { + return ResponseUtil.badArgument(); + } + if (StringUtils.isEmpty(refundMoney)) { + return ResponseUtil.badArgument(); + } + + LitemallOrder order = orderService.findById(orderId); + if (order == null) { + return ResponseUtil.badArgument(); + } + + if (order.getActualPrice().compareTo(new BigDecimal(refundMoney)) != 0) { + return ResponseUtil.badArgumentValue(); + } + + // 如果订单不是退款状态,则不能退款 + if (!order.getOrderStatus().equals(OrderUtil.STATUS_REFUND)) { + return ResponseUtil.fail(ORDER_CONFIRM_NOT_ALLOWED, "订单不能确认收货"); + } + + // 微信退款 + WxPayRefundRequest wxPayRefundRequest = new WxPayRefundRequest(); + wxPayRefundRequest.setOutTradeNo(order.getOrderSn()); + wxPayRefundRequest.setOutRefundNo("refund_" + order.getOrderSn()); + // 元转成分 + Integer totalFee = order.getActualPrice().multiply(new BigDecimal(100)).intValue(); + wxPayRefundRequest.setTotalFee(totalFee); + wxPayRefundRequest.setRefundFee(totalFee); + + WxPayRefundResult wxPayRefundResult = null; + try { + wxPayRefundResult = wxPayService.refund(wxPayRefundRequest); + } catch (WxPayException e) { + e.printStackTrace(); + return ResponseUtil.fail(ORDER_REFUND_FAILED, "订单退款失败"); + } + if (!wxPayRefundResult.getReturnCode().equals("SUCCESS")) { + logger.warn("refund fail: " + wxPayRefundResult.getReturnMsg()); + return ResponseUtil.fail(ORDER_REFUND_FAILED, "订单退款失败"); + } + if (!wxPayRefundResult.getResultCode().equals("SUCCESS")) { + logger.warn("refund fail: " + wxPayRefundResult.getReturnMsg()); + return ResponseUtil.fail(ORDER_REFUND_FAILED, "订单退款失败"); + } + + // 设置订单取消状态 + order.setOrderStatus(OrderUtil.STATUS_REFUND_CONFIRM); + if (orderService.updateWithOptimisticLocker(order) == 0) { + throw new RuntimeException("更新数据已失效"); + } + + // 商品货品数量增加 + List orderGoodsList = orderGoodsService.queryByOid(orderId); + for (LitemallOrderGoods orderGoods : orderGoodsList) { + Integer productId = orderGoods.getProductId(); + Short number = orderGoods.getNumber(); + if (productService.addStock(productId, number) == 0) { + throw new RuntimeException("商品货品库存增加失败"); + } + } + + //TODO 发送邮件和短信通知,这里采用异步发送 + // 退款成功通知用户, 例如“您申请的订单退款 [ 单号:{1} ] 已成功,请耐心等待到账。” + // 注意订单号只发后6位 + notifyService.notifySmsTemplate(order.getMobile(), NotifyType.REFUND, new String[]{order.getOrderSn().substring(8, 14)}); + + return ResponseUtil.ok(); + } + + /** + * 发货 + * 1. 检测当前订单是否能够发货 + * 2. 设置订单发货状态 + * + * @param body 订单信息,{ orderId:xxx, shipSn: xxx, shipChannel: xxx } + * @return 订单操作结果 + * 成功则 { errno: 0, errmsg: '成功' } + * 失败则 { errno: XXX, errmsg: XXX } + */ + public Object ship(String body) { + Integer orderId = JacksonUtil.parseInteger(body, "orderId"); + String shipSn = JacksonUtil.parseString(body, "shipSn"); + String shipChannel = JacksonUtil.parseString(body, "shipChannel"); + if (orderId == null || shipSn == null || shipChannel == null) { + return ResponseUtil.badArgument(); + } + + LitemallOrder order = orderService.findById(orderId); + if (order == null) { + return ResponseUtil.badArgument(); + } + + // 如果订单不是已付款状态,则不能发货 + if (!order.getOrderStatus().equals(OrderUtil.STATUS_PAY)) { + return ResponseUtil.fail(ORDER_CONFIRM_NOT_ALLOWED, "订单不能确认收货"); + } + + order.setOrderStatus(OrderUtil.STATUS_SHIP); + order.setShipSn(shipSn); + order.setShipChannel(shipChannel); + order.setShipTime(LocalDateTime.now()); + if (orderService.updateWithOptimisticLocker(order) == 0) { + return ResponseUtil.updatedDateExpired(); + } + + //TODO 发送邮件和短信通知,这里采用异步发送 + // 发货会发送通知短信给用户: * + // "您的订单已经发货,快递公司 {1},快递单 {2} ,请注意查收" + notifyService.notifySmsTemplate(order.getMobile(), NotifyType.SHIP, new String[]{shipChannel, shipSn}); + + return ResponseUtil.ok(); + } + + + /** + * 回复订单商品 + * + * @param body 订单信息,{ orderId:xxx } + * @return 订单操作结果 + * 成功则 { errno: 0, errmsg: '成功' } + * 失败则 { errno: XXX, errmsg: XXX } + */ + public Object reply(String body) { + Integer commentId = JacksonUtil.parseInteger(body, "commentId"); + if (commentId == null || commentId == 0) { + return ResponseUtil.badArgument(); + } + // 目前只支持回复一次 + if (commentService.findById(commentId) != null) { + return ResponseUtil.fail(ORDER_REPLY_EXIST, "订单商品已回复!"); + } + String content = JacksonUtil.parseString(body, "content"); + if (StringUtils.isEmpty(content)) { + return ResponseUtil.badArgument(); + } + // 创建评价回复 + LitemallComment comment = new LitemallComment(); + comment.setType((byte) 2); + comment.setValueId(commentId); + comment.setContent(content); + comment.setUserId(0); // 评价回复没有用 + comment.setStar((short) 0); // 评价回复没有用 + comment.setHasPicture(false); // 评价回复没有用 + comment.setPicUrls(new String[]{}); // 评价回复没有用 + commentService.save(comment); + + return ResponseUtil.ok(); + } + +} diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGoodsController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGoodsController.java index a4416716..9f8240b7 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGoodsController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGoodsController.java @@ -5,31 +5,15 @@ import org.apache.commons.logging.LogFactory; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.linlinjava.litemall.admin.annotation.RequiresPermissionsDesc; import org.linlinjava.litemall.admin.dao.GoodsAllinone; -import org.linlinjava.litemall.admin.util.CatVo; -import org.linlinjava.litemall.core.qcode.QCodeService; -import org.linlinjava.litemall.core.util.ResponseUtil; +import org.linlinjava.litemall.admin.service.AdminGoodsService; import org.linlinjava.litemall.core.validator.Order; import org.linlinjava.litemall.core.validator.Sort; -import org.linlinjava.litemall.db.domain.*; -import org.linlinjava.litemall.db.service.*; +import org.linlinjava.litemall.db.domain.LitemallGoods; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.transaction.PlatformTransactionManager; -import org.springframework.transaction.TransactionDefinition; -import org.springframework.transaction.TransactionStatus; -import org.springframework.transaction.support.DefaultTransactionDefinition; -import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.constraints.NotNull; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.linlinjava.litemall.admin.util.AdminResponseCode.GOODS_NAME_EXIST; -import static org.linlinjava.litemall.admin.util.AdminResponseCode.GOODS_UPDATE_NOT_ALLOWED; @RestController @RequestMapping("/admin/goods") @@ -38,366 +22,88 @@ public class AdminGoodsController { private final Log logger = LogFactory.getLog(AdminGoodsController.class); @Autowired - private PlatformTransactionManager txManager; - - @Autowired - private LitemallGoodsService goodsService; - @Autowired - private LitemallGoodsSpecificationService specificationService; - @Autowired - private LitemallGoodsAttributeService attributeService; - @Autowired - private LitemallGoodsProductService productService; - @Autowired - private LitemallCategoryService categoryService; - @Autowired - private LitemallBrandService brandService; - @Autowired - private LitemallCartService cartService; - @Autowired - private LitemallOrderGoodsService orderGoodsService; - - @Autowired - private QCodeService qCodeService; + private AdminGoodsService adminGoodsService; + /** + * 查询商品 + * + * @param goodsSn + * @param name + * @param page + * @param limit + * @param sort + * @param order + * @return + */ @RequiresPermissions("admin:goods:list") - @RequiresPermissionsDesc(menu={"商品管理" , "商品列表"}, button="查询") + @RequiresPermissionsDesc(menu = {"商品管理", "商品列表"}, button = "查询") @GetMapping("/list") public Object list(String goodsSn, String name, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer limit, @Sort @RequestParam(defaultValue = "add_time") String sort, @Order @RequestParam(defaultValue = "desc") String order) { - List goodsList = goodsService.querySelective(goodsSn, name, page, limit, sort, order); - int total = goodsService.countSelective(goodsSn, name, page, limit, sort, order); - Map data = new HashMap<>(); - data.put("total", total); - data.put("items", goodsList); - - return ResponseUtil.ok(data); - } - - private Object validate(GoodsAllinone goodsAllinone) { - LitemallGoods goods = goodsAllinone.getGoods(); - String name = goods.getName(); - if (StringUtils.isEmpty(name)) { - return ResponseUtil.badArgument(); - } - String goodsSn = goods.getGoodsSn(); - if (StringUtils.isEmpty(goodsSn)) { - return ResponseUtil.badArgument(); - } - // 品牌商可以不设置,如果设置则需要验证品牌商存在 - Integer brandId = goods.getBrandId(); - if (brandId != null && brandId != 0) { - if (brandService.findById(brandId) == null) { - return ResponseUtil.badArgumentValue(); - } - } - // 分类可以不设置,如果设置则需要验证分类存在 - Integer categoryId = goods.getCategoryId(); - if (categoryId != null && categoryId != 0) { - if (categoryService.findById(categoryId) == null) { - return ResponseUtil.badArgumentValue(); - } - } - - LitemallGoodsAttribute[] attributes = goodsAllinone.getAttributes(); - for (LitemallGoodsAttribute attribute : attributes) { - String attr = attribute.getAttribute(); - if (StringUtils.isEmpty(attr)) { - return ResponseUtil.badArgument(); - } - String value = attribute.getValue(); - if (StringUtils.isEmpty(value)) { - return ResponseUtil.badArgument(); - } - } - - LitemallGoodsSpecification[] specifications = goodsAllinone.getSpecifications(); - for (LitemallGoodsSpecification specification : specifications) { - String spec = specification.getSpecification(); - if (StringUtils.isEmpty(spec)) { - return ResponseUtil.badArgument(); - } - String value = specification.getValue(); - if (StringUtils.isEmpty(value)) { - return ResponseUtil.badArgument(); - } - } - - LitemallGoodsProduct[] products = goodsAllinone.getProducts(); - for (LitemallGoodsProduct product : products) { - Integer number = product.getNumber(); - if (number == null || number < 0) { - return ResponseUtil.badArgument(); - } - - BigDecimal price = product.getPrice(); - if (price == null) { - return ResponseUtil.badArgument(); - } - - String[] productSpecifications = product.getSpecifications(); - if (productSpecifications.length == 0) { - return ResponseUtil.badArgument(); - } - } - - return null; + return adminGoodsService.list(goodsSn, name, page, limit, sort, order); } /** * 编辑商品 - *

- * TODO - * 目前商品修改的逻辑是 - * 1. 更新litemall_goods表 - * 2. 逻辑删除litemall_goods_specification、litemall_goods_attribute、litemall_goods_product - * 3. 添加litemall_goods_specification、litemall_goods_attribute、litemall_goods_product * - * 这里商品三个表的数据采用删除再添加的策略是因为 - * 商品编辑页面,支持管理员添加删除商品规格、添加删除商品属性,因此这里仅仅更新是不可能的, - * 只能删除三个表旧的数据,然后添加新的数据。 - * 但是这里又会引入新的问题,就是存在订单商品货品ID指向了失效的商品货品表。 - * 因此这里会拒绝管理员编辑商品,如果订单或购物车中存在商品。 - * 所以这里可能需要重新设计。 + * @param goodsAllinone + * @return */ @RequiresPermissions("admin:goods:update") - @RequiresPermissionsDesc(menu={"商品管理" , "商品列表"}, button="编辑") + @RequiresPermissionsDesc(menu = {"商品管理", "商品列表"}, button = "编辑") @PostMapping("/update") public Object update(@RequestBody GoodsAllinone goodsAllinone) { - Object error = validate(goodsAllinone); - if (error != null) { - return error; - } - - LitemallGoods goods = goodsAllinone.getGoods(); - LitemallGoodsAttribute[] attributes = goodsAllinone.getAttributes(); - LitemallGoodsSpecification[] specifications = goodsAllinone.getSpecifications(); - LitemallGoodsProduct[] products = goodsAllinone.getProducts(); - - Integer id = goods.getId(); - // 检查是否存在购物车商品或者订单商品 - // 如果存在则拒绝修改商品。 - if(orderGoodsService.checkExist(id)){ - return ResponseUtil.fail(GOODS_UPDATE_NOT_ALLOWED, "商品已经在订单中,不能修改"); - } - if(cartService.checkExist(id)){ - return ResponseUtil.fail(GOODS_UPDATE_NOT_ALLOWED, "商品已经在购物车中,不能修改"); - } - - // 开启事务管理 - DefaultTransactionDefinition def = new DefaultTransactionDefinition(); - def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); - TransactionStatus status = txManager.getTransaction(def); - try { - - //将生成的分享图片地址写入数据库 - String url = qCodeService.createGoodShareImage(goods.getId().toString(), goods.getPicUrl(), goods.getName()); - goods.setShareUrl(url); - - // 商品基本信息表litemall_goods - if (goodsService.updateById(goods) == 0) { - throw new Exception("更新数据失败"); - } - - Integer gid = goods.getId(); - specificationService.deleteByGid(gid); - attributeService.deleteByGid(gid); - productService.deleteByGid(gid); - - // 商品规格表litemall_goods_specification - for (LitemallGoodsSpecification specification : specifications) { - specification.setGoodsId(goods.getId()); - specificationService.add(specification); - } - - // 商品参数表litemall_goods_attribute - for (LitemallGoodsAttribute attribute : attributes) { - attribute.setGoodsId(goods.getId()); - attributeService.add(attribute); - } - - // 商品货品表litemall_product - for (LitemallGoodsProduct product : products) { - product.setGoodsId(goods.getId()); - productService.add(product); - } - } catch (Exception ex) { - txManager.rollback(status); - logger.error("系统内部错误", ex); - return ResponseUtil.fail(); - } - txManager.commit(status); - - qCodeService.createGoodShareImage(goods.getId().toString(), goods.getPicUrl(), goods.getName()); - - return ResponseUtil.ok(); + return adminGoodsService.update(goodsAllinone); } + /** + * 删除商品 + * + * @param goods + * @return + */ @RequiresPermissions("admin:goods:delete") - @RequiresPermissionsDesc(menu={"商品管理" , "商品列表"}, button="删除") + @RequiresPermissionsDesc(menu = {"商品管理", "商品列表"}, button = "删除") @PostMapping("/delete") public Object delete(@RequestBody LitemallGoods goods) { - Integer id = goods.getId(); - if (id == null) { - return ResponseUtil.badArgument(); - } - - // 开启事务管理 - DefaultTransactionDefinition def = new DefaultTransactionDefinition(); - def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); - TransactionStatus status = txManager.getTransaction(def); - try { - - Integer gid = goods.getId(); - goodsService.deleteById(gid); - specificationService.deleteByGid(gid); - attributeService.deleteByGid(gid); - productService.deleteByGid(gid); - } catch (Exception ex) { - txManager.rollback(status); - logger.error("系统内部错误", ex); - return ResponseUtil.fail(); - } - txManager.commit(status); - return ResponseUtil.ok(); + return adminGoodsService.delete(goods); } + /** + * 添加商品 + * + * @param goodsAllinone + * @return + */ @RequiresPermissions("admin:goods:create") - @RequiresPermissionsDesc(menu={"商品管理" , "商品上架"}, button="上架") + @RequiresPermissionsDesc(menu = {"商品管理", "商品上架"}, button = "上架") @PostMapping("/create") public Object create(@RequestBody GoodsAllinone goodsAllinone) { - Object error = validate(goodsAllinone); - if (error != null) { - return error; - } - - LitemallGoods goods = goodsAllinone.getGoods(); - LitemallGoodsAttribute[] attributes = goodsAllinone.getAttributes(); - LitemallGoodsSpecification[] specifications = goodsAllinone.getSpecifications(); - LitemallGoodsProduct[] products = goodsAllinone.getProducts(); - - String name = goods.getName(); - if (goodsService.checkExistByName(name)) { - return ResponseUtil.fail(GOODS_NAME_EXIST, "商品名已经存在"); - } - - // 开启事务管理 - DefaultTransactionDefinition def = new DefaultTransactionDefinition(); - def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); - TransactionStatus status = txManager.getTransaction(def); - try { - - // 商品基本信息表litemall_goods - goodsService.add(goods); - - //将生成的分享图片地址写入数据库 - String url = qCodeService.createGoodShareImage(goods.getId().toString(), goods.getPicUrl(), goods.getName()); - if (!StringUtils.isEmpty(url)) { - goods.setShareUrl(url); - if (goodsService.updateById(goods) == 0) { - throw new Exception("更新数据失败"); - } - } - - // 商品规格表litemall_goods_specification - for (LitemallGoodsSpecification specification : specifications) { - specification.setGoodsId(goods.getId()); - specificationService.add(specification); - } - - // 商品参数表litemall_goods_attribute - for (LitemallGoodsAttribute attribute : attributes) { - attribute.setGoodsId(goods.getId()); - attributeService.add(attribute); - } - - // 商品货品表litemall_product - for (LitemallGoodsProduct product : products) { - product.setGoodsId(goods.getId()); - productService.add(product); - } - } catch (Exception ex) { - txManager.rollback(status); - logger.error("系统内部错误", ex); - return ResponseUtil.fail(); - } - txManager.commit(status); - - return ResponseUtil.ok(); + return adminGoodsService.create(goodsAllinone); } @RequiresPermissions("admin:goods:list") - @RequiresPermissionsDesc(menu={"商品管理" , "商品列表"}, button="查询") + @RequiresPermissionsDesc(menu = {"商品管理", "商品列表"}, button = "查询") @GetMapping("/catAndBrand") public Object list2() { - // http://element-cn.eleme.io/#/zh-CN/component/cascader - // 管理员设置“所属分类” - List l1CatList = categoryService.queryL1(); - List categoryList = new ArrayList<>(l1CatList.size()); - - for (LitemallCategory l1 : l1CatList) { - CatVo l1CatVo = new CatVo(); - l1CatVo.setValue(l1.getId()); - l1CatVo.setLabel(l1.getName()); - - List l2CatList = categoryService.queryByPid(l1.getId()); - List children = new ArrayList<>(l2CatList.size()); - for (LitemallCategory l2 : l2CatList) { - CatVo l2CatVo = new CatVo(); - l2CatVo.setValue(l2.getId()); - l2CatVo.setLabel(l2.getName()); - children.add(l2CatVo); - } - l1CatVo.setChildren(children); - - categoryList.add(l1CatVo); - } - - // http://element-cn.eleme.io/#/zh-CN/component/select - // 管理员设置“所属品牌商” - List list = brandService.all(); - List> brandList = new ArrayList<>(l1CatList.size()); - for (LitemallBrand brand : list) { - Map b = new HashMap<>(2); - b.put("value", brand.getId()); - b.put("label", brand.getName()); - brandList.add(b); - } - - Map data = new HashMap<>(); - data.put("categoryList", categoryList); - data.put("brandList", brandList); - return ResponseUtil.ok(data); + return adminGoodsService.list2(); } + /** + * 商品详情 + * + * @param id + * @return + */ @RequiresPermissions("admin:goods:read") - @RequiresPermissionsDesc(menu={"商品管理" , "商品列表"}, button="编辑") + @RequiresPermissionsDesc(menu = {"商品管理", "商品列表"}, button = "编辑") @GetMapping("/detail") public Object detail(@NotNull Integer id) { - LitemallGoods goods = goodsService.findById(id); - List products = productService.queryByGid(id); - List specifications = specificationService.queryByGid(id); - List attributes = attributeService.queryByGid(id); - - Integer categoryId = goods.getCategoryId(); - LitemallCategory category = categoryService.findById(categoryId); - Integer[] categoryIds = new Integer[]{}; - if (category != null) { - Integer parentCategoryId = category.getPid(); - categoryIds = new Integer[]{parentCategoryId, categoryId}; - } - - Map data = new HashMap<>(); - data.put("goods", goods); - data.put("specifications", specifications); - data.put("products", products); - data.put("attributes", attributes); - data.put("categoryIds", categoryIds); + return adminGoodsService.detail(id); - return ResponseUtil.ok(data); } } diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminOrderController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminOrderController.java index 488cdf89..567d8c34 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminOrderController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminOrderController.java @@ -1,42 +1,18 @@ package org.linlinjava.litemall.admin.web; -import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest; -import com.github.binarywang.wxpay.bean.result.WxPayRefundResult; -import com.github.binarywang.wxpay.exception.WxPayException; -import com.github.binarywang.wxpay.service.WxPayService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.linlinjava.litemall.admin.annotation.RequiresPermissionsDesc; -import org.linlinjava.litemall.core.notify.NotifyService; -import org.linlinjava.litemall.core.notify.NotifyType; -import org.linlinjava.litemall.core.util.JacksonUtil; -import org.linlinjava.litemall.core.util.ResponseUtil; +import org.linlinjava.litemall.admin.service.AdminOrderService; import org.linlinjava.litemall.core.validator.Order; import org.linlinjava.litemall.core.validator.Sort; -import org.linlinjava.litemall.db.domain.LitemallComment; -import org.linlinjava.litemall.db.domain.LitemallOrder; -import org.linlinjava.litemall.db.domain.LitemallOrderGoods; -import org.linlinjava.litemall.db.domain.UserVo; -import org.linlinjava.litemall.db.service.*; -import org.linlinjava.litemall.db.util.OrderUtil; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.transaction.PlatformTransactionManager; -import org.springframework.transaction.TransactionDefinition; -import org.springframework.transaction.TransactionStatus; -import org.springframework.transaction.support.DefaultTransactionDefinition; -import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.constraints.NotNull; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.util.HashMap; import java.util.List; -import java.util.Map; - -import static org.linlinjava.litemall.admin.util.AdminResponseCode.*; @RestController @RequestMapping("/admin/order") @@ -45,25 +21,22 @@ public class AdminOrderController { private final Log logger = LogFactory.getLog(AdminOrderController.class); @Autowired - private PlatformTransactionManager txManager; - - @Autowired - private LitemallOrderGoodsService orderGoodsService; - @Autowired - private LitemallOrderService orderService; - @Autowired - private LitemallGoodsProductService productService; - @Autowired - private LitemallUserService userService; - @Autowired - private LitemallCommentService commentService; - @Autowired - private WxPayService wxPayService; - @Autowired - private NotifyService notifyService; + private AdminOrderService adminOrderService; + /** + * 查询订单 + * + * @param userId + * @param orderSn + * @param orderStatusArray + * @param page + * @param limit + * @param sort + * @param order + * @return + */ @RequiresPermissions("admin:order:list") - @RequiresPermissionsDesc(menu={"商城管理" , "订单管理"}, button="查询") + @RequiresPermissionsDesc(menu = {"商城管理", "订单管理"}, button = "查询") @GetMapping("/list") public Object list(Integer userId, String orderSn, @RequestParam(required = false) List orderStatusArray, @@ -71,218 +44,60 @@ public class AdminOrderController { @RequestParam(defaultValue = "10") Integer limit, @Sort @RequestParam(defaultValue = "add_time") String sort, @Order @RequestParam(defaultValue = "desc") String order) { - List orderList = orderService.querySelective(userId, orderSn, orderStatusArray, page, limit, sort, order); - int total = orderService.countSelective(userId, orderSn, orderStatusArray, page, limit, sort, order); - - Map data = new HashMap<>(); - data.put("total", total); - data.put("items", orderList); - - return ResponseUtil.ok(data); + return adminOrderService.list(userId, orderSn, orderStatusArray, page, limit, sort, order); } + /** + * 订单详情 + * + * @param id + * @return + */ @RequiresPermissions("admin:order:read") - @RequiresPermissionsDesc(menu={"商城管理" , "订单管理"}, button="详情") + @RequiresPermissionsDesc(menu = {"商城管理", "订单管理"}, button = "详情") @GetMapping("/detail") public Object detail(@NotNull Integer id) { - LitemallOrder order = orderService.findById(id); - List orderGoods = orderGoodsService.queryByOid(id); - UserVo user = userService.findUserVoById(order.getUserId()); - Map data = new HashMap<>(); - data.put("order", order); - data.put("orderGoods", orderGoods); - data.put("user", user); - - return ResponseUtil.ok(data); + return adminOrderService.detail(id); } /** * 订单退款 - *

- * 1. 检测当前订单是否能够退款; - * 2. 微信退款操作; - * 3. 设置订单退款确认状态; - * 4. 订单商品库存回库。 - *

- * TODO - * 虽然接入了微信退款API,但是从安全角度考虑,建议开发者删除这里微信退款代码,采用以下两步走步骤: - * 1. 管理员登录微信官方支付平台点击退款操作进行退款 - * 2. 管理员登录litemall管理后台点击退款操作进行订单状态修改和商品库存回库 * - * @param body 订单信息,{ orderId:xxx } + * @param body 订单信息,{ orderId:xxx } * @return 订单退款操作结果 */ @RequiresPermissions("admin:order:refund") - @RequiresPermissionsDesc(menu={"商城管理" , "订单管理"}, button="订单退款") + @RequiresPermissionsDesc(menu = {"商城管理", "订单管理"}, button = "订单退款") @PostMapping("refund") public Object refund(@RequestBody String body) { - Integer orderId = JacksonUtil.parseInteger(body, "orderId"); - String refundMoney = JacksonUtil.parseString(body, "refundMoney"); - if (orderId == null) { - return ResponseUtil.badArgument(); - } - if(StringUtils.isEmpty(refundMoney)){ - return ResponseUtil.badArgument(); - } - - LitemallOrder order = orderService.findById(orderId); - if (order == null) { - return ResponseUtil.badArgument(); - } - - if (order.getActualPrice().compareTo(new BigDecimal(refundMoney)) != 0) { - return ResponseUtil.badArgumentValue(); - } - - // 如果订单不是退款状态,则不能退款 - if (!order.getOrderStatus().equals(OrderUtil.STATUS_REFUND)) { - return ResponseUtil.fail(ORDER_CONFIRM_NOT_ALLOWED, "订单不能确认收货"); - } - - // 微信退款 - WxPayRefundRequest wxPayRefundRequest = new WxPayRefundRequest(); - wxPayRefundRequest.setOutTradeNo(order.getOrderSn()); - wxPayRefundRequest.setOutRefundNo("refund_" + order.getOrderSn()); - // 元转成分 - Integer totalFee = order.getActualPrice().multiply(new BigDecimal(100)).intValue(); - wxPayRefundRequest.setTotalFee(totalFee); - wxPayRefundRequest.setRefundFee(totalFee); - - WxPayRefundResult wxPayRefundResult = null; - try { - wxPayRefundResult = wxPayService.refund(wxPayRefundRequest); - } catch (WxPayException e) { - e.printStackTrace(); - return ResponseUtil.fail(ORDER_REFUND_FAILED, "订单退款失败"); - } - if(!wxPayRefundResult.getReturnCode().equals("SUCCESS")){ - logger.warn("refund fail: " + wxPayRefundResult.getReturnMsg()); - return ResponseUtil.fail(ORDER_REFUND_FAILED, "订单退款失败"); - } - if(!wxPayRefundResult.getResultCode().equals("SUCCESS")){ - logger.warn("refund fail: " + wxPayRefundResult.getReturnMsg()); - return ResponseUtil.fail(ORDER_REFUND_FAILED, "订单退款失败"); - } - - // 开启事务管理 - DefaultTransactionDefinition def = new DefaultTransactionDefinition(); - def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); - TransactionStatus status = txManager.getTransaction(def); - try { - // 设置订单取消状态 - order.setOrderStatus(OrderUtil.STATUS_REFUND_CONFIRM); - if (orderService.updateWithOptimisticLocker(order) == 0) { - throw new Exception("更新数据已失效"); - } - - // 商品货品数量增加 - List orderGoodsList = orderGoodsService.queryByOid(orderId); - for (LitemallOrderGoods orderGoods : orderGoodsList) { - Integer productId = orderGoods.getProductId(); - Short number = orderGoods.getNumber(); - if (productService.addStock(productId, number) == 0) { - throw new Exception("商品货品库存增加失败"); - } - } - } catch (Exception ex) { - txManager.rollback(status); - logger.error("系统内部错误", ex); - return ResponseUtil.fail(ORDER_REFUND_FAILED, "订单退款失败"); - } - txManager.commit(status); - - //TODO 发送邮件和短信通知,这里采用异步发送 - // 退款成功通知用户, 例如“您申请的订单退款 [ 单号:{1} ] 已成功,请耐心等待到账。” - // 注意订单号只发后6位 - notifyService.notifySmsTemplate(order.getMobile(), NotifyType.REFUND, new String[]{order.getOrderSn().substring(8, 14)}); - - return ResponseUtil.ok(); + return adminOrderService.refund(body); } /** * 发货 - * 1. 检测当前订单是否能够发货 - * 2. 设置订单发货状态 * - * @param body 订单信息,{ orderId:xxx, shipSn: xxx, shipChannel: xxx } + * @param body 订单信息,{ orderId:xxx, shipSn: xxx, shipChannel: xxx } * @return 订单操作结果 - * 成功则 { errno: 0, errmsg: '成功' } - * 失败则 { errno: XXX, errmsg: XXX } */ @RequiresPermissions("admin:order:ship") - @RequiresPermissionsDesc(menu={"商城管理" , "订单管理"}, button="订单发货") + @RequiresPermissionsDesc(menu = {"商城管理", "订单管理"}, button = "订单发货") @PostMapping("ship") public Object ship(@RequestBody String body) { - Integer orderId = JacksonUtil.parseInteger(body, "orderId"); - String shipSn = JacksonUtil.parseString(body, "shipSn"); - String shipChannel = JacksonUtil.parseString(body, "shipChannel"); - if (orderId == null || shipSn == null || shipChannel == null) { - return ResponseUtil.badArgument(); - } - - LitemallOrder order = orderService.findById(orderId); - if (order == null) { - return ResponseUtil.badArgument(); - } - - // 如果订单不是已付款状态,则不能发货 - if (!order.getOrderStatus().equals(OrderUtil.STATUS_PAY)) { - return ResponseUtil.fail(ORDER_CONFIRM_NOT_ALLOWED, "订单不能确认收货"); - } - - order.setOrderStatus(OrderUtil.STATUS_SHIP); - order.setShipSn(shipSn); - order.setShipChannel(shipChannel); - order.setShipTime(LocalDateTime.now()); - if (orderService.updateWithOptimisticLocker(order) == 0) { - return ResponseUtil.updatedDateExpired(); - } - - //TODO 发送邮件和短信通知,这里采用异步发送 - // 发货会发送通知短信给用户: * - // "您的订单已经发货,快递公司 {1},快递单 {2} ,请注意查收" - notifyService.notifySmsTemplate(order.getMobile(), NotifyType.SHIP, new String[]{shipChannel, shipSn}); - - return ResponseUtil.ok(); + return adminOrderService.ship(body); } /** * 回复订单商品 * - * @param body 订单信息,{ orderId:xxx } + * @param body 订单信息,{ orderId:xxx } * @return 订单操作结果 - * 成功则 { errno: 0, errmsg: '成功' } - * 失败则 { errno: XXX, errmsg: XXX } */ @RequiresPermissions("admin:order:reply") - @RequiresPermissionsDesc(menu={"商城管理" , "订单管理"}, button="订单商品回复") + @RequiresPermissionsDesc(menu = {"商城管理", "订单管理"}, button = "订单商品回复") @PostMapping("reply") public Object reply(@RequestBody String body) { - Integer commentId = JacksonUtil.parseInteger(body, "commentId"); - if (commentId == null || commentId == 0) { - return ResponseUtil.badArgument(); - } - // 目前只支持回复一次 - if (commentService.findById(commentId) != null) { - return ResponseUtil.fail(ORDER_REPLY_EXIST, "订单商品已回复!"); - } - String content = JacksonUtil.parseString(body, "content"); - if (StringUtils.isEmpty(content)) { - return ResponseUtil.badArgument(); - } - // 创建评价回复 - LitemallComment comment = new LitemallComment(); - comment.setType((byte) 2); - comment.setValueId(commentId); - comment.setContent(content); - comment.setUserId(0); // 评价回复没有用 - comment.setStar((short) 0); // 评价回复没有用 - comment.setHasPicture(false); // 评价回复没有用 - comment.setPicUrls(new String[]{}); // 评价回复没有用 - commentService.save(comment); - - return ResponseUtil.ok(); + return adminOrderService.reply(body); } } diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java new file mode 100644 index 00000000..447c0c12 --- /dev/null +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java @@ -0,0 +1,928 @@ +package org.linlinjava.litemall.wx.service; + +import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse; +import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; +import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult; +import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; +import com.github.binarywang.wxpay.bean.result.BaseWxPayResult; +import com.github.binarywang.wxpay.exception.WxPayException; +import com.github.binarywang.wxpay.service.WxPayService; +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.linlinjava.litemall.core.express.ExpressService; +import org.linlinjava.litemall.core.express.dao.ExpressInfo; +import org.linlinjava.litemall.core.notify.NotifyService; +import org.linlinjava.litemall.core.notify.NotifyType; +import org.linlinjava.litemall.core.qcode.QCodeService; +import org.linlinjava.litemall.core.system.SystemConfig; +import org.linlinjava.litemall.core.util.DateTimeUtil; +import org.linlinjava.litemall.core.util.JacksonUtil; +import org.linlinjava.litemall.core.util.ResponseUtil; +import org.linlinjava.litemall.db.domain.*; +import org.linlinjava.litemall.db.service.*; +import org.linlinjava.litemall.db.util.CouponUserConstant; +import org.linlinjava.litemall.db.util.OrderHandleOption; +import org.linlinjava.litemall.db.util.OrderUtil; +import org.linlinjava.litemall.wx.annotation.LoginUser; +import org.linlinjava.litemall.wx.util.IpUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.TransactionDefinition; +import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.DefaultTransactionDefinition; +import org.springframework.util.Assert; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.NotNull; +import java.io.IOException; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.linlinjava.litemall.wx.util.WxResponseCode.*; + +/** + * 订单服务 + * + *

+ * 订单状态: + * 101 订单生成,未支付;102,下单后未支付用户取消;103,下单后未支付超时系统自动取消 + * 201 支付完成,商家未发货;202,订单生产,已付款未发货,但是退款取消; + * 301 商家发货,用户未确认; + * 401 用户确认收货; 402 用户没有确认收货超过一定时间,系统自动确认收货; + * + *

+ * 用户操作: + * 当101用户未付款时,此时用户可以进行的操作是取消订单,或者付款操作 + * 当201支付完成而商家未发货时,此时用户可以取消订单并申请退款 + * 当301商家已发货时,此时用户可以有确认收货的操作 + * 当401用户确认收货以后,此时用户可以进行的操作是删除订单,评价商品,或者再次购买 + * 当402系统自动确认收货以后,此时用户可以删除订单,评价商品,或者再次购买 + * + *

+ * 注意:目前不支持订单退货和售后服务 + */ +@Service +public class WxOrderService { + private final Log logger = LogFactory.getLog(WxOrderService.class); + + @Autowired + private LitemallUserService userService; + @Autowired + private LitemallOrderService orderService; + @Autowired + private LitemallOrderGoodsService orderGoodsService; + @Autowired + private LitemallAddressService addressService; + @Autowired + private LitemallCartService cartService; + @Autowired + private LitemallRegionService regionService; + @Autowired + private LitemallGoodsProductService productService; + @Autowired + private WxPayService wxPayService; + @Autowired + private NotifyService notifyService; + @Autowired + private LitemallUserFormIdService formIdService; + @Autowired + private LitemallGrouponRulesService grouponRulesService; + @Autowired + private LitemallGrouponService grouponService; + @Autowired + private QCodeService qCodeService; + @Autowired + private ExpressService expressService; + @Autowired + private LitemallCommentService commentService; + @Autowired + private LitemallCouponService couponService; + @Autowired + private LitemallCouponUserService couponUserService; + @Autowired + private CouponVerifyService couponVerifyService; + + private String detailedAddress(LitemallAddress litemallAddress) { + Integer provinceId = litemallAddress.getProvinceId(); + Integer cityId = litemallAddress.getCityId(); + Integer areaId = litemallAddress.getAreaId(); + String provinceName = regionService.findById(provinceId).getName(); + String cityName = regionService.findById(cityId).getName(); + String areaName = regionService.findById(areaId).getName(); + String fullRegion = provinceName + " " + cityName + " " + areaName; + return fullRegion + " " + litemallAddress.getAddress(); + } + + /** + * 订单列表 + * + * @param userId 用户ID + * @param showType 订单信息: + * 0,全部订单; + * 1,待付款; + * 2,待发货; + * 3,待收货; + * 4,待评价。 + * @param page 分页页数 + * @param size 分页大小 + * @return 订单列表 + */ + public Object list(Integer userId, Integer showType, Integer page, Integer size) { + if (userId == null) { + return ResponseUtil.unlogin(); + } + + List orderStatus = OrderUtil.orderStatus(showType); + List orderList = orderService.queryByOrderStatus(userId, orderStatus); + int count = orderService.countByOrderStatus(userId, orderStatus); + + List> orderVoList = new ArrayList<>(orderList.size()); + for (LitemallOrder order : orderList) { + Map orderVo = new HashMap<>(); + orderVo.put("id", order.getId()); + orderVo.put("orderSn", order.getOrderSn()); + orderVo.put("actualPrice", order.getActualPrice()); + orderVo.put("orderStatusText", OrderUtil.orderStatusText(order)); + orderVo.put("handleOption", OrderUtil.build(order)); + + LitemallGroupon groupon = grouponService.queryByOrderId(order.getId()); + if (groupon != null) { + orderVo.put("isGroupin", true); + } else { + orderVo.put("isGroupin", false); + } + + List orderGoodsList = orderGoodsService.queryByOid(order.getId()); + List> orderGoodsVoList = new ArrayList<>(orderGoodsList.size()); + for (LitemallOrderGoods orderGoods : orderGoodsList) { + Map orderGoodsVo = new HashMap<>(); + orderGoodsVo.put("id", orderGoods.getId()); + orderGoodsVo.put("goodsName", orderGoods.getGoodsName()); + orderGoodsVo.put("number", orderGoods.getNumber()); + orderGoodsVo.put("picUrl", orderGoods.getPicUrl()); + orderGoodsVoList.add(orderGoodsVo); + } + orderVo.put("goodsList", orderGoodsVoList); + + orderVoList.add(orderVo); + } + + Map result = new HashMap<>(); + result.put("count", count); + result.put("data", orderVoList); + + return ResponseUtil.ok(result); + } + + /** + * 订单详情 + * + * @param userId 用户ID + * @param orderId 订单ID + * @return 订单详情 + */ + public Object detail(Integer userId, Integer orderId) { + if (userId == null) { + return ResponseUtil.unlogin(); + } + + // 订单信息 + LitemallOrder order = orderService.findById(orderId); + if (null == order) { + return ResponseUtil.fail(ORDER_UNKNOWN, "订单不存在"); + } + if (!order.getUserId().equals(userId)) { + return ResponseUtil.fail(ORDER_INVALID, "不是当前用户的订单"); + } + Map orderVo = new HashMap(); + orderVo.put("id", order.getId()); + orderVo.put("orderSn", order.getOrderSn()); + orderVo.put("addTime", order.getAddTime()); + orderVo.put("consignee", order.getConsignee()); + orderVo.put("mobile", order.getMobile()); + orderVo.put("address", order.getAddress()); + orderVo.put("goodsPrice", order.getGoodsPrice()); + orderVo.put("freightPrice", order.getFreightPrice()); + orderVo.put("actualPrice", order.getActualPrice()); + orderVo.put("orderStatusText", OrderUtil.orderStatusText(order)); + orderVo.put("handleOption", OrderUtil.build(order)); + orderVo.put("expCode", order.getShipChannel()); + orderVo.put("expNo", order.getShipSn()); + + List orderGoodsList = orderGoodsService.queryByOid(order.getId()); + + Map result = new HashMap<>(); + result.put("orderInfo", orderVo); + result.put("orderGoods", orderGoodsList); + + // 订单状态为已发货且物流信息不为空 + //"YTO", "800669400640887922" + if (order.getOrderStatus().equals(OrderUtil.STATUS_SHIP)) { + ExpressInfo ei = expressService.getExpressInfo(order.getShipChannel(), order.getShipSn()); + result.put("expressInfo", ei); + } + + return ResponseUtil.ok(result); + + } + + /** + * 提交订单 + *

+ * 1. 创建订单表项和订单商品表项; + * 2. 购物车清空; + * 3. 优惠券设置已用; + * 4. 商品货品库存减少; + * 5. 如果是团购商品,则创建团购活动表项。 + * + * @param userId 用户ID + * @param body 订单信息,{ cartId:xxx, addressId: xxx, couponId: xxx, message: xxx, grouponRulesId: xxx, grouponLinkId: xxx} + * @return 提交订单操作结果 + */ + @Transactional + public Object submit(Integer userId, String body) { + if (userId == null) { + return ResponseUtil.unlogin(); + } + if (body == null) { + return ResponseUtil.badArgument(); + } + Integer cartId = JacksonUtil.parseInteger(body, "cartId"); + Integer addressId = JacksonUtil.parseInteger(body, "addressId"); + Integer couponId = JacksonUtil.parseInteger(body, "couponId"); + String message = JacksonUtil.parseString(body, "message"); + Integer grouponRulesId = JacksonUtil.parseInteger(body, "grouponRulesId"); + Integer grouponLinkId = JacksonUtil.parseInteger(body, "grouponLinkId"); + + //如果是团购项目,验证活动是否有效 + if (grouponRulesId != null && grouponRulesId > 0) { + LitemallGrouponRules rules = grouponRulesService.queryById(grouponRulesId); + //找不到记录 + if (rules == null) { + return ResponseUtil.badArgument(); + } + //团购活动已经过期 + if (grouponRulesService.isExpired(rules)) { + return ResponseUtil.fail(GROUPON_EXPIRED, "团购活动已过期!"); + } + } + + if (cartId == null || addressId == null || couponId == null) { + return ResponseUtil.badArgument(); + } + + // 收货地址 + LitemallAddress checkedAddress = addressService.findById(addressId); + if (checkedAddress == null) { + return ResponseUtil.badArgument(); + } + + // 团购优惠 + BigDecimal grouponPrice = new BigDecimal(0.00); + LitemallGrouponRules grouponRules = grouponRulesService.queryById(grouponRulesId); + if (grouponRules != null) { + grouponPrice = grouponRules.getDiscount(); + } + + // 货品价格 + List checkedGoodsList = null; + if (cartId.equals(0)) { + checkedGoodsList = cartService.queryByUidAndChecked(userId); + } else { + LitemallCart cart = cartService.findById(cartId); + checkedGoodsList = new ArrayList<>(1); + checkedGoodsList.add(cart); + } + if (checkedGoodsList.size() == 0) { + return ResponseUtil.badArgumentValue(); + } + BigDecimal checkedGoodsPrice = new BigDecimal(0.00); + for (LitemallCart checkGoods : checkedGoodsList) { + // 只有当团购规格商品ID符合才进行团购优惠 + if (grouponRules != null && grouponRules.getGoodsId().equals(checkGoods.getGoodsId())) { + checkedGoodsPrice = checkedGoodsPrice.add(checkGoods.getPrice().subtract(grouponPrice).multiply(new BigDecimal(checkGoods.getNumber()))); + } else { + checkedGoodsPrice = checkedGoodsPrice.add(checkGoods.getPrice().multiply(new BigDecimal(checkGoods.getNumber()))); + } + } + + // 获取可用的优惠券信息 + // 使用优惠券减免的金额 + BigDecimal couponPrice = new BigDecimal(0.00); + // 如果couponId=0则没有优惠券,couponId=-1则不使用优惠券 + if(couponId != 0 && couponId != -1){ + LitemallCoupon coupon = couponVerifyService.checkCoupon(userId, couponId, checkedGoodsPrice); + if(coupon == null){ + return ResponseUtil.badArgumentValue(); + } + couponPrice = coupon.getDiscount(); + } + + + // 根据订单商品总价计算运费,满足条件(例如88元)则免运费,否则需要支付运费(例如8元); + BigDecimal freightPrice = new BigDecimal(0.00); + if (checkedGoodsPrice.compareTo(SystemConfig.getFreightLimit()) < 0) { + freightPrice = SystemConfig.getFreight(); + } + + // 可以使用的其他钱,例如用户积分 + BigDecimal integralPrice = new BigDecimal(0.00); + + // 订单费用 + BigDecimal orderTotalPrice = checkedGoodsPrice.add(freightPrice).subtract(couponPrice); + // 最终支付费用 + BigDecimal actualPrice = orderTotalPrice.subtract(integralPrice); + + Integer orderId = null; + LitemallOrder order = null; + // 订单 + order = new LitemallOrder(); + order.setUserId(userId); + order.setOrderSn(orderService.generateOrderSn(userId)); + order.setOrderStatus(OrderUtil.STATUS_CREATE); + order.setConsignee(checkedAddress.getName()); + order.setMobile(checkedAddress.getMobile()); + order.setMessage(message); + String detailedAddress = detailedAddress(checkedAddress); + order.setAddress(detailedAddress); + order.setGoodsPrice(checkedGoodsPrice); + order.setFreightPrice(freightPrice); + order.setCouponPrice(couponPrice); + order.setIntegralPrice(integralPrice); + order.setOrderPrice(orderTotalPrice); + order.setActualPrice(actualPrice); + + // 有团购活动 + if (grouponRules != null) { + order.setGrouponPrice(grouponPrice); // 团购价格 + } else { + order.setGrouponPrice(new BigDecimal(0.00)); // 团购价格 + } + + // 添加订单表项 + orderService.add(order); + orderId = order.getId(); + + // 添加订单商品表项 + for (LitemallCart cartGoods : checkedGoodsList) { + // 订单商品 + LitemallOrderGoods orderGoods = new LitemallOrderGoods(); + orderGoods.setOrderId(order.getId()); + orderGoods.setGoodsId(cartGoods.getGoodsId()); + orderGoods.setGoodsSn(cartGoods.getGoodsSn()); + orderGoods.setProductId(cartGoods.getProductId()); + orderGoods.setGoodsName(cartGoods.getGoodsName()); + orderGoods.setPicUrl(cartGoods.getPicUrl()); + orderGoods.setPrice(cartGoods.getPrice()); + orderGoods.setNumber(cartGoods.getNumber()); + orderGoods.setSpecifications(cartGoods.getSpecifications()); + orderGoods.setAddTime(LocalDateTime.now()); + + orderGoodsService.add(orderGoods); + } + + // 删除购物车里面的商品信息 + cartService.clearGoods(userId); + + // 商品货品数量减少 + for (LitemallCart checkGoods : checkedGoodsList) { + Integer productId = checkGoods.getProductId(); + LitemallGoodsProduct product = productService.findById(productId); + + Integer remainNumber = product.getNumber() - checkGoods.getNumber(); + if (remainNumber < 0) { + throw new RuntimeException("下单的商品货品数量大于库存量"); + } + if (productService.reduceStock(productId, checkGoods.getNumber()) == 0) { + throw new RuntimeException("商品货品库存减少失败"); + } + } + + // 如果使用了优惠券,设置优惠券使用状态 + if(couponId != 0 && couponId != -1){ + LitemallCouponUser couponUser = couponUserService.queryOne(userId, couponId); + couponUser.setStatus(CouponUserConstant.STATUS_USED); + couponUser.setUsedTime(LocalDateTime.now()); + couponUser.setOrderId(orderId); + couponUserService.update(couponUser); + } + + //如果是团购项目,添加团购信息 + if (grouponRulesId != null && grouponRulesId > 0) { + LitemallGroupon groupon = new LitemallGroupon(); + groupon.setOrderId(orderId); + groupon.setPayed(false); + groupon.setUserId(userId); + groupon.setRulesId(grouponRulesId); + + //参与者 + if (grouponLinkId != null && grouponLinkId > 0) { + //参与的团购记录 + LitemallGroupon baseGroupon = grouponService.queryById(grouponLinkId); + groupon.setCreatorUserId(baseGroupon.getCreatorUserId()); + groupon.setGrouponId(grouponLinkId); + groupon.setShareUrl(baseGroupon.getShareUrl()); + } else { + groupon.setCreatorUserId(userId); + groupon.setGrouponId(0); + } + + grouponService.createGroupon(groupon); + } + + Map data = new HashMap<>(); + data.put("orderId", orderId); + return ResponseUtil.ok(data); + } + + /** + * 取消订单 + *

+ * 1. 检测当前订单是否能够取消; + * 2. 设置订单取消状态; + * 3. 商品货品库存恢复; + * 4. TODO 优惠券; + * 5. TODO 团购活动。 + * + * @param userId 用户ID + * @param body 订单信息,{ orderId:xxx } + * @return 取消订单操作结果 + */ + @Transactional + public Object cancel(Integer userId, String body) { + if (userId == null) { + return ResponseUtil.unlogin(); + } + Integer orderId = JacksonUtil.parseInteger(body, "orderId"); + if (orderId == null) { + return ResponseUtil.badArgument(); + } + + LitemallOrder order = orderService.findById(orderId); + if (order == null) { + return ResponseUtil.badArgumentValue(); + } + if (!order.getUserId().equals(userId)) { + return ResponseUtil.badArgumentValue(); + } + + LocalDateTime preUpdateTime = order.getUpdateTime(); + + // 检测是否能够取消 + OrderHandleOption handleOption = OrderUtil.build(order); + if (!handleOption.isCancel()) { + return ResponseUtil.fail(ORDER_INVALID_OPERATION, "订单不能取消"); + } + + // 设置订单已取消状态 + order.setOrderStatus(OrderUtil.STATUS_CANCEL); + order.setEndTime(LocalDateTime.now()); + if (orderService.updateWithOptimisticLocker(order) == 0) { + throw new RuntimeException("更新数据已失效"); + } + + // 商品货品数量增加 + List orderGoodsList = orderGoodsService.queryByOid(orderId); + for (LitemallOrderGoods orderGoods : orderGoodsList) { + Integer productId = orderGoods.getProductId(); + Short number = orderGoods.getNumber(); + if (productService.addStock(productId, number) == 0) { + throw new RuntimeException("商品货品库存增加失败"); + } + } + + return ResponseUtil.ok(); + } + + /** + * 付款订单的预支付会话标识 + *

+ * 1. 检测当前订单是否能够付款 + * 2. 微信商户平台返回支付订单ID + * 3. 设置订单付款状态 + * + * @param userId 用户ID + * @param body 订单信息,{ orderId:xxx } + * @return 支付订单ID + */ + @Transactional + public Object prepay(Integer userId, String body, HttpServletRequest request) { + if (userId == null) { + return ResponseUtil.unlogin(); + } + Integer orderId = JacksonUtil.parseInteger(body, "orderId"); + if (orderId == null) { + return ResponseUtil.badArgument(); + } + + LitemallOrder order = orderService.findById(orderId); + if (order == null) { + return ResponseUtil.badArgumentValue(); + } + if (!order.getUserId().equals(userId)) { + return ResponseUtil.badArgumentValue(); + } + + // 检测是否能够取消 + OrderHandleOption handleOption = OrderUtil.build(order); + if (!handleOption.isPay()) { + return ResponseUtil.fail(ORDER_INVALID_OPERATION, "订单不能支付"); + } + + LitemallUser user = userService.findById(userId); + String openid = user.getWeixinOpenid(); + if (openid == null) { + return ResponseUtil.fail(AUTH_OPENID_UNACCESS, "订单不能支付"); + } + WxPayMpOrderResult result = null; + try { + WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest(); + orderRequest.setOutTradeNo(order.getOrderSn()); + orderRequest.setOpenid(openid); + orderRequest.setBody("订单:" + order.getOrderSn()); + // 元转成分 + int fee = 0; + BigDecimal actualPrice = order.getActualPrice(); + fee = actualPrice.multiply(new BigDecimal(100)).intValue(); + orderRequest.setTotalFee(fee); + orderRequest.setSpbillCreateIp(IpUtil.getIpAddr(request)); + + result = wxPayService.createOrder(orderRequest); + + //缓存prepayID用于后续模版通知 + String prepayId = result.getPackageValue(); + prepayId = prepayId.replace("prepay_id=", ""); + LitemallUserFormid userFormid = new LitemallUserFormid(); + userFormid.setOpenid(user.getWeixinOpenid()); + userFormid.setFormid(prepayId); + userFormid.setIsprepay(true); + userFormid.setUseamount(3); + userFormid.setExpireTime(LocalDateTime.now().plusDays(7)); + formIdService.addUserFormid(userFormid); + + } catch (Exception e) { + e.printStackTrace(); + return ResponseUtil.fail(ORDER_PAY_FAIL, "订单不能支付"); + } + + if (orderService.updateWithOptimisticLocker(order) == 0) { + return ResponseUtil.updatedDateExpired(); + } + return ResponseUtil.ok(result); + } + + /** + * 微信付款成功或失败回调接口 + *

+ * 1. 检测当前订单是否是付款状态; + * 2. 设置订单付款成功状态相关信息; + * 3. 响应微信商户平台. + * + * @param request 请求内容 + * @param response 响应内容 + * @return 操作结果 + */ + @Transactional + public Object payNotify(HttpServletRequest request, HttpServletResponse response) { + String xmlResult = null; + try { + xmlResult = IOUtils.toString(request.getInputStream(), request.getCharacterEncoding()); + } catch (IOException e) { + e.printStackTrace(); + return WxPayNotifyResponse.fail(e.getMessage()); + } + + WxPayOrderNotifyResult result = null; + try { + result = wxPayService.parseOrderNotifyResult(xmlResult); + } catch (WxPayException e) { + e.printStackTrace(); + return WxPayNotifyResponse.fail(e.getMessage()); + } + + logger.info("处理腾讯支付平台的订单支付"); + logger.info(result); + + String orderSn = result.getOutTradeNo(); + String payId = result.getTransactionId(); + + // 分转化成元 + String totalFee = BaseWxPayResult.fenToYuan(result.getTotalFee()); + LitemallOrder order = orderService.findBySn(orderSn); + if (order == null) { + return WxPayNotifyResponse.fail("订单不存在 sn=" + orderSn); + } + + // 检查这个订单是否已经处理过 + if (OrderUtil.isPayStatus(order) && order.getPayId() != null) { + return WxPayNotifyResponse.success("订单已经处理成功!"); + } + + // 检查支付订单金额 + if (!totalFee.equals(order.getActualPrice().toString())) { + return WxPayNotifyResponse.fail(order.getOrderSn() + " : 支付金额不符合 totalFee=" + totalFee); + } + + order.setPayId(payId); + order.setPayTime(LocalDateTime.now()); + order.setOrderStatus(OrderUtil.STATUS_PAY); + if (orderService.updateWithOptimisticLocker(order) == 0) { + // 这里可能存在这样一个问题,用户支付和系统自动取消订单发生在同时 + // 如果数据库首先因为系统自动取消订单而更新了订单状态; + // 此时用户支付完成回调这里也要更新数据库,而由于乐观锁机制这里的更新会失败 + // 因此,这里会重新读取数据库检查状态是否是订单自动取消,如果是则更新成支付状态。 + order = orderService.findBySn(orderSn); + int updated = 0; + if (OrderUtil.isAutoCancelStatus(order)) { + order.setPayId(payId); + order.setPayTime(LocalDateTime.now()); + order.setOrderStatus(OrderUtil.STATUS_PAY); + updated = orderService.updateWithOptimisticLocker(order); + } + + // 如果updated是0,那么数据库更新失败 + if (updated == 0) { + return WxPayNotifyResponse.fail("更新数据已失效"); + } + } + + // 支付成功,有团购信息,更新团购信息 + LitemallGroupon groupon = grouponService.queryByOrderId(order.getId()); + if (groupon != null) { + LitemallGrouponRules grouponRules = grouponRulesService.queryById(groupon.getRulesId()); + + //仅当发起者才创建分享图片 + if (groupon.getGrouponId() == 0) { + String url = qCodeService.createGrouponShareImage(grouponRules.getGoodsName(), grouponRules.getPicUrl(), groupon); + groupon.setShareUrl(url); + } + groupon.setPayed(true); + if (grouponService.updateById(groupon) == 0) { + return WxPayNotifyResponse.fail("更新数据已失效"); + } + } + + //TODO 发送邮件和短信通知,这里采用异步发送 + // 订单支付成功以后,会发送短信给用户,以及发送邮件给管理员 + notifyService.notifyMail("新订单通知", order.toString()); + // 这里微信的短信平台对参数长度有限制,所以将订单号只截取后6位 + notifyService.notifySmsTemplateSync(order.getMobile(), NotifyType.PAY_SUCCEED, new String[]{orderSn.substring(8, 14)}); + + // 请依据自己的模版消息配置更改参数 + String[] parms = new String[]{ + order.getOrderSn(), + order.getOrderPrice().toString(), + DateTimeUtil.getDateTimeDisplayString(order.getAddTime()), + order.getConsignee(), + order.getMobile(), + order.getAddress() + }; + + notifyService.notifyWxTemplate(result.getOpenid(), NotifyType.PAY_SUCCEED, parms, "pages/index/index?orderId=" + order.getId()); + + return WxPayNotifyResponse.success("处理成功!"); + } + + /** + * 订单申请退款 + *

+ * 1. 检测当前订单是否能够退款; + * 2. 设置订单申请退款状态。 + * + * @param userId 用户ID + * @param body 订单信息,{ orderId:xxx } + * @return 订单退款操作结果 + */ + public Object refund(Integer userId, String body) { + if (userId == null) { + return ResponseUtil.unlogin(); + } + Integer orderId = JacksonUtil.parseInteger(body, "orderId"); + if (orderId == null) { + return ResponseUtil.badArgument(); + } + + LitemallOrder order = orderService.findById(orderId); + if (order == null) { + return ResponseUtil.badArgument(); + } + if (!order.getUserId().equals(userId)) { + return ResponseUtil.badArgumentValue(); + } + + OrderHandleOption handleOption = OrderUtil.build(order); + if (!handleOption.isRefund()) { + return ResponseUtil.fail(ORDER_INVALID_OPERATION, "订单不能取消"); + } + + // 设置订单申请退款状态 + order.setOrderStatus(OrderUtil.STATUS_REFUND); + if (orderService.updateWithOptimisticLocker(order) == 0) { + return ResponseUtil.updatedDateExpired(); + } + + //TODO 发送邮件和短信通知,这里采用异步发送 + // 有用户申请退款,邮件通知运营人员 + notifyService.notifyMail("退款申请", order.toString()); + + return ResponseUtil.ok(); + } + + /** + * 确认收货 + *

+ * 1. 检测当前订单是否能够确认收货; + * 2. 设置订单确认收货状态。 + * + * @param userId 用户ID + * @param body 订单信息,{ orderId:xxx } + * @return 订单操作结果 + */ + public Object confirm(Integer userId, String body) { + if (userId == null) { + return ResponseUtil.unlogin(); + } + Integer orderId = JacksonUtil.parseInteger(body, "orderId"); + if (orderId == null) { + return ResponseUtil.badArgument(); + } + + LitemallOrder order = orderService.findById(orderId); + if (order == null) { + return ResponseUtil.badArgument(); + } + if (!order.getUserId().equals(userId)) { + return ResponseUtil.badArgumentValue(); + } + + OrderHandleOption handleOption = OrderUtil.build(order); + if (!handleOption.isConfirm()) { + return ResponseUtil.fail(ORDER_INVALID_OPERATION, "订单不能确认收货"); + } + + Short comments = orderGoodsService.getComments(orderId); + order.setComments(comments); + + order.setOrderStatus(OrderUtil.STATUS_CONFIRM); + order.setConfirmTime(LocalDateTime.now()); + if (orderService.updateWithOptimisticLocker(order) == 0) { + return ResponseUtil.updatedDateExpired(); + } + return ResponseUtil.ok(); + } + + /** + * 删除订单 + *

+ * 1. 检测当前订单是否可以删除; + * 2. 删除订单。 + * + * @param userId 用户ID + * @param body 订单信息,{ orderId:xxx } + * @return 订单操作结果 + */ + public Object delete(Integer userId, String body) { + if (userId == null) { + return ResponseUtil.unlogin(); + } + Integer orderId = JacksonUtil.parseInteger(body, "orderId"); + if (orderId == null) { + return ResponseUtil.badArgument(); + } + + LitemallOrder order = orderService.findById(orderId); + if (order == null) { + return ResponseUtil.badArgument(); + } + if (!order.getUserId().equals(userId)) { + return ResponseUtil.badArgumentValue(); + } + + OrderHandleOption handleOption = OrderUtil.build(order); + if (!handleOption.isDelete()) { + return ResponseUtil.fail(ORDER_INVALID_OPERATION, "订单不能删除"); + } + + // 订单order_status没有字段用于标识删除 + // 而是存在专门的delete字段表示是否删除 + orderService.deleteById(orderId); + + return ResponseUtil.ok(); + } + + /** + * 待评价订单商品信息 + * + * @param userId 用户ID + * @param orderId 订单ID + * @param goodsId 商品ID + * @return 待评价订单商品信息 + */ + public Object goods(Integer userId, Integer orderId, Integer goodsId) { + if (userId == null) { + return ResponseUtil.unlogin(); + } + + List orderGoodsList = orderGoodsService.findByOidAndGid(orderId, goodsId); + int size = orderGoodsList.size(); + + Assert.state(size < 2, "存在多个符合条件的订单商品"); + + if (size == 0) { + return ResponseUtil.badArgumentValue(); + } + + LitemallOrderGoods orderGoods = orderGoodsList.get(0); + return ResponseUtil.ok(orderGoods); + } + + /** + * 评价订单商品 + *

+ * 确认商品收货或者系统自动确认商品收货后7天内可以评价,过期不能评价。 + * + * @param userId 用户ID + * @param body 订单信息,{ orderId:xxx } + * @return 订单操作结果 + */ + public Object comment(Integer userId, String body) { + if (userId == null) { + return ResponseUtil.unlogin(); + } + + Integer orderGoodsId = JacksonUtil.parseInteger(body, "orderGoodsId"); + if (orderGoodsId == null) { + return ResponseUtil.badArgument(); + } + LitemallOrderGoods orderGoods = orderGoodsService.findById(orderGoodsId); + if (orderGoods == null) { + return ResponseUtil.badArgumentValue(); + } + Integer orderId = orderGoods.getOrderId(); + LitemallOrder order = orderService.findById(orderId); + if (order == null) { + return ResponseUtil.badArgumentValue(); + } + Short orderStatus = order.getOrderStatus(); + if (!OrderUtil.isConfirmStatus(order) && !OrderUtil.isAutoConfirmStatus(order)) { + return ResponseUtil.fail(ORDER_INVALID_OPERATION, "当前商品不能评价"); + } + if (!order.getUserId().equals(userId)) { + return ResponseUtil.fail(ORDER_INVALID, "当前商品不属于用户"); + } + Integer commentId = orderGoods.getComment(); + if (commentId == -1) { + return ResponseUtil.fail(ORDER_COMMENT_EXPIRED, "当前商品评价时间已经过期"); + } + if (commentId != 0) { + return ResponseUtil.fail(ORDER_COMMENTED, "订单商品已评价"); + } + + String content = JacksonUtil.parseString(body, "content"); + Integer star = JacksonUtil.parseInteger(body, "star"); + if (star == null || star < 0 || star > 5) { + return ResponseUtil.badArgumentValue(); + } + Boolean hasPicture = JacksonUtil.parseBoolean(body, "hasPicture"); + List picUrls = JacksonUtil.parseStringList(body, "picUrls"); + if (hasPicture == null || !hasPicture) { + picUrls = new ArrayList<>(0); + } + + // 1. 创建评价 + LitemallComment comment = new LitemallComment(); + comment.setUserId(userId); + comment.setType((byte) 0); + comment.setValueId(orderGoods.getGoodsId()); + comment.setStar(star.shortValue()); + comment.setContent(content); + comment.setHasPicture(hasPicture); + comment.setPicUrls(picUrls.toArray(new String[]{})); + commentService.save(comment); + + // 2. 更新订单商品的评价列表 + orderGoods.setComment(comment.getId()); + orderGoodsService.updateById(orderGoods); + + // 3. 更新订单中未评价的订单商品可评价数量 + Short commentCount = order.getComments(); + if (commentCount > 0) { + commentCount--; + } + order.setComments(commentCount); + orderService.updateWithOptimisticLocker(order); + + return ResponseUtil.ok(); + } + +} \ No newline at end of file diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxOrderController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxOrderController.java index c0c21833..98c46101 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxOrderController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxOrderController.java @@ -1,74 +1,17 @@ package org.linlinjava.litemall.wx.web; -import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse; -import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; -import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult; -import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; -import com.github.binarywang.wxpay.bean.result.BaseWxPayResult; -import com.github.binarywang.wxpay.exception.WxPayException; -import com.github.binarywang.wxpay.service.WxPayService; -import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.linlinjava.litemall.core.express.ExpressService; -import org.linlinjava.litemall.core.express.dao.ExpressInfo; -import org.linlinjava.litemall.core.notify.NotifyService; -import org.linlinjava.litemall.core.notify.NotifyType; -import org.linlinjava.litemall.core.qcode.QCodeService; -import org.linlinjava.litemall.core.system.SystemConfig; -import org.linlinjava.litemall.core.util.DateTimeUtil; -import org.linlinjava.litemall.core.util.JacksonUtil; -import org.linlinjava.litemall.core.util.ResponseUtil; -import org.linlinjava.litemall.db.domain.*; -import org.linlinjava.litemall.db.service.*; -import org.linlinjava.litemall.db.util.CouponUserConstant; -import org.linlinjava.litemall.db.util.OrderHandleOption; -import org.linlinjava.litemall.db.util.OrderUtil; import org.linlinjava.litemall.wx.annotation.LoginUser; -import org.linlinjava.litemall.wx.util.IpUtil; +import org.linlinjava.litemall.wx.service.WxOrderService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.transaction.PlatformTransactionManager; -import org.springframework.transaction.TransactionDefinition; -import org.springframework.transaction.TransactionStatus; -import org.springframework.transaction.support.DefaultTransactionDefinition; -import org.springframework.util.Assert; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotNull; -import java.io.IOException; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import static org.linlinjava.litemall.wx.util.WxResponseCode.*; - -/** - * 订单服务 - * - *

- * 订单状态: - * 101 订单生成,未支付;102,下单后未支付用户取消;103,下单后未支付超时系统自动取消 - * 201 支付完成,商家未发货;202,订单生产,已付款未发货,但是退款取消; - * 301 商家发货,用户未确认; - * 401 用户确认收货; 402 用户没有确认收货超过一定时间,系统自动确认收货; - * - *

- * 用户操作: - * 当101用户未付款时,此时用户可以进行的操作是取消订单,或者付款操作 - * 当201支付完成而商家未发货时,此时用户可以取消订单并申请退款 - * 当301商家已发货时,此时用户可以有确认收货的操作 - * 当401用户确认收货以后,此时用户可以进行的操作是删除订单,评价商品,或者再次购买 - * 当402系统自动确认收货以后,此时用户可以删除订单,评价商品,或者再次购买 - * - *

- * 注意:目前不支持订单退货和售后服务 - */ @RestController @RequestMapping("/wx/order") @Validated @@ -76,65 +19,13 @@ public class WxOrderController { private final Log logger = LogFactory.getLog(WxOrderController.class); @Autowired - private PlatformTransactionManager txManager; - @Autowired - private LitemallUserService userService; - @Autowired - private LitemallOrderService orderService; - @Autowired - private LitemallOrderGoodsService orderGoodsService; - @Autowired - private LitemallAddressService addressService; - @Autowired - private LitemallCartService cartService; - @Autowired - private LitemallRegionService regionService; - @Autowired - private LitemallGoodsProductService productService; - @Autowired - private WxPayService wxPayService; - @Autowired - private NotifyService notifyService; - @Autowired - private LitemallUserFormIdService formIdService; - @Autowired - private LitemallGrouponRulesService grouponRulesService; - @Autowired - private LitemallGrouponService grouponService; - @Autowired - private QCodeService qCodeService; - @Autowired - private ExpressService expressService; - @Autowired - private LitemallCommentService commentService; - @Autowired - private LitemallCouponService couponService; - @Autowired - private LitemallCouponUserService couponUserService; - @Autowired - private CouponVerifyService couponVerifyService; - - private String detailedAddress(LitemallAddress litemallAddress) { - Integer provinceId = litemallAddress.getProvinceId(); - Integer cityId = litemallAddress.getCityId(); - Integer areaId = litemallAddress.getAreaId(); - String provinceName = regionService.findById(provinceId).getName(); - String cityName = regionService.findById(cityId).getName(); - String areaName = regionService.findById(areaId).getName(); - String fullRegion = provinceName + " " + cityName + " " + areaName; - return fullRegion + " " + litemallAddress.getAddress(); - } + private WxOrderService wxOrderService; /** * 订单列表 * * @param userId 用户ID - * @param showType 订单信息: - * 0,全部订单; - * 1,待付款; - * 2,待发货; - * 3,待收货; - * 4,待评价。 + * @param showType 订单信息 * @param page 分页页数 * @param size 分页大小 * @return 订单列表 @@ -144,50 +35,7 @@ public class WxOrderController { @RequestParam(defaultValue = "0") Integer showType, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) { - if (userId == null) { - return ResponseUtil.unlogin(); - } - - List orderStatus = OrderUtil.orderStatus(showType); - List orderList = orderService.queryByOrderStatus(userId, orderStatus); - int count = orderService.countByOrderStatus(userId, orderStatus); - - List> orderVoList = new ArrayList<>(orderList.size()); - for (LitemallOrder order : orderList) { - Map orderVo = new HashMap<>(); - orderVo.put("id", order.getId()); - orderVo.put("orderSn", order.getOrderSn()); - orderVo.put("actualPrice", order.getActualPrice()); - orderVo.put("orderStatusText", OrderUtil.orderStatusText(order)); - orderVo.put("handleOption", OrderUtil.build(order)); - - LitemallGroupon groupon = grouponService.queryByOrderId(order.getId()); - if (groupon != null) { - orderVo.put("isGroupin", true); - } else { - orderVo.put("isGroupin", false); - } - - List orderGoodsList = orderGoodsService.queryByOid(order.getId()); - List> orderGoodsVoList = new ArrayList<>(orderGoodsList.size()); - for (LitemallOrderGoods orderGoods : orderGoodsList) { - Map orderGoodsVo = new HashMap<>(); - orderGoodsVo.put("id", orderGoods.getId()); - orderGoodsVo.put("goodsName", orderGoods.getGoodsName()); - orderGoodsVo.put("number", orderGoods.getNumber()); - orderGoodsVo.put("picUrl", orderGoods.getPicUrl()); - orderGoodsVoList.add(orderGoodsVo); - } - orderVo.put("goodsList", orderGoodsVoList); - - orderVoList.add(orderVo); - } - - Map result = new HashMap<>(); - result.put("count", count); - result.put("data", orderVoList); - - return ResponseUtil.ok(result); + return wxOrderService.list(userId, showType, page, size); } /** @@ -199,58 +47,11 @@ public class WxOrderController { */ @GetMapping("detail") public Object detail(@LoginUser Integer userId, @NotNull Integer orderId) { - if (userId == null) { - return ResponseUtil.unlogin(); - } - - // 订单信息 - LitemallOrder order = orderService.findById(orderId); - if (null == order) { - return ResponseUtil.fail(ORDER_UNKNOWN, "订单不存在"); - } - if (!order.getUserId().equals(userId)) { - return ResponseUtil.fail(ORDER_INVALID, "不是当前用户的订单"); - } - Map orderVo = new HashMap(); - orderVo.put("id", order.getId()); - orderVo.put("orderSn", order.getOrderSn()); - orderVo.put("addTime", order.getAddTime()); - orderVo.put("consignee", order.getConsignee()); - orderVo.put("mobile", order.getMobile()); - orderVo.put("address", order.getAddress()); - orderVo.put("goodsPrice", order.getGoodsPrice()); - orderVo.put("freightPrice", order.getFreightPrice()); - orderVo.put("actualPrice", order.getActualPrice()); - orderVo.put("orderStatusText", OrderUtil.orderStatusText(order)); - orderVo.put("handleOption", OrderUtil.build(order)); - orderVo.put("expCode", order.getShipChannel()); - orderVo.put("expNo", order.getShipSn()); - - List orderGoodsList = orderGoodsService.queryByOid(order.getId()); - - Map result = new HashMap<>(); - result.put("orderInfo", orderVo); - result.put("orderGoods", orderGoodsList); - - // 订单状态为已发货且物流信息不为空 - //"YTO", "800669400640887922" - if (order.getOrderStatus().equals(OrderUtil.STATUS_SHIP)) { - ExpressInfo ei = expressService.getExpressInfo(order.getShipChannel(), order.getShipSn()); - result.put("expressInfo", ei); - } - - return ResponseUtil.ok(result); - + return wxOrderService.detail(userId, orderId); } /** * 提交订单 - *

- * 1. 创建订单表项和订单商品表项; - * 2. 购物车清空; - * 3. 优惠券设置已用; - * 4. 商品货品库存减少; - * 5. 如果是团购商品,则创建团购活动表项。 * * @param userId 用户ID * @param body 订单信息,{ cartId:xxx, addressId: xxx, couponId: xxx, message: xxx, grouponRulesId: xxx, grouponLinkId: xxx} @@ -258,219 +59,11 @@ public class WxOrderController { */ @PostMapping("submit") public Object submit(@LoginUser Integer userId, @RequestBody String body) { - if (userId == null) { - return ResponseUtil.unlogin(); - } - if (body == null) { - return ResponseUtil.badArgument(); - } - Integer cartId = JacksonUtil.parseInteger(body, "cartId"); - Integer addressId = JacksonUtil.parseInteger(body, "addressId"); - Integer couponId = JacksonUtil.parseInteger(body, "couponId"); - String message = JacksonUtil.parseString(body, "message"); - Integer grouponRulesId = JacksonUtil.parseInteger(body, "grouponRulesId"); - Integer grouponLinkId = JacksonUtil.parseInteger(body, "grouponLinkId"); - - //如果是团购项目,验证活动是否有效 - if (grouponRulesId != null && grouponRulesId > 0) { - LitemallGrouponRules rules = grouponRulesService.queryById(grouponRulesId); - //找不到记录 - if (rules == null) { - return ResponseUtil.badArgument(); - } - //团购活动已经过期 - if (grouponRulesService.isExpired(rules)) { - return ResponseUtil.fail(GROUPON_EXPIRED, "团购活动已过期!"); - } - } - - if (cartId == null || addressId == null || couponId == null) { - return ResponseUtil.badArgument(); - } - - // 收货地址 - LitemallAddress checkedAddress = addressService.findById(addressId); - if (checkedAddress == null) { - return ResponseUtil.badArgument(); - } - - // 团购优惠 - BigDecimal grouponPrice = new BigDecimal(0.00); - LitemallGrouponRules grouponRules = grouponRulesService.queryById(grouponRulesId); - if (grouponRules != null) { - grouponPrice = grouponRules.getDiscount(); - } - - // 货品价格 - List checkedGoodsList = null; - if (cartId.equals(0)) { - checkedGoodsList = cartService.queryByUidAndChecked(userId); - } else { - LitemallCart cart = cartService.findById(cartId); - checkedGoodsList = new ArrayList<>(1); - checkedGoodsList.add(cart); - } - if (checkedGoodsList.size() == 0) { - return ResponseUtil.badArgumentValue(); - } - BigDecimal checkedGoodsPrice = new BigDecimal(0.00); - for (LitemallCart checkGoods : checkedGoodsList) { - // 只有当团购规格商品ID符合才进行团购优惠 - if (grouponRules != null && grouponRules.getGoodsId().equals(checkGoods.getGoodsId())) { - checkedGoodsPrice = checkedGoodsPrice.add(checkGoods.getPrice().subtract(grouponPrice).multiply(new BigDecimal(checkGoods.getNumber()))); - } else { - checkedGoodsPrice = checkedGoodsPrice.add(checkGoods.getPrice().multiply(new BigDecimal(checkGoods.getNumber()))); - } - } - - // 获取可用的优惠券信息 - // 使用优惠券减免的金额 - BigDecimal couponPrice = new BigDecimal(0.00); - // 如果couponId=0则没有优惠券,couponId=-1则不使用优惠券 - if(couponId != 0 && couponId != -1){ - LitemallCoupon coupon = couponVerifyService.checkCoupon(userId, couponId, checkedGoodsPrice); - if(coupon == null){ - return ResponseUtil.badArgumentValue(); - } - couponPrice = coupon.getDiscount(); - } - - - // 根据订单商品总价计算运费,满足条件(例如88元)则免运费,否则需要支付运费(例如8元); - BigDecimal freightPrice = new BigDecimal(0.00); - if (checkedGoodsPrice.compareTo(SystemConfig.getFreightLimit()) < 0) { - freightPrice = SystemConfig.getFreight(); - } - - // 可以使用的其他钱,例如用户积分 - BigDecimal integralPrice = new BigDecimal(0.00); - - // 订单费用 - BigDecimal orderTotalPrice = checkedGoodsPrice.add(freightPrice).subtract(couponPrice); - // 最终支付费用 - BigDecimal actualPrice = orderTotalPrice.subtract(integralPrice); - - // 开启事务管理 - DefaultTransactionDefinition def = new DefaultTransactionDefinition(); - def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); - TransactionStatus status = txManager.getTransaction(def); - Integer orderId = null; - LitemallOrder order = null; - try { - // 订单 - order = new LitemallOrder(); - order.setUserId(userId); - order.setOrderSn(orderService.generateOrderSn(userId)); - order.setOrderStatus(OrderUtil.STATUS_CREATE); - order.setConsignee(checkedAddress.getName()); - order.setMobile(checkedAddress.getMobile()); - order.setMessage(message); - String detailedAddress = detailedAddress(checkedAddress); - order.setAddress(detailedAddress); - order.setGoodsPrice(checkedGoodsPrice); - order.setFreightPrice(freightPrice); - order.setCouponPrice(couponPrice); - order.setIntegralPrice(integralPrice); - order.setOrderPrice(orderTotalPrice); - order.setActualPrice(actualPrice); - - // 有团购活动 - if (grouponRules != null) { - order.setGrouponPrice(grouponPrice); // 团购价格 - } else { - order.setGrouponPrice(new BigDecimal(0.00)); // 团购价格 - } - - // 添加订单表项 - orderService.add(order); - orderId = order.getId(); - - // 添加订单商品表项 - for (LitemallCart cartGoods : checkedGoodsList) { - // 订单商品 - LitemallOrderGoods orderGoods = new LitemallOrderGoods(); - orderGoods.setOrderId(order.getId()); - orderGoods.setGoodsId(cartGoods.getGoodsId()); - orderGoods.setGoodsSn(cartGoods.getGoodsSn()); - orderGoods.setProductId(cartGoods.getProductId()); - orderGoods.setGoodsName(cartGoods.getGoodsName()); - orderGoods.setPicUrl(cartGoods.getPicUrl()); - orderGoods.setPrice(cartGoods.getPrice()); - orderGoods.setNumber(cartGoods.getNumber()); - orderGoods.setSpecifications(cartGoods.getSpecifications()); - orderGoods.setAddTime(LocalDateTime.now()); - - orderGoodsService.add(orderGoods); - } - - // 删除购物车里面的商品信息 - cartService.clearGoods(userId); - - // 商品货品数量减少 - for (LitemallCart checkGoods : checkedGoodsList) { - Integer productId = checkGoods.getProductId(); - LitemallGoodsProduct product = productService.findById(productId); - - Integer remainNumber = product.getNumber() - checkGoods.getNumber(); - if (remainNumber < 0) { - throw new RuntimeException("下单的商品货品数量大于库存量"); - } - if (productService.reduceStock(productId, checkGoods.getNumber()) == 0) { - throw new Exception("商品货品库存减少失败"); - } - } - - // 如果使用了优惠券,设置优惠券使用状态 - if(couponId != 0 && couponId != -1){ - LitemallCouponUser couponUser = couponUserService.queryOne(userId, couponId); - couponUser.setStatus(CouponUserConstant.STATUS_USED); - couponUser.setUsedTime(LocalDateTime.now()); - couponUser.setOrderId(orderId); - couponUserService.update(couponUser); - } - - //如果是团购项目,添加团购信息 - if (grouponRulesId != null && grouponRulesId > 0) { - LitemallGroupon groupon = new LitemallGroupon(); - groupon.setOrderId(orderId); - groupon.setPayed(false); - groupon.setUserId(userId); - groupon.setRulesId(grouponRulesId); - - //参与者 - if (grouponLinkId != null && grouponLinkId > 0) { - //参与的团购记录 - LitemallGroupon baseGroupon = grouponService.queryById(grouponLinkId); - groupon.setCreatorUserId(baseGroupon.getCreatorUserId()); - groupon.setGrouponId(grouponLinkId); - groupon.setShareUrl(baseGroupon.getShareUrl()); - } else { - groupon.setCreatorUserId(userId); - groupon.setGrouponId(0); - } - - grouponService.createGroupon(groupon); - } - } catch (Exception ex) { - txManager.rollback(status); - logger.error("系统内部错误", ex); - return ResponseUtil.fail(ORDER_CHECKOUT_FAIL, "下单失败"); - } - txManager.commit(status); - - Map data = new HashMap<>(); - data.put("orderId", orderId); - return ResponseUtil.ok(data); + return wxOrderService.submit(userId, body); } /** * 取消订单 - *

- * 1. 检测当前订单是否能够取消; - * 2. 设置订单取消状态; - * 3. 商品货品库存恢复; - * 4. TODO 优惠券; - * 5. TODO 团购活动。 * * @param userId 用户ID * @param body 订单信息,{ orderId:xxx } @@ -478,67 +71,11 @@ public class WxOrderController { */ @PostMapping("cancel") public Object cancel(@LoginUser Integer userId, @RequestBody String body) { - if (userId == null) { - return ResponseUtil.unlogin(); - } - Integer orderId = JacksonUtil.parseInteger(body, "orderId"); - if (orderId == null) { - return ResponseUtil.badArgument(); - } - - LitemallOrder order = orderService.findById(orderId); - if (order == null) { - return ResponseUtil.badArgumentValue(); - } - if (!order.getUserId().equals(userId)) { - return ResponseUtil.badArgumentValue(); - } - - LocalDateTime preUpdateTime = order.getUpdateTime(); - - // 检测是否能够取消 - OrderHandleOption handleOption = OrderUtil.build(order); - if (!handleOption.isCancel()) { - return ResponseUtil.fail(ORDER_INVALID_OPERATION, "订单不能取消"); - } - - // 开启事务管理 - DefaultTransactionDefinition def = new DefaultTransactionDefinition(); - def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); - TransactionStatus status = txManager.getTransaction(def); - try { - // 设置订单已取消状态 - order.setOrderStatus(OrderUtil.STATUS_CANCEL); - order.setEndTime(LocalDateTime.now()); - if (orderService.updateWithOptimisticLocker(order) == 0) { - throw new Exception("更新数据已失效"); - } - - // 商品货品数量增加 - List orderGoodsList = orderGoodsService.queryByOid(orderId); - for (LitemallOrderGoods orderGoods : orderGoodsList) { - Integer productId = orderGoods.getProductId(); - Short number = orderGoods.getNumber(); - if (productService.addStock(productId, number) == 0) { - throw new Exception("商品货品库存增加失败"); - } - } - } catch (Exception ex) { - txManager.rollback(status); - logger.error("系统内部错误", ex); - return ResponseUtil.fail(ORDER_CANCEL_FAIL, "订单取消失败"); - } - txManager.commit(status); - - return ResponseUtil.ok(); + return wxOrderService.cancel(userId, body); } /** * 付款订单的预支付会话标识 - *

- * 1. 检测当前订单是否能够付款 - * 2. 微信商户平台返回支付订单ID - * 3. 设置订单付款状态 * * @param userId 用户ID * @param body 订单信息,{ orderId:xxx } @@ -546,77 +83,13 @@ public class WxOrderController { */ @PostMapping("prepay") public Object prepay(@LoginUser Integer userId, @RequestBody String body, HttpServletRequest request) { - if (userId == null) { - return ResponseUtil.unlogin(); - } - Integer orderId = JacksonUtil.parseInteger(body, "orderId"); - if (orderId == null) { - return ResponseUtil.badArgument(); - } - - LitemallOrder order = orderService.findById(orderId); - if (order == null) { - return ResponseUtil.badArgumentValue(); - } - if (!order.getUserId().equals(userId)) { - return ResponseUtil.badArgumentValue(); - } - - // 检测是否能够取消 - OrderHandleOption handleOption = OrderUtil.build(order); - if (!handleOption.isPay()) { - return ResponseUtil.fail(ORDER_INVALID_OPERATION, "订单不能支付"); - } - - LitemallUser user = userService.findById(userId); - String openid = user.getWeixinOpenid(); - if (openid == null) { - return ResponseUtil.fail(AUTH_OPENID_UNACCESS, "订单不能支付"); - } - WxPayMpOrderResult result = null; - try { - WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest(); - orderRequest.setOutTradeNo(order.getOrderSn()); - orderRequest.setOpenid(openid); - orderRequest.setBody("订单:" + order.getOrderSn()); - // 元转成分 - Integer fee = 0; - BigDecimal actualPrice = order.getActualPrice(); - fee = actualPrice.multiply(new BigDecimal(100)).intValue(); - orderRequest.setTotalFee(fee); - orderRequest.setSpbillCreateIp(IpUtil.getIpAddr(request)); - - result = wxPayService.createOrder(orderRequest); - - //缓存prepayID用于后续模版通知 - String prepayId = result.getPackageValue(); - prepayId = prepayId.replace("prepay_id=", ""); - LitemallUserFormid userFormid = new LitemallUserFormid(); - userFormid.setOpenid(user.getWeixinOpenid()); - userFormid.setFormid(prepayId); - userFormid.setIsprepay(true); - userFormid.setUseamount(3); - userFormid.setExpireTime(LocalDateTime.now().plusDays(7)); - formIdService.addUserFormid(userFormid); - - } catch (Exception e) { - e.printStackTrace(); - return ResponseUtil.fail(ORDER_PAY_FAIL, "订单不能支付"); - } - - if (orderService.updateWithOptimisticLocker(order) == 0) { - return ResponseUtil.updatedDateExpired(); - } - return ResponseUtil.ok(result); + return wxOrderService.prepay(userId, body, request); } /** * 微信付款成功或失败回调接口 *

- * 1. 检测当前订单是否是付款状态; - * 2. 设置订单付款成功状态相关信息; - * 3. 响应微信商户平台. - *

+ * TODO * 注意,这里pay-notify是示例地址,建议开发者应该设立一个隐蔽的回调地址 * * @param request 请求内容 @@ -625,110 +98,11 @@ public class WxOrderController { */ @PostMapping("pay-notify") public Object payNotify(HttpServletRequest request, HttpServletResponse response) { - String xmlResult = null; - try { - xmlResult = IOUtils.toString(request.getInputStream(), request.getCharacterEncoding()); - } catch (IOException e) { - e.printStackTrace(); - return WxPayNotifyResponse.fail(e.getMessage()); - } - - WxPayOrderNotifyResult result = null; - try { - result = wxPayService.parseOrderNotifyResult(xmlResult); - } catch (WxPayException e) { - e.printStackTrace(); - return WxPayNotifyResponse.fail(e.getMessage()); - } - - logger.info("处理腾讯支付平台的订单支付"); - logger.info(result); - - String orderSn = result.getOutTradeNo(); - String payId = result.getTransactionId(); - - // 分转化成元 - String totalFee = BaseWxPayResult.fenToYuan(result.getTotalFee()); - LitemallOrder order = orderService.findBySn(orderSn); - if (order == null) { - return WxPayNotifyResponse.fail("订单不存在 sn=" + orderSn); - } - - // 检查这个订单是否已经处理过 - if (OrderUtil.isPayStatus(order) && order.getPayId() != null) { - return WxPayNotifyResponse.success("订单已经处理成功!"); - } - - // 检查支付订单金额 - if (!totalFee.equals(order.getActualPrice().toString())) { - return WxPayNotifyResponse.fail(order.getOrderSn() + " : 支付金额不符合 totalFee=" + totalFee); - } - - order.setPayId(payId); - order.setPayTime(LocalDateTime.now()); - order.setOrderStatus(OrderUtil.STATUS_PAY); - if (orderService.updateWithOptimisticLocker(order) == 0) { - // 这里可能存在这样一个问题,用户支付和系统自动取消订单发生在同时 - // 如果数据库首先因为系统自动取消订单而更新了订单状态; - // 此时用户支付完成回调这里也要更新数据库,而由于乐观锁机制这里的更新会失败 - // 因此,这里会重新读取数据库检查状态是否是订单自动取消,如果是则更新成支付状态。 - order = orderService.findBySn(orderSn); - int updated = 0; - if (OrderUtil.isAutoCancelStatus(order)) { - order.setPayId(payId); - order.setPayTime(LocalDateTime.now()); - order.setOrderStatus(OrderUtil.STATUS_PAY); - updated = orderService.updateWithOptimisticLocker(order); - } - - // 如果updated是0,那么数据库更新失败 - if (updated == 0) { - return WxPayNotifyResponse.fail("更新数据已失效"); - } - } - - // 支付成功,有团购信息,更新团购信息 - LitemallGroupon groupon = grouponService.queryByOrderId(order.getId()); - if (groupon != null) { - LitemallGrouponRules grouponRules = grouponRulesService.queryById(groupon.getRulesId()); - - //仅当发起者才创建分享图片 - if (groupon.getGrouponId() == 0) { - String url = qCodeService.createGrouponShareImage(grouponRules.getGoodsName(), grouponRules.getPicUrl(), groupon); - groupon.setShareUrl(url); - } - groupon.setPayed(true); - if (grouponService.updateById(groupon) == 0) { - return WxPayNotifyResponse.fail("更新数据已失效"); - } - } - - //TODO 发送邮件和短信通知,这里采用异步发送 - // 订单支付成功以后,会发送短信给用户,以及发送邮件给管理员 - notifyService.notifyMail("新订单通知", order.toString()); - // 这里微信的短信平台对参数长度有限制,所以将订单号只截取后6位 - notifyService.notifySmsTemplateSync(order.getMobile(), NotifyType.PAY_SUCCEED, new String[]{orderSn.substring(8, 14)}); - - // 请依据自己的模版消息配置更改参数 - String[] parms = new String[]{ - order.getOrderSn(), - order.getOrderPrice().toString(), - DateTimeUtil.getDateTimeDisplayString(order.getAddTime()), - order.getConsignee(), - order.getMobile(), - order.getAddress() - }; - - notifyService.notifyWxTemplate(result.getOpenid(), NotifyType.PAY_SUCCEED, parms, "pages/index/index?orderId=" + order.getId()); - - return WxPayNotifyResponse.success("处理成功!"); + return wxOrderService.payNotify(request, response); } /** * 订单申请退款 - *

- * 1. 检测当前订单是否能够退款; - * 2. 设置订单申请退款状态。 * * @param userId 用户ID * @param body 订单信息,{ orderId:xxx } @@ -736,45 +110,11 @@ public class WxOrderController { */ @PostMapping("refund") public Object refund(@LoginUser Integer userId, @RequestBody String body) { - if (userId == null) { - return ResponseUtil.unlogin(); - } - Integer orderId = JacksonUtil.parseInteger(body, "orderId"); - if (orderId == null) { - return ResponseUtil.badArgument(); - } - - LitemallOrder order = orderService.findById(orderId); - if (order == null) { - return ResponseUtil.badArgument(); - } - if (!order.getUserId().equals(userId)) { - return ResponseUtil.badArgumentValue(); - } - - OrderHandleOption handleOption = OrderUtil.build(order); - if (!handleOption.isRefund()) { - return ResponseUtil.fail(ORDER_INVALID_OPERATION, "订单不能取消"); - } - - // 设置订单申请退款状态 - order.setOrderStatus(OrderUtil.STATUS_REFUND); - if (orderService.updateWithOptimisticLocker(order) == 0) { - return ResponseUtil.updatedDateExpired(); - } - - //TODO 发送邮件和短信通知,这里采用异步发送 - // 有用户申请退款,邮件通知运营人员 - notifyService.notifyMail("退款申请", order.toString()); - - return ResponseUtil.ok(); + return wxOrderService.refund(userId, body); } /** * 确认收货 - *

- * 1. 检测当前订单是否能够确认收货; - * 2. 设置订单确认收货状态。 * * @param userId 用户ID * @param body 订单信息,{ orderId:xxx } @@ -782,43 +122,11 @@ public class WxOrderController { */ @PostMapping("confirm") public Object confirm(@LoginUser Integer userId, @RequestBody String body) { - if (userId == null) { - return ResponseUtil.unlogin(); - } - Integer orderId = JacksonUtil.parseInteger(body, "orderId"); - if (orderId == null) { - return ResponseUtil.badArgument(); - } - - LitemallOrder order = orderService.findById(orderId); - if (order == null) { - return ResponseUtil.badArgument(); - } - if (!order.getUserId().equals(userId)) { - return ResponseUtil.badArgumentValue(); - } - - OrderHandleOption handleOption = OrderUtil.build(order); - if (!handleOption.isConfirm()) { - return ResponseUtil.fail(ORDER_INVALID_OPERATION, "订单不能确认收货"); - } - - Short comments = orderGoodsService.getComments(orderId); - order.setComments(comments); - - order.setOrderStatus(OrderUtil.STATUS_CONFIRM); - order.setConfirmTime(LocalDateTime.now()); - if (orderService.updateWithOptimisticLocker(order) == 0) { - return ResponseUtil.updatedDateExpired(); - } - return ResponseUtil.ok(); + return wxOrderService.confirm(userId, body); } /** * 删除订单 - *

- * 1. 检测当前订单是否可以删除; - * 2. 删除订单。 * * @param userId 用户ID * @param body 订单信息,{ orderId:xxx } @@ -826,32 +134,7 @@ public class WxOrderController { */ @PostMapping("delete") public Object delete(@LoginUser Integer userId, @RequestBody String body) { - if (userId == null) { - return ResponseUtil.unlogin(); - } - Integer orderId = JacksonUtil.parseInteger(body, "orderId"); - if (orderId == null) { - return ResponseUtil.badArgument(); - } - - LitemallOrder order = orderService.findById(orderId); - if (order == null) { - return ResponseUtil.badArgument(); - } - if (!order.getUserId().equals(userId)) { - return ResponseUtil.badArgumentValue(); - } - - OrderHandleOption handleOption = OrderUtil.build(order); - if (!handleOption.isDelete()) { - return ResponseUtil.fail(ORDER_INVALID_OPERATION, "订单不能删除"); - } - - // 订单order_status没有字段用于标识删除 - // 而是存在专门的delete字段表示是否删除 - orderService.deleteById(orderId); - - return ResponseUtil.ok(); + return wxOrderService.delete(userId, body); } /** @@ -866,27 +149,11 @@ public class WxOrderController { public Object goods(@LoginUser Integer userId, @NotNull Integer orderId, @NotNull Integer goodsId) { - if (userId == null) { - return ResponseUtil.unlogin(); - } - - List orderGoodsList = orderGoodsService.findByOidAndGid(orderId, goodsId); - int size = orderGoodsList.size(); - - Assert.state(size < 2, "存在多个符合条件的订单商品"); - - if (size == 0) { - return ResponseUtil.badArgumentValue(); - } - - LitemallOrderGoods orderGoods = orderGoodsList.get(0); - return ResponseUtil.ok(orderGoods); + return wxOrderService.goods(userId, orderId, goodsId); } /** * 评价订单商品 - *

- * 确认商品收货或者系统自动确认商品收货后7天内可以评价,过期不能评价。 * * @param userId 用户ID * @param body 订单信息,{ orderId:xxx } @@ -894,73 +161,7 @@ public class WxOrderController { */ @PostMapping("comment") public Object comment(@LoginUser Integer userId, @RequestBody String body) { - if (userId == null) { - return ResponseUtil.unlogin(); - } - - Integer orderGoodsId = JacksonUtil.parseInteger(body, "orderGoodsId"); - if (orderGoodsId == null) { - return ResponseUtil.badArgument(); - } - LitemallOrderGoods orderGoods = orderGoodsService.findById(orderGoodsId); - if (orderGoods == null) { - return ResponseUtil.badArgumentValue(); - } - Integer orderId = orderGoods.getOrderId(); - LitemallOrder order = orderService.findById(orderId); - if (order == null) { - return ResponseUtil.badArgumentValue(); - } - Short orderStatus = order.getOrderStatus(); - if (!OrderUtil.isConfirmStatus(order) && !OrderUtil.isAutoConfirmStatus(order)) { - return ResponseUtil.fail(ORDER_INVALID_OPERATION, "当前商品不能评价"); - } - if (!order.getUserId().equals(userId)) { - return ResponseUtil.fail(ORDER_INVALID, "当前商品不属于用户"); - } - Integer commentId = orderGoods.getComment(); - if (commentId == -1) { - return ResponseUtil.fail(ORDER_COMMENT_EXPIRED, "当前商品评价时间已经过期"); - } - if (commentId != 0) { - return ResponseUtil.fail(ORDER_COMMENTED, "订单商品已评价"); - } - - String content = JacksonUtil.parseString(body, "content"); - Integer star = JacksonUtil.parseInteger(body, "star"); - if (star == null || star < 0 || star > 5) { - return ResponseUtil.badArgumentValue(); - } - Boolean hasPicture = JacksonUtil.parseBoolean(body, "hasPicture"); - List picUrls = JacksonUtil.parseStringList(body, "picUrls"); - if (hasPicture == null || !hasPicture) { - picUrls = new ArrayList<>(0); - } - - // 1. 创建评价 - LitemallComment comment = new LitemallComment(); - comment.setUserId(userId); - comment.setType((byte) 0); - comment.setValueId(orderGoods.getGoodsId()); - comment.setStar(star.shortValue()); - comment.setContent(content); - comment.setHasPicture(hasPicture); - comment.setPicUrls(picUrls.toArray(new String[]{})); - commentService.save(comment); - - // 2. 更新订单商品的评价列表 - orderGoods.setComment(comment.getId()); - orderGoodsService.updateById(orderGoods); - - // 3. 更新订单中未评价的订单商品可评价数量 - Short commentCount = order.getComments(); - if (commentCount > 0) { - commentCount--; - } - order.setComments(commentCount); - orderService.updateWithOptimisticLocker(order); - - return ResponseUtil.ok(); + return wxOrderService.comment(userId, body); } } \ No newline at end of file -- Gitee From 79a279174effa3dd5aed3e6d30b95a83fb54df8a Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Wed, 30 Jan 2019 22:47:11 +0800 Subject: [PATCH 004/391] =?UTF-8?q?chore[litemall-wx-api]=EF=BC=9A=20?= =?UTF-8?q?=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../litemall/wx/service/WxOrderService.java | 218 +++++++++--------- 1 file changed, 105 insertions(+), 113 deletions(-) diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java index 447c0c12..60260440 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java @@ -24,22 +24,14 @@ import org.linlinjava.litemall.db.service.*; import org.linlinjava.litemall.db.util.CouponUserConstant; import org.linlinjava.litemall.db.util.OrderHandleOption; import org.linlinjava.litemall.db.util.OrderUtil; -import org.linlinjava.litemall.wx.annotation.LoginUser; import org.linlinjava.litemall.wx.util.IpUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.PlatformTransactionManager; -import org.springframework.transaction.TransactionDefinition; -import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.annotation.Transactional; -import org.springframework.transaction.support.DefaultTransactionDefinition; import org.springframework.util.Assert; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.validation.constraints.NotNull; import java.io.IOException; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -320,9 +312,9 @@ public class WxOrderService { // 使用优惠券减免的金额 BigDecimal couponPrice = new BigDecimal(0.00); // 如果couponId=0则没有优惠券,couponId=-1则不使用优惠券 - if(couponId != 0 && couponId != -1){ + if (couponId != 0 && couponId != -1) { LitemallCoupon coupon = couponVerifyService.checkCoupon(userId, couponId, checkedGoodsPrice); - if(coupon == null){ + if (coupon == null) { return ResponseUtil.badArgumentValue(); } couponPrice = coupon.getDiscount(); @@ -345,101 +337,101 @@ public class WxOrderService { Integer orderId = null; LitemallOrder order = null; - // 订单 - order = new LitemallOrder(); - order.setUserId(userId); - order.setOrderSn(orderService.generateOrderSn(userId)); - order.setOrderStatus(OrderUtil.STATUS_CREATE); - order.setConsignee(checkedAddress.getName()); - order.setMobile(checkedAddress.getMobile()); - order.setMessage(message); - String detailedAddress = detailedAddress(checkedAddress); - order.setAddress(detailedAddress); - order.setGoodsPrice(checkedGoodsPrice); - order.setFreightPrice(freightPrice); - order.setCouponPrice(couponPrice); - order.setIntegralPrice(integralPrice); - order.setOrderPrice(orderTotalPrice); - order.setActualPrice(actualPrice); - - // 有团购活动 - if (grouponRules != null) { - order.setGrouponPrice(grouponPrice); // 团购价格 - } else { - order.setGrouponPrice(new BigDecimal(0.00)); // 团购价格 - } + // 订单 + order = new LitemallOrder(); + order.setUserId(userId); + order.setOrderSn(orderService.generateOrderSn(userId)); + order.setOrderStatus(OrderUtil.STATUS_CREATE); + order.setConsignee(checkedAddress.getName()); + order.setMobile(checkedAddress.getMobile()); + order.setMessage(message); + String detailedAddress = detailedAddress(checkedAddress); + order.setAddress(detailedAddress); + order.setGoodsPrice(checkedGoodsPrice); + order.setFreightPrice(freightPrice); + order.setCouponPrice(couponPrice); + order.setIntegralPrice(integralPrice); + order.setOrderPrice(orderTotalPrice); + order.setActualPrice(actualPrice); + + // 有团购活动 + if (grouponRules != null) { + order.setGrouponPrice(grouponPrice); // 团购价格 + } else { + order.setGrouponPrice(new BigDecimal(0.00)); // 团购价格 + } - // 添加订单表项 - orderService.add(order); - orderId = order.getId(); - - // 添加订单商品表项 - for (LitemallCart cartGoods : checkedGoodsList) { - // 订单商品 - LitemallOrderGoods orderGoods = new LitemallOrderGoods(); - orderGoods.setOrderId(order.getId()); - orderGoods.setGoodsId(cartGoods.getGoodsId()); - orderGoods.setGoodsSn(cartGoods.getGoodsSn()); - orderGoods.setProductId(cartGoods.getProductId()); - orderGoods.setGoodsName(cartGoods.getGoodsName()); - orderGoods.setPicUrl(cartGoods.getPicUrl()); - orderGoods.setPrice(cartGoods.getPrice()); - orderGoods.setNumber(cartGoods.getNumber()); - orderGoods.setSpecifications(cartGoods.getSpecifications()); - orderGoods.setAddTime(LocalDateTime.now()); - - orderGoodsService.add(orderGoods); - } + // 添加订单表项 + orderService.add(order); + orderId = order.getId(); - // 删除购物车里面的商品信息 - cartService.clearGoods(userId); - - // 商品货品数量减少 - for (LitemallCart checkGoods : checkedGoodsList) { - Integer productId = checkGoods.getProductId(); - LitemallGoodsProduct product = productService.findById(productId); - - Integer remainNumber = product.getNumber() - checkGoods.getNumber(); - if (remainNumber < 0) { - throw new RuntimeException("下单的商品货品数量大于库存量"); - } - if (productService.reduceStock(productId, checkGoods.getNumber()) == 0) { - throw new RuntimeException("商品货品库存减少失败"); - } - } + // 添加订单商品表项 + for (LitemallCart cartGoods : checkedGoodsList) { + // 订单商品 + LitemallOrderGoods orderGoods = new LitemallOrderGoods(); + orderGoods.setOrderId(order.getId()); + orderGoods.setGoodsId(cartGoods.getGoodsId()); + orderGoods.setGoodsSn(cartGoods.getGoodsSn()); + orderGoods.setProductId(cartGoods.getProductId()); + orderGoods.setGoodsName(cartGoods.getGoodsName()); + orderGoods.setPicUrl(cartGoods.getPicUrl()); + orderGoods.setPrice(cartGoods.getPrice()); + orderGoods.setNumber(cartGoods.getNumber()); + orderGoods.setSpecifications(cartGoods.getSpecifications()); + orderGoods.setAddTime(LocalDateTime.now()); - // 如果使用了优惠券,设置优惠券使用状态 - if(couponId != 0 && couponId != -1){ - LitemallCouponUser couponUser = couponUserService.queryOne(userId, couponId); - couponUser.setStatus(CouponUserConstant.STATUS_USED); - couponUser.setUsedTime(LocalDateTime.now()); - couponUser.setOrderId(orderId); - couponUserService.update(couponUser); + orderGoodsService.add(orderGoods); + } + + // 删除购物车里面的商品信息 + cartService.clearGoods(userId); + + // 商品货品数量减少 + for (LitemallCart checkGoods : checkedGoodsList) { + Integer productId = checkGoods.getProductId(); + LitemallGoodsProduct product = productService.findById(productId); + + Integer remainNumber = product.getNumber() - checkGoods.getNumber(); + if (remainNumber < 0) { + throw new RuntimeException("下单的商品货品数量大于库存量"); + } + if (productService.reduceStock(productId, checkGoods.getNumber()) == 0) { + throw new RuntimeException("商品货品库存减少失败"); } + } + + // 如果使用了优惠券,设置优惠券使用状态 + if (couponId != 0 && couponId != -1) { + LitemallCouponUser couponUser = couponUserService.queryOne(userId, couponId); + couponUser.setStatus(CouponUserConstant.STATUS_USED); + couponUser.setUsedTime(LocalDateTime.now()); + couponUser.setOrderId(orderId); + couponUserService.update(couponUser); + } - //如果是团购项目,添加团购信息 - if (grouponRulesId != null && grouponRulesId > 0) { - LitemallGroupon groupon = new LitemallGroupon(); - groupon.setOrderId(orderId); - groupon.setPayed(false); - groupon.setUserId(userId); - groupon.setRulesId(grouponRulesId); - - //参与者 - if (grouponLinkId != null && grouponLinkId > 0) { - //参与的团购记录 - LitemallGroupon baseGroupon = grouponService.queryById(grouponLinkId); - groupon.setCreatorUserId(baseGroupon.getCreatorUserId()); - groupon.setGrouponId(grouponLinkId); - groupon.setShareUrl(baseGroupon.getShareUrl()); - } else { - groupon.setCreatorUserId(userId); - groupon.setGrouponId(0); - } - - grouponService.createGroupon(groupon); + //如果是团购项目,添加团购信息 + if (grouponRulesId != null && grouponRulesId > 0) { + LitemallGroupon groupon = new LitemallGroupon(); + groupon.setOrderId(orderId); + groupon.setPayed(false); + groupon.setUserId(userId); + groupon.setRulesId(grouponRulesId); + + //参与者 + if (grouponLinkId != null && grouponLinkId > 0) { + //参与的团购记录 + LitemallGroupon baseGroupon = grouponService.queryById(grouponLinkId); + groupon.setCreatorUserId(baseGroupon.getCreatorUserId()); + groupon.setGrouponId(grouponLinkId); + groupon.setShareUrl(baseGroupon.getShareUrl()); + } else { + groupon.setCreatorUserId(userId); + groupon.setGrouponId(0); } + grouponService.createGroupon(groupon); + } + Map data = new HashMap<>(); data.put("orderId", orderId); return ResponseUtil.ok(data); @@ -484,22 +476,22 @@ public class WxOrderService { return ResponseUtil.fail(ORDER_INVALID_OPERATION, "订单不能取消"); } - // 设置订单已取消状态 - order.setOrderStatus(OrderUtil.STATUS_CANCEL); - order.setEndTime(LocalDateTime.now()); - if (orderService.updateWithOptimisticLocker(order) == 0) { - throw new RuntimeException("更新数据已失效"); - } + // 设置订单已取消状态 + order.setOrderStatus(OrderUtil.STATUS_CANCEL); + order.setEndTime(LocalDateTime.now()); + if (orderService.updateWithOptimisticLocker(order) == 0) { + throw new RuntimeException("更新数据已失效"); + } - // 商品货品数量增加 - List orderGoodsList = orderGoodsService.queryByOid(orderId); - for (LitemallOrderGoods orderGoods : orderGoodsList) { - Integer productId = orderGoods.getProductId(); - Short number = orderGoods.getNumber(); - if (productService.addStock(productId, number) == 0) { - throw new RuntimeException("商品货品库存增加失败"); - } + // 商品货品数量增加 + List orderGoodsList = orderGoodsService.queryByOid(orderId); + for (LitemallOrderGoods orderGoods : orderGoodsList) { + Integer productId = orderGoods.getProductId(); + Short number = orderGoods.getNumber(); + if (productService.addStock(productId, number) == 0) { + throw new RuntimeException("商品货品库存增加失败"); } + } return ResponseUtil.ok(); } @@ -588,7 +580,7 @@ public class WxOrderService { * 2. 设置订单付款成功状态相关信息; * 3. 响应微信商户平台. * - * @param request 请求内容 + * @param request 请求内容 * @param response 响应内容 * @return 操作结果 */ -- Gitee From 870cf95eb992a21103b1fdfb30d2f566c1c8dec0 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Thu, 31 Jan 2019 13:23:57 +0800 Subject: [PATCH 005/391] =?UTF-8?q?fix[litemall-admin-api]=EF=BC=9A=20?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E7=9A=84=E6=94=B6=E8=B4=A7=E5=9C=B0?= =?UTF-8?q?=E5=9D=80=E6=9F=A5=E8=AF=A2=E6=8C=89=E9=92=AE=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../linlinjava/litemall/admin/web/AdminAddressController.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAddressController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAddressController.java index 8bc17613..a968ba5a 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAddressController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAddressController.java @@ -3,6 +3,7 @@ package org.linlinjava.litemall.admin.web; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.linlinjava.litemall.admin.annotation.RequiresPermissionsDesc; import org.linlinjava.litemall.core.util.ResponseUtil; import org.linlinjava.litemall.core.validator.Order; import org.linlinjava.litemall.core.validator.Sort; @@ -53,6 +54,7 @@ public class AdminAddressController { } @RequiresPermissions("admin:address:list") + @RequiresPermissionsDesc(menu={"用户管理" , "收货地址"}, button="查询") @GetMapping("/list") public Object list(Integer userId, String name, @RequestParam(defaultValue = "1") Integer page, -- Gitee From 50e4ec72107ae4c0b8936263f23aa27c216c5aa6 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Thu, 31 Jan 2019 14:30:32 +0800 Subject: [PATCH 006/391] =?UTF-8?q?chore[litemall-admin-api]=EF=BC=9A=20co?= =?UTF-8?q?ntroller=E7=9A=84=E6=96=B9=E6=B3=95=E9=87=8C=E9=9D=A2=E4=B8=8D?= =?UTF-8?q?=E4=BD=BF=E7=94=A8RequestMapping,=20=E8=80=8C=E6=98=AFGetMappin?= =?UTF-8?q?g=E6=88=96=E8=80=85PostMapping.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../linlinjava/litemall/admin/web/AdminAdController.java | 2 +- .../linlinjava/litemall/admin/web/AdminIndexController.java | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAdController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAdController.java index b68bc058..73a3ad49 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAdController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAdController.java @@ -30,7 +30,7 @@ public class AdminAdController { @RequiresPermissions("admin:ad:list") @RequiresPermissionsDesc(menu={"推广管理" , "广告管理"}, button="查询") - @RequestMapping("/list") + @GetMapping("/list") public Object list(String name, String content, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer limit, diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminIndexController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminIndexController.java index 863411cd..d18393cd 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminIndexController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminIndexController.java @@ -5,6 +5,8 @@ import org.apache.commons.logging.LogFactory; import org.apache.shiro.authz.annotation.*; import org.linlinjava.litemall.admin.annotation.RequiresPermissionsDesc; import org.linlinjava.litemall.core.util.ResponseUtil; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -50,14 +52,14 @@ public class AdminIndexController { @RequiresPermissions("index:permission:read") @RequiresPermissionsDesc(menu={"其他" , "权限测试"}, button="权限读") - @RequestMapping("/read") + @GetMapping("/read") public Object read() { return ResponseUtil.ok("hello world, this is admin service"); } @RequiresPermissions("index:permission:write") @RequiresPermissionsDesc(menu={"其他" , "权限测试"}, button="权限写") - @RequestMapping("/write") + @PostMapping("/write") public Object write() { return ResponseUtil.ok("hello world, this is admin service"); } -- Gitee From a310c5ed62c240acaca7378fc339196131048990 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Thu, 31 Jan 2019 14:31:27 +0800 Subject: [PATCH 007/391] =?UTF-8?q?feat[litemall-admin,=20litemall-admin-a?= =?UTF-8?q?pi]=EF=BC=9A=20=E6=9D=83=E9=99=90=E7=AE=A1=E7=90=86=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=98=BE=E7=A4=BA=E6=8C=89=E9=92=AE=E5=AF=B9=E5=BA=94?= =?UTF-8?q?=E7=9A=84API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../litemall/admin/util/PermVo.java | 9 ++ .../litemall/admin/util/Permission.java | 35 +++++++ .../litemall/admin/util/PermissionUtil.java | 93 +++++++++++++------ litemall-admin/src/views/sys/role.vue | 7 +- 4 files changed, 115 insertions(+), 29 deletions(-) create mode 100644 litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/Permission.java diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/PermVo.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/PermVo.java index 30ff416c..83c6055a 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/PermVo.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/PermVo.java @@ -5,6 +5,7 @@ import java.util.List; public class PermVo { private String id; private String label; + private String api; private List children; public String getId() { @@ -23,6 +24,14 @@ public class PermVo { this.label = label; } + public void setApi(String api) { + this.api = api; + } + + public String getApi() { + return api; + } + public List getChildren() { return children; } diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/Permission.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/Permission.java new file mode 100644 index 00000000..5a425165 --- /dev/null +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/Permission.java @@ -0,0 +1,35 @@ +package org.linlinjava.litemall.admin.util; + +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.linlinjava.litemall.admin.annotation.RequiresPermissionsDesc; +import org.springframework.web.bind.annotation.RequestMapping; + +public class Permission { + private RequiresPermissions requiresPermissions; + private RequiresPermissionsDesc requiresPermissionsDesc; + private String api; + + public RequiresPermissions getRequiresPermissions() { + return requiresPermissions; + } + + public RequiresPermissionsDesc getRequiresPermissionsDesc() { + return requiresPermissionsDesc; + } + + public void setRequiresPermissions(RequiresPermissions requiresPermissions) { + this.requiresPermissions = requiresPermissions; + } + + public void setRequiresPermissionsDesc(RequiresPermissionsDesc requiresPermissionsDesc) { + this.requiresPermissionsDesc = requiresPermissionsDesc; + } + + public String getApi() { + return api; + } + + public void setApi(String api) { + this.api = api; + } +} diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/PermissionUtil.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/PermissionUtil.java index ab0b84c6..41002578 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/PermissionUtil.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/PermissionUtil.java @@ -8,6 +8,9 @@ import org.springframework.context.ApplicationContext; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.stereotype.Controller; import org.springframework.util.ClassUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; import java.lang.reflect.Method; import java.util.*; @@ -15,36 +18,13 @@ import java.util.stream.Collectors; public class PermissionUtil { - public static Map findPermissions(ApplicationContext context, String basicPackage) { - Map map = context.getBeansWithAnnotation(Controller.class); - Map permissions = new HashMap<>(); - for(Map.Entry entry : map.entrySet()){ - Object bean = entry.getValue(); - if(!StringUtils.contains(ClassUtils.getPackageName(bean.getClass()), basicPackage)){ - continue; - } - - Class clz = bean.getClass(); - Class controllerClz = clz.getSuperclass(); - List methods = MethodUtils.getMethodsListWithAnnotation(controllerClz, RequiresPermissions.class); - for(Method method : methods){ - RequiresPermissions requiresPermissions = AnnotationUtils.getAnnotation(method, RequiresPermissions.class); - RequiresPermissionsDesc requiresPermissionsDesc = AnnotationUtils.getAnnotation(method, RequiresPermissionsDesc.class); - if(requiresPermissions == null || requiresPermissionsDesc == null){ - continue; - } - permissions.put(requiresPermissions, requiresPermissionsDesc); - } - } - return permissions; - } - public static List listPermissions(ApplicationContext context, String basicPackage) { List root = new ArrayList<>(); - Map map = findPermissions(context, basicPackage); - for(Map.Entry entry : map.entrySet()) { - RequiresPermissions requiresPermissions = entry.getKey(); - RequiresPermissionsDesc requiresPermissionsDesc = entry.getValue(); + List permissions = findPermissions(context, basicPackage); + for(Permission permission : permissions) { + RequiresPermissions requiresPermissions = permission.getRequiresPermissions(); + RequiresPermissionsDesc requiresPermissionsDesc = permission.getRequiresPermissionsDesc(); + String api = permission.getApi(); String[] menus = requiresPermissionsDesc.menu(); if(menus.length != 2){ @@ -84,9 +64,66 @@ public class PermissionUtil { PermVo leftPerm = new PermVo(); leftPerm.setId(requiresPermissions.value()[0]); leftPerm.setLabel(requiresPermissionsDesc.button()); + leftPerm.setApi(api); perm2.getChildren().add(leftPerm); } return root; } + + public static List findPermissions(ApplicationContext context, String basicPackage) { + Map map = context.getBeansWithAnnotation(Controller.class); + List permissions = new ArrayList<>(); + for(Map.Entry entry : map.entrySet()){ + Object bean = entry.getValue(); + if(!StringUtils.contains(ClassUtils.getPackageName(bean.getClass()), basicPackage)){ + continue; + } + + Class clz = bean.getClass(); + Class controllerClz = clz.getSuperclass(); + RequestMapping clazzRequestMapping = AnnotationUtils.findAnnotation(controllerClz, RequestMapping.class); + List methods = MethodUtils.getMethodsListWithAnnotation(controllerClz, RequiresPermissions.class); + for(Method method : methods){ + RequiresPermissions requiresPermissions = AnnotationUtils.getAnnotation(method, RequiresPermissions.class); + RequiresPermissionsDesc requiresPermissionsDesc = AnnotationUtils.getAnnotation(method, RequiresPermissionsDesc.class); + + if(requiresPermissions == null || requiresPermissionsDesc == null){ + continue; + } + + String api = ""; + if(clazzRequestMapping != null){ + api = clazzRequestMapping.value()[0]; + } + + PostMapping postMapping = AnnotationUtils.getAnnotation(method, PostMapping.class); + if(postMapping != null){ + api = "POST " + api + postMapping.value()[0]; + + Permission permission = new Permission(); + permission.setRequiresPermissions(requiresPermissions); + permission.setRequiresPermissionsDesc(requiresPermissionsDesc); + permission.setApi(api); + permissions.add(permission); + continue; + } + GetMapping getMapping = AnnotationUtils.getAnnotation(method, GetMapping.class); + if(getMapping != null){ + api = "GET " + api + getMapping.value()[0]; + Permission permission = new Permission(); + permission.setRequiresPermissions(requiresPermissions); + permission.setRequiresPermissionsDesc(requiresPermissionsDesc); + permission.setApi(api); + permissions.add(permission); + continue; + } + // TODO + // 这里只支持GetMapping注解或者PostMapping注解,应该进一步提供灵活性 + throw new RuntimeException("目前权限管理应该在method的前面使用GetMapping注解或者PostMapping注解"); + } + } + return permissions; + } + } diff --git a/litemall-admin/src/views/sys/role.vue b/litemall-admin/src/views/sys/role.vue index b36760c3..43453343 100644 --- a/litemall-admin/src/views/sys/role.vue +++ b/litemall-admin/src/views/sys/role.vue @@ -50,7 +50,12 @@ :default-checked-keys="assignedPermissions" show-checkbox node-key="id" - highlight-current/> + highlight-current> + + {{ data.label }} + {{ data.api }} + +

-- Gitee From 5dbca92aac5fa7e136424fc6feeab1e506e0a992 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Fri, 1 Feb 2019 15:29:34 +0800 Subject: [PATCH 014/391] =?UTF-8?q?feat[litemall-admin]:=20=E5=85=A8?= =?UTF-8?q?=E5=B1=80=E6=B3=A8=E5=86=8C=E6=8C=87=E4=BB=A4=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-admin/src/main.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/litemall-admin/src/main.js b/litemall-admin/src/main.js index 49940983..0daf4677 100644 --- a/litemall-admin/src/main.js +++ b/litemall-admin/src/main.js @@ -19,11 +19,15 @@ import './permission' // permission control import * as filters from './filters' // global filters +import permission from '@/directive/permission/index.js' // 权限判断指令 + Vue.use(Element, { size: Cookies.get('size') || 'medium', // set element-ui default size i18n: (key, value) => i18n.t(key, value) }) +Vue.directive('permission', permission) + // register global utility filters. Object.keys(filters).forEach(key => { Vue.filter(key, filters[key]) -- Gitee From e510bf028e09db90ad1f4347515143f57fc4e71d Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Fri, 1 Feb 2019 15:30:34 +0800 Subject: [PATCH 015/391] =?UTF-8?q?feat[litemall-admin]:=20=E5=9C=A8?= =?UTF-8?q?=E5=B9=BF=E5=91=8A=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E6=8C=89=E9=92=AE=E6=9D=83=E9=99=90=EF=BC=88=E6=8C=87?= =?UTF-8?q?=E4=BB=A4=E6=9D=83=E9=99=90=EF=BC=89=EF=BC=8C=E5=85=B6=E4=BB=96?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E7=9B=AE=E5=89=8D=E4=B8=8D=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-admin/src/views/promotion/ad.vue | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/litemall-admin/src/views/promotion/ad.vue b/litemall-admin/src/views/promotion/ad.vue index 6011a0f7..89a711f6 100644 --- a/litemall-admin/src/views/promotion/ad.vue +++ b/litemall-admin/src/views/promotion/ad.vue @@ -5,8 +5,8 @@
- 查找 - 添加 + 查找 + 添加 导出
@@ -37,8 +37,8 @@ -- Gitee From 7ff545b1dbdae22dc7bc51f8c34d780df9855975 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Sun, 10 Feb 2019 17:33:00 +0800 Subject: [PATCH 016/391] =?UTF-8?q?chore[litemall-admin-api]:=20=E5=BE=AE?= =?UTF-8?q?=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../linlinjava/litemall/admin/web/AdminOrderController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminOrderController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminOrderController.java index 6545116c..bacc667b 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminOrderController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminOrderController.java @@ -68,7 +68,7 @@ public class AdminOrderController { */ @RequiresPermissions("admin:order:refund") @RequiresPermissionsDesc(menu = {"商场管理", "订单管理"}, button = "订单退款") - @PostMapping("refund") + @PostMapping("/refund") public Object refund(@RequestBody String body) { return adminOrderService.refund(body); } @@ -81,7 +81,7 @@ public class AdminOrderController { */ @RequiresPermissions("admin:order:ship") @RequiresPermissionsDesc(menu = {"商场管理", "订单管理"}, button = "订单发货") - @PostMapping("ship") + @PostMapping("/ship") public Object ship(@RequestBody String body) { return adminOrderService.ship(body); } @@ -95,7 +95,7 @@ public class AdminOrderController { */ @RequiresPermissions("admin:order:reply") @RequiresPermissionsDesc(menu = {"商场管理", "订单管理"}, button = "订单商品回复") - @PostMapping("reply") + @PostMapping("/reply") public Object reply(@RequestBody String body) { return adminOrderService.reply(body); } -- Gitee From d9895619aaa1a93dd2b12243d4fe5cd5aedf137b Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Sun, 10 Feb 2019 17:33:40 +0800 Subject: [PATCH 017/391] =?UTF-8?q?chore[litemall-admin]:=20=E6=9D=83?= =?UTF-8?q?=E9=99=90=E6=A0=A1=E9=AA=8C=E6=94=AF=E6=8C=81=E8=B6=85=E7=BA=A7?= =?UTF-8?q?=E6=9D=83=E9=99=90*?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/directive/permission/permission.js | 12 +++++++++--- litemall-admin/src/utils/permission.js | 12 +++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/litemall-admin/src/directive/permission/permission.js b/litemall-admin/src/directive/permission/permission.js index 40e45b6c..51a88342 100644 --- a/litemall-admin/src/directive/permission/permission.js +++ b/litemall-admin/src/directive/permission/permission.js @@ -9,9 +9,15 @@ export default{ if (value && value instanceof Array && value.length > 0) { const permissions = value - const hasPermission = perms.some(perm => { - return permissions.includes(perm) - }) + var hasPermission = false + + if (perms.indexOf('*') >= 0) { + hasPermission = true + } else { + hasPermission = perms.some(perm => { + return permissions.includes(perm) + }) + } if (!hasPermission) { el.parentNode && el.parentNode.removeChild(el) diff --git a/litemall-admin/src/utils/permission.js b/litemall-admin/src/utils/permission.js index e4a3ef01..a80f4772 100644 --- a/litemall-admin/src/utils/permission.js +++ b/litemall-admin/src/utils/permission.js @@ -10,9 +10,15 @@ export default function checkPermission(value) { const perms = store.getters && store.getters.perms const permissions = value - const hasPermission = perms.some(perm => { - return permissions.includes(perm) - }) + var hasPermission = false + + if (perms.indexOf('*') >= 0) { + hasPermission = true + } else { + hasPermission = perms.some(perm => { + return permissions.includes(perm) + }) + } if (!hasPermission) { return false -- Gitee From 3d322bcc8c34287a1d4f8a4db836668d65748dc4 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Sun, 10 Feb 2019 17:40:03 +0800 Subject: [PATCH 018/391] =?UTF-8?q?chore[litemall-admin]:=20=E9=83=A8?= =?UTF-8?q?=E5=88=86=E9=A1=B5=E9=9D=A2=E6=94=AF=E6=8C=81=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-admin/src/views/mall/brand.vue | 8 ++++---- litemall-admin/src/views/mall/category.vue | 8 ++++---- litemall-admin/src/views/mall/issue.vue | 8 ++++---- litemall-admin/src/views/mall/keyword.vue | 8 ++++---- litemall-admin/src/views/mall/order.vue | 12 +++++++----- litemall-admin/src/views/promotion/coupon.vue | 10 +++++----- litemall-admin/src/views/promotion/couponDetail.vue | 2 +- .../src/views/promotion/grouponActivity.vue | 2 +- litemall-admin/src/views/promotion/grouponRule.vue | 8 ++++---- litemall-admin/src/views/promotion/topic.vue | 8 ++++---- 10 files changed, 38 insertions(+), 36 deletions(-) diff --git a/litemall-admin/src/views/mall/brand.vue b/litemall-admin/src/views/mall/brand.vue index 50d118ed..9368ac31 100644 --- a/litemall-admin/src/views/mall/brand.vue +++ b/litemall-admin/src/views/mall/brand.vue @@ -5,8 +5,8 @@
- 查找 - 添加 + 查找 + 添加 导出
@@ -29,8 +29,8 @@ diff --git a/litemall-admin/src/views/mall/category.vue b/litemall-admin/src/views/mall/category.vue index 7d213d1a..f6712853 100644 --- a/litemall-admin/src/views/mall/category.vue +++ b/litemall-admin/src/views/mall/category.vue @@ -5,8 +5,8 @@
- 查找 - 添加 + 查找 + 添加 导出
@@ -48,8 +48,8 @@ diff --git a/litemall-admin/src/views/mall/issue.vue b/litemall-admin/src/views/mall/issue.vue index e8a01d88..e319d940 100644 --- a/litemall-admin/src/views/mall/issue.vue +++ b/litemall-admin/src/views/mall/issue.vue @@ -4,8 +4,8 @@
- 查找 - 添加 + 查找 + 添加 导出
@@ -19,8 +19,8 @@ diff --git a/litemall-admin/src/views/mall/keyword.vue b/litemall-admin/src/views/mall/keyword.vue index b7d77440..6ead7eeb 100644 --- a/litemall-admin/src/views/mall/keyword.vue +++ b/litemall-admin/src/views/mall/keyword.vue @@ -5,8 +5,8 @@
- 查找 - 添加 + 查找 + 添加 导出
@@ -33,8 +33,8 @@ diff --git a/litemall-admin/src/views/mall/order.vue b/litemall-admin/src/views/mall/order.vue index 30a48616..0514d421 100644 --- a/litemall-admin/src/views/mall/order.vue +++ b/litemall-admin/src/views/mall/order.vue @@ -8,7 +8,7 @@ - 查找 + 查找 导出 @@ -37,9 +37,9 @@ @@ -55,7 +55,7 @@ @@ -146,6 +146,7 @@ - - - diff --git a/litemall-admin/src/lang/en.js b/litemall-admin/src/lang/en.js deleted file mode 100644 index 3f664194..00000000 --- a/litemall-admin/src/lang/en.js +++ /dev/null @@ -1,157 +0,0 @@ -export default { - route: { - dashboard: 'Dashboard', - introduction: 'Introduction', - documentation: 'Documentation', - guide: 'Guide', - permission: 'Permission', - pagePermission: 'Page Permission', - directivePermission: 'Directive Permission', - icons: 'Icons', - components: 'Components', - componentIndex: 'Introduction', - tinymce: 'Tinymce', - markdown: 'Markdown', - jsonEditor: 'JSON Editor', - dndList: 'Dnd List', - splitPane: 'SplitPane', - avatarUpload: 'Avatar Upload', - dropzone: 'Dropzone', - sticky: 'Sticky', - countTo: 'CountTo', - componentMixin: 'Mixin', - backToTop: 'BackToTop', - dragDialog: 'Drag Dialog', - dragSelect: 'Drag Select', - dragKanban: 'Drag Kanban', - charts: 'Charts', - keyboardChart: 'Keyboard Chart', - lineChart: 'Line Chart', - mixChart: 'Mix Chart', - example: 'Example', - nested: 'Nested Routes', - menu1: 'Menu 1', - 'menu1-1': 'Menu 1-1', - 'menu1-2': 'Menu 1-2', - 'menu1-2-1': 'Menu 1-2-1', - 'menu1-2-2': 'Menu 1-2-2', - 'menu1-3': 'Menu 1-3', - menu2: 'Menu 2', - Table: 'Table', - dynamicTable: 'Dynamic Table', - dragTable: 'Drag Table', - inlineEditTable: 'Inline Edit', - complexTable: 'Complex Table', - treeTable: 'Tree Table', - customTreeTable: 'Custom TreeTable', - tab: 'Tab', - form: 'Form', - createArticle: 'Create Article', - editArticle: 'Edit Article', - articleList: 'Article List', - errorPages: 'Error Pages', - page401: '401', - page404: '404', - errorLog: 'Error Log', - excel: 'Excel', - exportExcel: 'Export Excel', - selectExcel: 'Export Selected', - uploadExcel: 'Upload Excel', - zip: 'Zip', - exportZip: 'Export Zip', - theme: 'Theme', - clipboardDemo: 'Clipboard', - i18n: 'I18n', - externalLink: 'External Link' - }, - navbar: { - logOut: 'Log Out', - dashboard: 'Dashboard', - github: 'Github', - screenfull: 'Screenfull', - theme: 'Theme', - size: 'Global Size' - }, - login: { - title: 'Login Form', - logIn: 'Log in', - username: 'Username', - password: 'Password', - any: 'any', - thirdparty: 'Or connect with', - thirdpartyTips: 'Can not be simulated on local, so please combine you own business simulation! ! !' - }, - documentation: { - documentation: 'Documentation', - github: 'Github Repository' - }, - permission: { - roles: 'Your roles', - perms: 'Your permissions', - switchRoles: 'Switch roles' - }, - guide: { - description: 'The guide page is useful for some people who entered the project for the first time. You can briefly introduce the features of the project. Demo is based on ', - button: 'Show Guide' - }, - components: { - documentation: 'Documentation', - tinymceTips: 'Rich text editor is a core part of management system, but at the same time is a place with lots of problems. In the process of selecting rich texts, I also walked a lot of detours. The common rich text editors in the market are basically used, and the finally chose Tinymce. See documentation for more detailed rich text editor comparisons and introductions.', - dropzoneTips: 'Because my business has special needs, and has to upload images to qiniu, so instead of a third party, I chose encapsulate it by myself. It is very simple, you can see the detail code in @/components/Dropzone.', - stickyTips: 'when the page is scrolled to the preset position will be sticky on the top.', - backToTopTips1: 'When the page is scrolled to the specified position, the Back to Top button appears in the lower right corner', - backToTopTips2: 'You can customize the style of the button, show / hide, height of appearance, height of the return. If you need a text prompt, you can use element-ui el-tooltip elements externally', - imageUploadTips: 'Since I was using only the vue@1 version, and it is not compatible with mockjs at the moment, I modified it myself, and if you are going to use it, it is better to use official version.' - }, - table: { - dynamicTips1: 'Fixed header, sorted by header order', - dynamicTips2: 'Not fixed header, sorted by click order', - dragTips1: 'The default order', - dragTips2: 'The after dragging order', - title: 'Title', - importance: 'Imp', - type: 'Type', - remark: 'Remark', - search: 'Search', - add: 'Add', - export: 'Export', - reviewer: 'reviewer', - id: 'ID', - date: 'Date', - author: 'Author', - readings: 'Readings', - status: 'Status', - actions: 'Actions', - edit: 'Edit', - publish: 'Publish', - draft: 'Draft', - delete: 'Delete', - cancel: 'Cancel', - confirm: 'Confirm' - }, - errorLog: { - tips: 'Please click the bug icon in the upper right corner', - description: 'Now the management system are basically the form of the spa, it enhances the user experience, but it also increases the possibility of page problems, a small negligence may lead to the entire page deadlock. Fortunately Vue provides a way to catch handling exceptions, where you can handle errors or report exceptions.', - documentation: 'Document introduction' - }, - excel: { - export: 'Export', - selectedExport: 'Export Selected Items', - placeholder: 'Please enter the file name(default excel-list)' - }, - zip: { - export: 'Export', - placeholder: 'Please enter the file name(default file)' - }, - theme: { - change: 'Change Theme', - documentation: 'Theme documentation', - tips: 'Tips: It is different from the theme-pick on the navbar is two different skinning methods, each with different application scenarios. Refer to the documentation for details.' - }, - tagsView: { - refresh: 'Refresh', - close: 'Close', - closeOthers: 'Close Others', - closeAll: 'Close All' - } -} diff --git a/litemall-admin/src/lang/index.js b/litemall-admin/src/lang/index.js deleted file mode 100644 index 07a4a01f..00000000 --- a/litemall-admin/src/lang/index.js +++ /dev/null @@ -1,30 +0,0 @@ -import Vue from 'vue' -import VueI18n from 'vue-i18n' -import Cookies from 'js-cookie' -import elementEnLocale from 'element-ui/lib/locale/lang/en' // element-ui lang -import elementZhLocale from 'element-ui/lib/locale/lang/zh-CN'// element-ui lang -import enLocale from './en' -import zhLocale from './zh' - -Vue.use(VueI18n) - -const messages = { - en: { - ...enLocale, - ...elementEnLocale - }, - zh: { - ...zhLocale, - ...elementZhLocale - } -} - -const i18n = new VueI18n({ - // set locale - // options: en | zh - locale: Cookies.get('language') || 'zh', - // set locale messages - messages -}) - -export default i18n diff --git a/litemall-admin/src/lang/zh.js b/litemall-admin/src/lang/zh.js deleted file mode 100644 index 6960274b..00000000 --- a/litemall-admin/src/lang/zh.js +++ /dev/null @@ -1,157 +0,0 @@ -export default { - route: { - dashboard: '首页', - introduction: '简述', - documentation: '文档', - guide: '引导页', - permission: '权限测试页', - pagePermission: '页面权限', - directivePermission: '指令权限', - icons: '图标', - components: '组件', - componentIndex: '介绍', - tinymce: '富文本编辑器', - markdown: 'Markdown', - jsonEditor: 'JSON编辑器', - dndList: '列表拖拽', - splitPane: 'Splitpane', - avatarUpload: '头像上传', - dropzone: 'Dropzone', - sticky: 'Sticky', - countTo: 'CountTo', - componentMixin: '小组件', - backToTop: '返回顶部', - dragDialog: '拖拽 Dialog', - dragSelect: '拖拽 Select', - dragKanban: '可拖拽看板', - charts: '图表', - keyboardChart: '键盘图表', - lineChart: '折线图', - mixChart: '混合图表', - example: '综合实例', - nested: '路由嵌套', - menu1: '菜单1', - 'menu1-1': '菜单1-1', - 'menu1-2': '菜单1-2', - 'menu1-2-1': '菜单1-2-1', - 'menu1-2-2': '菜单1-2-2', - 'menu1-3': '菜单1-3', - menu2: '菜单2', - Table: 'Table', - dynamicTable: '动态Table', - dragTable: '拖拽Table', - inlineEditTable: 'Table内编辑', - complexTable: '综合Table', - treeTable: '树形表格', - customTreeTable: '自定义树表', - tab: 'Tab', - form: '表单', - createArticle: '创建文章', - editArticle: '编辑文章', - articleList: '文章列表', - errorPages: '错误页面', - page401: '401', - page404: '404', - errorLog: '错误日志', - excel: 'Excel', - exportExcel: 'Export Excel', - selectExcel: 'Export Selected', - uploadExcel: 'Upload Excel', - zip: 'Zip', - exportZip: 'Export Zip', - theme: '换肤', - clipboardDemo: 'Clipboard', - i18n: '国际化', - externalLink: '外链' - }, - navbar: { - logOut: '退出登录', - dashboard: '首页', - github: '项目地址', - screenfull: '全屏', - theme: '换肤', - size: '布局大小' - }, - login: { - title: '系统登录', - logIn: '登录', - username: '账号', - password: '密码', - any: '随便填', - thirdparty: '第三方登录', - thirdpartyTips: '本地不能模拟,请结合自己业务进行模拟!!!' - }, - documentation: { - documentation: '文档', - github: 'Github 地址' - }, - permission: { - roles: '你的角色', - perms: '你的权限', - switchRoles: '切换角色' - }, - guide: { - description: '引导页对于一些第一次进入项目的人很有用,你可以简单介绍下项目的功能。本 Demo 是基于', - button: '打开引导' - }, - components: { - documentation: '文档', - tinymceTips: '富文本是管理后台一个核心的功能,但同时又是一个有很多坑的地方。在选择富文本的过程中我也走了不少的弯路,市面上常见的富文本都基本用过了,最终权衡了一下选择了Tinymce。更详细的富文本比较和介绍见', - dropzoneTips: '由于我司业务有特殊需求,而且要传七牛 所以没用第三方,选择了自己封装。代码非常的简单,具体代码你可以在这里看到 @/components/Dropzone', - stickyTips: '当页面滚动到预设的位置会吸附在顶部', - backToTopTips1: '页面滚动到指定位置会在右下角出现返回顶部按钮', - backToTopTips2: '可自定义按钮的样式、show/hide、出现的高度、返回的位置 如需文字提示,可在外部使用Element的el-tooltip元素', - imageUploadTips: '由于我在使用时它只有vue@1版本,而且和mockjs不兼容,所以自己改造了一下,如果大家要使用的话,优先还是使用官方版本。' - }, - table: { - dynamicTips1: '固定表头, 按照表头顺序排序', - dynamicTips2: '不固定表头, 按照点击顺序排序', - dragTips1: '默认顺序', - dragTips2: '拖拽后顺序', - title: '标题', - importance: '重要性', - type: '类型', - remark: '点评', - search: '搜索', - add: '添加', - export: '导出', - reviewer: '审核人', - id: '序号', - date: '时间', - author: '作者', - readings: '阅读数', - status: '状态', - actions: '操作', - edit: '编辑', - publish: '发布', - draft: '草稿', - delete: '删除', - cancel: '取 消', - confirm: '确 定' - }, - errorLog: { - tips: '请点击右上角bug小图标', - description: '现在的管理后台基本都是spa的形式了,它增强了用户体验,但同时也会增加页面出问题的可能性,可能一个小小的疏忽就导致整个页面的死锁。好在 Vue 官网提供了一个方法来捕获处理异常,你可以在其中进行错误处理或者异常上报。', - documentation: '文档介绍' - }, - excel: { - export: '导出', - selectedExport: '导出已选择项', - placeholder: '请输入文件名(默认excel-list)' - }, - zip: { - export: '导出', - placeholder: '请输入文件名(默认file)' - }, - theme: { - change: '换肤', - documentation: '换肤文档', - tips: 'Tips: 它区别于 navbar 上的 theme-pick, 是两种不同的换肤方法,各自有不同的应用场景,具体请参考文档。' - }, - tagsView: { - refresh: '刷新', - close: '关闭', - closeOthers: '关闭其它', - closeAll: '关闭所有' - } -} diff --git a/litemall-admin/src/main.js b/litemall-admin/src/main.js index 0daf4677..de688815 100644 --- a/litemall-admin/src/main.js +++ b/litemall-admin/src/main.js @@ -13,7 +13,6 @@ import App from './App' import router from './router' import store from './store' -import i18n from './lang' // Internationalization import './icons' // icon import './permission' // permission control @@ -22,8 +21,7 @@ import * as filters from './filters' // global filters import permission from '@/directive/permission/index.js' // 权限判断指令 Vue.use(Element, { - size: Cookies.get('size') || 'medium', // set element-ui default size - i18n: (key, value) => i18n.t(key, value) + size: Cookies.get('size') || 'medium' // set element-ui default size }) Vue.directive('permission', permission) @@ -39,6 +37,5 @@ new Vue({ el: '#app', router, store, - i18n, render: h => h(App) }) diff --git a/litemall-admin/src/router/index.js b/litemall-admin/src/router/index.js index 3223b917..e206e5e2 100644 --- a/litemall-admin/src/router/index.js +++ b/litemall-admin/src/router/index.js @@ -65,7 +65,7 @@ export const constantRouterMap = [ path: 'dashboard', component: () => import('@/views/dashboard/index'), name: 'Dashboard', - meta: { title: 'dashboard', icon: 'dashboard', noCache: true } + meta: { title: '首页', icon: 'dashboard', noCache: true } } ] } @@ -398,6 +398,60 @@ export const asyncRouterMap = [ ] }, + { + path: '/config', + component: Layout, + redirect: 'noredirect', + alwaysShow: true, + name: 'sysManage', + meta: { + title: '配置管理', + icon: 'chart' + }, + children: [ + { + path: 'mall', + component: () => import('@/views/config/mall'), + name: 'configMall', + meta: { + perms: ['GET /admin/config/mall', 'POST /admin/config/mall'], + title: '商场配置', + noCache: true + } + }, + { + path: 'express', + component: () => import('@/views/config/express'), + name: 'configExpress', + meta: { + perms: ['GET /admin/config/express', 'POST /admin/config/express'], + title: '运费配置', + noCache: true + } + }, + { + path: 'order', + component: () => import('@/views/config/order'), + name: 'configOrder', + meta: { + perms: ['GET /admin/config/order', 'POST /admin/config/order'], + title: '订单配置', + noCache: true + } + }, + { + path: 'wx', + component: () => import('@/views/config/wx'), + name: 'configWx', + meta: { + perms: ['GET /admin/config/wx', 'POST /admin/config/wx'], + title: '小程序配置', + noCache: true + } + } + ] + }, + { path: '/stat', component: Layout, diff --git a/litemall-admin/src/utils/i18n.js b/litemall-admin/src/utils/i18n.js deleted file mode 100644 index 76be5a4e..00000000 --- a/litemall-admin/src/utils/i18n.js +++ /dev/null @@ -1,12 +0,0 @@ -// translate router.meta.title, be used in breadcrumb sidebar tagsview -export function generateTitle(title) { - const hasKey = this.$te('route.' + title) - - if (hasKey) { - // $t :this method from vue-i18n, inject in @/lang/index.js - const translatedTitle = this.$t('route.' + title) - - return translatedTitle - } - return title -} diff --git a/litemall-admin/src/views/layout/components/Navbar.vue b/litemall-admin/src/views/layout/components/Navbar.vue index 17c7354c..cad7e8de 100644 --- a/litemall-admin/src/views/layout/components/Navbar.vue +++ b/litemall-admin/src/views/layout/components/Navbar.vue @@ -7,16 +7,14 @@
- - diff --git a/litemall-admin/src/views/layout/components/Navbar.vue b/litemall-admin/src/views/layout/components/Navbar.vue index cad7e8de..a26eb359 100644 --- a/litemall-admin/src/views/layout/components/Navbar.vue +++ b/litemall-admin/src/views/layout/components/Navbar.vue @@ -15,9 +15,6 @@ - - - @@ -61,15 +58,13 @@ import Breadcrumb from '@/components/Breadcrumb' import Hamburger from '@/components/Hamburger' import Screenfull from '@/components/Screenfull' import SizeSelect from '@/components/SizeSelect' -import ThemePicker from '@/components/ThemePicker' export default { components: { Breadcrumb, Hamburger, Screenfull, - SizeSelect, - ThemePicker + SizeSelect }, computed: { ...mapGetters([ @@ -126,9 +121,6 @@ export default { .international{ vertical-align: top; } - .theme-switch { - vertical-align: 15px; - } .avatar-container { height: 50px; margin-right: 30px; -- Gitee From 409618f19e11d331544f5340271a49f582c73e56 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Mon, 8 Apr 2019 23:08:51 +0800 Subject: [PATCH 054/391] =?UTF-8?q?chore[litemall-admin]:=20=E6=8A=8A?= =?UTF-8?q?=E8=8B=B1=E6=96=87=E6=B6=88=E6=81=AF=E6=8F=90=E9=86=92=E6=94=B9?= =?UTF-8?q?=E6=88=90=E4=B8=AD=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-admin/src/components/Screenfull/index.vue | 2 +- litemall-admin/src/components/SizeSelect/index.vue | 2 +- litemall-admin/src/utils/clipboard.js | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/litemall-admin/src/components/Screenfull/index.vue b/litemall-admin/src/components/Screenfull/index.vue index 4cdcb568..f2ac0b8e 100644 --- a/litemall-admin/src/components/Screenfull/index.vue +++ b/litemall-admin/src/components/Screenfull/index.vue @@ -55,7 +55,7 @@ export default { click() { if (!screenfull.enabled) { this.$message({ - message: 'you browser can not work', + message: '浏览器不支持全屏', type: 'warning' }) return false diff --git a/litemall-admin/src/components/SizeSelect/index.vue b/litemall-admin/src/components/SizeSelect/index.vue index 0e428a23..b3ebe5ac 100644 --- a/litemall-admin/src/components/SizeSelect/index.vue +++ b/litemall-admin/src/components/SizeSelect/index.vue @@ -24,7 +24,7 @@ export default { this.$store.dispatch('setSize', size) this.refreshView() this.$message({ - message: 'Switch Size Success', + message: '布局尺寸切换成功', type: 'success' }) }, diff --git a/litemall-admin/src/utils/clipboard.js b/litemall-admin/src/utils/clipboard.js index e916a44d..96e82f74 100644 --- a/litemall-admin/src/utils/clipboard.js +++ b/litemall-admin/src/utils/clipboard.js @@ -3,7 +3,7 @@ import Clipboard from 'clipboard' function clipboardSuccess() { Vue.prototype.$message({ - message: 'Copy successfully', + message: '拷贝成功', type: 'success', duration: 1500 }) @@ -11,7 +11,7 @@ function clipboardSuccess() { function clipboardError() { Vue.prototype.$message({ - message: 'Copy failed', + message: '拷贝失败', type: 'error' }) } -- Gitee From a0c58e083dd5b4199cc0993dc0ebd3a0511d055c Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Mon, 8 Apr 2019 23:23:38 +0800 Subject: [PATCH 055/391] =?UTF-8?q?fix[litemall-admin-api]:=20=E6=94=BE?= =?UTF-8?q?=E5=BC=83=E4=B8=8D=E5=90=88=E9=80=82=E7=9A=84=E5=95=86=E5=93=81?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../litemall/admin/service/AdminGoodsService.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminGoodsService.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminGoodsService.java index 4deb8108..df98de11 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminGoodsService.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminGoodsService.java @@ -157,14 +157,6 @@ public class AdminGoodsService { LitemallGoodsProduct[] products = goodsAllinone.getProducts(); Integer id = goods.getId(); - // 检查是否存在购物车商品或者订单商品 - // 如果存在则拒绝修改商品。 - if (orderGoodsService.checkExist(id)) { - return ResponseUtil.fail(GOODS_UPDATE_NOT_ALLOWED, "商品已经在订单中,不能修改"); - } - if (cartService.checkExist(id)) { - return ResponseUtil.fail(GOODS_UPDATE_NOT_ALLOWED, "商品已经在购物车中,不能修改"); - } //将生成的分享图片地址写入数据库 String url = qCodeService.createGoodShareImage(goods.getId().toString(), goods.getPicUrl(), goods.getName()); -- Gitee From fe823c08faf570004c9ba0a30faa5261b2ad4025 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Mon, 8 Apr 2019 23:50:28 +0800 Subject: [PATCH 056/391] =?UTF-8?q?fix[litemall-admin]:=20=E5=AF=B9?= =?UTF-8?q?=E8=B1=A1=E5=AD=98=E5=82=A8=E9=A1=B5=E9=9D=A2=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=88=90=E5=8A=9F=E4=BB=A5=E5=90=8E=EF=BC=8C?= =?UTF-8?q?=E4=B8=8D=E8=83=BD=E5=86=8D=E6=AC=A1=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-admin/src/views/sys/os.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/litemall-admin/src/views/sys/os.vue b/litemall-admin/src/views/sys/os.vue index 63e58bcd..2f691f56 100644 --- a/litemall-admin/src/views/sys/os.vue +++ b/litemall-admin/src/views/sys/os.vue @@ -41,7 +41,7 @@ - + 点击上传 @@ -124,6 +124,8 @@ export default { this.createDialogVisible = true }, handleUpload(item) { + this.$refs.upload.clearFiles() + const formData = new FormData() formData.append('file', item.file) createStorage(formData).then(response => { -- Gitee From 05aa809c9d68ec3cc56ead01d531f88012fb0019 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Tue, 9 Apr 2019 22:43:34 +0800 Subject: [PATCH 057/391] =?UTF-8?q?feat[litemall-admin-api,=20litemall-cor?= =?UTF-8?q?e,=20litemall-admin]:=20=E6=94=AF=E6=8C=81=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E7=AE=A1=E7=90=86=EF=BC=8C=E4=BD=86=E5=90=8E=E7=AB=AF=E9=83=A8?= =?UTF-8?q?=E5=88=86=E9=85=8D=E7=BD=AE=E4=BF=A1=E6=81=AF=EF=BC=88=E5=A6=82?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E3=80=81=E8=BF=90=E8=B4=B9=EF=BC=89=E8=BF=98?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E7=9C=9F=E6=AD=A3=E6=8E=A5=E5=85=A5=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 + .../admin/web/AdminConfigController.java | 96 ++++++++++++++++ litemall-admin/src/api/config.js | 61 ++++++++++ litemall-admin/src/router/index.js | 4 +- litemall-admin/src/views/config/express.vue | 70 ++++++++++++ litemall-admin/src/views/config/mall.vue | 68 ++++++++++++ litemall-admin/src/views/config/order.vue | 66 +++++++++++ litemall-admin/src/views/config/wx.vue | 86 ++++++++++++++ .../litemall/core/system/BaseConfig.java | 76 ------------- .../litemall/core/system/ConfigService.java | 58 ---------- .../litemall/core/system/SystemConfig.java | 105 +++++++++++++----- .../core/system/SystemInistService.java | 57 ++++++++-- .../litemall/core/util/JacksonUtil.java | 11 ++ .../service/LitemallSystemConfigService.java | 83 +++++++++++++- 14 files changed, 668 insertions(+), 175 deletions(-) create mode 100644 litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminConfigController.java create mode 100644 litemall-admin/src/api/config.js create mode 100644 litemall-admin/src/views/config/express.vue create mode 100644 litemall-admin/src/views/config/mall.vue create mode 100644 litemall-admin/src/views/config/order.vue create mode 100644 litemall-admin/src/views/config/wx.vue delete mode 100644 litemall-core/src/main/java/org/linlinjava/litemall/core/system/BaseConfig.java delete mode 100644 litemall-core/src/main/java/org/linlinjava/litemall/core/system/ConfigService.java diff --git a/README.md b/README.md index c2afc268..bdeb4541 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,8 @@ litemall = Spring Boot后端 + Vue管理员前端 + 微信小程序用户前端 * 商品管理 * 推广管理 * 系统管理 +* 配置管理 +* 统计报表 ## 云演示 diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminConfigController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminConfigController.java new file mode 100644 index 00000000..22a7ce4f --- /dev/null +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminConfigController.java @@ -0,0 +1,96 @@ +package org.linlinjava.litemall.admin.web; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.linlinjava.litemall.admin.annotation.RequiresPermissionsDesc; +import org.linlinjava.litemall.core.system.SystemConfig; +import org.linlinjava.litemall.core.util.JacksonUtil; +import org.linlinjava.litemall.core.util.ResponseUtil; +import org.linlinjava.litemall.db.service.LitemallSystemConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +@RestController +@RequestMapping("/admin/config") +@Validated +public class AdminConfigController { + private final Log logger = LogFactory.getLog(AdminConfigController.class); + + @Autowired + private LitemallSystemConfigService systemConfigService; + + @RequiresPermissions("admin:config:mall:list") + @RequiresPermissionsDesc(menu={"配置管理" , "商场配置"}, button="详情") + @GetMapping("/mall") + public Object listMall() { + Map data = systemConfigService.listMail(); + return ResponseUtil.ok(data); + } + + @RequiresPermissions("admin:config:mall:updateConfigs") + @RequiresPermissionsDesc(menu={"配置管理" , "商场配置"}, button="编辑") + @PostMapping("/mall") + public Object updateMall(@RequestBody String body ) { + Map data = JacksonUtil.toMap(body); + systemConfigService.updateConfig(data); + SystemConfig.updateConfigs(data); + return ResponseUtil.ok(); + } + + @RequiresPermissions("admin:config:express:list") + @RequiresPermissionsDesc(menu={"配置管理" , "运费配置"}, button="详情") + @GetMapping("/express") + public Object listExpress() { + Map data = systemConfigService.listExpress(); + return ResponseUtil.ok(data); + } + + @RequiresPermissions("admin:config:express:updateConfigs") + @RequiresPermissionsDesc(menu={"配置管理" , "运费配置"}, button="编辑") + @PostMapping("/express") + public Object updateExpress(@RequestBody String body) { + Map data = JacksonUtil.toMap(body); + systemConfigService.updateConfig(data); + SystemConfig.updateConfigs(data); + return ResponseUtil.ok(); + } + + @RequiresPermissions("admin:config:order:list") + @RequiresPermissionsDesc(menu={"配置管理" , "订单配置"}, button="详情") + @GetMapping("/order") + public Object lisOrder() { + Map data = systemConfigService.listOrder(); + return ResponseUtil.ok(data); + } + + @RequiresPermissions("admin:config:order:updateConfigs") + @RequiresPermissionsDesc(menu={"配置管理" , "订单配置"}, button="编辑") + @PostMapping("/order") + public Object updateOrder(@RequestBody String body) { + Map data = JacksonUtil.toMap(body); + systemConfigService.updateConfig(data); + return ResponseUtil.ok(); + } + + @RequiresPermissions("admin:config:wx:list") + @RequiresPermissionsDesc(menu={"配置管理" , "小程序配置"}, button="详情") + @GetMapping("/wx") + public Object listWx() { + Map data = systemConfigService.listWx(); + return ResponseUtil.ok(data); + } + + @RequiresPermissions("admin:config:wx:updateConfigs") + @RequiresPermissionsDesc(menu={"配置管理" , "小程序配置"}, button="编辑") + @PostMapping("/wx") + public Object updateWx(@RequestBody String body) { + Map data = JacksonUtil.toMap(body); + systemConfigService.updateConfig(data); + SystemConfig.updateConfigs(data); + return ResponseUtil.ok(); + } +} diff --git a/litemall-admin/src/api/config.js b/litemall-admin/src/api/config.js new file mode 100644 index 00000000..2b129b84 --- /dev/null +++ b/litemall-admin/src/api/config.js @@ -0,0 +1,61 @@ +import request from '@/utils/request' + +export function listMall() { + return request({ + url: '/config/mall', + method: 'get' + }) +} + +export function updateMall(data) { + return request({ + url: '/config/mall', + method: 'post', + data + }) +} + +export function listExpress() { + return request({ + url: '/config/express', + method: 'get' + }) +} + +export function updateExpress(data) { + return request({ + url: '/config/express', + method: 'post', + data + }) +} + +export function listOrder() { + return request({ + url: '/config/order', + method: 'get' + }) +} + +export function updateOrder(data) { + return request({ + url: '/config/order', + method: 'post', + data + }) +} + +export function listWx() { + return request({ + url: '/config/wx', + method: 'get' + }) +} + +export function updateWx(data) { + return request({ + url: '/config/wx', + method: 'post', + data + }) +} diff --git a/litemall-admin/src/router/index.js b/litemall-admin/src/router/index.js index e206e5e2..bbc054bd 100644 --- a/litemall-admin/src/router/index.js +++ b/litemall-admin/src/router/index.js @@ -403,7 +403,7 @@ export const asyncRouterMap = [ component: Layout, redirect: 'noredirect', alwaysShow: true, - name: 'sysManage', + name: 'configManage', meta: { title: '配置管理', icon: 'chart' @@ -459,7 +459,7 @@ export const asyncRouterMap = [ alwaysShow: true, name: 'statManage', meta: { - title: '统计', + title: '统计报表', icon: 'chart' }, children: [ diff --git a/litemall-admin/src/views/config/express.vue b/litemall-admin/src/views/config/express.vue new file mode 100644 index 00000000..6fc85237 --- /dev/null +++ b/litemall-admin/src/views/config/express.vue @@ -0,0 +1,70 @@ + + + diff --git a/litemall-admin/src/views/config/mall.vue b/litemall-admin/src/views/config/mall.vue new file mode 100644 index 00000000..f6c4fc52 --- /dev/null +++ b/litemall-admin/src/views/config/mall.vue @@ -0,0 +1,68 @@ + + + diff --git a/litemall-admin/src/views/config/order.vue b/litemall-admin/src/views/config/order.vue new file mode 100644 index 00000000..07b5c2f2 --- /dev/null +++ b/litemall-admin/src/views/config/order.vue @@ -0,0 +1,66 @@ + + + diff --git a/litemall-admin/src/views/config/wx.vue b/litemall-admin/src/views/config/wx.vue new file mode 100644 index 00000000..70099e3a --- /dev/null +++ b/litemall-admin/src/views/config/wx.vue @@ -0,0 +1,86 @@ + + + diff --git a/litemall-core/src/main/java/org/linlinjava/litemall/core/system/BaseConfig.java b/litemall-core/src/main/java/org/linlinjava/litemall/core/system/BaseConfig.java deleted file mode 100644 index 7f6784ca..00000000 --- a/litemall-core/src/main/java/org/linlinjava/litemall/core/system/BaseConfig.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.linlinjava.litemall.core.system; - -import java.math.BigDecimal; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -/** - * 配置基类,该类实际持有所有的配置,子类只是提供代理访问方法 - */ -abstract class BaseConfig { - - //所有的配置均保存在该 HashMap 中 - protected static Map configs = new HashMap<>(); - - /** - * 添加配置到公共Map中 - * - * @param key - * @param value - */ - public static void addConfig(String key, String value) { - configs.put(key, value); - } - - /** - * 重载配置,传入子类的prefix - */ - public static void reloadConfig(String prefix) { - //先遍历删除该 prefix 所有配置 - for (Iterator> it = configs.entrySet().iterator(); it.hasNext(); ) { - Map.Entry item = it.next(); - if (item.getKey().startsWith(prefix)) - it.remove(); - } - - ConfigService.getSystemConfigService().reloadConfig(prefix); - } - - /** - * 按String类型获取配置值 - * - * @param keyName - * @return - */ - protected static String getConfig(String keyName) { - return configs.get(keyName); - } - - /** - * 以Integer类型获取配置值 - * - * @param keyName - * @return - */ - protected static Integer getConfigInt(String keyName) { - return Integer.parseInt(configs.get(keyName)); - } - - /** - * 以BigDecimal类型获取配置值 - * - * @param keyName - * @return - */ - protected static BigDecimal getConfigBigDec(String keyName) { - return new BigDecimal(configs.get(keyName)); - } - - /** - * 子类实现该方法,并告知父类配置前缀,该前缀用来索引配置组用于简化访问和按组重读配置 - * - * @return - */ - abstract String getPrefix(); -} diff --git a/litemall-core/src/main/java/org/linlinjava/litemall/core/system/ConfigService.java b/litemall-core/src/main/java/org/linlinjava/litemall/core/system/ConfigService.java deleted file mode 100644 index d1448272..00000000 --- a/litemall-core/src/main/java/org/linlinjava/litemall/core/system/ConfigService.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.linlinjava.litemall.core.system; - -import org.linlinjava.litemall.db.domain.LitemallSystem; -import org.linlinjava.litemall.db.service.LitemallSystemConfigService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; -import java.util.List; - -/** - * 该类用于自动初始化数据库配置到BaseConfig中,以便BaseConfig的子类调用 - */ -@Component -class ConfigService { - private static ConfigService systemConfigService; - @Autowired - private LitemallSystemConfigService litemallSystemConfigService; - - //不允许实例化 - private ConfigService() { - - } - - static ConfigService getSystemConfigService() { - return systemConfigService; - } - - @PostConstruct - public void inist() { - systemConfigService = this; - systemConfigService.inistConfigs(); - } - - /** - * 根据 prefix 重置该 prefix 下所有设置 - * - * @param prefix - */ - public void reloadConfig(String prefix) { - List list = litemallSystemConfigService.queryAll(); - for (LitemallSystem item : list) { - //符合条件,添加 - if (item.getKeyName().startsWith(prefix)) - BaseConfig.addConfig(item.getKeyName(), item.getKeyValue()); - } - } - - /** - * 读取全部配置 - */ - private void inistConfigs() { - List list = litemallSystemConfigService.queryAll(); - for (LitemallSystem item : list) { - BaseConfig.addConfig(item.getKeyName(), item.getKeyValue()); - } - } -} \ No newline at end of file diff --git a/litemall-core/src/main/java/org/linlinjava/litemall/core/system/SystemConfig.java b/litemall-core/src/main/java/org/linlinjava/litemall/core/system/SystemConfig.java index 0a94135f..3536fdab 100644 --- a/litemall-core/src/main/java/org/linlinjava/litemall/core/system/SystemConfig.java +++ b/litemall-core/src/main/java/org/linlinjava/litemall/core/system/SystemConfig.java @@ -1,72 +1,119 @@ package org.linlinjava.litemall.core.system; +import org.linlinjava.litemall.db.domain.LitemallSystem; +import org.linlinjava.litemall.db.service.LitemallSystemConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** - * 系统设置,其他配置请参考该类的实现 + * 系统设置 */ -public class SystemConfig extends BaseConfig { - public static final String PRE_FIX = "litemall.system."; +public class SystemConfig { + // 小程序相关配置 + public final static String LITEMALL_WX_INDEX_NEW = "litemall_wx_index_new"; + public final static String LITEMALL_WX_INDEX_HOT = "litemall_wx_index_hot"; + public final static String LITEMALL_WX_INDEX_BRAND = "litemall_wx_index_brand"; + public final static String LITEMALL_WX_INDEX_TOPIC = "litemall_wx_index_topic"; + public final static String LITEMALL_WX_INDEX_CATLOG_LIST = "litemall_wx_catlog_list"; + public final static String LITEMALL_WX_INDEX_CATLOG_GOODS = "litemall_wx_catlog_goods"; + public final static String LITEMALL_WX_SHARE = "litemall_wx_share"; + // 运费相关配置 + public final static String LITEMALL_EXPRESS_FREIGHT_VALUE = "litemall_express_freight_value"; + public final static String LITEMALL_EXPRESS_FREIGHT_MIN = "litemall_express_freight_min"; + // 订单相关配置 + public final static String LITEMALL_ORDER_UNPAID = "litemall_order_unpaid"; + public final static String LITEMALL_ORDER_UNCONFIRM = "litemall_order_unconfirm"; + public final static String LITEMALL_ORDER_COMMENT = "litemall_order_comment"; + // 商场相关配置 + public final static String LITEMALL_MALL_NAME = "litemall_mall_name"; + public final static String LITEMALL_MALL_ADDRESS = "litemall_mall_address"; + public final static String LITEMALL_MALL_PHONE = "litemall_mall_phone"; + public final static String LITEMALL_MALL_QQ = "litemall_mall_qq"; + + //所有的配置均保存在该 HashMap 中 + private static Map SYSTEM_CONFIGS = new HashMap<>(); + + private static String getConfig(String keyName) { + return SYSTEM_CONFIGS.get(keyName); + } + + private static Integer getConfigInt(String keyName) { + return Integer.parseInt(SYSTEM_CONFIGS.get(keyName)); + } + + private static Boolean getConfigBoolean(String keyName) { + return Boolean.valueOf(SYSTEM_CONFIGS.get(keyName)); + } + + private static BigDecimal getConfigBigDec(String keyName) { + return new BigDecimal(SYSTEM_CONFIGS.get(keyName)); + } public static Integer getNewLimit() { - return getConfigInt(PRE_FIX + "indexlimit.new"); + return getConfigInt(LITEMALL_WX_INDEX_NEW); } public static Integer getHotLimit() { - return getConfigInt(PRE_FIX + "indexlimit.hot"); + return getConfigInt(LITEMALL_WX_INDEX_HOT); } public static Integer getBrandLimit() { - return getConfigInt(PRE_FIX + "indexlimit.brand"); + return getConfigInt(LITEMALL_WX_INDEX_BRAND); } public static Integer getTopicLimit() { - return getConfigInt(PRE_FIX + "indexlimit.topic"); + return getConfigInt(LITEMALL_WX_INDEX_TOPIC); } public static Integer getCatlogListLimit() { - return getConfigInt(PRE_FIX + "indexlimit.catloglist"); + return getConfigInt(LITEMALL_WX_INDEX_CATLOG_LIST); } public static Integer getCatlogMoreLimit() { - return getConfigInt(PRE_FIX + "indexlimit.catloggood"); + return getConfigInt(LITEMALL_WX_INDEX_CATLOG_GOODS); } - public static String getHotBannerTitle() { - return getConfig(PRE_FIX + "banner.hot.title"); + public static boolean isAutoCreateShareImage() { + return getConfigBoolean(LITEMALL_WX_SHARE); } - public static String getNewBannerTitle() { - return getConfig(PRE_FIX + "banner.new.title"); + public static BigDecimal getFreight() { + return getConfigBigDec(LITEMALL_EXPRESS_FREIGHT_VALUE); } - public static String getHotImageUrl() { - return getConfig(PRE_FIX + "banner.hot.imageurl"); + public static BigDecimal getFreightLimit() { + return getConfigBigDec(LITEMALL_EXPRESS_FREIGHT_MIN); } - public static String getNewImageUrl() { - return getConfig(PRE_FIX + "banner.new.imageurl"); + public static String getMallName() { + return getConfig(LITEMALL_MALL_NAME); } - public static BigDecimal getFreight() { - return getConfigBigDec(PRE_FIX + "freight.value"); + public static String getMallAddress() { + return getConfig(LITEMALL_MALL_ADDRESS); } - public static BigDecimal getFreightLimit() { - return getConfigBigDec(PRE_FIX + "freight.limit"); + public static String getMallPhone() { + return getConfig(LITEMALL_MALL_PHONE); } - public static String getMallName() { - return getConfig(PRE_FIX + "mallname"); + public static String getMallQQ() { + return getConfig(LITEMALL_MALL_QQ); } - public static boolean isAutoCreateShareImage() { - int autoCreate = getConfigInt(PRE_FIX + "shareimage.autocreate"); - return autoCreate == 0 ? false : true; + public static void setConfigs(Map configs) { + SYSTEM_CONFIGS = configs; } - @Override - public String getPrefix() { - return PRE_FIX; + public static void updateConfigs(Map data) { + for (Map.Entry entry : data.entrySet()) { + SYSTEM_CONFIGS.put(entry.getKey(), entry.getValue()); + } } } \ No newline at end of file diff --git a/litemall-core/src/main/java/org/linlinjava/litemall/core/system/SystemInistService.java b/litemall-core/src/main/java/org/linlinjava/litemall/core/system/SystemInistService.java index 8bb41af0..e68c5004 100644 --- a/litemall-core/src/main/java/org/linlinjava/litemall/core/system/SystemInistService.java +++ b/litemall-core/src/main/java/org/linlinjava/litemall/core/system/SystemInistService.java @@ -1,34 +1,77 @@ package org.linlinjava.litemall.core.system; import org.linlinjava.litemall.core.util.SystemInfoPrinter; +import org.linlinjava.litemall.db.service.LitemallSystemConfigService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; /** - * 系统启动服务,用于检查系统状态及打印系统信息 + * 系统启动服务,用于设置系统配置信息、检查系统状态及打印系统信息 */ @Component class SystemInistService { private SystemInistService systemInistService; - @Autowired - private ConfigService configService; + + @Autowired private Environment environment; @PostConstruct private void inist() { systemInistService = this; + initConfigs(); + SystemInfoPrinter.printInfo("Litemall 初始化信息", getSystemInfo()); + } + + + private final static Map DEFAULT_CONFIGS = new HashMap<>(); + static { + // 小程序相关配置默认值 + DEFAULT_CONFIGS.put(SystemConfig.LITEMALL_WX_INDEX_NEW, "6"); + DEFAULT_CONFIGS.put(SystemConfig.LITEMALL_WX_INDEX_HOT, "6"); + DEFAULT_CONFIGS.put(SystemConfig.LITEMALL_WX_INDEX_BRAND, "4"); + DEFAULT_CONFIGS.put(SystemConfig.LITEMALL_WX_INDEX_TOPIC, "4"); + DEFAULT_CONFIGS.put(SystemConfig.LITEMALL_WX_INDEX_CATLOG_LIST, "4"); + DEFAULT_CONFIGS.put(SystemConfig.LITEMALL_WX_INDEX_CATLOG_GOODS, "4"); + DEFAULT_CONFIGS.put(SystemConfig.LITEMALL_WX_SHARE, "false"); + // 运费相关配置默认值 + DEFAULT_CONFIGS.put(SystemConfig.LITEMALL_EXPRESS_FREIGHT_VALUE, "8"); + DEFAULT_CONFIGS.put(SystemConfig.LITEMALL_EXPRESS_FREIGHT_MIN, "88"); + // 订单相关配置默认值 + DEFAULT_CONFIGS.put(SystemConfig.LITEMALL_ORDER_UNPAID, "30"); + DEFAULT_CONFIGS.put(SystemConfig.LITEMALL_ORDER_UNCONFIRM, "7"); + DEFAULT_CONFIGS.put(SystemConfig.LITEMALL_ORDER_COMMENT, "7"); + // 订单相关配置默认值 + DEFAULT_CONFIGS.put(SystemConfig.LITEMALL_MALL_NAME, "litemall"); + DEFAULT_CONFIGS.put(SystemConfig.LITEMALL_MALL_ADDRESS, "上海"); + DEFAULT_CONFIGS.put(SystemConfig.LITEMALL_MALL_PHONE, "021-xxxx-xxxx"); + DEFAULT_CONFIGS.put(SystemConfig.LITEMALL_MALL_QQ, "738696120"); + } + + @Autowired + private LitemallSystemConfigService litemallSystemConfigService; - try { - SystemInfoPrinter.printInfo("Litemall 初始化信息", getSystemInfo()); - } catch (Exception e) { - e.printStackTrace(); + private void initConfigs() { + // 1. 读取数据库全部配置信息 + Map configs = litemallSystemConfigService.queryAll(); + + // 2. 分析DEFAULT_CONFIGS + for (Map.Entry entry : DEFAULT_CONFIGS.entrySet()) { + if(configs.containsKey(entry.getKey())){ + continue; + } + + configs.put(entry.getKey(), entry.getValue()); + litemallSystemConfigService.addConfig(entry.getKey(), entry.getValue()); } + + SystemConfig.setConfigs(configs); } private Map getSystemInfo() { diff --git a/litemall-core/src/main/java/org/linlinjava/litemall/core/util/JacksonUtil.java b/litemall-core/src/main/java/org/linlinjava/litemall/core/util/JacksonUtil.java index 890c1591..d81d40e1 100644 --- a/litemall-core/src/main/java/org/linlinjava/litemall/core/util/JacksonUtil.java +++ b/litemall-core/src/main/java/org/linlinjava/litemall/core/util/JacksonUtil.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.util.List; +import java.util.Map; public class JacksonUtil { public static String parseString(String body, String field) { @@ -144,4 +145,14 @@ public class JacksonUtil { return null; } + public static Map toMap(String data) { + ObjectMapper objectMapper = new ObjectMapper(); + try { + return objectMapper.readValue(data, new TypeReference>(){}); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + } diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallSystemConfigService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallSystemConfigService.java index b47224f7..07f92c82 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallSystemConfigService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallSystemConfigService.java @@ -6,16 +6,93 @@ import org.linlinjava.litemall.db.domain.LitemallSystemExample; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Service public class LitemallSystemConfigService { @Resource private LitemallSystemMapper systemMapper; - public List queryAll() { + public Map queryAll() { LitemallSystemExample example = new LitemallSystemExample(); - example.or(); - return systemMapper.selectByExample(example); + example.or().andDeletedEqualTo(false); + + List systemList = systemMapper.selectByExample(example); + Map systemConfigs = new HashMap<>(); + for (LitemallSystem item : systemList) { + systemConfigs.put(item.getKeyName(), item.getKeyValue()); + } + + return systemConfigs; + } + + public Map listMail() { + LitemallSystemExample example = new LitemallSystemExample(); + example.or().andKeyNameLike("litemall_mall_%").andDeletedEqualTo(false); + List systemList = systemMapper.selectByExample(example); + Map data = new HashMap<>(); + for(LitemallSystem system : systemList){ + data.put(system.getKeyName(), system.getKeyValue()); + } + return data; + } + + public Map listWx() { + LitemallSystemExample example = new LitemallSystemExample(); + example.or().andKeyNameLike("litemall_wx_%").andDeletedEqualTo(false); + List systemList = systemMapper.selectByExample(example); + Map data = new HashMap<>(); + for(LitemallSystem system : systemList){ + data.put(system.getKeyName(), system.getKeyValue()); + } + return data; + } + + public Map listOrder() { + LitemallSystemExample example = new LitemallSystemExample(); + example.or().andKeyNameLike("litemall_order_%").andDeletedEqualTo(false); + List systemList = systemMapper.selectByExample(example); + Map data = new HashMap<>(); + for(LitemallSystem system : systemList){ + data.put(system.getKeyName(), system.getKeyValue()); + } + return data; + } + + public Map listExpress() { + LitemallSystemExample example = new LitemallSystemExample(); + example.or().andKeyNameLike("litemall_express_%").andDeletedEqualTo(false); + List systemList = systemMapper.selectByExample(example); + Map data = new HashMap<>(); + for(LitemallSystem system : systemList){ + data.put(system.getKeyName(), system.getKeyValue()); + } + return data; + } + + public void updateConfig(Map data) { + for (Map.Entry entry : data.entrySet()) { + LitemallSystemExample example = new LitemallSystemExample(); + example.or().andKeyNameEqualTo(entry.getKey()).andDeletedEqualTo(false); + + LitemallSystem system = new LitemallSystem(); + system.setKeyName(entry.getKey()); + system.setKeyValue(entry.getValue()); + system.setUpdateTime(LocalDateTime.now()); + systemMapper.updateByExampleSelective(system, example); + } + + } + + public void addConfig(String key, String value) { + LitemallSystem system = new LitemallSystem(); + system.setKeyName(key); + system.setKeyValue(value); + system.setAddTime(LocalDateTime.now()); + system.setUpdateTime(LocalDateTime.now()); + systemMapper.insertSelective(system); } } -- Gitee From 2d7a272b1a5ce95d7052144c6eb794e6755910d5 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Tue, 9 Apr 2019 23:08:17 +0800 Subject: [PATCH 058/391] =?UTF-8?q?fix[litemall-admin]:=20=E5=B0=8F?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-admin/src/components/Breadcrumb/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litemall-admin/src/components/Breadcrumb/index.vue b/litemall-admin/src/components/Breadcrumb/index.vue index b3e59e56..de204dff 100644 --- a/litemall-admin/src/components/Breadcrumb/index.vue +++ b/litemall-admin/src/components/Breadcrumb/index.vue @@ -39,7 +39,7 @@ export default { }) const first = matched[0] if (first && first.name.trim().toLocaleLowerCase() !== 'Dashboard'.toLocaleLowerCase()) { - matched = [{ path: '/dashboard', meta: { title: 'dashboard' }}].concat(matched) + matched = [{ path: '/dashboard', meta: { title: '首页' }}].concat(matched) } this.levelList = matched } -- Gitee From e10bf6b92b569337e7b37ed129a1e571c23cbf2c Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Wed, 10 Apr 2019 20:46:52 +0800 Subject: [PATCH 059/391] =?UTF-8?q?chore[litemall-admin]:=20=E6=9B=B4?= =?UTF-8?q?=E6=96=B0element-ui=E5=88=B02.7.2=EF=BC=8CTable=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E6=94=AF=E6=8C=81=E6=A0=91=E5=BD=A2=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-admin/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litemall-admin/package.json b/litemall-admin/package.json index b3f08f36..affb0b3b 100644 --- a/litemall-admin/package.json +++ b/litemall-admin/package.json @@ -28,7 +28,7 @@ "clipboard": "1.7.1", "connect": "3.6.6", "echarts": "4.1.0", - "element-ui": "2.4.6", + "element-ui": "2.7.2", "file-saver": "1.3.8", "font-awesome": "4.7.0", "js-cookie": "2.2.0", -- Gitee From 364b35fa5a56cc665a2b5afd88673f1f31fb90b6 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Wed, 10 Apr 2019 20:47:44 +0800 Subject: [PATCH 060/391] =?UTF-8?q?feat[litemall-admin]:=20=E8=A1=8C?= =?UTF-8?q?=E6=94=BF=E5=8C=BA=E5=9F=9F=E9=A1=B5=E9=9D=A2=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=A1=A8=E9=87=87=E7=94=A8=E6=A0=91=E5=BD=A2=E7=BB=93=E6=9E=84?= =?UTF-8?q?=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../litemall/admin/vo/RegionVO.java | 52 ++++++++++++++++++ .../admin/web/AdminRegionController.java | 53 ++++++++++++++----- litemall-admin/src/api/region.js | 5 +- litemall-admin/src/views/mall/region.vue | 51 +++--------------- .../db/service/LitemallRegionService.java | 7 +++ 5 files changed, 108 insertions(+), 60 deletions(-) create mode 100644 litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/RegionVO.java diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/RegionVO.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/RegionVO.java new file mode 100644 index 00000000..56e46f4b --- /dev/null +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/RegionVO.java @@ -0,0 +1,52 @@ +package org.linlinjava.litemall.admin.vo; + +import java.util.List; + +public class RegionVO { + private Integer id; + private String name; + private Byte type; + private Integer code; + + private List children; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public List getChildren() { + return children; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Byte getType() { + return type; + } + + public void setType(Byte type) { + this.type = type; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public void setChildren(List children) { + this.children = children; + } +} diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminRegionController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminRegionController.java index aef340b5..bfc82727 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminRegionController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminRegionController.java @@ -3,6 +3,7 @@ package org.linlinjava.litemall.admin.web; import com.github.pagehelper.PageInfo; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.linlinjava.litemall.admin.vo.RegionVO; import org.linlinjava.litemall.core.util.ResponseUtil; import org.linlinjava.litemall.core.validator.Order; import org.linlinjava.litemall.core.validator.Sort; @@ -16,6 +17,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.validation.constraints.NotNull; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -36,17 +38,44 @@ public class AdminRegionController { } @GetMapping("/list") - public Object list(String name, Integer code, - @RequestParam(defaultValue = "1") Integer page, - @RequestParam(defaultValue = "10") Integer limit, - @Sort(accepts = {"id"}) @RequestParam(defaultValue = "id") String sort, - @Order @RequestParam(defaultValue = "desc") String order) { - List regionList = regionService.querySelective(name, code, page, limit, sort, order); - long total = PageInfo.of(regionList).getTotal(); - Map data = new HashMap<>(); - data.put("total", total); - data.put("items", regionList); - - return ResponseUtil.ok(data); + public Object list() { + List regionVOList = new ArrayList<>(); + + List provinceList = regionService.queryByPid(0); + for(LitemallRegion province : provinceList){ + RegionVO provinceVO = new RegionVO(); + provinceVO.setId(province.getId()); + provinceVO.setName(province.getName()); + provinceVO.setCode(province.getCode()); + provinceVO.setType(province.getType()); + + List cityList = regionService.queryByPid(province.getId()); + List cityVOList = new ArrayList<>(); + for(LitemallRegion city : cityList){ + RegionVO cityVO = new RegionVO(); + cityVO.setId(city.getId()); + cityVO.setName(city.getName()); + cityVO.setCode(city.getCode()); + cityVO.setType(city.getType()); + + List areaList = regionService.queryByPid(city.getId()); + List areaVOList = new ArrayList<>(); + for(LitemallRegion area : areaList){ + RegionVO areaVO = new RegionVO(); + areaVO.setId(area.getId()); + areaVO.setName(area.getName()); + areaVO.setCode(area.getCode()); + areaVO.setType(area.getType()); + areaVOList.add(areaVO); + } + + cityVO.setChildren(areaVOList); + cityVOList.add(cityVO); + } + provinceVO.setChildren(cityVOList); + regionVOList.add(provinceVO); + } + + return ResponseUtil.ok(regionVOList); } } diff --git a/litemall-admin/src/api/region.js b/litemall-admin/src/api/region.js index dd705ee4..a114c4d7 100644 --- a/litemall-admin/src/api/region.js +++ b/litemall-admin/src/api/region.js @@ -1,10 +1,9 @@ import request from '@/utils/request' -export function listRegion(query) { +export function listRegion() { return request({ url: '/region/list', - method: 'get', - params: query + method: 'get' }) } diff --git a/litemall-admin/src/views/mall/region.vue b/litemall-admin/src/views/mall/region.vue index c3b69144..4d0bc857 100644 --- a/litemall-admin/src/views/mall/region.vue +++ b/litemall-admin/src/views/mall/region.vue @@ -1,45 +1,28 @@ + -- Gitee From 94107e6592120ff03a594e33209cc01fa92818d0 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Thu, 11 Apr 2019 23:44:02 +0800 Subject: [PATCH 066/391] [release]: v1.3.0 --- CHANGELOG.md | 11 +++++++++++ README.md | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 46b3113b..a6d6d7ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # 更新日志 +## V 1.3.0 + +*2019-03-11*,支持配置管理 + + * `管理后台`商品类目页面和行政区域页面采用树形结构显示; + * `管理后台`取消国际化和主题; + * `管理后台`支持配置管理; + + 注意:虽然配置管理中可以设置订单超时时间,但是由于目前采用定时查询方式会产生延时, + 因此最终订单超时时间需要额外加上这些延迟才能更新状态。以后会解决这个问题(例如使用redis)。 + ## V 1.2.0 *2019-03-03*,支持权限管理 diff --git a/README.md b/README.md index a104a526..79ad4527 100644 --- a/README.md +++ b/README.md @@ -124,7 +124,7 @@ litemall = Spring Boot后端 + Vue管理员前端 + 微信小程序用户前端 ## 开发计划 -当前版本[v1.2.0](https://linlinjava.gitbook.io/litemall/changelog) +当前版本[v1.3.0](https://linlinjava.gitbook.io/litemall/changelog) 目前项目开发中,存在诸多不足,以下是目前规划的开发计划。 @@ -161,6 +161,7 @@ V 3.0.0 完成以下目标: 项目介绍:基于Node.js+MySQL开发的开源微信小程序商城(微信小程序) 项目参考: + 1. litemall项目数据库基于nideshop-mini-program项目数据库; 2. litemall项目的litemall-wx模块基于nideshop-mini-program开发。 -- Gitee From ce4ef458269ed986db6bf50e37630d7297c504fe Mon Sep 17 00:00:00 2001 From: "six.nonacosa" Date: Fri, 12 Apr 2019 18:53:53 +0800 Subject: [PATCH 067/391] litemall client power for vue -- init litemall client power for vue -- init thanks litemall --- litemall-vue/.eslintrc.js | 17 + litemall-vue/.gitignore | 21 + litemall-vue/.postcssrc.js | 5 + litemall-vue/.prettierrc.js | 4 + litemall-vue/README.md | 61 + litemall-vue/babel.config.js | 15 + litemall-vue/mock/db.json | 1336 ++ litemall-vue/mock/route.json | 0 litemall-vue/package-lock.json | 13570 ++++++++++++++++ litemall-vue/package.json | 40 + litemall-vue/public/favicon.ico | Bin 0 -> 4286 bytes litemall-vue/public/index.html | 27 + litemall-vue/public/vconsole.min.js | 7 + litemall-vue/src/App.vue | 11 + litemall-vue/src/api/goods.js | 5 + litemall-vue/src/api/order.js | 5 + litemall-vue/src/api/promotion.js | 0 litemall-vue/src/api/shop.js | 7 + litemall-vue/src/api/user.js | 18 + litemall-vue/src/assets/images/ali_pay.png | Bin 0 -> 12465 bytes .../src/assets/images/avatar_default.png | Bin 0 -> 5995 bytes .../src/assets/images/goods_default.png | Bin 0 -> 3599 bytes .../src/assets/images/id_card_front.png | Bin 0 -> 43486 bytes .../src/assets/images/id_card_reverse.png | Bin 0 -> 42537 bytes .../src/assets/images/index_collect.png | Bin 0 -> 31144 bytes litemall-vue/src/assets/images/is_empty.png | Bin 0 -> 4886 bytes litemall-vue/src/assets/images/mx_be_to.png | Bin 0 -> 3311 bytes litemall-vue/src/assets/images/mx_start.png | Bin 0 -> 2900 bytes litemall-vue/src/assets/images/not_enough.png | Bin 0 -> 15451 bytes litemall-vue/src/assets/images/qc_code.png | Bin 0 -> 44409 bytes .../src/assets/images/store_default.png | Bin 0 -> 9022 bytes litemall-vue/src/assets/images/trumpet.png | Bin 0 -> 1419 bytes .../src/assets/images/user_head_bg.png | Bin 0 -> 23768 bytes litemall-vue/src/assets/images/wx_pay.png | Bin 0 -> 12063 bytes litemall-vue/src/assets/scss/_mixin.scss | 1 + litemall-vue/src/assets/scss/_vant-theme.scss | 127 + litemall-vue/src/assets/scss/_var.scss | 16 + litemall-vue/src/assets/scss/common.scss | 59 + litemall-vue/src/assets/scss/global.scss | 45 + .../src/assets/scss/iconfont/iconfont.css | 318 + .../src/assets/scss/iconfont/iconfont.ttf | Bin 0 -> 22484 bytes .../src/assets/scss/mixin/_one-border.scss | 17 + litemall-vue/src/assets/scss/spinner.scss | 53 + litemall-vue/src/core/async-loader.js | 32 + litemall-vue/src/core/regexp/index.js | 12 + litemall-vue/src/core/utils/auth.js | 42 + litemall-vue/src/core/utils/cookies.js | 60 + litemall-vue/src/core/utils/local-storage.js | 20 + litemall-vue/src/core/utils/location-param.js | 6 + litemall-vue/src/core/utils/psm.js | 447 + litemall-vue/src/core/utils/request.js | 90 + litemall-vue/src/core/utils/scroll.js | 31 + litemall-vue/src/main.js | 54 + .../src/views/home/tabbar-home-shop-info.vue | 67 + .../src/views/home/tabbar-home-sign-board.vue | 69 + litemall-vue/src/views/home/tabbar-home.vue | 510 + .../views/items/detail/EntityGroup/area.json | 3607 ++++ .../views/items/detail/EntityGroup/index.vue | 513 + .../detail/EntityGroup/popup-address.vue | 168 + .../items/detail/EntityGroup/popup-area.vue | 50 + .../items/detail/EntityGroup/popup-props.vue | 79 + .../views/items/detail/VirtualGroup/index.vue | 121 + litemall-vue/src/views/items/detail/index.vue | 274 + litemall-vue/src/views/items/detail/mix.js | 42 + litemall-vue/src/views/items/list/index.vue | 251 + .../src/views/items/search-result/index.vue | 166 + litemall-vue/src/views/items/search/index.vue | 104 + .../src/views/items/search/search-tag.vue | 28 + .../src/views/items/tabbar-class-tree.vue | 170 + litemall-vue/src/views/items/tabbar-class.vue | 112 + .../src/views/login/forget-reset/index.vue | 57 + .../src/views/login/forget-status/index.vue | 81 + litemall-vue/src/views/login/forget/index.vue | 80 + litemall-vue/src/views/login/login-footer.vue | 18 + litemall-vue/src/views/login/login-header.vue | 29 + .../src/views/login/login-request.vue | 182 + litemall-vue/src/views/login/login.vue | 29 + .../views/login/register-getCode/index.vue | 59 + .../src/views/login/register-status/index.vue | 81 + .../src/views/login/register-submit/index.vue | 78 + .../order/orderDetail/bottom-goods-info.vue | 66 + .../src/views/order/orderDetail/index.vue | 257 + .../views/order/orderDetail/top-user-info.vue | 62 + .../src/views/order/payment-status/index.vue | 94 + .../src/views/order/payment/index.vue | 165 + .../place-order-entity/bottom-goods-info.vue | 68 + .../views/order/place-order-entity/index.vue | 83 + .../place-order-entity/top-user-info.vue | 78 + .../views/order/place-order-virtual/index.vue | 122 + litemall-vue/src/views/order/tabbar-cart.vue | 311 + .../views/user/module-address-edit/area.json | 3607 ++++ .../views/user/module-address-edit/index.vue | 112 + .../src/views/user/module-address/index.vue | 114 + .../module-autonym-edit/id-card-upload.vue | 115 + .../views/user/module-autonym-edit/index.vue | 112 + .../src/views/user/module-autonym/index.vue | 96 + .../src/views/user/module-collect/index.vue | 127 + .../views/user/module-invitation/index.vue | 65 + .../src/views/user/module-server/index.vue | 30 + .../src/views/user/module-team/index.vue | 75 + .../user/order-ele-list/handle-status-10.vue | 6 + .../user/order-ele-list/handle-status-100.vue | 5 + .../user/order-ele-list/handle-status-110.vue | 5 + .../user/order-ele-list/handle-status-120.vue | 5 + .../user/order-ele-list/handle-status-40.vue | 5 + .../user/order-ele-list/handle-status-60.vue | 5 + .../user/order-ele-list/handle-status-70.vue | 5 + .../src/views/user/order-ele-list/index.vue | 198 + .../order-entity-list/handle-status-10.vue | 9 + .../order-entity-list/handle-status-20.vue | 13 + .../order-entity-list/handle-status-25.vue | 14 + .../order-entity-list/handle-status-30.vue | 9 + .../order-entity-list/handle-status-40.vue | 8 + .../order-entity-list/handle-status-50.vue | 8 + .../order-entity-list/handle-status-60.vue | 8 + .../order-entity-list/handle-status-70.vue | 8 + .../views/user/order-entity-list/index.vue | 243 + .../src/views/user/refund-list/index.vue | 156 + .../src/views/user/tabbar-user-ecoupon.vue | 86 + .../src/views/user/tabbar-user-header.vue | 93 + .../src/views/user/tabbar-user-module.vue | 25 + .../src/views/user/tabbar-user-order.vue | 105 + litemall-vue/src/views/user/tabbar-user.vue | 68 + .../views/user/user-information-set/index.vue | 141 + .../user-information-set/set-bg/index.vue | 7 + .../user-information-set/set-mobile/index.vue | 121 + .../set-nickname/index.vue | 58 + .../set-password/index.vue | 89 + .../src/vue/components/Tabbar/index.vue | 88 + .../vue/components/_directive/scrollMore.js | 113 + .../src/vue/components/field-group/index.vue | 26 + .../src/vue/components/field/index.vue | 104 + .../vue/components/infinity-scroll/index.vue | 107 + .../src/vue/components/is-empty/index.vue | 28 + .../vue/components/item-card-hori/index.vue | 161 + .../vue/components/item-card-vert/index.vue | 116 + .../src/vue/components/item-group/index.vue | 152 + .../src/vue/components/md-kefu/index.vue | 61 + .../src/vue/components/spinner/index.js | 3 + .../src/vue/components/spinner/spinner.vue | 11 + litemall-vue/src/vue/event-bus/index.js | 21 + litemall-vue/src/vue/filter/index.js | 14 + litemall-vue/src/vue/mixin/get-shop-info.js | 23 + litemall-vue/src/vue/mixin/item-card.js | 22 + litemall-vue/src/vue/mixin/list-load-more.js | 70 + litemall-vue/src/vue/mixin/load-more.js | 66 + litemall-vue/src/vue/mixin/scroll-fixed.js | 24 + litemall-vue/src/vue/plugins/axios.js | 92 + litemall-vue/src/vue/plugins/vue-countdown.js | 7 + litemall-vue/src/vue/router/home.js | 23 + litemall-vue/src/vue/router/index.js | 31 + litemall-vue/src/vue/router/items.js | 49 + litemall-vue/src/vue/router/login.js | 48 + litemall-vue/src/vue/router/order.js | 47 + litemall-vue/src/vue/router/user.js | 140 + litemall-vue/vue.config.js | 54 + 156 files changed, 32567 insertions(+) create mode 100644 litemall-vue/.eslintrc.js create mode 100644 litemall-vue/.gitignore create mode 100644 litemall-vue/.postcssrc.js create mode 100644 litemall-vue/.prettierrc.js create mode 100644 litemall-vue/README.md create mode 100644 litemall-vue/babel.config.js create mode 100644 litemall-vue/mock/db.json create mode 100644 litemall-vue/mock/route.json create mode 100644 litemall-vue/package-lock.json create mode 100644 litemall-vue/package.json create mode 100644 litemall-vue/public/favicon.ico create mode 100644 litemall-vue/public/index.html create mode 100644 litemall-vue/public/vconsole.min.js create mode 100644 litemall-vue/src/App.vue create mode 100755 litemall-vue/src/api/goods.js create mode 100755 litemall-vue/src/api/order.js create mode 100755 litemall-vue/src/api/promotion.js create mode 100755 litemall-vue/src/api/shop.js create mode 100755 litemall-vue/src/api/user.js create mode 100755 litemall-vue/src/assets/images/ali_pay.png create mode 100755 litemall-vue/src/assets/images/avatar_default.png create mode 100755 litemall-vue/src/assets/images/goods_default.png create mode 100755 litemall-vue/src/assets/images/id_card_front.png create mode 100755 litemall-vue/src/assets/images/id_card_reverse.png create mode 100755 litemall-vue/src/assets/images/index_collect.png create mode 100755 litemall-vue/src/assets/images/is_empty.png create mode 100755 litemall-vue/src/assets/images/mx_be_to.png create mode 100755 litemall-vue/src/assets/images/mx_start.png create mode 100755 litemall-vue/src/assets/images/not_enough.png create mode 100755 litemall-vue/src/assets/images/qc_code.png create mode 100755 litemall-vue/src/assets/images/store_default.png create mode 100644 litemall-vue/src/assets/images/trumpet.png create mode 100755 litemall-vue/src/assets/images/user_head_bg.png create mode 100755 litemall-vue/src/assets/images/wx_pay.png create mode 100755 litemall-vue/src/assets/scss/_mixin.scss create mode 100755 litemall-vue/src/assets/scss/_vant-theme.scss create mode 100755 litemall-vue/src/assets/scss/_var.scss create mode 100755 litemall-vue/src/assets/scss/common.scss create mode 100755 litemall-vue/src/assets/scss/global.scss create mode 100755 litemall-vue/src/assets/scss/iconfont/iconfont.css create mode 100755 litemall-vue/src/assets/scss/iconfont/iconfont.ttf create mode 100755 litemall-vue/src/assets/scss/mixin/_one-border.scss create mode 100644 litemall-vue/src/assets/scss/spinner.scss create mode 100644 litemall-vue/src/core/async-loader.js create mode 100755 litemall-vue/src/core/regexp/index.js create mode 100644 litemall-vue/src/core/utils/auth.js create mode 100644 litemall-vue/src/core/utils/cookies.js create mode 100644 litemall-vue/src/core/utils/local-storage.js create mode 100644 litemall-vue/src/core/utils/location-param.js create mode 100644 litemall-vue/src/core/utils/psm.js create mode 100755 litemall-vue/src/core/utils/request.js create mode 100755 litemall-vue/src/core/utils/scroll.js create mode 100644 litemall-vue/src/main.js create mode 100755 litemall-vue/src/views/home/tabbar-home-shop-info.vue create mode 100755 litemall-vue/src/views/home/tabbar-home-sign-board.vue create mode 100755 litemall-vue/src/views/home/tabbar-home.vue create mode 100755 litemall-vue/src/views/items/detail/EntityGroup/area.json create mode 100755 litemall-vue/src/views/items/detail/EntityGroup/index.vue create mode 100755 litemall-vue/src/views/items/detail/EntityGroup/popup-address.vue create mode 100755 litemall-vue/src/views/items/detail/EntityGroup/popup-area.vue create mode 100755 litemall-vue/src/views/items/detail/EntityGroup/popup-props.vue create mode 100755 litemall-vue/src/views/items/detail/VirtualGroup/index.vue create mode 100755 litemall-vue/src/views/items/detail/index.vue create mode 100755 litemall-vue/src/views/items/detail/mix.js create mode 100755 litemall-vue/src/views/items/list/index.vue create mode 100755 litemall-vue/src/views/items/search-result/index.vue create mode 100755 litemall-vue/src/views/items/search/index.vue create mode 100755 litemall-vue/src/views/items/search/search-tag.vue create mode 100755 litemall-vue/src/views/items/tabbar-class-tree.vue create mode 100755 litemall-vue/src/views/items/tabbar-class.vue create mode 100755 litemall-vue/src/views/login/forget-reset/index.vue create mode 100755 litemall-vue/src/views/login/forget-status/index.vue create mode 100755 litemall-vue/src/views/login/forget/index.vue create mode 100755 litemall-vue/src/views/login/login-footer.vue create mode 100755 litemall-vue/src/views/login/login-header.vue create mode 100755 litemall-vue/src/views/login/login-request.vue create mode 100755 litemall-vue/src/views/login/login.vue create mode 100755 litemall-vue/src/views/login/register-getCode/index.vue create mode 100755 litemall-vue/src/views/login/register-status/index.vue create mode 100755 litemall-vue/src/views/login/register-submit/index.vue create mode 100755 litemall-vue/src/views/order/orderDetail/bottom-goods-info.vue create mode 100755 litemall-vue/src/views/order/orderDetail/index.vue create mode 100755 litemall-vue/src/views/order/orderDetail/top-user-info.vue create mode 100755 litemall-vue/src/views/order/payment-status/index.vue create mode 100755 litemall-vue/src/views/order/payment/index.vue create mode 100755 litemall-vue/src/views/order/place-order-entity/bottom-goods-info.vue create mode 100755 litemall-vue/src/views/order/place-order-entity/index.vue create mode 100755 litemall-vue/src/views/order/place-order-entity/top-user-info.vue create mode 100755 litemall-vue/src/views/order/place-order-virtual/index.vue create mode 100755 litemall-vue/src/views/order/tabbar-cart.vue create mode 100755 litemall-vue/src/views/user/module-address-edit/area.json create mode 100755 litemall-vue/src/views/user/module-address-edit/index.vue create mode 100755 litemall-vue/src/views/user/module-address/index.vue create mode 100755 litemall-vue/src/views/user/module-autonym-edit/id-card-upload.vue create mode 100755 litemall-vue/src/views/user/module-autonym-edit/index.vue create mode 100755 litemall-vue/src/views/user/module-autonym/index.vue create mode 100644 litemall-vue/src/views/user/module-collect/index.vue create mode 100755 litemall-vue/src/views/user/module-invitation/index.vue create mode 100755 litemall-vue/src/views/user/module-server/index.vue create mode 100755 litemall-vue/src/views/user/module-team/index.vue create mode 100644 litemall-vue/src/views/user/order-ele-list/handle-status-10.vue create mode 100644 litemall-vue/src/views/user/order-ele-list/handle-status-100.vue create mode 100644 litemall-vue/src/views/user/order-ele-list/handle-status-110.vue create mode 100644 litemall-vue/src/views/user/order-ele-list/handle-status-120.vue create mode 100644 litemall-vue/src/views/user/order-ele-list/handle-status-40.vue create mode 100644 litemall-vue/src/views/user/order-ele-list/handle-status-60.vue create mode 100644 litemall-vue/src/views/user/order-ele-list/handle-status-70.vue create mode 100644 litemall-vue/src/views/user/order-ele-list/index.vue create mode 100644 litemall-vue/src/views/user/order-entity-list/handle-status-10.vue create mode 100644 litemall-vue/src/views/user/order-entity-list/handle-status-20.vue create mode 100644 litemall-vue/src/views/user/order-entity-list/handle-status-25.vue create mode 100644 litemall-vue/src/views/user/order-entity-list/handle-status-30.vue create mode 100644 litemall-vue/src/views/user/order-entity-list/handle-status-40.vue create mode 100644 litemall-vue/src/views/user/order-entity-list/handle-status-50.vue create mode 100644 litemall-vue/src/views/user/order-entity-list/handle-status-60.vue create mode 100644 litemall-vue/src/views/user/order-entity-list/handle-status-70.vue create mode 100644 litemall-vue/src/views/user/order-entity-list/index.vue create mode 100644 litemall-vue/src/views/user/refund-list/index.vue create mode 100755 litemall-vue/src/views/user/tabbar-user-ecoupon.vue create mode 100755 litemall-vue/src/views/user/tabbar-user-header.vue create mode 100755 litemall-vue/src/views/user/tabbar-user-module.vue create mode 100755 litemall-vue/src/views/user/tabbar-user-order.vue create mode 100755 litemall-vue/src/views/user/tabbar-user.vue create mode 100755 litemall-vue/src/views/user/user-information-set/index.vue create mode 100755 litemall-vue/src/views/user/user-information-set/set-bg/index.vue create mode 100755 litemall-vue/src/views/user/user-information-set/set-mobile/index.vue create mode 100755 litemall-vue/src/views/user/user-information-set/set-nickname/index.vue create mode 100755 litemall-vue/src/views/user/user-information-set/set-password/index.vue create mode 100755 litemall-vue/src/vue/components/Tabbar/index.vue create mode 100755 litemall-vue/src/vue/components/_directive/scrollMore.js create mode 100755 litemall-vue/src/vue/components/field-group/index.vue create mode 100755 litemall-vue/src/vue/components/field/index.vue create mode 100644 litemall-vue/src/vue/components/infinity-scroll/index.vue create mode 100644 litemall-vue/src/vue/components/is-empty/index.vue create mode 100644 litemall-vue/src/vue/components/item-card-hori/index.vue create mode 100644 litemall-vue/src/vue/components/item-card-vert/index.vue create mode 100644 litemall-vue/src/vue/components/item-group/index.vue create mode 100755 litemall-vue/src/vue/components/md-kefu/index.vue create mode 100644 litemall-vue/src/vue/components/spinner/index.js create mode 100644 litemall-vue/src/vue/components/spinner/spinner.vue create mode 100644 litemall-vue/src/vue/event-bus/index.js create mode 100755 litemall-vue/src/vue/filter/index.js create mode 100644 litemall-vue/src/vue/mixin/get-shop-info.js create mode 100755 litemall-vue/src/vue/mixin/item-card.js create mode 100644 litemall-vue/src/vue/mixin/list-load-more.js create mode 100755 litemall-vue/src/vue/mixin/load-more.js create mode 100644 litemall-vue/src/vue/mixin/scroll-fixed.js create mode 100755 litemall-vue/src/vue/plugins/axios.js create mode 100755 litemall-vue/src/vue/plugins/vue-countdown.js create mode 100755 litemall-vue/src/vue/router/home.js create mode 100755 litemall-vue/src/vue/router/index.js create mode 100755 litemall-vue/src/vue/router/items.js create mode 100755 litemall-vue/src/vue/router/login.js create mode 100755 litemall-vue/src/vue/router/order.js create mode 100755 litemall-vue/src/vue/router/user.js create mode 100755 litemall-vue/vue.config.js diff --git a/litemall-vue/.eslintrc.js b/litemall-vue/.eslintrc.js new file mode 100644 index 00000000..be152b58 --- /dev/null +++ b/litemall-vue/.eslintrc.js @@ -0,0 +1,17 @@ +module.exports = { + root: true, + env: { + node: true + }, + extends: ['plugin:vue/essential', '@vue/prettier'], + // rules: { + // camelcase: 'off', + // quotes: ['error', 'single'], + // indent: ['error', 2, { SwitchCase: 1 }], + // 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', + // 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' + // }, + parserOptions: { + parser: 'babel-eslint' + } +}; diff --git a/litemall-vue/.gitignore b/litemall-vue/.gitignore new file mode 100644 index 00000000..185e6631 --- /dev/null +++ b/litemall-vue/.gitignore @@ -0,0 +1,21 @@ +.DS_Store +node_modules +/dist + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw* diff --git a/litemall-vue/.postcssrc.js b/litemall-vue/.postcssrc.js new file mode 100644 index 00000000..5bfb8f62 --- /dev/null +++ b/litemall-vue/.postcssrc.js @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + autoprefixer: {} + } +}; diff --git a/litemall-vue/.prettierrc.js b/litemall-vue/.prettierrc.js new file mode 100644 index 00000000..a2fb231a --- /dev/null +++ b/litemall-vue/.prettierrc.js @@ -0,0 +1,4 @@ +module.exports = { + tabWidth: 2, + singleQuote: true +}; diff --git a/litemall-vue/README.md b/litemall-vue/README.md new file mode 100644 index 00000000..d9b49d5b --- /dev/null +++ b/litemall-vue/README.md @@ -0,0 +1,61 @@ +# liteMall 移动商城 + +- 本项目是小程序的 vue 版本,样式大体相同,欢迎有能力的人贡献更优秀的代码 + +> 使用有赞移动端 Vue 组件库 — [Vant](https://www.youzanyun.com/zanui/vant#/zh-CN/component/intro) + + +## Vue相关库与插件 + +- power by vue-cli3 +- Vue + Vue-router + Vant + Sass +- axios +- vee-validate +- fastclick +- babel-polyfill +- @xkeshi/vue-countdown + + +## Build Script + +``` bash +# install dependencies +npm install + +# serve with hot reload at localhost:6255 九键输入法的 「mall」= 「6255」 +npm run serve + +# build for production with minification : build result at /dist +npm run build + +# build for production and view the bundle analyzer report +npm run build -- --report +``` + +- 简单预览: + +[![AqVx1g.md.png](https://s2.ax1x.com/2019/04/12/AqVx1g.md.png)](https://imgchr.com/i/AqVx1g) + +[![AqZZ3F.md.gif](https://s2.ax1x.com/2019/04/12/AqZZ3F.md.gif)](https://imgchr.com/i/AqZZ3F) + + +### 一些 Tips + +- 手机浏览或 chrome 手机模式:开发/浏览 体验更佳 + +- 运行项目 + +```bash +npm i && npm run serve +``` + +- 打包项目 + +```bash +# /dist copy to you http server +npm run build +``` + + + + diff --git a/litemall-vue/babel.config.js b/litemall-vue/babel.config.js new file mode 100644 index 00000000..628784ca --- /dev/null +++ b/litemall-vue/babel.config.js @@ -0,0 +1,15 @@ +module.exports = { + presets: ['@vue/app'], + plugins: [ + 'lodash', + [ + 'import', + { + libraryName: 'vant', + libraryDirectory: 'es', + style: true + }, + 'vant' + ] + ] +}; diff --git a/litemall-vue/mock/db.json b/litemall-vue/mock/db.json new file mode 100644 index 00000000..357c1eb0 --- /dev/null +++ b/litemall-vue/mock/db.json @@ -0,0 +1,1336 @@ +{ + "home": { + "data": { + "shop_info": { + "shop_name": "我的店", + "branch_name": "江二路店", + "avatar": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1528870206903&di=61bc76b8397a6f2d0286c620ea3d375a&imgtype=0&src=http%3A%2F%2Fs10.sinaimg.cn%2Fmiddle%2F85dbe4bftae0162a00d89%26690", + "contact": "13456789900", + "id": "1", + "notice": "1212412", + "shop_qrcode": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "qr_code": "http://mamaqunaer.oss-cn-shanghai.aliyuncs.com/android/201711/607bde41c4c2e540d7f57b47f65c3748.JPEG", + "province": "110000", + "city": "110100", + "district": "110101", + "area_name": "滴滴滴", + "address": "路100号", + "lng": "38.911251220094", + "lat": "121.60083184468", + "is_partner": 0, + "city_name": "懂得" + }, + "activity_seckill": { + "setting": { + "title": "秒杀", + "banner": "https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=3119832186,3639141636&fm=27&gp=0.jpg", + "module_id": "shop_seckill", + "style": 1, + "sort": 1, + "is_show": 1, + "is_banner_show": 1 + }, + "items": [ + { + "id": 3589, + "name": "惠尔顿 汽车儿童安全座椅 车载婴儿宝宝安全座椅 0-6岁 皇家盔宝", + "sell_point": "", + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "sales_price": 50, + "market_price": 40, + "total": 10, + "sold_num": 1, + "is_buy": 0, + "is_collect": 0, + "is_stars": 0, + "is_free_shipping": 0, + "is_haitao": 0, + "as_status": 1 + }, + { + "id": 3631, + "name": "自助上架-双规格", + "sell_point": "", + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "sales_price": 1000, + "market_price": 888, + "total": 24, + "sold_num": 23, + "is_buy": 0, + "is_collect": 0, + "is_stars": 0, + "is_free_shipping": 0, + "is_haitao": 0, + "as_status": 0 + } + ] + }, + "shop_recommend": { + "setting": { + "title": "店主推荐", + "banner": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1528870255838&di=90df5f0eb8269f16a54b415501a6ce5e&imgtype=0&src=http%3A%2F%2Ff2.dn.anqu.com%2Fthumb%2FNjExfHx8MTAwMDB8fHwzfHx8OWY0Zg%3D%3D%2Fallimg%2F1307%2F54-130F5091F0.jpg", + "module_id": "shop_recommend", + "style": 1, + "sort": 0, + "is_show": 1, + "is_banner_show": 1 + }, + "items": [ + { + "id": 1848, + "shop_id": 1, + "name": "保税区!哈罗闪baby wash&care 婴儿滋润沐浴露200ml", + "sell_point": "", + "brand_id": 0, + "brand_name": "", + "market_price": 3200, + "sales_price": 2900, + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "sold_quantity": 0, + "quantity": 85, + "is_virtual": 0, + "fx_item_id": 1106, + "status": 1, + "approve_status": 1, + "sort_order": 100, + "is_haitao": 0, + "is_recommend": 1, + "use_start_time": 0, + "use_end_time": 0, + "is_stars": 0, + "is_buy": null, + "is_collect": null + }, + { + "id": 1846, + "shop_id": 1, + "name": "美国艾维诺Aveeno婴儿无泪2合1洗发沐浴露354ml", + "sell_point": "", + "brand_id": 0, + "brand_name": "", + "market_price": 12600, + "sales_price": 9500, + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "sold_quantity": 0, + "quantity": 231, + "is_virtual": 0, + "fx_item_id": 1102, + "status": 1, + "approve_status": 1, + "sort_order": 100, + "is_haitao": 0, + "is_recommend": 1, + "use_start_time": 0, + "use_end_time": 0, + "is_stars": 0, + "is_buy": null, + "is_collect": null + }, + { + "id": 1835, + "shop_id": 1, + "name": "【行货】大王维E环贴纸尿裤S84片", + "sell_point": "", + "brand_id": 0, + "brand_name": "", + "market_price": 50000, + "sales_price": 47800, + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "sold_quantity": 0, + "quantity": 583, + "is_virtual": 0, + "fx_item_id": 1394, + "status": 1, + "approve_status": 1, + "sort_order": 100, + "is_haitao": 0, + "is_recommend": 1, + "use_start_time": 0, + "use_end_time": 0, + "is_stars": 0, + "is_buy": null, + "is_collect": null + } + ] + }, + "goods": { + "setting": { + "title": "全部商品", + "banner": "", + "module_id": "goods", + "style": 0, + "sort": 1, + "is_show": 1, + "is_banner_show": 0 + }, + "items": [ + { + "id": 3631, + "shop_id": 1, + "name": "ujbfgh", + "sell_point": "", + "brand_id": 0, + "brand_name": "vughij", + "market_price": 474, + "sales_price": 1, + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "sold_quantity": 1, + "quantity": 534, + "is_virtual": 0, + "fx_item_id": 0, + "status": 1, + "approve_status": 1, + "sort_order": 100, + "is_haitao": 0, + "is_recommend": 0, + "use_start_time": 0, + "use_end_time": 0, + "is_stars": 0, + "is_buy": null, + "is_collect": null + }, + { + "id": 3630, + "shop_id": 1, + "name": "惠尔顿 9个月-6岁宝宝安全座椅 汽车用车载婴儿童安全座椅 运动宝", + "sell_point": "", + "brand_id": 0, + "brand_name": "", + "market_price": 109900, + "sales_price": 78500, + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "sold_quantity": 0, + "quantity": 300, + "is_virtual": 0, + "fx_item_id": 1041, + "status": 1, + "approve_status": 1, + "sort_order": 100, + "is_haitao": 0, + "is_recommend": 0, + "use_start_time": 0, + "use_end_time": 0, + "is_stars": 0, + "is_buy": null, + "is_collect": null + }, + { + "id": 3568, + "shop_id": 1, + "name": "【行货】大王 GOO.N 纸尿裤S58片", + "sell_point": "", + "brand_id": 0, + "brand_name": "", + "market_price": 76000, + "sales_price": 62400, + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "sold_quantity": 0, + "quantity": 89, + "is_virtual": 0, + "fx_item_id": 1388, + "status": 1, + "approve_status": 1, + "sort_order": 100, + "is_haitao": 0, + "is_recommend": 0, + "use_start_time": 0, + "use_end_time": 0, + "is_stars": 0, + "is_buy": null, + "is_collect": null + }, + { + "id": 3567, + "shop_id": 1, + "name": "惠尔顿 婴儿安全座椅9个月-12岁车用宝宝车载儿童安全座椅 全能宝", + "sell_point": "", + "brand_id": 0, + "brand_name": "", + "market_price": 129900, + "sales_price": 92800, + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "sold_quantity": 0, + "quantity": 400, + "is_virtual": 0, + "fx_item_id": 1040, + "status": 1, + "approve_status": 1, + "sort_order": 100, + "is_haitao": 0, + "is_recommend": 0, + "use_start_time": 0, + "use_end_time": 0, + "is_stars": 0, + "is_buy": null, + "is_collect": null + }, + { + "id": 3566, + "shop_id": 1, + "name": "解放军", + "sell_point": "", + "brand_id": 0, + "brand_name": "基督教", + "market_price": 1, + "sales_price": 1, + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpgg", + "sold_quantity": 5, + "quantity": 85, + "is_virtual": 0, + "fx_item_id": 0, + "status": 1, + "approve_status": 1, + "sort_order": 100, + "is_haitao": 0, + "is_recommend": 0, + "use_start_time": 0, + "use_end_time": 0, + "is_stars": 0, + "is_buy": null, + "is_collect": null + }, + { + "id": 3564, + "shop_id": 1, + "name": "惠尔顿 儿童安全座椅 isofix汽车宝宝安全座椅3岁-12岁 茧之旅FIT", + "sell_point": "", + "brand_id": 0, + "brand_name": "", + "market_price": 102900, + "sales_price": 69300, + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "sold_quantity": 0, + "quantity": 400, + "is_virtual": 0, + "fx_item_id": 1038, + "status": 1, + "approve_status": 1, + "sort_order": 100, + "is_haitao": 0, + "is_recommend": 0, + "use_start_time": 0, + "use_end_time": 0, + "is_stars": 0, + "is_buy": null, + "is_collect": null + }, + { + "id": 3563, + "shop_id": 1, + "name": "2罐装保税区直发!澳洲爱他美Aptamil婴儿配方奶粉2段6~12M900g", + "sell_point": "", + "brand_id": 0, + "brand_name": "", + "market_price": 59000, + "sales_price": 56200, + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "sold_quantity": 0, + "quantity": 2039, + "is_virtual": 0, + "fx_item_id": 1024, + "status": 1, + "approve_status": 1, + "sort_order": 100, + "is_haitao": 0, + "is_recommend": 0, + "use_start_time": 0, + "use_end_time": 0, + "is_stars": 0, + "is_buy": null, + "is_collect": null + }, + { + "id": 3562, + "shop_id": 1, + "name": "2罐装保税区直发!澳洲爱他美Aptamil婴儿配方奶粉4段24M 900g", + "sell_point": "", + "brand_id": 0, + "brand_name": "", + "market_price": 56800, + "sales_price": 34800, + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "sold_quantity": 0, + "quantity": 2148, + "is_virtual": 0, + "fx_item_id": 1026, + "status": 1, + "approve_status": 1, + "sort_order": 100, + "is_haitao": 0, + "is_recommend": 0, + "use_start_time": 0, + "use_end_time": 0, + "is_stars": 0, + "is_buy": null, + "is_collect": null + } + ] + }, + "page": { + "totalCount": 93, + "pageCount": 12, + "currentPage": 1, + "perPage": 8 + }, + "mx_goods": null + }, + "code": 200, + "message": "OK", + "success": true + }, + "moreGoods": { + "data": { + "items": [ + { + "id": 3631, + "shop_id": 1, + "name": "ujbfgh", + "sell_point": "", + "brand_id": 0, + "brand_name": "vughij", + "market_price": 474, + "sales_price": 1, + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "sold_quantity": 1, + "quantity": 534, + "is_virtual": 0, + "fx_item_id": 0, + "status": 1, + "approve_status": 1, + "sort_order": 100, + "is_haitao": 0, + "is_recommend": 0, + "use_start_time": 0, + "use_end_time": 0, + "is_stars": 0, + "is_buy": null, + "is_collect": null + }, + { + "id": 3630, + "shop_id": 1, + "name": "惠尔顿 9个月-6岁宝宝安全座椅 汽车用车载婴儿童安全座椅 运动宝", + "sell_point": "", + "brand_id": 0, + "brand_name": "", + "market_price": 109900, + "sales_price": 78500, + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "sold_quantity": 0, + "quantity": 300, + "is_virtual": 0, + "fx_item_id": 1041, + "status": 1, + "approve_status": 1, + "sort_order": 100, + "is_haitao": 0, + "is_recommend": 0, + "use_start_time": 0, + "use_end_time": 0, + "is_stars": 0, + "is_buy": null, + "is_collect": null + }, + { + "id": 3568, + "shop_id": 1, + "name": "【行货】大王 GOO.N 纸尿裤S58片", + "sell_point": "", + "brand_id": 0, + "brand_name": "", + "market_price": 76000, + "sales_price": 62400, + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "sold_quantity": 0, + "quantity": 89, + "is_virtual": 0, + "fx_item_id": 1388, + "status": 1, + "approve_status": 1, + "sort_order": 100, + "is_haitao": 0, + "is_recommend": 0, + "use_start_time": 0, + "use_end_time": 0, + "is_stars": 0, + "is_buy": null, + "is_collect": null + }, + { + "id": 3567, + "shop_id": 1, + "name": "惠尔顿 婴儿安全座椅9个月-12岁车用宝宝车载儿童安全座椅 全能宝", + "sell_point": "", + "brand_id": 0, + "brand_name": "", + "market_price": 129900, + "sales_price": 92800, + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "sold_quantity": 0, + "quantity": 400, + "is_virtual": 0, + "fx_item_id": 1040, + "status": 1, + "approve_status": 1, + "sort_order": 100, + "is_haitao": 0, + "is_recommend": 0, + "use_start_time": 0, + "use_end_time": 0, + "is_stars": 0, + "is_buy": null, + "is_collect": null + }, + { + "id": 3566, + "shop_id": 1, + "name": "解放军", + "sell_point": "", + "brand_id": 0, + "brand_name": "基督教", + "market_price": 1, + "sales_price": 1, + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpgg", + "sold_quantity": 5, + "quantity": 85, + "is_virtual": 0, + "fx_item_id": 0, + "status": 1, + "approve_status": 1, + "sort_order": 100, + "is_haitao": 0, + "is_recommend": 0, + "use_start_time": 0, + "use_end_time": 0, + "is_stars": 0, + "is_buy": null, + "is_collect": null + }, + { + "id": 3564, + "shop_id": 1, + "name": "惠尔顿 儿童安全座椅 isofix汽车宝宝安全座椅3岁-12岁 茧之旅FIT", + "sell_point": "", + "brand_id": 0, + "brand_name": "", + "market_price": 102900, + "sales_price": 69300, + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "sold_quantity": 0, + "quantity": 400, + "is_virtual": 0, + "fx_item_id": 1038, + "status": 1, + "approve_status": 1, + "sort_order": 100, + "is_haitao": 0, + "is_recommend": 0, + "use_start_time": 0, + "use_end_time": 0, + "is_stars": 0, + "is_buy": null, + "is_collect": null + }, + { + "id": 3563, + "shop_id": 1, + "name": "2罐装保税区直发!澳洲爱他美Aptamil婴儿配方奶粉2段6~12M900g", + "sell_point": "", + "brand_id": 0, + "brand_name": "", + "market_price": 59000, + "sales_price": 56200, + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "sold_quantity": 0, + "quantity": 2039, + "is_virtual": 0, + "fx_item_id": 1024, + "status": 1, + "approve_status": 1, + "sort_order": 100, + "is_haitao": 0, + "is_recommend": 0, + "use_start_time": 0, + "use_end_time": 0, + "is_stars": 0, + "is_buy": null, + "is_collect": null + }, + { + "id": 3562, + "shop_id": 1, + "name": "2罐装保税区直发!澳洲爱他美Aptamil婴儿配方奶粉4段24M 900g", + "sell_point": "", + "brand_id": 0, + "brand_name": "", + "market_price": 56800, + "sales_price": 34800, + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "sold_quantity": 0, + "quantity": 2148, + "is_virtual": 0, + "fx_item_id": 1026, + "status": 1, + "approve_status": 1, + "sort_order": 100, + "is_haitao": 0, + "is_recommend": 0, + "use_start_time": 0, + "use_end_time": 0, + "is_stars": 0, + "is_buy": null, + "is_collect": null + } + ], + "page": { + "totalCount": 38, + "pageCount": 5, + "currentPage": 1, + "perPage": 8 + } + }, + "code": 200, + "message": "OK", + "success": true + }, + "category": { + "data": [ + { + "id": 697, + "shop_id": 1, + "parent_id": 0, + "name": "小小分", + "pic_url": "", + "is_parent": 1, + "sort_order": 100, + "status": 1, + "created_at": 1515045329, + "updated_at": 1515045329, + "children": [ + { + "id": 699, + "shop_id": 1, + "parent_id": 697, + "name": "猫咪", + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "is_parent": 0, + "sort_order": 100, + "status": 1, + "created_at": 1515045344, + "updated_at": 1515045344 + }, + { + "id": 899, + "shop_id": 1, + "parent_id": 697, + "name": "猫咪2", + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "is_parent": 0, + "sort_order": 100, + "status": 1, + "created_at": 1515045344, + "updated_at": 1515045344 + } + ] + }, + { + "id": 0, + "shop_id": 1, + "parent_id": 0, + "name": "其它", + "pic_url": "", + "is_parent": 1, + "sort_order": 100, + "status": 1 + } + ], + "code": 200, + "message": "OK", + "success": true + }, + "goods": { + "data": { + "items": [ + { + "id": 3568, + "shop_id": 1, + "name": "【行货】大王 GOO.N 纸尿裤S58片", + "sell_point": "", + "brand_id": 0, + "brand_name": "", + "market_price": 76000, + "sales_price": 62400, + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "sold_quantity": 0, + "quantity": 89, + "is_virtual": 0, + "fx_item_id": 1388, + "status": 1, + "approve_status": 1, + "sort_order": 100, + "is_haitao": 0, + "is_recommend": 0, + "use_start_time": 0, + "use_end_time": 0, + "is_stars": 0, + "is_buy": null, + "is_collect": null + } + ], + "page": { + "totalCount": 1, + "pageCount": 1, + "currentPage": 1, + "perPage": 8 + } + }, + "code": 200, + "message": "OK", + "success": true + }, + "details": { + "data": { + "id": 3568, + "user_id": 758, + "shop_id": 1, + "product_id": 0, + "name": "【行货】大王 GOO.N 纸尿裤S58片", + "sell_point": "", + "shop_cids": "699", + "cid": 59, + "cat_name": "", + "brand_id": 0, + "brand_name": "", + "key_props": "1001:1007;3413:2711;", + "key_props_str": "品牌:GOON大王天使;纸尿裤尺码:S58;", + "props": "1001:1007;3413:2711;", + "props_str": "品牌:GOON大王天使;纸尿裤尺码:S58;", + "input_pids": "", + "input_str": "", + "market_price": 76000, + "sales_price": 62400, + "purchase_price": 48000, + "weight": "0.000", + "bulk": "0.000", + "pic_url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg", + "withhold_quantity": 0, + "sold_quantity": 0, + "quantity": 89, + "sub_stock": 1, + "tax_rate": "0.000", + "is_virtual": 0, + "is_free_shipping": 0, + "is_fenxiao": 1, + "fx_item_id": 1388, + "fx_profit": 14400, + "min_profit": 14400, + "max_profit": 14400, + "postage_id": 1, + "province": "", + "city": "", + "has_sku": 0, + "outer_id": "", + "barcode": "", + "status": 1, + "approve_status": 1, + "sort_order": 100, + "mop_product_id": 63, + "features": "", + "version": 0, + "start_sale_time": 0, + "created_at": 1510045090, + "updated_at": 1510045090, + "is_haitao": 0, + "is_recommend": 0, + "recommend_time": 0, + "is_zhuan": 0, + "miao_id": 0, + "use_start_time": 0, + "use_end_time": 0, + "video_id": 0, + "is_stars": 0, + "max_price": 0, + "one_grate": 0, + "two_grate": 0, + "is_buy": null, + "is_collect": 0, + "ship_address": { + "city": "杭州市", + "city_code": "330100" + }, + "attention_matters": null, + "postage_name": null, + "desc": "\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"", + "skus": [], + "prop_imgs": [], + "item_imgs": [ + { + "url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg" + } + ], + "video_url": "" + }, + "code": 200, + "message": "OK", + "success": true + }, + "address": { + "data": [ + { + "id": "119", + "user_id": "448907", + "consignee": "2222", + "id_card": "", + "province": "130000", + "city": "130400", + "district": "130406", + "town": "", + "area_name": "河北省 邯郸市 峰峰矿区", + "address": "dsdsadsad", + "zip_code": "12323", + "mobile": "13454193338", + "telphone": "", + "created_at": "1506315000", + "updated_at": "1506315000" + }, + { + "id": "127", + "user_id": "448907", + "consignee": "薛大大下单", + "id_card": "", + "province": "110000", + "city": "110100", + "district": "110101", + "town": "", + "area_name": "北京市 北京市 东城区", + "address": "警察局就拒绝感觉", + "zip_code": "000000", + "mobile": "18758871254", + "telphone": "", + "created_at": "1506395556", + "updated_at": "1506395556" + }, + { + "id": "123", + "user_id": "448907", + "consignee": "测试", + "id_card": "", + "province": "130000", + "city": "130100", + "district": "130102", + "town": "", + "area_name": "河北省 石家庄市 长安区", + "address": "水电费缴纳可劲儿放暑假", + "zip_code": "1111", + "mobile": "13323456789", + "telphone": "", + "created_at": "1506320538", + "updated_at": "1506320538" + }, + { + "id": "121", + "user_id": "448907", + "consignee": "sdsds", + "id_card": "", + "province": "140000", + "city": "140200", + "district": "140211", + "town": "", + "area_name": "山西省 大同市 南郊区", + "address": "22222", + "zip_code": "1233", + "mobile": "13454193338", + "telphone": "", + "created_at": "1506315889", + "updated_at": "1506315889" + }, + { + "id": "93", + "user_id": "448907", + "consignee": "大屏", + "id_card": "", + "province": "330000", + "city": "330100", + "district": "330106", + "town": "", + "area_name": "浙江省 杭州市 西湖区", + "address": "测试收啊啊啊啊啊啊", + "zip_code": "", + "mobile": "13312341234", + "telphone": "", + "created_at": "1505875313", + "updated_at": "1505875313" + }, + { + "id": "91", + "user_id": "448907", + "consignee": "萨达是", + "id_card": "", + "province": "120000", + "city": "120100", + "district": "120102", + "town": "", + "area_name": "天津 天津市 河东区", + "address": "实打实的撒的", + "zip_code": "123456", + "mobile": "13454193338", + "telphone": "", + "created_at": "1505820391", + "updated_at": "1505820391" + } + ], + "code": 200, + "message": "OK", + "success": true + }, + "address-default": { + "data": { + "id": "119", + "user_id": "448907", + "consignee": "2222", + "id_card": "", + "province": "130000", + "city": "130400", + "district": "130406", + "town": "", + "area_name": "河北省 邯郸市 峰峰矿区", + "address": "dsdsadsad", + "zip_code": "12323", + "mobile": "13454193338", + "telphone": "", + "created_at": "1506315000", + "updated_at": "1506315000" + }, + "code": 200, + "message": "OK", + "success": true + }, + "user-login": { + "data": { + "user_id": 448907, + "access_token": "hA-QA97BBuPFgDv9Eht8z2JFxDq-6cLQ", + "mobile": "13454193330", + "madian_token": "3Uu9q0RRx56IQlFTKBIYIzVjYTUyNWY5MDU4YzE2YjgyYTE1Y2ZhYmM3MWY2N2MwNzM1ZTJjOTFjNTYxODllZWQ4NWEwMGVkZTNkNzE3ZTfV\/eHskiAmLo1oMBrx1nmfN6RylF3VjMe+nrFt38WcmiGcyyZZK1tsq4OaNWiisbQpIuk5h9JhVOgO0aPffBwR\/VBNpwkTDPpzA6xECv4LAQ==" + }, + "code": 200, + "message": "OK", + "success": true + }, + "user-profile": { + "data": { + "user_id": "448907", + "nick_name": "11", + "gender": "1", + "birthday": "1508198400", + "avatar": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1528870575654&di=be72a93643dfff4162c32d70166ddfe4&imgtype=0&src=http%3A%2F%2Fg.hiphotos.baidu.com%2Fzhidao%2Fwh%253D450%252C600%2Fsign%3D67a7d1f0b551f819f1700b4eef8466db%2Ff9dcd100baa1cd112c3e25fbbc12c8fcc2ce2d64.jpg", + "province": "430000", + "city": "431200", + "district": "", + "area_name": "", + "default_address_id": "259", + "level": "1", + "background_image": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1528870451130&di=053a495c9c4a83c5f669d49032666acb&imgtype=0&src=http%3A%2F%2Fi1.hdslb.com%2Fbfs%2Farchive%2Fd7cf587340b13c7b17a22d478fcd68a998fbbefa.png", + "exp": "50", + "login_time": "1516765163", + "login_ip": "2130706433", + "created_at": "1501763730", + "updated_at": "1516765163", + "mobile": "123456789" + }, + "code": 200, + "message": "OK", + "success": true + }, + "shop-info": { + "data": { + "id": "1", + "user_id": "758", + "shop_id": "1", + "shop_name": "\u6b27\u4e09\u4e0d\u6c5f\u4e8c\u8def\u5e971", + "branch_name": "\u6c5f\u4e8c\u8def\u5e97", + "shop_qrcode": "http:\/\/moresing-v3.img-cn-shanghai.aliyuncs.com\/201612\/L32tMbF1PUiy40A9.png", + "avatar": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/20171201\/ZcawdYtnn3.jpg", + "banner": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/android\/201711\/6ebfc6b423caa4db6e3c8a91997210b7.JPEG", + "notice": "1212412", + "contact": "13370140905", + "wechat_id": "99999", + "qr_code": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/android\/201711\/607bde41c4c2e540d7f57b47f65c3748.JPEG", + "hash_code": "85f3952d8af25eec1fc533d77b6bdb29", + "item_limit": "2", + "status": "1", + "created_at": "1481964080", + "updated_at": "1516673113", + "province": "110000", + "city": "110100", + "district": "110101", + "area_name": "\u5317\u4eac,\u5317\u4eac\u5e02,\u4e1c\u57ce\u533a", + "address": "\u897f\u5b89\u8def100\u53f7", + "lng": "38.911251220094", + "lat": "121.60083184468", + "is_partner": 0, + "shop_status": 10, + "city_name": "\u5317\u4eac\u5e02" + }, + "code": 200, + "message": "OK", + "success": true + }, + "order-list": { + "data": { + "items": [{ + "id": "MD2018012300001228", + "status": 20, + "post_fee": 0, + "total_fee": 5, + "is_can_reminder": true, + "orderItems": [{ + "id": "MD2018012300001291", + "order_id": "MD2018012300001228", + "item_id": 1849, + "sku_id": "", + "price": 5, + "quantity": 1, + "item_name": "\u4fdd\u7a0e\u533a\uff01Merries\u82b1\u738b\u7eb8\u5c3f\u88e4NB90", + "pic_url": "http:\/\/moresing-v3.img-cn-shanghai.aliyuncs.com\/201611\/JDzsAMR8736tpgfe.jpg", + "sku_props_str": "", + "tax_fee": 0, + "discount_fee": 0, + "total_fee": 5, + "start_time": 0, + "end_time": 0, + "status": 20, + "refund_id": 0, + "refund_status": 0 + }] + }, { + "id": "MD2018012200001216", + "status": 30, + "post_fee": 0, + "total_fee": 1, + "is_can_reminder": false, + "orderItems": [{ + "id": "MD2018012200001279", + "order_id": "MD2018012200001216", + "item_id": 3566, + "sku_id": "", + "price": 1, + "quantity": 1, + "item_name": "\u89e3\u653e\u519b", + "pic_url": "http:\/\/moresing-v3.img-cn-shanghai.aliyuncs.com\/201711\/15100451141371822.jpg", + "sku_props_str": "", + "tax_fee": 0, + "discount_fee": 0, + "total_fee": 1, + "start_time": 0, + "end_time": 0, + "status": 30, + "refund_id": 191, + "refund_status": 10 + }] + }, { + "id": "MD2018012200001207", + "status": 20, + "post_fee": 1, + "total_fee": 6, + "is_can_reminder": true, + "orderItems": [{ + "id": "MD2018012200001269", + "order_id": "MD2018012200001207", + "item_id": 3631, + "sku_id": "", + "price": 5, + "quantity": 1, + "item_name": "ujbfgh", + "pic_url": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/android\/201711\/ff9e85124638b593212148aad47c893b.JPEG", + "sku_props_str": "", + "tax_fee": 0, + "discount_fee": 0, + "total_fee": 5, + "start_time": 0, + "end_time": 0, + "status": 20, + "refund_id": 175, + "refund_status": 10 + }] + }, { + "id": "MD2018012200001205", + "status": 20, + "post_fee": 1, + "total_fee": 6, + "is_can_reminder": true, + "orderItems": [{ + "id": "MD2018012200001267", + "order_id": "MD2018012200001205", + "item_id": 3631, + "sku_id": "", + "price": 5, + "quantity": 1, + "item_name": "ujbfgh", + "pic_url": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/android\/201711\/ff9e85124638b593212148aad47c893b.JPEG", + "sku_props_str": "", + "tax_fee": 0, + "discount_fee": 0, + "total_fee": 5, + "start_time": 0, + "end_time": 0, + "status": 20, + "refund_id": 173, + "refund_status": 10 + }] + }, { + "id": "MD2018012200001204", + "status": 20, + "post_fee": 1, + "total_fee": 6, + "is_can_reminder": true, + "orderItems": [{ + "id": "MD2018012200001266", + "order_id": "MD2018012200001204", + "item_id": 3631, + "sku_id": "", + "price": 5, + "quantity": 1, + "item_name": "ujbfgh", + "pic_url": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/android\/201711\/ff9e85124638b593212148aad47c893b.JPEG", + "sku_props_str": "", + "tax_fee": 0, + "discount_fee": 0, + "total_fee": 5, + "start_time": 0, + "end_time": 0, + "status": 20, + "refund_id": 171, + "refund_status": 10 + }] + }, { + "id": "MD2018012200001203", + "status": 20, + "post_fee": 1, + "total_fee": 6, + "is_can_reminder": true, + "orderItems": [{ + "id": "MD2018012200001265", + "order_id": "MD2018012200001203", + "item_id": 3631, + "sku_id": "", + "price": 5, + "quantity": 1, + "item_name": "ujbfgh", + "pic_url": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/android\/201711\/ff9e85124638b593212148aad47c893b.JPEG", + "sku_props_str": "", + "tax_fee": 0, + "discount_fee": 0, + "total_fee": 5, + "start_time": 0, + "end_time": 0, + "status": 20, + "refund_id": 169, + "refund_status": 10 + }] + }, { + "id": "MD2018012200001202", + "status": 20, + "post_fee": 1, + "total_fee": 6, + "is_can_reminder": true, + "orderItems": [{ + "id": "MD2018012200001264", + "order_id": "MD2018012200001202", + "item_id": 3631, + "sku_id": "", + "price": 5, + "quantity": 1, + "item_name": "ujbfgh", + "pic_url": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/android\/201711\/ff9e85124638b593212148aad47c893b.JPEG", + "sku_props_str": "", + "tax_fee": 0, + "discount_fee": 0, + "total_fee": 5, + "start_time": 0, + "end_time": 0, + "status": 20, + "refund_id": 167, + "refund_status": 10 + }] + }, { + "id": "MD2018012200001201", + "status": 20, + "post_fee": 1, + "total_fee": 6, + "is_can_reminder": true, + "orderItems": [{ + "id": "MD2018012200001263", + "order_id": "MD2018012200001201", + "item_id": 3631, + "sku_id": "", + "price": 5, + "quantity": 1, + "item_name": "ujbfgh", + "pic_url": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/android\/201711\/ff9e85124638b593212148aad47c893b.JPEG", + "sku_props_str": "", + "tax_fee": 0, + "discount_fee": 0, + "total_fee": 5, + "start_time": 0, + "end_time": 0, + "status": 20, + "refund_id": 165, + "refund_status": 10 + }] + }], + "page": { + "totalCount": 65, + "pageCount": 9, + "currentPage": 1, + "perPage": 8 + } + }, + "code": 200, + "message": "OK", + "success": true + }, + "electronic-list": { + "data": { + "items": [{ + "id": "MD2018022600001480", + "status": 10, + "total_fee": 1, + "serviceItems": [{ + "id": "MD2018022600001589", + "order_id": "MD2018022600001480", + "item_id": 3689, + "sku_id": "", + "price": 1, + "quantity": 1, + "item_name": "\u9897\u7c92\u5242\u963f\u8428\u5fb7\u8def\u53e3\u9644\u8fd1\u963f\u5580\u7409\u65af\u4f4e\u4ef7\u623f", + "pic_url": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/user\/1000597\/m5k6GmMZKT.jpg", + "sku_props_str": "", + "total_fee": 1, + "start_time": 1513069200, + "end_time": 1525845401, + "status": 10 + }] + }], + "page": { + "totalCount": 1, + "pageCount": 1, + "currentPage": 1, + "perPage": 8 + } + }, + "code": 200, + "message": "OK", + "success": true + }, + "refund-list": { + "data": { + "items": [{ + "id": 205, + "order_id": "MD2018011600001107", + "apply_refund_fee": 12, + "status": 60, + "orderItem": { + "id": "MD2018011600001131", + "price": 7, + "quantity": 2, + "item_id": 1849, + "item_name": "\u4fdd\u7a0e\u533a\uff01Merries\u82b1\u738b\u7eb8\u5c3f\u88e4NB90", + "pic_url": "http:\/\/moresing-v3.img-cn-shanghai.aliyuncs.com\/201611\/JDzsAMR8736tpgfe.jpg", + "sku_props_str": "", + "total_fee": 14, + "payment": 12 + } + }, { + "id": 201, + "order_id": "MD2018011500001084", + "apply_refund_fee": 1, + "status": 60, + "orderItem": { + "id": "MD2018011500001108", + "price": 1, + "quantity": 1, + "item_id": 3631, + "item_name": "ujbfgh", + "pic_url": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/android\/201711\/ff9e85124638b593212148aad47c893b.JPEG", + "sku_props_str": "", + "total_fee": 1, + "payment": 1 + } + }, { + "id": 191, + "order_id": "MD2018012200001216", + "apply_refund_fee": 1, + "status": 60, + "orderItem": { + "id": "MD2018012200001279", + "price": 1, + "quantity": 1, + "item_id": 3566, + "item_name": "\u89e3\u653e\u519b", + "pic_url": "http:\/\/moresing-v3.img-cn-shanghai.aliyuncs.com\/201711\/15100451141371822.jpg", + "sku_props_str": "", + "total_fee": 1, + "payment": 1 + } + }, { + "id": 101, + "order_id": "MD2018012200001216", + "apply_refund_fee": 1, + "status": 60, + "orderItem": { + "id": "MD2018012200001279", + "price": 1, + "quantity": 1, + "item_id": 3566, + "item_name": "\u89e3\u653e\u519b", + "pic_url": "http:\/\/moresing-v3.img-cn-shanghai.aliyuncs.com\/201711\/15100451141371822.jpg", + "sku_props_str": "", + "total_fee": 1, + "payment": 1 + } + }, { + "id": 105, + "order_id": "MD2018012200001216", + "apply_refund_fee": 1, + "status": 60, + "orderItem": { + "id": "MD2018012200001279", + "price": 1, + "quantity": 1, + "item_id": 3566, + "item_name": "\u89e3\u653e\u519b", + "pic_url": "http:\/\/moresing-v3.img-cn-shanghai.aliyuncs.com\/201711\/15100451141371822.jpg", + "sku_props_str": "", + "total_fee": 1, + "payment": 1 + } + }, { + "id": 112, + "order_id": "MD2018012200001216", + "apply_refund_fee": 1, + "status": 60, + "orderItem": { + "id": "MD2018012200001279", + "price": 1, + "quantity": 1, + "item_id": 3566, + "item_name": "\u89e3\u653e\u519b", + "pic_url": "http:\/\/moresing-v3.img-cn-shanghai.aliyuncs.com\/201711\/15100451141371822.jpg", + "sku_props_str": "", + "total_fee": 1, + "payment": 1 + } + }], + "page": { + "totalCount": 10, + "pageCount": 2, + "currentPage": 1, + "perPage": 8 + } + }, + "code": 200, + "message": "OK", + "success": true + } + +} diff --git a/litemall-vue/mock/route.json b/litemall-vue/mock/route.json new file mode 100644 index 00000000..e69de29b diff --git a/litemall-vue/package-lock.json b/litemall-vue/package-lock.json new file mode 100644 index 00000000..7935d332 --- /dev/null +++ b/litemall-vue/package-lock.json @@ -0,0 +1,13570 @@ +{ + "name": "vant--mobile-mall", + "version": "0.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.0.0-beta.47.tgz", + "integrity": "sha1-0YwvTEuo0JOivPq1YWWTv+JEGic=", + "dev": true, + "requires": { + "@babel/highlight": "7.0.0-beta.47" + } + }, + "@babel/core": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/core/download/@babel/core-7.0.0-beta.47.tgz", + "integrity": "sha1-ucFk+5oeEIPwZ8I2qdoden11knE=", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.47", + "@babel/generator": "7.0.0-beta.47", + "@babel/helpers": "7.0.0-beta.47", + "@babel/template": "7.0.0-beta.47", + "@babel/traverse": "7.0.0-beta.47", + "@babel/types": "7.0.0-beta.47", + "babylon": "7.0.0-beta.47", + "convert-source-map": "1.6.0", + "debug": "3.2.6", + "json5": "0.5.1", + "lodash": "4.17.11", + "micromatch": "2.3.11", + "resolve": "1.8.1", + "semver": "5.6.0", + "source-map": "0.5.7" + } + }, + "@babel/generator": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.0.0-beta.47.tgz", + "integrity": "sha1-GDVwnzd8xNKkr/7m2SWKELvzudE=", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.47", + "jsesc": "2.5.1", + "lodash": "4.17.11", + "source-map": "0.5.7", + "trim-right": "1.0.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.0.0-beta.47.tgz", + "integrity": "sha1-NU+1lgVdnbNpIRvwdfDV6TkE1vY=", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.47" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.0.0-beta.47.tgz", + "integrity": "sha1-1ZF8Ke49aKvCxy9gS8BD9uBW6Qc=", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "7.0.0-beta.47", + "@babel/types": "7.0.0-beta.47" + } + }, + "@babel/helper-call-delegate": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/helper-call-delegate/download/@babel/helper-call-delegate-7.0.0-beta.47.tgz", + "integrity": "sha1-lreAQ5cHX3IqQDDTh29R7BnYgps=", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "7.0.0-beta.47", + "@babel/traverse": "7.0.0-beta.47", + "@babel/types": "7.0.0-beta.47" + } + }, + "@babel/helper-define-map": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/helper-define-map/download/@babel/helper-define-map-7.0.0-beta.47.tgz", + "integrity": "sha1-Q6ne+HxRZtwpYw1Rs9qcxDIMExw=", + "dev": true, + "requires": { + "@babel/helper-function-name": "7.0.0-beta.47", + "@babel/types": "7.0.0-beta.47", + "lodash": "4.17.11" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.0.0-beta.47.tgz", + "integrity": "sha1-VraI4oKmmPTRzxNUU6Ea6K+HChk=", + "dev": true, + "requires": { + "@babel/traverse": "7.0.0-beta.47", + "@babel/types": "7.0.0-beta.47" + } + }, + "@babel/helper-function-name": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.0.0-beta.47.tgz", + "integrity": "sha1-gFfWPpUehcV8As3+Va12CNc/+30=", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "7.0.0-beta.47", + "@babel/template": "7.0.0-beta.47", + "@babel/types": "7.0.0-beta.47" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.0.0-beta.47.tgz", + "integrity": "sha1-LeBPl8FLCUtViZ0/qDFEoW0gdRA=", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.47" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.0.0-beta.47.tgz", + "integrity": "sha1-zildHXI/4isoIOrsdI7XAapa49A=", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.47" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.0.0-beta.47.tgz", + "integrity": "sha1-Nb/PHRbc5IHvPexm1aGuan2Au0U=", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.47" + } + }, + "@babel/helper-module-imports": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.0.0-beta.47.tgz", + "integrity": "sha1-WvByAp/8++zm/7r12ZhMdVgPPwQ=", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.47", + "lodash": "4.17.11" + } + }, + "@babel/helper-module-transforms": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.0.0-beta.47.tgz", + "integrity": "sha1-fv+R/JaHO9e42BZpjxppu8AfPDg=", + "dev": true, + "requires": { + "@babel/helper-module-imports": "7.0.0-beta.47", + "@babel/helper-simple-access": "7.0.0-beta.47", + "@babel/helper-split-export-declaration": "7.0.0-beta.47", + "@babel/template": "7.0.0-beta.47", + "@babel/types": "7.0.0-beta.47", + "lodash": "4.17.11" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.0.0-beta.47.tgz", + "integrity": "sha1-CF2GTQYTxYE8G3xxthvqNvGVkp4=", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.47" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.0.0-beta.47.tgz", + "integrity": "sha1-T1ZBF+w5+Wz2D6/N41yd3ODgCP0=", + "dev": true + }, + "@babel/helper-regex": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/helper-regex/download/@babel/helper-regex-7.0.0-beta.47.tgz", + "integrity": "sha1-uOO1MTLE7bsEgEJCwC/+TWAxaXE=", + "dev": true, + "requires": { + "lodash": "4.17.11" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.0.0-beta.47.tgz", + "integrity": "sha1-RE3DYvYUcL1hp0Xrs2RDHZyhhsI=", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "7.0.0-beta.47", + "@babel/helper-wrap-function": "7.0.0-beta.47", + "@babel/template": "7.0.0-beta.47", + "@babel/traverse": "7.0.0-beta.47", + "@babel/types": "7.0.0-beta.47" + } + }, + "@babel/helper-replace-supers": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.0.0-beta.47.tgz", + "integrity": "sha1-MQsgajAoaKeStllFXOuifbaGy7c=", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "7.0.0-beta.47", + "@babel/helper-optimise-call-expression": "7.0.0-beta.47", + "@babel/traverse": "7.0.0-beta.47", + "@babel/types": "7.0.0-beta.47" + } + }, + "@babel/helper-simple-access": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.0.0-beta.47.tgz", + "integrity": "sha1-I011SsvaklGhDbaX71AYHqsSUEI=", + "dev": true, + "requires": { + "@babel/template": "7.0.0-beta.47", + "@babel/types": "7.0.0-beta.47", + "lodash": "4.17.11" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.0.0-beta.47.tgz", + "integrity": "sha1-4RJ3hVRy2Ng7ryLy0BhsSiBZsJo=", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.47" + } + }, + "@babel/helper-wrap-function": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.0.0-beta.47.tgz", + "integrity": "sha1-ZSi0SjzLTzrut5rdCogZL364EWE=", + "dev": true, + "requires": { + "@babel/helper-function-name": "7.0.0-beta.47", + "@babel/template": "7.0.0-beta.47", + "@babel/traverse": "7.0.0-beta.47", + "@babel/types": "7.0.0-beta.47" + } + }, + "@babel/helpers": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.0.0-beta.47.tgz", + "integrity": "sha1-+bQu0uTV917A+y55LBc+RR6NQP0=", + "dev": true, + "requires": { + "@babel/template": "7.0.0-beta.47", + "@babel/traverse": "7.0.0-beta.47", + "@babel/types": "7.0.0-beta.47" + } + }, + "@babel/highlight": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.0.0-beta.47.tgz", + "integrity": "sha1-j7yD+yoh8L0rlc2+sjjPlonK1JQ=", + "dev": true, + "requires": { + "chalk": "2.4.1", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.0.0-beta.47.tgz", + "integrity": "sha1-VxFCKEcIxa1OyQTZqnBUYaAQvlM=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47", + "@babel/helper-remap-async-to-generator": "7.0.0-beta.47", + "@babel/plugin-syntax-async-generators": "7.0.0-beta.47" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.0.0-beta.47.tgz", + "integrity": "sha1-CMGh38ktD1w3s5CWxvuIPhyksPU=", + "dev": true, + "requires": { + "@babel/helper-function-name": "7.0.0-beta.47", + "@babel/helper-plugin-utils": "7.0.0-beta.47", + "@babel/helper-replace-supers": "7.0.0-beta.47", + "@babel/plugin-syntax-class-properties": "7.0.0-beta.47" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-decorators/download/@babel/plugin-proposal-decorators-7.0.0-beta.47.tgz", + "integrity": "sha1-XolDyPjrMwH5Ee8NzT7WTPKMcj4=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47", + "@babel/plugin-syntax-decorators": "7.0.0-beta.47" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.0.0-beta.47.tgz", + "integrity": "sha1-4VKf3ciOlIho7h0O2qJ+vZUCMi0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47", + "@babel/plugin-syntax-object-rest-spread": "7.0.0-beta.47" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.0.0-beta.47.tgz", + "integrity": "sha1-jGRTkZU3UX6nc7uPP87aQlB5Xvo=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47", + "@babel/plugin-syntax-optional-catch-binding": "7.0.0-beta.47" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.0.0-beta.47.tgz", + "integrity": "sha1-NNfkgRvcT1EkALsp0BBRhCUoyNU=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47", + "@babel/helper-regex": "7.0.0-beta.47", + "regexpu-core": "4.2.0" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.0.0-beta.47.tgz", + "integrity": "sha1-irlIUr80i63IZq+FvYUiIfCWElY=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.0.0-beta.47.tgz", + "integrity": "sha1-3lK+0S/UcshI4VYvV91KIC/ifxE=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-decorators/download/@babel/plugin-syntax-decorators-7.0.0-beta.47.tgz", + "integrity": "sha1-pC8Q/NZRlAvEddk7OsI0MrSoopM=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.0.0-beta.47.tgz", + "integrity": "sha1-7pZJFQFKaHcB7o4VwonjGnyJnmA=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.0.0-beta.47.tgz", + "integrity": "sha1-84SdlCiGldckvSBbT2w8meTsJKQ=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.0.0-beta.47.tgz", + "integrity": "sha1-IdpRTZTBOLImHKCfDeyautzhYYU=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.0.0-beta.47.tgz", + "integrity": "sha1-CxxSsGaqNok8QUUHc6WtuQTNQCQ=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.0.0-beta.47.tgz", + "integrity": "sha1-1u7NpMZSuQnjCI8Jg+uvjsKSmEs=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.0.0-beta.47.tgz", + "integrity": "sha1-VyOBbqHpH6MTqE5u6cwS/zHUZhA=", + "dev": true, + "requires": { + "@babel/helper-module-imports": "7.0.0-beta.47", + "@babel/helper-plugin-utils": "7.0.0-beta.47", + "@babel/helper-remap-async-to-generator": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.0.0-beta.47.tgz", + "integrity": "sha1-5CInjgbHl7Q8RfRZ2Dx6+dYjcAI=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.0.0-beta.47.tgz", + "integrity": "sha1-tzfMWKgb6lfv1b2guu+aQ6JYWa0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47", + "lodash": "4.17.11" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.0.0-beta.47.tgz", + "integrity": "sha1-ev+cvnsm/ZTXqfl/qQE17yDJP7Y=", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "7.0.0-beta.47", + "@babel/helper-define-map": "7.0.0-beta.47", + "@babel/helper-function-name": "7.0.0-beta.47", + "@babel/helper-optimise-call-expression": "7.0.0-beta.47", + "@babel/helper-plugin-utils": "7.0.0-beta.47", + "@babel/helper-replace-supers": "7.0.0-beta.47", + "@babel/helper-split-export-declaration": "7.0.0-beta.47", + "globals": "11.8.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.0.0-beta.47.tgz", + "integrity": "sha1-Vu8qAhdporZekKPhL9ELeR2p8+A=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.0.0-beta.47.tgz", + "integrity": "sha1-RStgd3X9HE0QYhmXg3GJ78Cm1Cg=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.0.0-beta.47.tgz", + "integrity": "sha1-2NqbcG1L/GjeydVlZh+D5ugDZjY=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47", + "@babel/helper-regex": "7.0.0-beta.47", + "regexpu-core": "4.2.0" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.0.0-beta.47.tgz", + "integrity": "sha1-SqvtoFHKMAfjOiB9sI8aDPm9JTs=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.0.0-beta.47.tgz", + "integrity": "sha1-kw4av1259NtbY9v5fzWBrQvh6Qc=", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "7.0.0-beta.47", + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.0.0-beta.47.tgz", + "integrity": "sha1-Un1dwk5KStD8HQo5kNKZaMuYTnY=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.0.0-beta.47.tgz", + "integrity": "sha1-+0Q8gcx38yBqhjtzCzXIxVPOUEE=", + "dev": true, + "requires": { + "@babel/helper-function-name": "7.0.0-beta.47", + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.0.0-beta.47.tgz", + "integrity": "sha1-RI+tGW8GIWNoSjjxDxToMxWJLpw=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.0.0-beta.47.tgz", + "integrity": "sha1-hFZEGbEcG+a5/NTHs6ZzfyM1qsQ=", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "7.0.0-beta.47", + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.0.0-beta.47.tgz", + "integrity": "sha1-3+XG2GeqlhTlX3YWc2Bz7bOquIc=", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "7.0.0-beta.47", + "@babel/helper-plugin-utils": "7.0.0-beta.47", + "@babel/helper-simple-access": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.0.0-beta.47.tgz", + "integrity": "sha1-hRTbzfyjNFq9aQBZ5+hUThbsvwU=", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "7.0.0-beta.47", + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.0.0-beta.47.tgz", + "integrity": "sha1-bc+5Zh/dExsgtyEER0anowmIKRg=", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "7.0.0-beta.47", + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.0.0-beta.47.tgz", + "integrity": "sha1-S1y3zjDXv/oQWh9D7QfWriBqQVU=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.0.0-beta.47.tgz", + "integrity": "sha1-yo5fMmxQEch586btdJ5YvRD/8F0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47", + "@babel/helper-replace-supers": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.0.0-beta.47.tgz", + "integrity": "sha1-RqQjYECmVSpfFl+z3dYDaJVLDd0=", + "dev": true, + "requires": { + "@babel/helper-call-delegate": "7.0.0-beta.47", + "@babel/helper-get-function-arity": "7.0.0-beta.47", + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.0.0-beta.47.tgz", + "integrity": "sha1-hlAOHEBAVfuY/IK3Owm9BTystRY=", + "dev": true, + "requires": { + "regenerator-transform": "0.12.4" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.0.0-beta.47.tgz", + "integrity": "sha1-FwCTj6hxCQnL8o9905+bQGiLCf0=", + "dev": true, + "requires": { + "@babel/helper-module-imports": "7.0.0-beta.47", + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.0.0-beta.47.tgz", + "integrity": "sha1-AL5ExPrY/iwA7RjqFeo8iN1Rnbs=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.0.0-beta.47.tgz", + "integrity": "sha1-P+rbAiku0em3UJDWUbnfiKerXFA=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.0.0-beta.47.tgz", + "integrity": "sha1-wKo0fXa13IfTs3rAFq2j+VBgUTE=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47", + "@babel/helper-regex": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.0.0-beta.47.tgz", + "integrity": "sha1-X3tbrfZMTF2nkCauqwMAHmKm7l8=", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "7.0.0-beta.47", + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.0.0-beta.47.tgz", + "integrity": "sha1-A8YS7AkhPrOGqB1fpnwjTuSyA0w=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.0.0-beta.47.tgz", + "integrity": "sha1-7+0LLx378oKDUCI0qVtL6I9/3LY=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.47", + "@babel/helper-regex": "7.0.0-beta.47", + "regexpu-core": "4.2.0" + } + }, + "@babel/preset-env": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.0.0-beta.47.tgz", + "integrity": "sha1-o9qztfrE3lbjUQvby1KPHL3tvi0=", + "dev": true, + "requires": { + "@babel/helper-module-imports": "7.0.0-beta.47", + "@babel/helper-plugin-utils": "7.0.0-beta.47", + "@babel/plugin-proposal-async-generator-functions": "7.0.0-beta.47", + "@babel/plugin-proposal-object-rest-spread": "7.0.0-beta.47", + "@babel/plugin-proposal-optional-catch-binding": "7.0.0-beta.47", + "@babel/plugin-proposal-unicode-property-regex": "7.0.0-beta.47", + "@babel/plugin-syntax-async-generators": "7.0.0-beta.47", + "@babel/plugin-syntax-object-rest-spread": "7.0.0-beta.47", + "@babel/plugin-syntax-optional-catch-binding": "7.0.0-beta.47", + "@babel/plugin-transform-arrow-functions": "7.0.0-beta.47", + "@babel/plugin-transform-async-to-generator": "7.0.0-beta.47", + "@babel/plugin-transform-block-scoped-functions": "7.0.0-beta.47", + "@babel/plugin-transform-block-scoping": "7.0.0-beta.47", + "@babel/plugin-transform-classes": "7.0.0-beta.47", + "@babel/plugin-transform-computed-properties": "7.0.0-beta.47", + "@babel/plugin-transform-destructuring": "7.0.0-beta.47", + "@babel/plugin-transform-dotall-regex": "7.0.0-beta.47", + "@babel/plugin-transform-duplicate-keys": "7.0.0-beta.47", + "@babel/plugin-transform-exponentiation-operator": "7.0.0-beta.47", + "@babel/plugin-transform-for-of": "7.0.0-beta.47", + "@babel/plugin-transform-function-name": "7.0.0-beta.47", + "@babel/plugin-transform-literals": "7.0.0-beta.47", + "@babel/plugin-transform-modules-amd": "7.0.0-beta.47", + "@babel/plugin-transform-modules-commonjs": "7.0.0-beta.47", + "@babel/plugin-transform-modules-systemjs": "7.0.0-beta.47", + "@babel/plugin-transform-modules-umd": "7.0.0-beta.47", + "@babel/plugin-transform-new-target": "7.0.0-beta.47", + "@babel/plugin-transform-object-super": "7.0.0-beta.47", + "@babel/plugin-transform-parameters": "7.0.0-beta.47", + "@babel/plugin-transform-regenerator": "7.0.0-beta.47", + "@babel/plugin-transform-shorthand-properties": "7.0.0-beta.47", + "@babel/plugin-transform-spread": "7.0.0-beta.47", + "@babel/plugin-transform-sticky-regex": "7.0.0-beta.47", + "@babel/plugin-transform-template-literals": "7.0.0-beta.47", + "@babel/plugin-transform-typeof-symbol": "7.0.0-beta.47", + "@babel/plugin-transform-unicode-regex": "7.0.0-beta.47", + "browserslist": "3.2.8", + "invariant": "2.2.4", + "semver": "5.6.0" + } + }, + "@babel/runtime": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.0.0-beta.47.tgz", + "integrity": "sha1-Jz9ecWKegPbLzXUHUDhIYV5Z9+A=", + "dev": true, + "requires": { + "core-js": "2.5.7", + "regenerator-runtime": "0.11.1" + } + }, + "@babel/template": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/template/download/@babel/template-7.0.0-beta.47.tgz", + "integrity": "sha1-BHOXCnwL7noaGMHKmZ07peW62D0=", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.47", + "@babel/types": "7.0.0-beta.47", + "babylon": "7.0.0-beta.47", + "lodash": "4.17.11" + } + }, + "@babel/traverse": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.0.0-beta.47.tgz", + "integrity": "sha1-Dlf9u5/zqQkYi26/HlKcZB5sgqQ=", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.47", + "@babel/generator": "7.0.0-beta.47", + "@babel/helper-function-name": "7.0.0-beta.47", + "@babel/helper-split-export-declaration": "7.0.0-beta.47", + "@babel/types": "7.0.0-beta.47", + "babylon": "7.0.0-beta.47", + "debug": "3.2.6", + "globals": "11.8.0", + "invariant": "2.2.4", + "lodash": "4.17.11" + } + }, + "@babel/types": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/@babel/types/download/@babel/types-7.0.0-beta.47.tgz", + "integrity": "sha1-5vzBppFFkALCZx1VilhnBt3a7vg=", + "dev": true, + "requires": { + "esutils": "2.0.2", + "lodash": "4.17.11", + "to-fast-properties": "2.0.0" + } + }, + "@intervolga/optimize-cssnano-plugin": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/@intervolga/optimize-cssnano-plugin/download/@intervolga/optimize-cssnano-plugin-1.0.6.tgz", + "integrity": "sha1-vnx4RhKLiPapsdEmGgrQbrXA/fg=", + "dev": true, + "requires": { + "cssnano": "4.1.4", + "cssnano-preset-default": "4.0.2", + "postcss": "7.0.5" + } + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/@mrmlnc/readdir-enhanced/download/@mrmlnc/readdir-enhanced-2.2.1.tgz", + "integrity": "sha1-UkryQNGjYFJ7cwR17PoTRKpUDd4=", + "dev": true, + "requires": { + "call-me-maybe": "1.0.1", + "glob-to-regexp": "0.3.0" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.2.tgz", + "integrity": "sha1-VMWpZEYr49TXivYxNjwY1vqRrCY=", + "dev": true + }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/@protobufjs/aspromise/download/@protobufjs/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/@protobufjs/base64/download/@protobufjs/base64-1.1.2.tgz", + "integrity": "sha1-TIVzDlm5ofHzSQR9vyQpYDS7JzU=" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/@protobufjs/codegen/download/@protobufjs/codegen-2.0.4.tgz", + "integrity": "sha1-fvN/DQEPsCitGtWXIuUG2SYoFcs=" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/@protobufjs/eventemitter/download/@protobufjs/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/@protobufjs/fetch/download/@protobufjs/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "requires": { + "@protobufjs/aspromise": "1.1.2", + "@protobufjs/inquire": "1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/@protobufjs/float/download/@protobufjs/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/@protobufjs/inquire/download/@protobufjs/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/@protobufjs/path/download/@protobufjs/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/@protobufjs/pool/download/@protobufjs/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/@protobufjs/utf8/download/@protobufjs/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + }, + "@types/long": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/@types/long/download/@types/long-4.0.0.tgz", + "integrity": "sha1-cZVR0jUtMBrIuB23Mqy2vcKNve8=" + }, + "@types/node": { + "version": "10.12.30", + "resolved": "http://registry.npm.taobao.org/@types/node/download/@types/node-10.12.30.tgz", + "integrity": "sha1-TCtPABXyFPgVijRzUEgTIrOymy8=" + }, + "@vue/babel-preset-app": { + "version": "3.0.5", + "resolved": "http://registry.npm.taobao.org/@vue/babel-preset-app/download/@vue/babel-preset-app-3.0.5.tgz", + "integrity": "sha1-eqSmpZLd8EoGo88gkSUjlaz0wDM=", + "dev": true, + "requires": { + "@babel/plugin-proposal-class-properties": "7.0.0-beta.47", + "@babel/plugin-proposal-decorators": "7.0.0-beta.47", + "@babel/plugin-syntax-dynamic-import": "7.0.0-beta.47", + "@babel/plugin-syntax-jsx": "7.0.0-beta.47", + "@babel/plugin-transform-runtime": "7.0.0-beta.47", + "@babel/preset-env": "7.0.0-beta.47", + "@babel/runtime": "7.0.0-beta.47", + "babel-helper-vue-jsx-merge-props": "2.0.3", + "babel-plugin-dynamic-import-node": "2.2.0", + "babel-plugin-transform-vue-jsx": "4.0.1" + } + }, + "@vue/cli-overlay": { + "version": "3.0.5", + "resolved": "http://registry.npm.taobao.org/@vue/cli-overlay/download/@vue/cli-overlay-3.0.5.tgz", + "integrity": "sha1-QDvRtPWAdsqPhaZc8w4GzaPOazk=", + "dev": true + }, + "@vue/cli-plugin-babel": { + "version": "3.0.5", + "resolved": "http://registry.npm.taobao.org/@vue/cli-plugin-babel/download/@vue/cli-plugin-babel-3.0.5.tgz", + "integrity": "sha1-Y5bm9Sdx2KnPv+DZNpaZo5BSjEo=", + "dev": true, + "requires": { + "@babel/core": "7.0.0-beta.47", + "@vue/babel-preset-app": "3.0.5", + "babel-loader": "8.0.4" + } + }, + "@vue/cli-plugin-eslint": { + "version": "3.0.5", + "resolved": "http://registry.npm.taobao.org/@vue/cli-plugin-eslint/download/@vue/cli-plugin-eslint-3.0.5.tgz", + "integrity": "sha1-1nN3Xq9hJlj4wvveNWEN0FDJwRo=", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "3.0.5", + "babel-eslint": "8.2.6", + "eslint": "4.19.1", + "eslint-loader": "2.1.1", + "eslint-plugin-vue": "4.7.1" + } + }, + "@vue/cli-service": { + "version": "3.0.5", + "resolved": "http://registry.npm.taobao.org/@vue/cli-service/download/@vue/cli-service-3.0.5.tgz", + "integrity": "sha1-bp/sEPTu7dCqj9diBv2jCJFCGEw=", + "dev": true, + "requires": { + "@intervolga/optimize-cssnano-plugin": "1.0.6", + "@vue/cli-overlay": "3.0.5", + "@vue/cli-shared-utils": "3.0.5", + "@vue/preload-webpack-plugin": "1.1.0", + "@vue/web-component-wrapper": "1.2.0", + "acorn": "5.7.3", + "address": "1.0.3", + "autoprefixer": "8.6.5", + "cache-loader": "1.2.2", + "case-sensitive-paths-webpack-plugin": "2.1.2", + "chalk": "2.4.1", + "clipboardy": "1.2.3", + "cliui": "4.1.0", + "copy-webpack-plugin": "4.5.3", + "css-loader": "1.0.0", + "cssnano": "4.1.4", + "debug": "3.2.6", + "escape-string-regexp": "1.0.5", + "file-loader": "1.1.11", + "friendly-errors-webpack-plugin": "1.7.0", + "fs-extra": "6.0.1", + "globby": "8.0.1", + "hash-sum": "1.0.2", + "html-webpack-plugin": "3.2.0", + "launch-editor-middleware": "2.2.1", + "lodash.defaultsdeep": "4.6.0", + "lodash.mapvalues": "4.6.0", + "lodash.transform": "4.6.0", + "mini-css-extract-plugin": "0.4.4", + "minimist": "1.2.0", + "ora": "2.1.0", + "portfinder": "1.0.17", + "postcss-loader": "2.1.6", + "read-pkg": "4.0.1", + "semver": "5.6.0", + "slash": "2.0.0", + "source-map-url": "0.4.0", + "ssri": "6.0.1", + "string.prototype.padend": "3.0.0", + "thread-loader": "1.2.0", + "uglifyjs-webpack-plugin": "1.3.0", + "url-loader": "1.1.2", + "vue-loader": "15.4.2", + "webpack": "4.20.2", + "webpack-bundle-analyzer": "2.13.1", + "webpack-chain": "4.12.1", + "webpack-dev-server": "3.1.9", + "webpack-merge": "4.1.4", + "yorkie": "2.0.0" + }, + "dependencies": { + "globby": { + "version": "8.0.1", + "resolved": "http://registry.npm.taobao.org/globby/download/globby-8.0.1.tgz", + "integrity": "sha1-ta1IuKqAs1uBT8EoHsyFHx0rW1A=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "dir-glob": "2.0.0", + "fast-glob": "2.2.3", + "glob": "7.1.3", + "ignore": "3.3.10", + "pify": "3.0.0", + "slash": "1.0.0" + }, + "dependencies": { + "slash": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + } + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "@vue/cli-shared-utils": { + "version": "3.0.5", + "resolved": "http://registry.npm.taobao.org/@vue/cli-shared-utils/download/@vue/cli-shared-utils-3.0.5.tgz", + "integrity": "sha1-b9R3LA7Kn1KcS5QbO3IaOq4de44=", + "dev": true, + "requires": { + "chalk": "2.4.1", + "execa": "0.10.0", + "joi": "13.7.0", + "launch-editor": "2.2.1", + "lru-cache": "4.1.3", + "node-ipc": "9.1.1", + "opn": "5.4.0", + "ora": "2.1.0", + "request": "2.88.0", + "request-promise-native": "1.0.5", + "semver": "5.6.0", + "string.prototype.padstart": "3.0.0" + } + }, + "@vue/component-compiler-utils": { + "version": "2.2.0", + "resolved": "http://registry.npm.taobao.org/@vue/component-compiler-utils/download/@vue/component-compiler-utils-2.2.0.tgz", + "integrity": "sha1-u7t+04qainyTq+fvLlSpCgS2MbQ=", + "dev": true, + "requires": { + "consolidate": "0.15.1", + "hash-sum": "1.0.2", + "lru-cache": "4.1.3", + "merge-source-map": "1.1.0", + "postcss": "6.0.23", + "postcss-selector-parser": "3.1.1", + "prettier": "1.13.7", + "source-map": "0.5.7", + "vue-template-es2015-compiler": "1.6.0" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz", + "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", + "dev": true, + "requires": { + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "http://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "4.2.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + } + } + }, + "@vue/eslint-config-prettier": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-3.0.5.tgz", + "integrity": "sha512-TxUqk3WO2Q/B1g2K7TYOy7crCwiCIeMJajiUy7ESYI4tt9oKa7iN7x7G1qBSxWoJ2pUvLGWR1tNkKkWNX/zrfA==", + "dev": true, + "requires": { + "eslint-config-prettier": "2.10.0", + "eslint-plugin-prettier": "2.7.0", + "prettier": "1.13.7" + } + }, + "@vue/preload-webpack-plugin": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/@vue/preload-webpack-plugin/download/@vue/preload-webpack-plugin-1.1.0.tgz", + "integrity": "sha1-12jboAQmHAKbU6d8XqLV+e5PPM4=", + "dev": true + }, + "@vue/web-component-wrapper": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/@vue/web-component-wrapper/download/@vue/web-component-wrapper-1.2.0.tgz", + "integrity": "sha1-uw5G8VhafiibTuYGfcxaauYvHdE=", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.7.8", + "resolved": "http://registry.npm.taobao.org/@webassemblyjs/ast/download/@webassemblyjs/ast-1.7.8.tgz", + "integrity": "sha1-8x9IDevu+VfwG2I/J+q8aV+k/o8=", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.7.8", + "@webassemblyjs/helper-wasm-bytecode": "1.7.8", + "@webassemblyjs/wast-parser": "1.7.8" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.7.8", + "resolved": "http://registry.npm.taobao.org/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.7.8.tgz", + "integrity": "sha1-Gz7Q4n44QDIlTpMi/GRt0+cO8bk=", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.7.8", + "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.7.8.tgz", + "integrity": "sha1-orScEfYV5zb4FeySfwNdz6aQ1XI=", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.7.8", + "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.7.8.tgz", + "integrity": "sha1-P8Zr+gnBxg6CTPPViHgm+sBih30=", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.7.8", + "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.7.8.tgz", + "integrity": "sha1-zFp+lSK3DnWA3wVt/TQCDPKWRbA=", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.7.8" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.7.8", + "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.7.8.tgz", + "integrity": "sha1-/kYHQwr0ZpEnl8Iayv0wRggBguo=", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.7.8", + "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.7.8.tgz", + "integrity": "sha1-PC5+6T0U/0doumb7G+Qv3J3HFgo=", + "dev": true + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.7.8", + "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.7.8.tgz", + "integrity": "sha1-ib23jNbdUgmuLtKSXeeNDw4AtvA=", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.7.8", + "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.7.8.tgz", + "integrity": "sha1-xo730mpvwSQhsublb5vIEN+zPoc=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.8", + "@webassemblyjs/helper-buffer": "1.7.8", + "@webassemblyjs/helper-wasm-bytecode": "1.7.8", + "@webassemblyjs/wasm-gen": "1.7.8" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.7.8", + "resolved": "http://registry.npm.taobao.org/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.7.8.tgz", + "integrity": "sha1-HzeXSxPLSGqSN+c84Eysei8SZe0=", + "dev": true, + "requires": { + "@xtuc/ieee754": "1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.7.8", + "resolved": "http://registry.npm.taobao.org/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.7.8.tgz", + "integrity": "sha1-G+6DQmgZGS2y6hojS4TH68bTTB8=", + "dev": true, + "requires": { + "@xtuc/long": "4.2.1" + } + }, + "@webassemblyjs/utf8": { + "version": "1.7.8", + "resolved": "http://registry.npm.taobao.org/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.7.8.tgz", + "integrity": "sha1-K0idXPQ+Cuu5PY4teSr/mHnGHwU=", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.7.8", + "resolved": "http://registry.npm.taobao.org/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.7.8.tgz", + "integrity": "sha1-+L2+cIhxjsonscNJu3wGuKRXlQw=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.8", + "@webassemblyjs/helper-buffer": "1.7.8", + "@webassemblyjs/helper-wasm-bytecode": "1.7.8", + "@webassemblyjs/helper-wasm-section": "1.7.8", + "@webassemblyjs/wasm-gen": "1.7.8", + "@webassemblyjs/wasm-opt": "1.7.8", + "@webassemblyjs/wasm-parser": "1.7.8", + "@webassemblyjs/wast-printer": "1.7.8" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.7.8", + "resolved": "http://registry.npm.taobao.org/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.7.8.tgz", + "integrity": "sha1-foq/FUXq50rGeB1UXANK88/Qx9U=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.8", + "@webassemblyjs/helper-wasm-bytecode": "1.7.8", + "@webassemblyjs/ieee754": "1.7.8", + "@webassemblyjs/leb128": "1.7.8", + "@webassemblyjs/utf8": "1.7.8" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.7.8", + "resolved": "http://registry.npm.taobao.org/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.7.8.tgz", + "integrity": "sha1-etpuIRkUco/OAv8P+cNE7cbUHyY=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.8", + "@webassemblyjs/helper-buffer": "1.7.8", + "@webassemblyjs/wasm-gen": "1.7.8", + "@webassemblyjs/wasm-parser": "1.7.8" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.7.8", + "resolved": "http://registry.npm.taobao.org/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.7.8.tgz", + "integrity": "sha1-2sR8KR+2o+Y1Ka7NZHWSzTSvv5Q=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.8", + "@webassemblyjs/helper-api-error": "1.7.8", + "@webassemblyjs/helper-wasm-bytecode": "1.7.8", + "@webassemblyjs/ieee754": "1.7.8", + "@webassemblyjs/leb128": "1.7.8", + "@webassemblyjs/utf8": "1.7.8" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.7.8", + "resolved": "http://registry.npm.taobao.org/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.7.8.tgz", + "integrity": "sha1-+Kq5pFDASMH5U3aVyJ+uuS+r+6U=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.8", + "@webassemblyjs/floating-point-hex-parser": "1.7.8", + "@webassemblyjs/helper-api-error": "1.7.8", + "@webassemblyjs/helper-code-frame": "1.7.8", + "@webassemblyjs/helper-fsm": "1.7.8", + "@xtuc/long": "4.2.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.7.8", + "resolved": "http://registry.npm.taobao.org/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.7.8.tgz", + "integrity": "sha1-5+lleCwZEvapZfFKU/9D2K0EA6U=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.8", + "@webassemblyjs/wast-parser": "1.7.8", + "@xtuc/long": "4.2.1" + } + }, + "@xkeshi/vue-countdown": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@xkeshi/vue-countdown/-/vue-countdown-1.0.1.tgz", + "integrity": "sha512-Mqhx52N+5pD9TZCo/uKVshS1xxKZK7mh0niOlKfT5VzWMOUEQ8KXIGOiG8PtnpbwQ8FUtEe22g0E3yKZY5E1zA==" + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz", + "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.1", + "resolved": "http://registry.npm.taobao.org/@xtuc/long/download/@xtuc/long-4.2.1.tgz", + "integrity": "sha1-XIXWYvdvodNFdXZsXc1mFavNMNg=", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.5", + "resolved": "http://registry.npm.taobao.org/accepts/download/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, + "requires": { + "mime-types": "2.1.20", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.7.3", + "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-5.7.3.tgz", + "integrity": "sha1-Z6ojG/iBKXS4UjWpZ3Hra9B+onk=", + "dev": true + }, + "acorn-dynamic-import": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/acorn-dynamic-import/download/acorn-dynamic-import-3.0.0.tgz", + "integrity": "sha1-kBzu5Mf6rvfgetKkfokGddpQong=", + "dev": true, + "requires": { + "acorn": "5.7.3" + } + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "3.3.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "address": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/address/download/address-1.0.3.tgz", + "integrity": "sha1-tfUGMfjWzsi9IMljljr7VeBsvOk=", + "dev": true + }, + "ajv": { + "version": "5.5.2", + "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ajv-errors": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.0.tgz", + "integrity": "sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=", + "dev": true + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/alphanum-sort/download/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-colors": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.1.0.tgz", + "integrity": "sha1-3PqsyQ75GH3kE+w++NXrmBqYgI8=", + "dev": true + }, + "ansi-escapes": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.1.0.tgz", + "integrity": "sha1-9zIHu4EgfXX9bIPxJa8m7qN4yjA=", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "http://registry.npm.taobao.org/ansi-html/download/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "requires": { + "color-convert": "1.9.3" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, + "requires": { + "micromatch": "3.1.10", + "normalize-path": "2.1.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz", + "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=", + "dev": true + }, + "arch": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/arch/download/arch-2.1.1.tgz", + "integrity": "sha1-j1wnMao1owkpIhuwZA7tZRdeyE4=", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "http://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz", + "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-filter": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/array-filter/download/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-map": { + "version": "0.0.0", + "resolved": "http://registry.npm.taobao.org/array-map/download/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "http://registry.npm.taobao.org/array-reduce/download/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "http://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz", + "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", + "dev": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "http://registry.npm.taobao.org/asn1.js/download/asn1.js-4.10.1.tgz", + "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/assert/download/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "http://registry.npm.taobao.org/util/download/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "http://registry.npm.taobao.org/async/download/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/async-each/download/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.0.tgz", + "integrity": "sha1-ePrtjD0HSrgfIrTphdeehzj3IPg=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz", + "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=", + "dev": true + }, + "autoprefixer": { + "version": "8.6.5", + "resolved": "http://registry.npm.taobao.org/autoprefixer/download/autoprefixer-8.6.5.tgz", + "integrity": "sha1-ND89GT7VaLMgjgARehuW62kdTuk=", + "dev": true, + "requires": { + "browserslist": "3.2.8", + "caniuse-lite": "1.0.30000890", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "6.0.23", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz", + "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", + "dev": true, + "requires": { + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "http://registry.npm.taobao.org/aws4/download/aws4-1.8.0.tgz", + "integrity": "sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8=", + "dev": true + }, + "axios": { + "version": "0.18.0", + "resolved": "http://registry.npmjs.org/axios/-/axios-0.18.0.tgz", + "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "requires": { + "follow-redirects": "1.5.9", + "is-buffer": "1.1.6" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-eslint": { + "version": "8.2.6", + "resolved": "http://registry.npm.taobao.org/babel-eslint/download/babel-eslint-8.2.6.tgz", + "integrity": "sha1-YnDQxzIFYoBnwPeuFpOp55es79k=", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/traverse": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "1.0.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.0.0-beta.44.tgz", + "integrity": "sha1-KgJkM2jegJFhYr5whlyXd08629k=", + "dev": true, + "requires": { + "@babel/highlight": "7.0.0-beta.44" + } + }, + "@babel/generator": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.0.0-beta.44.tgz", + "integrity": "sha1-x+Z7m1KEr89pswm1DX038+UDPUI=", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44", + "jsesc": "2.5.1", + "lodash": "4.17.11", + "source-map": "0.5.7", + "trim-right": "1.0.1" + } + }, + "@babel/helper-function-name": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.0.0-beta.44.tgz", + "integrity": "sha1-4YVSqq4iMRAKbkheA4VLw1MtRN0=", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "7.0.0-beta.44", + "@babel/template": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.0.0-beta.44.tgz", + "integrity": "sha1-0Dym3SufewseazLFbHKDYUDbOhU=", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.0.0-beta.44.tgz", + "integrity": "sha1-wLNRc14PvLOCLIrY205YOwXr2dw=", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/highlight": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.0.0-beta.44.tgz", + "integrity": "sha1-GMlM5UORaoBVPtzc9oGJCyAHR9U=", + "dev": true, + "requires": { + "chalk": "2.4.1", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "@babel/template": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npm.taobao.org/@babel/template/download/@babel/template-7.0.0-beta.44.tgz", + "integrity": "sha1-+IMvT9zuXVm/UV5ZX8UQbFKbOU8=", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "lodash": "4.17.11" + } + }, + "@babel/traverse": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.0.0-beta.44.tgz", + "integrity": "sha1-qXCixFR3rRgBfi5GWgYG/u4NKWY=", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/generator": "7.0.0-beta.44", + "@babel/helper-function-name": "7.0.0-beta.44", + "@babel/helper-split-export-declaration": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "debug": "3.2.6", + "globals": "11.8.0", + "invariant": "2.2.4", + "lodash": "4.17.11" + } + }, + "@babel/types": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npm.taobao.org/@babel/types/download/@babel/types-7.0.0-beta.44.tgz", + "integrity": "sha1-axsWRZH3fewKA0KsqZXy0Eazp1c=", + "dev": true, + "requires": { + "esutils": "2.0.2", + "lodash": "4.17.11", + "to-fast-properties": "2.0.0" + } + }, + "babylon": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npm.taobao.org/babylon/download/babylon-7.0.0-beta.44.tgz", + "integrity": "sha1-iRWeFebjDFCW4i1zjYwK+KDoyh0=", + "dev": true + } + } + }, + "babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/babel-helper-vue-jsx-merge-props/download/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY=", + "dev": true + }, + "babel-loader": { + "version": "8.0.4", + "resolved": "http://registry.npm.taobao.org/babel-loader/download/babel-loader-8.0.4.tgz", + "integrity": "sha1-e78gy+RWBini5BU0FHaS0/7L3OY=", + "dev": true, + "requires": { + "find-cache-dir": "1.0.0", + "loader-utils": "1.1.0", + "mkdirp": "0.5.1", + "util.promisify": "1.0.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.2.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.2.0.tgz", + "integrity": "sha1-wK37B9lfSkSV6aqsbsOGxNfCUk4=", + "dev": true, + "requires": { + "object.assign": "4.1.0" + } + }, + "babel-plugin-import": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/babel-plugin-import/-/babel-plugin-import-1.9.1.tgz", + "integrity": "sha512-1IRnjAhCC9SxD9y9iqOfMf4U7b88mWZJHWfA2DSKq0FjYM63tYzWrTp81X6yZuCV7iDVSH9jMqxfwBxLJRXV7Q==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "7.0.0", + "@babel/runtime": "7.1.2" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", + "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "dev": true, + "requires": { + "@babel/types": "7.1.3" + } + }, + "@babel/runtime": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.1.2.tgz", + "integrity": "sha512-Y3SCjmhSupzFB6wcv1KmmFucH6gDVnI30WjOcicV10ju0cZjak3Jcs67YLIXBrmZYw1xCrVeJPbycFwrqNyxpg==", + "dev": true, + "requires": { + "regenerator-runtime": "0.12.1" + } + }, + "@babel/types": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.3.tgz", + "integrity": "sha512-RpPOVfK+yatXyn8n4PB1NW6k9qjinrXrRR8ugBN8fD6hCy5RXI6PSbVqpOJBO9oSaY7Nom4ohj35feb0UR9hSA==", + "dev": true, + "requires": { + "esutils": "2.0.2", + "lodash": "4.17.11", + "to-fast-properties": "2.0.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", + "dev": true + } + } + }, + "babel-plugin-lodash": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz", + "integrity": "sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "7.0.0", + "@babel/types": "7.1.3", + "glob": "7.1.3", + "lodash": "4.17.11", + "require-package-name": "2.0.1" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", + "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "dev": true, + "requires": { + "@babel/types": "7.1.3" + } + }, + "@babel/types": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.3.tgz", + "integrity": "sha512-RpPOVfK+yatXyn8n4PB1NW6k9qjinrXrRR8ugBN8fD6hCy5RXI6PSbVqpOJBO9oSaY7Nom4ohj35feb0UR9hSA==", + "dev": true, + "requires": { + "esutils": "2.0.2", + "lodash": "4.17.11", + "to-fast-properties": "2.0.0" + } + } + } + }, + "babel-plugin-transform-vue-jsx": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-vue-jsx/download/babel-plugin-transform-vue-jsx-4.0.1.tgz", + "integrity": "sha1-LIvdzoem7wnqpZhp/xv77q/F+I0=", + "dev": true, + "requires": { + "esutils": "2.0.2" + } + }, + "babylon": { + "version": "7.0.0-beta.47", + "resolved": "http://registry.npm.taobao.org/babylon/download/babylon-7.0.0-beta.47.tgz", + "integrity": "sha1-bR+kTwq+xBq3x4BIHmL9mq+96oA=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "http://registry.npm.taobao.org/base/download/base-0.11.2.tgz", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "dev": true, + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + } + } + }, + "base64-js": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/base64-js/download/base64-js-1.3.0.tgz", + "integrity": "sha1-yrHmEY8FEJXli1KBrqjBzSK/wOM=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "bfj-node4": { + "version": "5.3.1", + "resolved": "http://registry.npm.taobao.org/bfj-node4/download/bfj-node4-5.3.1.tgz", + "integrity": "sha1-4j2LJwV/HQIU/FYRQq2duZjyaDA=", + "dev": true, + "requires": { + "bluebird": "3.5.2", + "check-types": "7.4.0", + "tryer": "1.0.1" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/big.js/download/big.js-3.2.0.tgz", + "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=", + "dev": true + }, + "binary-extensions": { + "version": "1.12.0", + "resolved": "http://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.12.0.tgz", + "integrity": "sha1-wteA9T1Fu6gxeokC1M7q86Y4WxQ=", + "dev": true + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "bluebird": { + "version": "3.5.2", + "resolved": "http://registry.npm.taobao.org/bluebird/download/bluebird-3.5.2.tgz", + "integrity": "sha1-G+CQjgVKdRdUVJwnBInBUF1KsVo=", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "http://registry.npm.taobao.org/bn.js/download/bn.js-4.11.8.tgz", + "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=", + "dev": true + }, + "body-parser": { + "version": "1.18.3", + "resolved": "http://registry.npm.taobao.org/body-parser/download/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "1.6.16" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.23.tgz", + "integrity": "sha1-KXhx9jvlB63Pv8pxXQzQ7thOmmM=", + "dev": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "http://registry.npm.taobao.org/bonjour/download/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "2.1.1", + "deep-equal": "1.0.1", + "dns-equal": "1.0.0", + "dns-txt": "2.0.2", + "multicast-dns": "6.2.3", + "multicast-dns-service-types": "1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/array-flatten/download/array-flatten-2.1.1.tgz", + "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", + "dev": true + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "http://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.3" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz", + "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=", + "dev": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz", + "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", + "dev": true, + "requires": { + "browserify-aes": "1.2.0", + "browserify-des": "1.0.2", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.2.tgz", + "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.6" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "http://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.4.1", + "inherits": "2.0.3", + "parse-asn1": "5.1.1" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz", + "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", + "dev": true, + "requires": { + "pako": "1.0.6" + } + }, + "browserslist": { + "version": "3.2.8", + "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-3.2.8.tgz", + "integrity": "sha1-sABTYdZHHw9ZUnl6dvyYXx+Xj8Y=", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000890", + "electron-to-chromium": "1.3.78" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "http://registry.npm.taobao.org/buffer/download/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "1.3.0", + "ieee754": "1.1.12", + "isarray": "1.0.0" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz", + "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/buffer-indexof/download/buffer-indexof-1.1.1.tgz", + "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "version": "10.0.4", + "resolved": "http://registry.npm.taobao.org/cacache/download/cacache-10.0.4.tgz", + "integrity": "sha1-ZFI2eZnv+dQYiu/ZoU6dfGomNGA=", + "dev": true, + "requires": { + "bluebird": "3.5.2", + "chownr": "1.1.1", + "glob": "7.1.3", + "graceful-fs": "4.1.11", + "lru-cache": "4.1.3", + "mississippi": "2.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.2", + "ssri": "5.3.0", + "unique-filename": "1.1.1", + "y18n": "4.0.0" + }, + "dependencies": { + "ssri": { + "version": "5.3.0", + "resolved": "http://registry.npm.taobao.org/ssri/download/ssri-5.3.0.tgz", + "integrity": "sha1-ujhyycbTOgcEp9cf8EXl7EiZnQY=", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "dev": true, + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "cache-loader": { + "version": "1.2.2", + "resolved": "http://registry.npm.taobao.org/cache-loader/download/cache-loader-1.2.2.tgz", + "integrity": "sha1-bVw43tlZoJzF1YGQq1r29zvTU/U=", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "mkdirp": "0.5.1", + "neo-async": "2.5.2", + "schema-utils": "0.4.7" + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/call-me-maybe/download/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "caller-path": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/caller-path/download/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/callsites/download/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "2.3.2", + "upper-case": "1.1.3" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/caniuse-api/download/caniuse-api-3.0.0.tgz", + "integrity": "sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA=", + "dev": true, + "requires": { + "browserslist": "4.2.0", + "caniuse-lite": "1.0.30000890", + "lodash.memoize": "4.1.2", + "lodash.uniq": "4.5.0" + }, + "dependencies": { + "browserslist": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-4.2.0.tgz", + "integrity": "sha1-Pl5e33+pdY3tCIXPiMHkvnU6WRw=", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000890", + "electron-to-chromium": "1.3.78", + "node-releases": "1.0.0-alpha.12" + } + } + } + }, + "caniuse-lite": { + "version": "1.0.30000890", + "resolved": "http://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30000890.tgz", + "integrity": "sha1-hqGP/MZdeexqQ36YV2G4vxxO/q8=", + "dev": true + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/case-sensitive-paths-webpack-plugin/download/case-sensitive-paths-webpack-plugin-2.1.2.tgz", + "integrity": "sha1-yJm1IXV2NokiRXHa13h0LhM/AZI=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "2.4.1", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-2.4.1.tgz", + "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "http://registry.npm.taobao.org/chardet/download/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "check-types": { + "version": "7.4.0", + "resolved": "http://registry.npm.taobao.org/check-types/download/check-types-7.4.0.tgz", + "integrity": "sha1-A3jsG5YW7HH3dJMaPGUW+tjBUvQ=", + "dev": true + }, + "chokidar": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/chokidar/download/chokidar-2.0.4.tgz", + "integrity": "sha1-NW/04rDo5D4yLRijckYLvPOszSY=", + "dev": true, + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "fsevents": "1.2.7", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "lodash.debounce": "4.0.8", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.2.1", + "upath": "1.1.0" + }, + "dependencies": { + "array-unique": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "chownr": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/chownr/download/chownr-1.1.1.tgz", + "integrity": "sha1-VHJri4//TfBTxCGH6AH7RBLfFJQ=", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/chrome-trace-event/download/chrome-trace-event-1.0.0.tgz", + "integrity": "sha1-Rakb0sIMlBHwljtarrmhuV4JzEg=", + "dev": true, + "requires": { + "tslib": "1.9.3" + } + }, + "ci-info": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/ci-info/download/ci-info-1.6.0.tgz", + "integrity": "sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc=", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz", + "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "http://registry.npm.taobao.org/circular-json/download/circular-json-0.3.3.tgz", + "integrity": "sha1-gVyZ6oT2gJUp0vRXkb34JxE1LWY=", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "http://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "clean-css": { + "version": "4.2.1", + "resolved": "http://registry.npm.taobao.org/clean-css/download/clean-css-4.2.1.tgz", + "integrity": "sha1-LUEe92uFabbQyEBo2r6FsKpeXBc=", + "dev": true, + "requires": { + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "2.0.0" + } + }, + "cli-spinners": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/cli-spinners/download/cli-spinners-1.3.1.tgz", + "integrity": "sha1-ACwZkJEtDVlYDJO9NsBW3pnkJZo=", + "dev": true + }, + "cli-width": { + "version": "2.2.0", + "resolved": "http://registry.npm.taobao.org/cli-width/download/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "clipboardy": { + "version": "1.2.3", + "resolved": "http://registry.npm.taobao.org/clipboardy/download/clipboardy-1.2.3.tgz", + "integrity": "sha1-BSY2G/eHJMHyC+JI1CjjZUM8B+8=", + "dev": true, + "requires": { + "arch": "2.1.1", + "execa": "0.8.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.3", + "shebang-command": "1.2.0", + "which": "1.3.1" + } + }, + "execa": { + "version": "0.8.0", + "resolved": "http://registry.npm.taobao.org/execa/download/execa-0.8.0.tgz", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + } + } + }, + "cliui": { + "version": "4.1.0", + "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-4.1.0.tgz", + "integrity": "sha1-NIQi2+gtgAswIu709qwQvy5NG0k=", + "dev": true, + "requires": { + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-deep": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", + "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "dev": true, + "requires": { + "for-own": "1.0.0", + "is-plain-object": "2.0.4", + "kind-of": "6.0.2", + "shallow-clone": "1.0.0" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "coa": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/coa/download/coa-2.0.1.tgz", + "integrity": "sha1-8/iwsVBz411wJj+xBCyywCPbOK8=", + "dev": true, + "requires": { + "q": "1.5.1" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, + "color": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/color/download/color-3.1.0.tgz", + "integrity": "sha1-2On7CWcyh1d0yEv5IoFd8DCND/w=", + "dev": true, + "requires": { + "color-convert": "1.9.3", + "color-string": "1.5.3" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-string": { + "version": "1.5.3", + "resolved": "http://registry.npm.taobao.org/color-string/download/color-string-1.5.3.tgz", + "integrity": "sha1-ybvF8BtYtUkvPWhXRZy2WQziBMw=", + "dev": true, + "requires": { + "color-name": "1.1.3", + "simple-swizzle": "0.2.2" + } + }, + "colors": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/colors/download/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combined-stream": { + "version": "1.0.7", + "resolved": "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.7.tgz", + "integrity": "sha1-LR0kMXr7ir6V1tLAsHtXgTU52Cg=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.17.1", + "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz", + "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "compressible": { + "version": "2.0.15", + "resolved": "http://registry.npm.taobao.org/compressible/download/compressible-2.0.15.tgz", + "integrity": "sha1-hXqasKfloH2Ng37UP+Le//ZP4hI=", + "dev": true, + "requires": { + "mime-db": "1.36.0" + } + }, + "compression": { + "version": "1.7.3", + "resolved": "http://registry.npm.taobao.org/compression/download/compression-1.7.3.tgz", + "integrity": "sha1-J+DhdqryYPfywoE8PkQK258Zk9s=", + "dev": true, + "requires": { + "accepts": "1.3.5", + "bytes": "3.0.0", + "compressible": "2.0.15", + "debug": "2.6.9", + "on-headers": "1.0.1", + "safe-buffer": "5.1.2", + "vary": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "http://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz", + "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", + "dev": true, + "requires": { + "buffer-from": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" + } + }, + "connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "http://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/console-browserify/download/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "consolidate": { + "version": "0.15.1", + "resolved": "http://registry.npm.taobao.org/consolidate/download/consolidate-0.15.1.tgz", + "integrity": "sha1-IasEMjXHGgfUXZqtmFk7DbpWurc=", + "dev": true, + "requires": { + "bluebird": "3.5.2" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "content-type": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=", + "dev": true + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.6.0.tgz", + "integrity": "sha1-UbU3qMQ+DwTewZk7/83VBOdYrCA=", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "cookie": { + "version": "0.3.1", + "resolved": "http://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz", + "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=", + "dev": true, + "requires": { + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "4.5.3", + "resolved": "http://registry.npm.taobao.org/copy-webpack-plugin/download/copy-webpack-plugin-4.5.3.tgz", + "integrity": "sha1-FKIk0gXkb3p595VgKOHabfIiX/I=", + "dev": true, + "requires": { + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "globby": "7.1.1", + "is-glob": "4.0.0", + "loader-utils": "1.1.0", + "minimatch": "3.0.4", + "p-limit": "1.3.0", + "serialize-javascript": "1.5.0" + }, + "dependencies": { + "globby": { + "version": "7.1.1", + "resolved": "http://registry.npm.taobao.org/globby/download/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "dir-glob": "2.0.0", + "glob": "7.1.3", + "ignore": "3.3.10", + "pify": "3.0.0", + "slash": "1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + } + } + }, + "core-js": { + "version": "2.5.7", + "resolved": "http://registry.npm.taobao.org/core-js/download/core-js-2.5.7.tgz", + "integrity": "sha1-+XJgj/DOrWi4QaFqky0LGDeRgU4=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "5.0.6", + "resolved": "http://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.0.6.tgz", + "integrity": "sha1-3KbPaAoL0DWJr/aEcAhYyBq+6zk=", + "dev": true, + "requires": { + "is-directory": "0.3.1", + "js-yaml": "3.12.0", + "parse-json": "4.0.0" + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "http://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.3.tgz", + "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.1" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/create-hash/download/create-hash-1.2.0.tgz", + "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "md5.js": "1.3.5", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "http://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz", + "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.3", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz", + "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=", + "dev": true, + "requires": { + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.6.0", + "shebang-command": "1.2.0", + "which": "1.3.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "http://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz", + "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", + "dev": true, + "requires": { + "browserify-cipher": "1.0.1", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.3", + "pbkdf2": "3.0.17", + "public-encrypt": "4.0.3", + "randombytes": "2.0.6", + "randomfill": "1.0.4" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "http://registry.npm.taobao.org/css-color-names/download/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/css-declaration-sorter/download/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha1-wZiUD2OnbX42wecQGLABchBUyyI=", + "dev": true, + "requires": { + "postcss": "7.0.5", + "timsort": "0.3.0" + } + }, + "css-loader": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/css-loader/download/css-loader-1.0.0.tgz", + "integrity": "sha1-n0aqpcpB2+MYYOO2K44jxCkWv1Y=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "css-selector-tokenizer": "0.7.0", + "icss-utils": "2.1.0", + "loader-utils": "1.1.0", + "lodash.camelcase": "4.3.0", + "postcss": "6.0.23", + "postcss-modules-extract-imports": "1.2.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0", + "postcss-value-parser": "3.3.0", + "source-list-map": "2.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz", + "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", + "dev": true, + "requires": { + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "css-select": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/css-select/download/css-select-2.0.0.tgz", + "integrity": "sha1-eqKSE5IRSDH2jbF1wLalVd90u9U=", + "dev": true, + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.7.0", + "nth-check": "1.0.1" + } + }, + "css-select-base-adapter": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/css-select-base-adapter/download/css-select-base-adapter-0.1.0.tgz", + "integrity": "sha1-AQKz0UYw34bD65+p9UVicBBs+ZA=", + "dev": true + }, + "css-selector-tokenizer": { + "version": "0.7.0", + "resolved": "http://registry.npm.taobao.org/css-selector-tokenizer/download/css-selector-tokenizer-0.7.0.tgz", + "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", + "dev": true, + "requires": { + "cssesc": "0.1.0", + "fastparse": "1.1.1", + "regexpu-core": "1.0.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "regexpu-core": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/regexpu-core/download/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "1.4.0", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/regjsgen/download/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/regjsparser/download/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + } + } + } + }, + "css-tree": { + "version": "1.0.0-alpha.28", + "resolved": "http://registry.npm.taobao.org/css-tree/download/css-tree-1.0.0-alpha.28.tgz", + "integrity": "sha1-joloGQ2IbJR3vI1h6W9hrz9/+n8=", + "dev": true, + "requires": { + "mdn-data": "1.1.4", + "source-map": "0.5.7" + } + }, + "css-unit-converter": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/css-unit-converter/download/css-unit-converter-1.1.1.tgz", + "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", + "dev": true + }, + "css-url-regex": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/css-url-regex/download/css-url-regex-1.1.0.tgz", + "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=", + "dev": true + }, + "css-what": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/css-what/download/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true + }, + "cssesc": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/cssesc/download/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "cssnano": { + "version": "4.1.4", + "resolved": "http://registry.npm.taobao.org/cssnano/download/cssnano-4.1.4.tgz", + "integrity": "sha1-VbcePY9UUd0+3HlVZzQVyYeVeI8=", + "dev": true, + "requires": { + "cosmiconfig": "5.0.6", + "cssnano-preset-default": "4.0.2", + "is-resolvable": "1.1.0", + "postcss": "7.0.5" + } + }, + "cssnano-preset-default": { + "version": "4.0.2", + "resolved": "http://registry.npm.taobao.org/cssnano-preset-default/download/cssnano-preset-default-4.0.2.tgz", + "integrity": "sha1-HePyfnO38Pv4fB1/16Y66YCsN3Q=", + "dev": true, + "requires": { + "css-declaration-sorter": "4.0.1", + "cssnano-util-raw-cache": "4.0.1", + "postcss": "7.0.5", + "postcss-calc": "6.0.2", + "postcss-colormin": "4.0.2", + "postcss-convert-values": "4.0.1", + "postcss-discard-comments": "4.0.1", + "postcss-discard-duplicates": "4.0.2", + "postcss-discard-empty": "4.0.1", + "postcss-discard-overridden": "4.0.1", + "postcss-merge-longhand": "4.0.6", + "postcss-merge-rules": "4.0.2", + "postcss-minify-font-values": "4.0.2", + "postcss-minify-gradients": "4.0.1", + "postcss-minify-params": "4.0.1", + "postcss-minify-selectors": "4.0.1", + "postcss-normalize-charset": "4.0.1", + "postcss-normalize-display-values": "4.0.1", + "postcss-normalize-positions": "4.0.1", + "postcss-normalize-repeat-style": "4.0.1", + "postcss-normalize-string": "4.0.1", + "postcss-normalize-timing-functions": "4.0.1", + "postcss-normalize-unicode": "4.0.1", + "postcss-normalize-url": "4.0.1", + "postcss-normalize-whitespace": "4.0.1", + "postcss-ordered-values": "4.1.1", + "postcss-reduce-initial": "4.0.2", + "postcss-reduce-transforms": "4.0.1", + "postcss-svgo": "4.0.1", + "postcss-unique-selectors": "4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/cssnano-util-get-arguments/download/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/cssnano-util-get-match/download/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/cssnano-util-raw-cache/download/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha1-sm1f1fcqEd/np4RvtMZyYPlr8oI=", + "dev": true, + "requires": { + "postcss": "7.0.5" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/cssnano-util-same-parent/download/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha1-V0CC+yhZ0ttDOFWDXZqEVuoYu/M=", + "dev": true + }, + "csso": { + "version": "3.5.1", + "resolved": "http://registry.npm.taobao.org/csso/download/csso-3.5.1.tgz", + "integrity": "sha1-e564vmFiiXPBsmHhadLwJACOdYs=", + "dev": true, + "requires": { + "css-tree": "1.0.0-alpha.29" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.29", + "resolved": "http://registry.npm.taobao.org/css-tree/download/css-tree-1.0.0-alpha.29.tgz", + "integrity": "sha1-P6nU7zFCy9HDAedmTB81K9gvWjk=", + "dev": true, + "requires": { + "mdn-data": "1.1.4", + "source-map": "0.5.7" + } + } + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } + }, + "cyclist": { + "version": "0.2.2", + "resolved": "http://registry.npm.taobao.org/cyclist/download/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/date-now/download/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "dayjs": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.7.7.tgz", + "integrity": "sha512-Qlkiu0NNDpYwhk0syK4ImvAl/5YnsEMkvC2O123INviGeOA3Q8s5VyVkZzmN5SC7Wv9bb1+rfwO+uSqtHB4UWw==" + }, + "de-indent": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true + }, + "debug": { + "version": "3.2.6", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "dev": true, + "requires": { + "ms": "2.1.1" + } + }, + "decamelize": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/decamelize/download/decamelize-2.0.0.tgz", + "integrity": "sha1-ZW17vICUxMeI6lPFhAkIycfQY8c=", + "dev": true, + "requires": { + "xregexp": "4.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/deep-equal/download/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deepmerge": { + "version": "1.5.2", + "resolved": "http://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz", + "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=", + "dev": true + }, + "default-gateway": { + "version": "2.7.2", + "resolved": "http://registry.npm.taobao.org/default-gateway/download/default-gateway-2.7.2.tgz", + "integrity": "sha1-t+8znl4CSwRUZ69APVA0jbRkLQ8=", + "dev": true, + "requires": { + "execa": "0.10.0", + "ip-regex": "2.1.0" + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "1.0.4" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz", + "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", + "dev": true, + "requires": { + "object-keys": "1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + } + } + }, + "del": { + "version": "2.2.2", + "resolved": "http://registry.npm.taobao.org/del/download/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.2" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/des.js/download/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-node": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/detect-node/download/detect-node-2.0.4.tgz", + "integrity": "sha1-AU7o+PZpxcWAI9pkuBecCDooxGw=", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "http://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz", + "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/dir-glob/download/dir-glob-2.0.0.tgz", + "integrity": "sha1-CyBdK2rvmCOMooZZioIE0p0KADQ=", + "dev": true, + "requires": { + "arrify": "1.0.1", + "path-type": "3.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/dns-equal/download/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/dns-packet/download/dns-packet-1.3.1.tgz", + "integrity": "sha1-EqpCaYEHW+UAuRDu3NC0fdfe2lo=", + "dev": true, + "requires": { + "ip": "1.1.5", + "safe-buffer": "5.1.2" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/dns-txt/download/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "1.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/doctrine/download/doctrine-2.1.0.tgz", + "integrity": "sha1-XNAfwQFiG0LEzX9dGmYkNxbT850=", + "dev": true, + "requires": { + "esutils": "2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/dom-converter/download/dom-converter-0.2.0.tgz", + "integrity": "sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g=", + "dev": true, + "requires": { + "utila": "0.4.0" + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz", + "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=", + "dev": true + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/domhandler/download/domhandler-2.1.0.tgz", + "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "http://registry.npm.taobao.org/domutils/download/domutils-1.7.0.tgz", + "integrity": "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=", + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.0.tgz", + "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=", + "dev": true, + "requires": { + "is-obj": "1.0.1" + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/duplexer/download/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "duplexify": { + "version": "3.6.0", + "resolved": "http://registry.npm.taobao.org/duplexify/download/duplexify-3.6.0.tgz", + "integrity": "sha1-WSkD9dgLONA3IgVBJk1poZj7NBA=", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "stream-shift": "1.0.0" + } + }, + "easy-stack": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/easy-stack/download/easy-stack-1.0.0.tgz", + "integrity": "sha1-EskbMIWjfwuqM26UhurEv5Tj54g=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "0.1.1", + "safer-buffer": "2.1.2" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "2.6.1", + "resolved": "http://registry.npm.taobao.org/ejs/download/ejs-2.6.1.tgz", + "integrity": "sha1-SY7A1JVlWrxvI81hho2SZGQHGqA=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.78", + "resolved": "http://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.78.tgz", + "integrity": "sha1-7LcrWxZrplmO+zhEYdY8rXRnjr8=", + "dev": true + }, + "elliptic": { + "version": "6.4.1", + "resolved": "http://registry.npm.taobao.org/elliptic/download/elliptic-6.4.1.tgz", + "integrity": "sha1-wtC3d2kRuGcixjLDwGxg8vgZk5o=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.5", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.1.tgz", + "integrity": "sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "http://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-4.1.0.tgz", + "integrity": "sha1-Qcfgv9/nSsH/4eV61qXGyfN0Kn8=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "tapable": "1.1.0" + } + }, + "entities": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/entities/download/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "http://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz", + "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", + "dev": true, + "requires": { + "prr": "1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "http://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz", + "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/error-stack-parser/download/error-stack-parser-2.0.2.tgz", + "integrity": "sha1-Sujbqiv5CotFBwe5FJ3KvKE1Ug0=", + "dev": true, + "requires": { + "stackframe": "1.0.4" + } + }, + "es-abstract": { + "version": "1.12.0", + "resolved": "http://registry.npm.taobao.org/es-abstract/download/es-abstract-1.12.0.tgz", + "integrity": "sha1-nbvdJ8aFbwABQhyhh4LXhr+KYWU=", + "dev": true, + "requires": { + "es-to-primitive": "1.2.0", + "function-bind": "1.1.1", + "has": "1.0.3", + "is-callable": "1.1.4", + "is-regex": "1.0.4" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.0.tgz", + "integrity": "sha1-7fckeAM0VujdqO8J4ArZZQcH83c=", + "dev": true, + "requires": { + "is-callable": "1.1.4", + "is-date-object": "1.0.1", + "is-symbol": "1.0.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "4.19.1", + "resolved": "http://registry.npm.taobao.org/eslint/download/eslint-4.19.1.tgz", + "integrity": "sha1-MtHWU+HZBAiFS/spbwdux+GGowA=", + "dev": true, + "requires": { + "ajv": "5.5.2", + "babel-code-frame": "6.26.0", + "chalk": "2.4.1", + "concat-stream": "1.6.2", + "cross-spawn": "5.1.0", + "debug": "3.2.6", + "doctrine": "2.1.0", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "1.0.0", + "espree": "3.5.4", + "esquery": "1.0.1", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "functional-red-black-tree": "1.0.1", + "glob": "7.1.3", + "globals": "11.8.0", + "ignore": "3.3.10", + "imurmurhash": "0.1.4", + "inquirer": "3.3.0", + "is-resolvable": "1.1.0", + "js-yaml": "3.12.0", + "json-stable-stringify-without-jsonify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.11", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "7.0.0", + "progress": "2.0.0", + "regexpp": "1.1.0", + "require-uncached": "1.0.3", + "semver": "5.6.0", + "strip-ansi": "4.0.0", + "strip-json-comments": "2.0.1", + "table": "4.0.2", + "text-table": "0.2.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.3", + "shebang-command": "1.2.0", + "which": "1.3.1" + } + } + } + }, + "eslint-config-prettier": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-2.10.0.tgz", + "integrity": "sha512-Mhl90VLucfBuhmcWBgbUNtgBiK955iCDK1+aHAz7QfDQF6wuzWZ6JjihZ3ejJoGlJWIuko7xLqNm8BA5uenKhA==", + "dev": true, + "requires": { + "get-stdin": "5.0.1" + }, + "dependencies": { + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "dev": true + } + } + }, + "eslint-loader": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/eslint-loader/download/eslint-loader-2.1.1.tgz", + "integrity": "sha1-KpJRUjZSQwv91kPv2wr8GiqJVGo=", + "dev": true, + "requires": { + "loader-fs-cache": "1.0.1", + "loader-utils": "1.1.0", + "object-assign": "4.1.1", + "object-hash": "1.3.0", + "rimraf": "2.6.2" + } + }, + "eslint-plugin-prettier": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz", + "integrity": "sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA==", + "dev": true, + "requires": { + "fast-diff": "1.2.0", + "jest-docblock": "21.2.0" + } + }, + "eslint-plugin-vue": { + "version": "4.7.1", + "resolved": "http://registry.npm.taobao.org/eslint-plugin-vue/download/eslint-plugin-vue-4.7.1.tgz", + "integrity": "sha1-yCm5/GJYLBiXtaC5Sv1E7MpRHmM=", + "dev": true, + "requires": { + "vue-eslint-parser": "2.0.3" + } + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "http://registry.npm.taobao.org/eslint-scope/download/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "4.2.1", + "estraverse": "4.2.0" + } + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha1-PzGA+y4pEBdxastMnW1bXDSmqB0=", + "dev": true + }, + "espree": { + "version": "3.5.4", + "resolved": "http://registry.npm.taobao.org/espree/download/espree-3.5.4.tgz", + "integrity": "sha1-sPRHGHyKi+2US4FaZgvd9d610ac=", + "dev": true, + "requires": { + "acorn": "5.7.3", + "acorn-jsx": "3.0.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz", + "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/esquery/download/esquery-1.0.1.tgz", + "integrity": "sha1-QGxRZYsfWZGl+bYrHcJbAOPlxwg=", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "http://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.1.tgz", + "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/estraverse/download/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "http://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-pubsub": { + "version": "4.3.0", + "resolved": "http://registry.npm.taobao.org/event-pubsub/download/event-pubsub-4.3.0.tgz", + "integrity": "sha1-9o2Ba8KfHsAsU53FjI3UDOcss24=", + "dev": true + }, + "eventemitter3": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/eventemitter3/download/eventemitter3-3.1.0.tgz", + "integrity": "sha1-CQtNbNvWRe0Qv3UNS1QHlC17oWM=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/events/download/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "eventsource": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/eventsource/download/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "dev": true, + "requires": { + "original": "1.0.2" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz", + "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", + "dev": true, + "requires": { + "md5.js": "1.3.5", + "safe-buffer": "5.1.2" + } + }, + "execa": { + "version": "0.10.0", + "resolved": "http://registry.npm.taobao.org/execa/download/execa-0.10.0.tgz", + "integrity": "sha1-/0Vqj1P5D47MxxqW0Rvfx/CCy1A=", + "dev": true, + "requires": { + "cross-spawn": "6.0.5", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "http://registry.npm.taobao.org/expand-range/download/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.4" + } + }, + "express": { + "version": "4.16.4", + "resolved": "http://registry.npm.taobao.org/express/download/express-4.16.4.tgz", + "integrity": "sha1-/d72GSYQniTFFeqX/S8b2/Yt8S4=", + "dev": true, + "requires": { + "accepts": "1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.4", + "qs": "6.5.2", + "range-parser": "1.2.0", + "safe-buffer": "5.1.2", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "1.4.0", + "type-is": "1.6.16", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz", + "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "http://registry.npm.taobao.org/external-editor/download/external-editor-2.2.0.tgz", + "integrity": "sha1-BFURz9jRM/OEZnPRBHwVTiFK09U=", + "dev": true, + "requires": { + "chardet": "0.4.2", + "iconv-lite": "0.4.24", + "tmp": "0.0.33" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "2.2.3", + "resolved": "http://registry.npm.taobao.org/fast-glob/download/fast-glob-2.2.3.tgz", + "integrity": "sha1-0J03jp72sAdqD6G6dRnZ1NlpnCg=", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "2.2.1", + "@nodelib/fs.stat": "1.1.2", + "glob-parent": "3.1.0", + "is-glob": "4.0.0", + "merge2": "1.2.2", + "micromatch": "3.1.10" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "http://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastparse": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/fastparse/download/fastparse-1.1.1.tgz", + "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "http://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": "0.7.0" + } + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "http://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.1.tgz", + "integrity": "sha1-hiRwESkBxyeg5JWoB0S9W6odZ5A=", + "dev": true + }, + "figures": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/figures/download/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "1.3.0", + "object-assign": "4.1.1" + } + }, + "file-loader": { + "version": "1.1.11", + "resolved": "http://registry.npm.taobao.org/file-loader/download/file-loader-1.1.11.tgz", + "integrity": "sha1-b+iGRJsPKpNuQ8q6rAzb+zaVBvg=", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "schema-utils": "0.4.7" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "filesize": { + "version": "3.6.1", + "resolved": "http://registry.npm.taobao.org/filesize/download/filesize-3.6.1.tgz", + "integrity": "sha1-CQuz7gG2+AGoqL6Z0xcQs0Irsxc=", + "dev": true + }, + "fill-range": { + "version": "2.2.4", + "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-2.2.4.tgz", + "integrity": "sha1-6x53OrsFbc2N8r/favWbizqTZWU=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "3.1.0", + "repeat-element": "1.1.3", + "repeat-string": "1.6.1" + } + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.1.tgz", + "integrity": "sha1-7r9O2EAHnIP0JJA4ydcDAIMBsQU=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "make-dir": "1.3.0", + "pkg-dir": "2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "flat-cache": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/flat-cache/download/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "dev": true, + "requires": { + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + } + }, + "flatten": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/flatten/download/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "dev": true + }, + "flush-write-stream": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.0.3.tgz", + "integrity": "sha1-xdWG7zivYJdlC0m8QbVfq7GfNb0=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "follow-redirects": { + "version": "1.5.9", + "resolved": "http://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.5.9.tgz", + "integrity": "sha1-ye2ddIuBSjlTVxblMbkZaoRdicY=", + "requires": { + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/for-own/download/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/form-data/download/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.20" + }, + "dependencies": { + "combined-stream": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + } + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "friendly-errors-webpack-plugin": { + "version": "1.7.0", + "resolved": "http://registry.npm.taobao.org/friendly-errors-webpack-plugin/download/friendly-errors-webpack-plugin-1.7.0.tgz", + "integrity": "sha1-78hsu4FiJFZYYaG+ep2E0Kr+oTY=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "error-stack-parser": "2.0.2", + "string-width": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "from2": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "fs-extra": { + "version": "6.0.1", + "resolved": "http://registry.npm.taobao.org/fs-extra/download/fs-extra-6.0.1.tgz", + "integrity": "sha1-irwSj3lG4xATXdyTuYvdtBDno0s=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "4.0.0", + "universalify": "0.1.2" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "http://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.6" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.7", + "resolved": "http://registry.npm.taobao.org/fsevents/download/fsevents-1.2.7.tgz", + "integrity": "sha1-SFG2ZKN4PlIAOzxm6w7uEHSTOqQ=", + "dev": true, + "optional": true, + "requires": { + "nan": "2.11.1", + "node-pre-gyp": "0.10.3" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "2.3.5" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.3" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.1.2", + "yallist": "3.0.3" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "2.3.5" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.9", + "iconv-lite": "0.4.24", + "sax": "1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.2.4", + "nopt": "4.0.1", + "npm-packlist": "1.2.0", + "npmlog": "4.1.2", + "rc": "1.2.8", + "rimraf": "2.6.3", + "semver": "5.6.0", + "tar": "4.4.8" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.1", + "osenv": "0.1.5" + } + }, + "npm-bundled": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.5" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.5", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.6.0", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "1.1.1", + "fs-minipass": "1.2.5", + "minipass": "2.3.5", + "minizlib": "1.2.1", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.2", + "yallist": "3.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true + } + } + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.3" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + } + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "1.2.1" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz", + "integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "http://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "http://registry.npm.taobao.org/glob/download/glob-7.1.3.tgz", + "integrity": "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/glob-parent/download/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "globals": { + "version": "11.8.0", + "resolved": "http://registry.npm.taobao.org/globals/download/globals-11.8.0.tgz", + "integrity": "sha1-we9F7pvta63wZjxcuQ6NGt7BMh0=", + "dev": true + }, + "globby": { + "version": "5.0.0", + "resolved": "http://registry.npm.taobao.org/globby/download/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.3", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "globule": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "dev": true, + "requires": { + "glob": "7.1.3", + "lodash": "4.17.11", + "minimatch": "3.0.4" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "gzip-size": { + "version": "4.1.0", + "resolved": "http://registry.npm.taobao.org/gzip-size/download/gzip-size-4.1.0.tgz", + "integrity": "sha1-iuCWJX6r59acRb4rZ8RIEk/7UXw=", + "dev": true, + "requires": { + "duplexer": "0.1.1", + "pify": "3.0.0" + } + }, + "handle-thing": { + "version": "1.2.5", + "resolved": "http://registry.npm.taobao.org/handle-thing/download/handle-thing-1.2.5.tgz", + "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/har-validator/download/har-validator-5.1.0.tgz", + "integrity": "sha1-RGV/VoiiLP1LckhugbOj+xF0LCk=", + "dev": true, + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/has/download/has-1.0.3.tgz", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", + "dev": true, + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/hash-base/download/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "hash.js": { + "version": "1.1.5", + "resolved": "http://registry.npm.taobao.org/hash.js/download/hash.js-1.1.5.tgz", + "integrity": "sha1-44q0uF37HgxA/pJlwOm1SFTCOBI=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "he": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/he/download/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/hex-color-regex/download/hex-color-regex-1.1.0.tgz", + "integrity": "sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4=", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "1.1.5", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hoek": { + "version": "5.0.4", + "resolved": "http://registry.npm.taobao.org/hoek/download/hoek-5.0.4.tgz", + "integrity": "sha1-D3+icKHK/rNkpLLd+qM/hk5BV9o=", + "dev": true + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "http://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.7.1.tgz", + "integrity": "sha1-l/I2l3vW4SVAiTD/bePuxigewEc=", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "http://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "obuf": "1.1.2", + "readable-stream": "2.3.6", + "wbuf": "1.7.3" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/hsl-regex/download/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/hsla-regex/download/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/html-comment-regex/download/html-comment-regex-1.1.2.tgz", + "integrity": "sha1-l9RoiutcgYhqNk+qDK0d2hTUM6c=", + "dev": true + }, + "html-entities": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/html-entities/download/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "html-minifier": { + "version": "3.5.20", + "resolved": "http://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.20.tgz", + "integrity": "sha1-exn9PKoMt5983l7lw6vfjsqmuxQ=", + "dev": true, + "requires": { + "camel-case": "3.0.0", + "clean-css": "4.2.1", + "commander": "2.17.1", + "he": "1.1.1", + "param-case": "2.1.1", + "relateurl": "0.2.7", + "uglify-js": "3.4.9" + } + }, + "html-webpack-plugin": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/html-webpack-plugin/download/html-webpack-plugin-3.2.0.tgz", + "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", + "dev": true, + "requires": { + "html-minifier": "3.5.20", + "loader-utils": "0.2.17", + "lodash": "4.17.11", + "pretty-error": "2.1.1", + "tapable": "1.1.0", + "toposort": "1.0.7", + "util.promisify": "1.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "http://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + } + } + }, + "htmlparser2": { + "version": "3.3.0", + "resolved": "http://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.3.0.tgz", + "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.1.0", + "domutils": "1.1.6", + "readable-stream": "1.0.34" + }, + "dependencies": { + "domutils": { + "version": "1.1.6", + "resolved": "http://registry.npm.taobao.org/domutils/download/domutils-1.1.6.tgz", + "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "http://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.4.0" + } + }, + "http-parser-js": { + "version": "0.4.13", + "resolved": "http://registry.npm.taobao.org/http-parser-js/download/http-parser-js-0.4.13.tgz", + "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=", + "dev": true + }, + "http-proxy": { + "version": "1.17.0", + "resolved": "http://registry.npm.taobao.org/http-proxy/download/http-proxy-1.17.0.tgz", + "integrity": "sha1-etOElGWPhGBeL220Q230EPTlvpo=", + "dev": true, + "requires": { + "eventemitter3": "3.1.0", + "follow-redirects": "1.5.9", + "requires-port": "1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.18.0", + "resolved": "http://registry.npm.taobao.org/http-proxy-middleware/download/http-proxy-middleware-0.18.0.tgz", + "integrity": "sha1-CYfmu1pWBuWmkWjY+WeofxXdiqs=", + "dev": true, + "requires": { + "http-proxy": "1.17.0", + "is-glob": "4.0.0", + "lodash": "4.17.11", + "micromatch": "3.1.10" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.15.1" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", + "dev": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/icss-replace-symbols/download/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/icss-utils/download/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "dev": true, + "requires": { + "postcss": "6.0.23" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz", + "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", + "dev": true, + "requires": { + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "ieee754": { + "version": "1.1.12", + "resolved": "http://registry.npm.taobao.org/ieee754/download/ieee754-1.1.12.tgz", + "integrity": "sha1-UL8k5bnIu5ivSWTJQc2wkY2ntgs=", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "http://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz", + "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=", + "dev": true + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "2.1.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/import-from/download/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/import-local/download/import-local-2.0.0.tgz", + "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=", + "dev": true, + "requires": { + "pkg-dir": "3.0.0", + "resolve-cwd": "2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "dev": true, + "requires": { + "locate-path": "3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz", + "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", + "dev": true, + "requires": { + "p-locate": "3.0.0", + "path-exists": "3.0.0" + } + }, + "p-limit": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/p-limit/download/p-limit-2.0.0.tgz", + "integrity": "sha1-5iTtVO6MRgp3izyfNnBJb/ileuw=", + "dev": true, + "requires": { + "p-try": "2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz", + "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", + "dev": true, + "requires": { + "p-limit": "2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/p-try/download/p-try-2.0.0.tgz", + "integrity": "sha1-hQgLuHxkaI+keZb+j3376CEXYLE=", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz", + "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=", + "dev": true, + "requires": { + "find-up": "3.0.0" + } + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "inquirer": { + "version": "3.3.0", + "resolved": "http://registry.npm.taobao.org/inquirer/download/inquirer-3.3.0.tgz", + "integrity": "sha1-ndLyrXZdyrH/BEO0kUQqILoifck=", + "dev": true, + "requires": { + "ansi-escapes": "3.1.0", + "chalk": "2.4.1", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "2.2.0", + "figures": "2.0.0", + "lodash": "4.17.11", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" + } + }, + "internal-ip": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/internal-ip/download/internal-ip-3.0.1.tgz", + "integrity": "sha1-31yZh24dLrLqLXT1IOP2aaAOzic=", + "dev": true, + "requires": { + "default-gateway": "2.7.2", + "ipaddr.js": "1.8.0" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "http://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz", + "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", + "dev": true, + "requires": { + "loose-envify": "1.4.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/invert-kv/download/invert-kv-2.0.0.tgz", + "integrity": "sha1-c5P1r6Weyf9fZ6J2INEcIm4+7AI=", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "http://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.8.0", + "resolved": "http://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.12.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-builtin-module/download/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "http://registry.npm.taobao.org/is-callable/download/is-callable-1.1.4.tgz", + "integrity": "sha1-HhrfIZ4e62hNaR+dagX/DTCiTXU=", + "dev": true + }, + "is-ci": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/is-ci/download/is-ci-1.2.1.tgz", + "integrity": "sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw=", + "dev": true, + "requires": { + "ci-info": "1.6.0" + } + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-color-stop/download/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "hex-color-regex": "1.1.0", + "hsl-regex": "1.0.0", + "hsla-regex": "1.0.0", + "rgb-regex": "1.0.1", + "rgba-regex": "1.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "http://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/is-dotfile/download/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/is-equal-shallow/download/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha1-WsSLNF72dTOb1sekipEhELJBz1I=", + "dev": true, + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/is-posix-bracket/download/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/is-primitive/download/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/is-regex/download/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "1.0.3" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.1.0.tgz", + "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-svg": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-svg/download/is-svg-3.0.0.tgz", + "integrity": "sha1-kyHb0pwhLlypnE+peUxxS8r6L3U=", + "dev": true, + "requires": { + "html-comment-regex": "1.1.2" + } + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.2.tgz", + "integrity": "sha1-oFX2rlcZLK7jKeeoYBGLSXqVDzg=", + "dev": true, + "requires": { + "has-symbols": "1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz", + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isemail": { + "version": "3.1.3", + "resolved": "http://registry.npm.taobao.org/isemail/download/isemail-3.1.3.tgz", + "integrity": "sha1-ZPN/wRNXnqElIxZcPr46caVs5XE=", + "dev": true, + "requires": { + "punycode": "2.1.1" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "javascript-stringify": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/javascript-stringify/download/javascript-stringify-1.6.0.tgz", + "integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=", + "dev": true + }, + "jest-docblock": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", + "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==", + "dev": true + }, + "joi": { + "version": "13.7.0", + "resolved": "http://registry.npm.taobao.org/joi/download/joi-13.7.0.tgz", + "integrity": "sha1-z9hev+Z+ihkAQyQAtNA7vZP7h58=", + "dev": true, + "requires": { + "hoek": "5.0.4", + "isemail": "3.1.3", + "topo": "3.0.0" + } + }, + "js-base64": { + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz", + "integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==", + "dev": true + }, + "js-message": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/js-message/download/js-message-1.0.5.tgz", + "integrity": "sha1-IwDSSxrwjondCVvBpMnJz8uJLRU=", + "dev": true + }, + "js-queue": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/js-queue/download/js-queue-2.0.0.tgz", + "integrity": "sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug=", + "dev": true, + "requires": { + "easy-stack": "1.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "http://registry.npm.taobao.org/js-yaml/download/js-yaml-3.12.0.tgz", + "integrity": "sha1-6u1lbsg0TxD1J8a/obbiJE3hZ9E=", + "dev": true, + "requires": { + "argparse": "1.0.10", + "esprima": "4.0.1" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsesc": { + "version": "2.5.1", + "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-2.5.1.tgz", + "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.2", + "resolved": "http://registry.npm.taobao.org/json3/download/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "http://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "http://registry.npm.taobao.org/jsonify/download/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/killable/download/killable-1.0.1.tgz", + "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "launch-editor": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/launch-editor/download/launch-editor-2.2.1.tgz", + "integrity": "sha1-hxtaPuOdZoD8wm03kwtu7aidsMo=", + "dev": true, + "requires": { + "chalk": "2.4.1", + "shell-quote": "1.6.1" + } + }, + "launch-editor-middleware": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/launch-editor-middleware/download/launch-editor-middleware-2.2.1.tgz", + "integrity": "sha1-4UsH5scVSwpLhqD9NFeE5FgEwVc=", + "dev": true, + "requires": { + "launch-editor": "2.2.1" + } + }, + "lcid": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/lcid/download/lcid-2.0.0.tgz", + "integrity": "sha1-bvXS32DlL4LrIopMNz6NHzlyU88=", + "dev": true, + "requires": { + "invert-kv": "2.0.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "loader-fs-cache": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/loader-fs-cache/download/loader-fs-cache-1.0.1.tgz", + "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=", + "dev": true, + "requires": { + "find-cache-dir": "0.1.1", + "mkdirp": "0.5.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "mkdirp": "0.5.1", + "pkg-dir": "1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/pkg-dir/download/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "1.1.2" + } + } + } + }, + "loader-runner": { + "version": "2.3.1", + "resolved": "http://registry.npm.taobao.org/loader-runner/download/loader-runner-2.3.1.tgz", + "integrity": "sha1-Am8S/nwxFZkolqwCugIrqSlxuXk=", + "dev": true + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/loader-utils/download/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "http://registry.npm.taobao.org/lodash.camelcase/download/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "http://registry.npm.taobao.org/lodash.debounce/download/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.defaultsdeep": { + "version": "4.6.0", + "resolved": "http://registry.npm.taobao.org/lodash.defaultsdeep/download/lodash.defaultsdeep-4.6.0.tgz", + "integrity": "sha1-vsECT4WxvZbL6kBbI8FK1kQ6b4E=", + "dev": true + }, + "lodash.mapvalues": { + "version": "4.6.0", + "resolved": "http://registry.npm.taobao.org/lodash.mapvalues/download/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "http://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.mergewith": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", + "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", + "dev": true + }, + "lodash.tail": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", + "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", + "dev": true + }, + "lodash.transform": { + "version": "4.6.0", + "resolved": "http://registry.npm.taobao.org/lodash.transform/download/lodash.transform-4.6.0.tgz", + "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "http://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "http://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz", + "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=", + "dev": true, + "requires": { + "chalk": "2.4.1" + } + }, + "loglevel": { + "version": "1.6.1", + "resolved": "http://registry.npm.taobao.org/loglevel/download/loglevel-1.6.1.tgz", + "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "dev": true + }, + "long": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/long/download/long-4.0.0.tgz", + "integrity": "sha1-mntxz7fTYaGU6lVSQckvdGjVvyg=" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz", + "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "http://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lru-cache": { + "version": "4.1.3", + "resolved": "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.3.tgz", + "integrity": "sha1-oRdc80lt/IQ2wVbDNLSVWZK85pw=", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/make-dir/download/make-dir-1.3.0.tgz", + "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "map-age-cleaner": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/map-age-cleaner/download/map-age-cleaner-0.1.2.tgz", + "integrity": "sha1-CY+xVTj9Pb5GHxJ0WwyoVo1OP3Q=", + "dev": true, + "requires": { + "p-defer": "1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "http://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "1.0.1" + } + }, + "math-random": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/math-random/download/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "http://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz", + "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=", + "dev": true, + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "mdn-data": { + "version": "1.1.4", + "resolved": "http://registry.npm.taobao.org/mdn-data/download/mdn-data-1.1.4.tgz", + "integrity": "sha1-ULXU/8RXUnZXPE7tuHgIEqhBnwE=", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/mem/download/mem-4.0.0.tgz", + "integrity": "sha1-ZDdpDZRxZ49syDZZwAy6/Nawza8=", + "dev": true, + "requires": { + "map-age-cleaner": "0.1.2", + "mimic-fn": "1.2.0", + "p-is-promise": "1.1.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "http://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "0.1.7", + "readable-stream": "2.3.6" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + }, + "dependencies": { + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.2" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/merge-source-map/download/merge-source-map-1.1.0.tgz", + "integrity": "sha1-L93n5gIJOfcJBqaPLXrmheTIxkY=", + "dev": true, + "requires": { + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "merge2": { + "version": "1.2.2", + "resolved": "http://registry.npm.taobao.org/merge2/download/merge2-1.2.2.tgz", + "integrity": "sha1-AyEuPajYbE2FI869YxgZNBT5TjQ=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz", + "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "2.3.1", + "resolved": "http://registry.npm.taobao.org/mime/download/mime-2.3.1.tgz", + "integrity": "sha1-sWIcVNY7l8R9PP5/chX31kUXw2k=", + "dev": true + }, + "mime-db": { + "version": "1.36.0", + "resolved": "http://registry.npm.taobao.org/mime-db/download/mime-db-1.36.0.tgz", + "integrity": "sha1-UCBHjbPH/pOq17vMTc+GnEM2M5c=", + "dev": true + }, + "mime-types": { + "version": "2.1.20", + "resolved": "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.20.tgz", + "integrity": "sha1-kwy3GdVx6QNzhSD4RwkRVIyizBk=", + "dev": true, + "requires": { + "mime-db": "1.36.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz", + "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "0.4.4", + "resolved": "http://registry.npm.taobao.org/mini-css-extract-plugin/download/mini-css-extract-plugin-0.4.4.tgz", + "integrity": "sha1-wQQQoASVG9PO2sHaaQU5QPzLYl0=", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "schema-utils": "1.0.0", + "webpack-sources": "1.3.0" + }, + "dependencies": { + "ajv": { + "version": "6.5.4", + "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-6.5.4.tgz", + "integrity": "sha1-JH1SdBENtlNwa1UPzCt5fKKM/Fk=", + "dev": true, + "requires": { + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" + } + }, + "ajv-keywords": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "requires": { + "ajv": "6.5.4", + "ajv-errors": "1.0.0", + "ajv-keywords": "3.2.0" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz", + "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mississippi": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/mississippi/download/mississippi-2.0.0.tgz", + "integrity": "sha1-NEKlCPr8KFAEhv7qmUCWduTuWm8=", + "dev": true, + "requires": { + "concat-stream": "1.6.2", + "duplexify": "3.6.0", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.3", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.3" + } + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.1.tgz", + "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=", + "dev": true, + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "dev": true, + "requires": { + "for-in": "0.1.8", + "is-extendable": "0.1.1" + }, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", + "dev": true + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "http://registry.npm.taobao.org/multicast-dns/download/multicast-dns-6.2.3.tgz", + "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=", + "dev": true, + "requires": { + "dns-packet": "1.3.1", + "thunky": "1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "http://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "2.11.1", + "resolved": "http://registry.npm.taobao.org/nan/download/nan-2.11.1.tgz", + "integrity": "sha1-kOIrzLjKV+pM03zIPTgZtS7qZ2Y=", + "dev": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "http://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz", + "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + } + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/negotiator/download/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "neo-async": { + "version": "2.5.2", + "resolved": "http://registry.npm.taobao.org/neo-async/download/neo-async-2.5.2.tgz", + "integrity": "sha1-SJEFznvFTnCdc2sZX4ITUEjFD8w=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz", + "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=", + "dev": true + }, + "no-case": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz", + "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=", + "dev": true, + "requires": { + "lower-case": "1.1.4" + } + }, + "node-forge": { + "version": "0.7.5", + "resolved": "http://registry.npm.taobao.org/node-forge/download/node-forge-0.7.5.tgz", + "integrity": "sha1-bBUsNFzhHFL0ZcKr2VfoY5zWdN8=", + "dev": true + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "dev": true, + "requires": { + "fstream": "1.0.11", + "glob": "7.1.3", + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.1.2", + "osenv": "0.1.5", + "request": "2.88.0", + "rimraf": "2.6.2", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.3.1" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } + } + }, + "node-ipc": { + "version": "9.1.1", + "resolved": "http://registry.npm.taobao.org/node-ipc/download/node-ipc-9.1.1.tgz", + "integrity": "sha1-TiRe1pOOZRAOWV68XcNLFujdXWk=", + "dev": true, + "requires": { + "event-pubsub": "4.3.0", + "js-message": "1.0.5", + "js-queue": "2.0.0" + } + }, + "node-libs-browser": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.1.0.tgz", + "integrity": "sha1-X5QmPUBPbkR2fXJpAf/wVHjWAN8=", + "dev": true, + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "1.1.1", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.6", + "stream-browserify": "2.0.1", + "stream-http": "2.8.3", + "string_decoder": "1.1.1", + "timers-browserify": "2.0.10", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.4", + "vm-browserify": "0.0.4" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-releases": { + "version": "1.0.0-alpha.12", + "resolved": "http://registry.npm.taobao.org/node-releases/download/node-releases-1.0.0-alpha.12.tgz", + "integrity": "sha1-MuRhuHnqdqxnTlEdmDLPKdo0Umg=", + "dev": true, + "requires": { + "semver": "5.6.0" + } + }, + "node-sass": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.3.tgz", + "integrity": "sha512-XzXyGjO+84wxyH7fV6IwBOTrEBe2f0a6SBze9QWWYR/cL74AcQUks2AsqcCZenl/Fp/JVbuEaLpgrLtocwBUww==", + "dev": true, + "requires": { + "async-foreach": "0.1.3", + "chalk": "1.1.3", + "cross-spawn": "3.0.1", + "gaze": "1.1.3", + "get-stdin": "4.0.1", + "glob": "7.1.3", + "in-publish": "2.0.0", + "lodash.assign": "4.2.0", + "lodash.clonedeep": "4.5.0", + "lodash.mergewith": "4.6.1", + "meow": "3.7.0", + "mkdirp": "0.5.1", + "nan": "2.11.1", + "node-gyp": "3.8.0", + "npmlog": "4.1.2", + "request": "2.87.0", + "sass-graph": "2.2.4", + "stdout-stream": "1.4.1", + "true-case-path": "1.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "requires": { + "lru-cache": "4.1.3", + "which": "1.3.1" + } + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "request": { + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "dev": true, + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.7", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.0.3", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.20", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "http://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.4.0.tgz", + "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", + "dev": true, + "requires": { + "hosted-git-info": "2.7.1", + "is-builtin-module": "1.0.0", + "semver": "5.6.0", + "validate-npm-package-license": "3.0.4" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/normalize-range/download/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "http://registry.npm.taobao.org/normalize-url/download/normalize-url-3.3.0.tgz", + "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "1.1.5", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/nth-check/download/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "dev": true, + "requires": { + "boolbase": "1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "http://registry.npm.taobao.org/num2fraction/download/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz", + "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "object-hash": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/object-hash/download/object-hash-1.3.0.tgz", + "integrity": "sha1-dtm6b/ETz478DZlhAoUf5nI5Y+I=", + "dev": true + }, + "object-keys": { + "version": "1.0.12", + "resolved": "http://registry.npm.taobao.org/object-keys/download/object-keys-1.0.12.tgz", + "integrity": "sha1-CcU4VTd1dTEMymL1W7M0q/97PtI=", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "http://registry.npm.taobao.org/object.assign/download/object.assign-4.1.0.tgz", + "integrity": "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo=", + "dev": true, + "requires": { + "define-properties": "1.1.3", + "function-bind": "1.1.1", + "has-symbols": "1.0.0", + "object-keys": "1.0.12" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.12.0" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/object.omit/download/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.values": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/object.values/download/object.values-1.0.4.tgz", + "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", + "dev": true, + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.12.0", + "function-bind": "1.1.1", + "has": "1.0.3" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/obuf/download/obuf-1.1.2.tgz", + "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/on-headers/download/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + }, + "opener": { + "version": "1.5.1", + "resolved": "http://registry.npm.taobao.org/opener/download/opener-1.5.1.tgz", + "integrity": "sha1-bS8Od/GgrwAyrKcWwsH7uOfoq+0=", + "dev": true + }, + "opn": { + "version": "5.4.0", + "resolved": "http://registry.npm.taobao.org/opn/download/opn-5.4.0.tgz", + "integrity": "sha1-y1Reeqt4VivrEao7+rxwQuF2EDU=", + "dev": true, + "requires": { + "is-wsl": "1.1.0" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "http://registry.npm.taobao.org/optionator/download/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } + }, + "ora": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/ora/download/ora-2.1.0.tgz", + "integrity": "sha1-bK8oMOuSSUGGHsU6FzeZ4Ai1Hls=", + "dev": true, + "requires": { + "chalk": "2.4.1", + "cli-cursor": "2.1.0", + "cli-spinners": "1.3.1", + "log-symbols": "2.2.0", + "strip-ansi": "4.0.0", + "wcwidth": "1.0.1" + } + }, + "original": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/original/download/original-1.0.2.tgz", + "integrity": "sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8=", + "dev": true, + "requires": { + "url-parse": "1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/os-locale/download/os-locale-3.0.1.tgz", + "integrity": "sha1-OwFPvwHYf2Ch5TSNgP6HDcgsRiA=", + "dev": true, + "requires": { + "execa": "0.10.0", + "lcid": "2.0.0", + "mem": "4.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/p-defer/download/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/p-is-promise/download/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz", + "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", + "dev": true, + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.3.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/p-map/download/p-map-1.2.0.tgz", + "integrity": "sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s=", + "dev": true + }, + "p-try": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pako": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/pako/download/pako-1.0.6.tgz", + "integrity": "sha1-AQEhG6pwxLykoPY/Igbpe3368lg=", + "dev": true + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/param-case/download/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "2.3.2" + } + }, + "parse-asn1": { + "version": "5.1.1", + "resolved": "http://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.1.tgz", + "integrity": "sha1-9r8pOBgzK9DatU77Fgh3JHRebKg=", + "dev": true, + "requires": { + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.17" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "1.3.2", + "json-parse-better-errors": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "http://registry.npm.taobao.org/parseurl/download/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "http://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz", + "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "http://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/path-type/download/path-type-3.0.0.tgz", + "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "http://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.0.17.tgz", + "integrity": "sha1-l2wgZTBhexTrsyEUI597CTNuk6Y=", + "dev": true, + "requires": { + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/pkg-dir/download/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "2.1.0" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "http://registry.npm.taobao.org/pluralize/download/pluralize-7.0.0.tgz", + "integrity": "sha1-KYuJ34uTsCIdv0Ia0rGx6iP8Z3c=", + "dev": true + }, + "portfinder": { + "version": "1.0.17", + "resolved": "http://registry.npm.taobao.org/portfinder/download/portfinder-1.0.17.tgz", + "integrity": "sha1-qKFpEUPkbEc17e/PT7zM7a0mRWo=", + "dev": true, + "requires": { + "async": "1.5.2", + "debug": "2.6.9", + "mkdirp": "0.5.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "7.0.5", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-7.0.5.tgz", + "integrity": "sha1-cOZEPjam1SCw/U51k/zKNjXun1U=", + "dev": true, + "requires": { + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "postcss-calc": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/postcss-calc/download/postcss-calc-6.0.2.tgz", + "integrity": "sha1-TZpD4n278n0JX+ywIaxoluIxgzc=", + "dev": true, + "requires": { + "css-unit-converter": "1.1.1", + "postcss": "7.0.5", + "postcss-selector-parser": "2.2.3", + "reduce-css-calc": "2.1.5" + } + }, + "postcss-colormin": { + "version": "4.0.2", + "resolved": "http://registry.npm.taobao.org/postcss-colormin/download/postcss-colormin-4.0.2.tgz", + "integrity": "sha1-k80foRKAAIaWiH2xpSgEixjn7Zk=", + "dev": true, + "requires": { + "browserslist": "4.2.0", + "color": "3.1.0", + "has": "1.0.3", + "postcss": "7.0.5", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "browserslist": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-4.2.0.tgz", + "integrity": "sha1-Pl5e33+pdY3tCIXPiMHkvnU6WRw=", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000890", + "electron-to-chromium": "1.3.78", + "node-releases": "1.0.0-alpha.12" + } + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/postcss-convert-values/download/postcss-convert-values-4.0.1.tgz", + "integrity": "sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8=", + "dev": true, + "requires": { + "postcss": "7.0.5", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-discard-comments": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/postcss-discard-comments/download/postcss-discard-comments-4.0.1.tgz", + "integrity": "sha1-MGl3NbDEdoUqehEFDrhDh6Z+9V0=", + "dev": true, + "requires": { + "postcss": "7.0.5" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "http://registry.npm.taobao.org/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha1-P+EzzTyCKC5VD8myORdqkge3hOs=", + "dev": true, + "requires": { + "postcss": "7.0.5" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/postcss-discard-empty/download/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha1-yMlR6fc+2UKAGUWERKAq2Qu592U=", + "dev": true, + "requires": { + "postcss": "7.0.5" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/postcss-discard-overridden/download/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha1-ZSrvipZybwKfXj4AFG7npOdV/1c=", + "dev": true, + "requires": { + "postcss": "7.0.5" + } + }, + "postcss-load-config": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/postcss-load-config/download/postcss-load-config-2.0.0.tgz", + "integrity": "sha1-8TEt2/WRLNdHF3CDxe96GdYu5IQ=", + "dev": true, + "requires": { + "cosmiconfig": "4.0.0", + "import-cwd": "2.1.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-4.0.0.tgz", + "integrity": "sha1-dgORVJWAu9LfHlYrwXexPCkJctw=", + "dev": true, + "requires": { + "is-directory": "0.3.1", + "js-yaml": "3.12.0", + "parse-json": "4.0.0", + "require-from-string": "2.0.2" + } + } + } + }, + "postcss-loader": { + "version": "2.1.6", + "resolved": "http://registry.npm.taobao.org/postcss-loader/download/postcss-loader-2.1.6.tgz", + "integrity": "sha1-HX3XsXxrojS5vtWvE+C+pApC10A=", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "postcss": "6.0.23", + "postcss-load-config": "2.0.0", + "schema-utils": "0.4.7" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz", + "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", + "dev": true, + "requires": { + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "postcss-merge-longhand": { + "version": "4.0.6", + "resolved": "http://registry.npm.taobao.org/postcss-merge-longhand/download/postcss-merge-longhand-4.0.6.tgz", + "integrity": "sha1-K5OPo1KcPRZX5T3H/w/WBNvIX/E=", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "7.0.5", + "postcss-value-parser": "3.3.0", + "stylehacks": "4.0.1" + } + }, + "postcss-merge-rules": { + "version": "4.0.2", + "resolved": "http://registry.npm.taobao.org/postcss-merge-rules/download/postcss-merge-rules-4.0.2.tgz", + "integrity": "sha1-K+REAb8ZhW8n8yuLEsDfWvG4jnQ=", + "dev": true, + "requires": { + "browserslist": "4.2.0", + "caniuse-api": "3.0.0", + "cssnano-util-same-parent": "4.0.1", + "postcss": "7.0.5", + "postcss-selector-parser": "3.1.1", + "vendors": "1.0.2" + }, + "dependencies": { + "browserslist": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-4.2.0.tgz", + "integrity": "sha1-Pl5e33+pdY3tCIXPiMHkvnU6WRw=", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000890", + "electron-to-chromium": "1.3.78", + "node-releases": "1.0.0-alpha.12" + } + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "http://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "4.2.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "http://registry.npm.taobao.org/postcss-minify-font-values/download/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY=", + "dev": true, + "requires": { + "postcss": "7.0.5", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-minify-gradients": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/postcss-minify-gradients/download/postcss-minify-gradients-4.0.1.tgz", + "integrity": "sha1-balcbpKoCflWu3a/DARJSVPhp90=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "4.0.0", + "is-color-stop": "1.1.0", + "postcss": "7.0.5", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-minify-params": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/postcss-minify-params/download/postcss-minify-params-4.0.1.tgz", + "integrity": "sha1-Wy4tAmTdZF711o+P7A1MOMHPk9I=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "browserslist": "4.2.0", + "cssnano-util-get-arguments": "4.0.0", + "postcss": "7.0.5", + "postcss-value-parser": "3.3.0", + "uniqs": "2.0.0" + }, + "dependencies": { + "browserslist": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-4.2.0.tgz", + "integrity": "sha1-Pl5e33+pdY3tCIXPiMHkvnU6WRw=", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000890", + "electron-to-chromium": "1.3.78", + "node-releases": "1.0.0-alpha.12" + } + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/postcss-minify-selectors/download/postcss-minify-selectors-4.0.1.tgz", + "integrity": "sha1-qJHBl5d8w3q/YLPqBrhCSLHB6c0=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "has": "1.0.3", + "postcss": "7.0.5", + "postcss-selector-parser": "3.1.1" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "http://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "4.2.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-1.2.0.tgz", + "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", + "dev": true, + "requires": { + "postcss": "6.0.23" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz", + "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", + "dev": true, + "requires": { + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.23" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz", + "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", + "dev": true, + "requires": { + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.23" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz", + "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", + "dev": true, + "requires": { + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.23" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz", + "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", + "dev": true, + "requires": { + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/postcss-normalize-charset/download/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha1-izWt067oOhNrBHHg1ZvlilAoXdQ=", + "dev": true, + "requires": { + "postcss": "7.0.5" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/postcss-normalize-display-values/download/postcss-normalize-display-values-4.0.1.tgz", + "integrity": "sha1-2ag9R8cW6KmA8i9jLIsEWM+0ikw=", + "dev": true, + "requires": { + "cssnano-util-get-match": "4.0.0", + "postcss": "7.0.5", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-normalize-positions": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/postcss-normalize-positions/download/postcss-normalize-positions-4.0.1.tgz", + "integrity": "sha1-7i1LZ4GMlhlkxr4J0XmJS5T9a6E=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "4.0.0", + "has": "1.0.3", + "postcss": "7.0.5", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/postcss-normalize-repeat-style/download/postcss-normalize-repeat-style-4.0.1.tgz", + "integrity": "sha1-UpPyNLlNdmmp+AVJXTW4KlgcUOU=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "4.0.0", + "cssnano-util-get-match": "4.0.0", + "postcss": "7.0.5", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-normalize-string": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/postcss-normalize-string/download/postcss-normalize-string-4.0.1.tgz", + "integrity": "sha1-I8UDDCzCQXX2bJFPpRmeLjwQ/vM=", + "dev": true, + "requires": { + "has": "1.0.3", + "postcss": "7.0.5", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/postcss-normalize-timing-functions/download/postcss-normalize-timing-functions-4.0.1.tgz", + "integrity": "sha1-i+g+C5yz/y0avd7gMqSRCPBfldc=", + "dev": true, + "requires": { + "cssnano-util-get-match": "4.0.0", + "postcss": "7.0.5", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/postcss-normalize-unicode/download/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha1-hBvUj9zzAZrUuqdJOj02O1KuHPs=", + "dev": true, + "requires": { + "browserslist": "4.2.0", + "postcss": "7.0.5", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "browserslist": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-4.2.0.tgz", + "integrity": "sha1-Pl5e33+pdY3tCIXPiMHkvnU6WRw=", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000890", + "electron-to-chromium": "1.3.78", + "node-releases": "1.0.0-alpha.12" + } + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/postcss-normalize-url/download/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE=", + "dev": true, + "requires": { + "is-absolute-url": "2.1.0", + "normalize-url": "3.3.0", + "postcss": "7.0.5", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/postcss-normalize-whitespace/download/postcss-normalize-whitespace-4.0.1.tgz", + "integrity": "sha1-0Uy2ObYSOEGKyLyNO3vdZfyGV14=", + "dev": true, + "requires": { + "postcss": "7.0.5", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-ordered-values": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/postcss-ordered-values/download/postcss-ordered-values-4.1.1.tgz", + "integrity": "sha1-LjtDLvPkibGDM67KHxKV64m+n8I=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "4.0.0", + "postcss": "7.0.5", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-reduce-initial": { + "version": "4.0.2", + "resolved": "http://registry.npm.taobao.org/postcss-reduce-initial/download/postcss-reduce-initial-4.0.2.tgz", + "integrity": "sha1-usjjJdZ1EO4B+kYGdtyOqeO0DxU=", + "dev": true, + "requires": { + "browserslist": "4.2.0", + "caniuse-api": "3.0.0", + "has": "1.0.3", + "postcss": "7.0.5" + }, + "dependencies": { + "browserslist": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-4.2.0.tgz", + "integrity": "sha1-Pl5e33+pdY3tCIXPiMHkvnU6WRw=", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000890", + "electron-to-chromium": "1.3.78", + "node-releases": "1.0.0-alpha.12" + } + } + } + }, + "postcss-reduce-transforms": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/postcss-reduce-transforms/download/postcss-reduce-transforms-4.0.1.tgz", + "integrity": "sha1-hgDVVTvdOtZA9Dv/getS+HYNRWE=", + "dev": true, + "requires": { + "cssnano-util-get-match": "4.0.0", + "has": "1.0.3", + "postcss": "7.0.5", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-selector-parser": { + "version": "2.2.3", + "resolved": "http://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "dev": true, + "requires": { + "flatten": "1.0.2", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "postcss-svgo": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/postcss-svgo/download/postcss-svgo-4.0.1.tgz", + "integrity": "sha1-VijNs48BXea1iM5tC/ByS0krWB0=", + "dev": true, + "requires": { + "is-svg": "3.0.0", + "postcss": "7.0.5", + "postcss-value-parser": "3.3.0", + "svgo": "1.1.1" + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/postcss-unique-selectors/download/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "7.0.5", + "uniqs": "2.0.0" + } + }, + "postcss-value-parser": { + "version": "3.3.0", + "resolved": "http://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "prettier": { + "version": "1.13.7", + "resolved": "http://registry.npm.taobao.org/prettier/download/prettier-1.13.7.tgz", + "integrity": "sha1-hQ87iveEpJpuotLqp+0UKKNLcoE=", + "dev": true + }, + "pretty-error": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/pretty-error/download/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "dev": true, + "requires": { + "renderkid": "2.0.2", + "utila": "0.4.0" + } + }, + "private": { + "version": "0.1.8", + "resolved": "http://registry.npm.taobao.org/private/download/private-0.1.8.tgz", + "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "http://registry.npm.taobao.org/process/download/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.0.tgz", + "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=", + "dev": true + }, + "progress": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/progress/download/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "protobufjs": { + "version": "6.8.8", + "resolved": "http://registry.npm.taobao.org/protobufjs/download/protobufjs-6.8.8.tgz", + "integrity": "sha1-yLTxKC/XqQ5vWxCe0RyEr4KQjnw=", + "requires": { + "@protobufjs/aspromise": "1.1.2", + "@protobufjs/base64": "1.1.2", + "@protobufjs/codegen": "2.0.4", + "@protobufjs/eventemitter": "1.1.0", + "@protobufjs/fetch": "1.1.0", + "@protobufjs/float": "1.0.2", + "@protobufjs/inquire": "1.1.0", + "@protobufjs/path": "1.1.2", + "@protobufjs/pool": "1.1.0", + "@protobufjs/utf8": "1.1.0", + "@types/long": "4.0.0", + "@types/node": "10.12.30", + "long": "4.0.0" + } + }, + "proxy-addr": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.4.tgz", + "integrity": "sha1-7PxzO/Iv+Mb0B/onUye5q2fki5M=", + "dev": true, + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.8.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.1.29", + "resolved": "http://registry.npm.taobao.org/psl/download/psl-1.1.29.tgz", + "integrity": "sha1-YPWA02AXC7cip5fMcEQR5tqFDGc=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "http://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz", + "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.1", + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz", + "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "http://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz", + "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=", + "dev": true, + "requires": { + "duplexify": "3.6.0", + "inherits": "2.0.3", + "pump": "2.0.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz", + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "http://registry.npm.taobao.org/q/download/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/querystringify/download/querystringify-2.1.0.tgz", + "integrity": "sha1-fe2N+/eHncxg0KZErGdUsoOtF+8=", + "dev": true + }, + "randomatic": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/randomatic/download/randomatic-3.1.0.tgz", + "integrity": "sha1-NvLKcI6eVn9e0uwBlJAm1QqhARY=", + "dev": true, + "requires": { + "is-number": "4.0.0", + "kind-of": "6.0.2", + "math-random": "1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-4.0.0.tgz", + "integrity": "sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + } + } + }, + "randombytes": { + "version": "2.0.6", + "resolved": "http://registry.npm.taobao.org/randombytes/download/randombytes-2.0.6.tgz", + "integrity": "sha1-0wLFIpSFiISKjTAMkytEwkIx2oA=", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz", + "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", + "dev": true, + "requires": { + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/range-parser/download/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.3", + "resolved": "http://registry.npm.taobao.org/raw-body/download/raw-body-2.3.3.tgz", + "integrity": "sha1-GzJOzmtXBuFThVvBFIxlu39uoMM=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.23", + "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.23.tgz", + "integrity": "sha1-KXhx9jvlB63Pv8pxXQzQ7thOmmM=", + "dev": true, + "requires": { + "safer-buffer": "2.1.2" + } + } + } + }, + "read-pkg": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/read-pkg/download/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "dev": true, + "requires": { + "normalize-package-data": "2.4.0", + "parse-json": "4.0.0", + "pify": "3.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz", + "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "micromatch": "3.1.10", + "readable-stream": "2.3.6" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + }, + "dependencies": { + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } + } + } + }, + "reduce-css-calc": { + "version": "2.1.5", + "resolved": "http://registry.npm.taobao.org/reduce-css-calc/download/reduce-css-calc-2.1.5.tgz", + "integrity": "sha1-8oNxLwyXCO+VLTKPSxYRLVewNxQ=", + "dev": true, + "requires": { + "css-unit-converter": "1.1.1", + "postcss-value-parser": "3.3.0" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/regenerate/download/regenerate-1.4.0.tgz", + "integrity": "sha1-SoVuxLVuQHfFV1icroXnpMiGmhE=", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "7.0.0", + "resolved": "http://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-7.0.0.tgz", + "integrity": "sha1-EHQFr8xKGQ7F7UUOyqAO0Mr6ekw=", + "dev": true, + "requires": { + "regenerate": "1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz", + "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=", + "dev": true + }, + "regenerator-transform": { + "version": "0.12.4", + "resolved": "http://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.12.4.tgz", + "integrity": "sha1-qptsWfS5e+CA6XJQbFYLO8y/z/A=", + "dev": true, + "requires": { + "private": "0.1.8" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "http://registry.npm.taobao.org/regex-cache/download/regex-cache-0.4.4.tgz", + "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", + "dev": true, + "requires": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + } + }, + "regexpp": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/regexpp/download/regexpp-1.1.0.tgz", + "integrity": "sha1-DjUW3Qt5BPQT0tQZPc5GGMOmias=", + "dev": true + }, + "regexpu-core": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.2.0.tgz", + "integrity": "sha1-o3RPoDgGz/4UbepEIaPnO9zEex0=", + "dev": true, + "requires": { + "regenerate": "1.4.0", + "regenerate-unicode-properties": "7.0.0", + "regjsgen": "0.4.0", + "regjsparser": "0.3.0", + "unicode-match-property-ecmascript": "1.0.4", + "unicode-match-property-value-ecmascript": "1.0.2" + } + }, + "regjsgen": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/regjsgen/download/regjsgen-0.4.0.tgz", + "integrity": "sha1-wetMiaIJJj+HF8eCWRUjkT7eJWE=", + "dev": true + }, + "regjsparser": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/regjsparser/download/regjsparser-0.3.0.tgz", + "integrity": "sha1-PDJtp/z9afoNMyV1pByMDN9YjJY=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "http://registry.npm.taobao.org/relateurl/download/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "renderkid": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/renderkid/download/renderkid-2.0.2.tgz", + "integrity": "sha1-EtMQ8lU2DAetj94lP2yeneNy0qo=", + "dev": true, + "requires": { + "css-select": "1.2.0", + "dom-converter": "0.2.0", + "htmlparser2": "3.3.0", + "strip-ansi": "3.0.1", + "utila": "0.4.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "css-select": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/css-select/download/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.5.1", + "nth-check": "1.0.1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "http://registry.npm.taobao.org/domutils/download/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + } + } + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz", + "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "request": { + "version": "2.88.0", + "resolved": "http://registry.npm.taobao.org/request/download/request-2.88.0.tgz", + "integrity": "sha1-nC/KT301tZLv5Xx/ClXoEFIST+8=", + "dev": true, + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.7", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.1.0", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.20", + "oauth-sign": "0.9.0", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.4.3", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" + } + }, + "request-promise-core": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/request-promise-core/download/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "dev": true, + "requires": { + "lodash": "4.17.11" + } + }, + "request-promise-native": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/request-promise-native/download/request-promise-native-1.0.5.tgz", + "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "dev": true, + "requires": { + "request-promise-core": "1.1.1", + "stealthy-require": "1.1.1", + "tough-cookie": "2.4.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/require-from-string/download/require-from-string-2.0.2.tgz", + "integrity": "sha1-iaf92TgmEmcxjq/hT5wy5ZjDaQk=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "require-package-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz", + "integrity": "sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk=", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/require-uncached/download/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.8.1", + "resolved": "http://registry.npm.taobao.org/resolve/download/resolve-1.8.1.tgz", + "integrity": "sha1-gvHsGaQjrB+9CAsLqwa6NuhKeiY=", + "dev": true, + "requires": { + "path-parse": "1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/resolve-from/download/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "http://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz", + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/rgb-regex/download/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/rgba-regex/download/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "rimraf": { + "version": "2.6.2", + "resolved": "http://registry.npm.taobao.org/rimraf/download/rimraf-2.6.2.tgz", + "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=", + "dev": true, + "requires": { + "glob": "7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz", + "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", + "dev": true, + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/run-async/download/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "2.1.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "1.2.0" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "http://registry.npm.taobao.org/rx-lite/download/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "http://registry.npm.taobao.org/rx-lite-aggregates/download/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "4.0.8" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "0.1.15" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", + "dev": true + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "dev": true, + "requires": { + "glob": "7.1.3", + "lodash": "4.17.11", + "scss-tokenizer": "0.2.3", + "yargs": "7.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "1.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.2" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.3", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "5.0.0" + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "requires": { + "camelcase": "3.0.0" + } + } + } + }, + "sass-loader": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz", + "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", + "dev": true, + "requires": { + "clone-deep": "2.0.2", + "loader-utils": "1.1.0", + "lodash.tail": "4.1.1", + "neo-async": "2.5.2", + "pify": "3.0.0", + "semver": "5.6.0" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "http://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz", + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", + "dev": true + }, + "schema-utils": { + "version": "0.4.7", + "resolved": "http://registry.npm.taobao.org/schema-utils/download/schema-utils-0.4.7.tgz", + "integrity": "sha1-unT1l9K+LqiAExdG7hfQoJPGgYc=", + "dev": true, + "requires": { + "ajv": "6.5.4", + "ajv-keywords": "3.2.0" + }, + "dependencies": { + "ajv": { + "version": "6.5.4", + "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-6.5.4.tgz", + "integrity": "sha1-JH1SdBENtlNwa1UPzCt5fKKM/Fk=", + "dev": true, + "requires": { + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" + } + }, + "ajv-keywords": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", + "dev": true + } + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "requires": { + "js-base64": "2.4.9", + "source-map": "0.4.4" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.4", + "resolved": "http://registry.npm.taobao.org/selfsigned/download/selfsigned-1.10.4.tgz", + "integrity": "sha1-zdfsz8pO12NdR6CL8tXTB0CS4s0=", + "dev": true, + "requires": { + "node-forge": "0.7.5" + } + }, + "semver": { + "version": "5.6.0", + "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.6.0.tgz", + "integrity": "sha1-fnQlb7qknHWqfHogXMInmcrIAAQ=", + "dev": true + }, + "send": { + "version": "0.16.2", + "resolved": "http://registry.npm.taobao.org/send/download/send-0.16.2.tgz", + "integrity": "sha1-bsyh4PjBVtFBWXVZhI32RzCmu8E=", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.3", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.4.1.tgz", + "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "1.5.0", + "resolved": "http://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-1.5.0.tgz", + "integrity": "sha1-GqM2FiyIqJDdrVOEuuvJOmVRYf4=", + "dev": true + }, + "serve-index": { + "version": "1.9.1", + "resolved": "http://registry.npm.taobao.org/serve-index/download/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "1.3.5", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "1.0.3", + "http-errors": "1.6.3", + "mime-types": "2.1.20", + "parseurl": "1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "http://registry.npm.taobao.org/serve-static/download/serve-static-1.13.2.tgz", + "integrity": "sha1-CV6Ecv1bRiN9tQzkhqQ/S4bGzsE=", + "dev": true, + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/set-value/download/set-value-2.0.0.tgz", + "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz", + "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "http://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz", + "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "shallow-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", + "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "dev": true, + "requires": { + "is-extendable": "0.1.1", + "kind-of": "5.1.0", + "mixin-object": "2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "http://registry.npm.taobao.org/shell-quote/download/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, + "requires": { + "array-filter": "0.0.1", + "array-map": "0.0.0", + "array-reduce": "0.0.0", + "jsonify": "0.0.0" + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "http://registry.npm.taobao.org/simple-swizzle/download/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "0.3.2" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.3.2.tgz", + "integrity": "sha1-RXSirlb3qyBolvtDHq7tBm/fjwM=", + "dev": true + } + } + }, + "slash": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz", + "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/slice-ansi/download/slice-ansi-1.0.0.tgz", + "integrity": "sha1-BE8aSdiEL/MHqta1Be0Xi9lQE00=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0" + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "http://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", + "dev": true, + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.2", + "use": "3.1.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "dev": true, + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "http://registry.npm.taobao.org/sockjs/download/sockjs-0.3.19.tgz", + "integrity": "sha1-2Xa76ACve9IK4IWY1YI5NQiZPA0=", + "dev": true, + "requires": { + "faye-websocket": "0.10.0", + "uuid": "3.3.2" + } + }, + "sockjs-client": { + "version": "1.1.5", + "resolved": "http://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.1.5.tgz", + "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=", + "dev": true, + "requires": { + "debug": "2.6.9", + "eventsource": "0.1.6", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.4.3" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "faye-websocket": { + "version": "0.11.1", + "resolved": "http://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "dev": true, + "requires": { + "websocket-driver": "0.7.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz", + "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "http://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.2.tgz", + "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", + "dev": true, + "requires": { + "atob": "2.1.2", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.0.2.tgz", + "integrity": "sha1-GbtAnpG0exrVQVkkP3MSqFjbPC4=", + "dev": true, + "requires": { + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.1" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "http://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.2.0.tgz", + "integrity": "sha1-LqRQrudPKom/uUUZwH/Nb0EyKXc=", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=", + "dev": true, + "requires": { + "spdx-exceptions": "2.2.0", + "spdx-license-ids": "3.0.1" + } + }, + "spdx-license-ids": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.1.tgz", + "integrity": "sha1-4qMDI2ysVLBAMfp6WnnH5wHfhS8=", + "dev": true + }, + "spdy": { + "version": "3.4.7", + "resolved": "http://registry.npm.taobao.org/spdy/download/spdy-3.4.7.tgz", + "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "dev": true, + "requires": { + "debug": "2.6.9", + "handle-thing": "1.2.5", + "http-deceiver": "1.2.7", + "safe-buffer": "5.1.2", + "select-hose": "2.0.0", + "spdy-transport": "2.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "spdy-transport": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/spdy-transport/download/spdy-transport-2.1.0.tgz", + "integrity": "sha1-S7sVqv/tC+791WrWHb3Iuj4st6E=", + "dev": true, + "requires": { + "debug": "2.6.9", + "detect-node": "2.0.4", + "hpack.js": "2.1.6", + "obuf": "1.1.2", + "readable-stream": "2.3.6", + "safe-buffer": "5.1.2", + "wbuf": "1.7.3" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "dev": true, + "requires": { + "extend-shallow": "3.0.2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.15.1", + "resolved": "http://registry.npm.taobao.org/sshpk/download/sshpk-1.15.1.tgz", + "integrity": "sha1-t5oImnMuNGxuBxSDDzYoXNOBkaI=", + "dev": true, + "requires": { + "asn1": "0.2.4", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.2", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "http://registry.npm.taobao.org/ssri/download/ssri-6.0.1.tgz", + "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=", + "dev": true, + "requires": { + "figgy-pudding": "3.5.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "http://registry.npm.taobao.org/stable/download/stable-0.1.8.tgz", + "integrity": "sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88=", + "dev": true + }, + "stackframe": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/stackframe/download/stackframe-1.0.4.tgz", + "integrity": "sha1-NXskqZL5Qny6a1RdlqFO0svKGHs=", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/statuses/download/statuses-1.4.0.tgz", + "integrity": "sha1-u3PURtonlhBu/MG2AaJT1sRr0Ic=", + "dev": true + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "requires": { + "readable-stream": "2.3.6" + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/stealthy-require/download/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "http://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz", + "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "http://registry.npm.taobao.org/stream-http/download/stream-http-2.8.3.tgz", + "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "string.prototype.padend": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/string.prototype.padend/download/string.prototype.padend-3.0.0.tgz", + "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", + "dev": true, + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.12.0", + "function-bind": "1.1.1" + } + }, + "string.prototype.padstart": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/string.prototype.padstart/download/string.prototype.padstart-3.0.0.tgz", + "integrity": "sha1-W8+tOfRkm7LQMSkuGbzwtRDUskI=", + "dev": true, + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.12.0", + "function-bind": "1.1.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/strip-indent/download/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "stylehacks": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/stylehacks/download/stylehacks-4.0.1.tgz", + "integrity": "sha1-MYZZXQR6sN+BPSE+Uci5TguQEPI=", + "dev": true, + "requires": { + "browserslist": "4.2.0", + "postcss": "7.0.5", + "postcss-selector-parser": "3.1.1" + }, + "dependencies": { + "browserslist": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-4.2.0.tgz", + "integrity": "sha1-Pl5e33+pdY3tCIXPiMHkvnU6WRw=", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000890", + "electron-to-chromium": "1.3.78", + "node-releases": "1.0.0-alpha.12" + } + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "http://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "4.2.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + }, + "svgo": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/svgo/download/svgo-1.1.1.tgz", + "integrity": "sha1-EjhLAzNbzs2Fz6X04zdf7WccuYU=", + "dev": true, + "requires": { + "coa": "2.0.1", + "colors": "1.1.2", + "css-select": "2.0.0", + "css-select-base-adapter": "0.1.0", + "css-tree": "1.0.0-alpha.28", + "css-url-regex": "1.1.0", + "csso": "3.5.1", + "js-yaml": "3.12.0", + "mkdirp": "0.5.1", + "object.values": "1.0.4", + "sax": "1.2.4", + "stable": "0.1.8", + "unquote": "1.1.1", + "util.promisify": "1.0.0" + } + }, + "table": { + "version": "4.0.2", + "resolved": "http://registry.npm.taobao.org/table/download/table-4.0.2.tgz", + "integrity": "sha1-ozRHN1OR52atNNNIbm4q7chNLjY=", + "dev": true, + "requires": { + "ajv": "5.5.2", + "ajv-keywords": "2.1.1", + "chalk": "2.4.1", + "lodash": "4.17.11", + "slice-ansi": "1.0.0", + "string-width": "2.1.1" + } + }, + "tapable": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/tapable/download/tapable-1.1.0.tgz", + "integrity": "sha1-DQdqFy49m6CI/SJysmaPuNGUt4w=", + "dev": true + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "thread-loader": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/thread-loader/download/thread-loader-1.2.0.tgz", + "integrity": "sha1-Nd7bI88pSvu85sRcEzm5UO0X56Q=", + "dev": true, + "requires": { + "async": "2.6.1", + "loader-runner": "2.3.1", + "loader-utils": "1.1.0" + }, + "dependencies": { + "async": { + "version": "2.6.1", + "resolved": "http://registry.npm.taobao.org/async/download/async-2.6.1.tgz", + "integrity": "sha1-skWiPKcZMAROxT+kaqAKPofGphA=", + "dev": true, + "requires": { + "lodash": "4.17.11" + } + } + } + }, + "through": { + "version": "2.3.8", + "resolved": "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/through2/download/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.6", + "xtend": "4.0.1" + } + }, + "thunky": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/thunky/download/thunky-1.0.2.tgz", + "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.10", + "resolved": "http://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.10.tgz", + "integrity": "sha1-HSjj0qrfHVpZlsTp+VYBzQU0gK4=", + "dev": true, + "requires": { + "setimmediate": "1.0.5" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/timsort/download/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "http://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz", + "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "dev": true, + "requires": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + } + } + }, + "topo": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/topo/download/topo-3.0.0.tgz", + "integrity": "sha1-N+SMMw7+rHhFOOCs0+YspeIx/no=", + "dev": true, + "requires": { + "hoek": "5.0.4" + } + }, + "toposort": { + "version": "1.0.7", + "resolved": "http://registry.npm.taobao.org/toposort/download/toposort-1.0.7.tgz", + "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.4.3.tgz", + "integrity": "sha1-U/Nto/R3g7CSWvoG/587FlKA94E=", + "dev": true, + "requires": { + "psl": "1.1.29", + "punycode": "1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "requires": { + "glob": "7.1.3" + } + }, + "tryer": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/tryer/download/tryer-1.0.1.tgz", + "integrity": "sha1-8shUBoALmw90yfdGW4HqrSQSUvg=", + "dev": true + }, + "tslib": { + "version": "1.9.3", + "resolved": "http://registry.npm.taobao.org/tslib/download/tslib-1.9.3.tgz", + "integrity": "sha1-1+TdeSRdhUKMTX5IIqeZF5VMooY=", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "http://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-is": { + "version": "1.6.16", + "resolved": "http://registry.npm.taobao.org/type-is/download/type-is-1.6.16.tgz", + "integrity": "sha1-+JzjQVQcZysl7nrjxz3uOyvlAZQ=", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.20" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "3.4.9", + "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.9.tgz", + "integrity": "sha1-rwLxgMEgfXZDLkc+0koo9KeCuuM=", + "dev": true, + "requires": { + "commander": "2.17.1", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "uglifyjs-webpack-plugin": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/uglifyjs-webpack-plugin/download/uglifyjs-webpack-plugin-1.3.0.tgz", + "integrity": "sha1-dfVIFghYFjoIZD4IbV/v4YpdZ94=", + "dev": true, + "requires": { + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "schema-utils": "0.4.7", + "serialize-javascript": "1.5.0", + "source-map": "0.6.1", + "uglify-es": "3.3.9", + "webpack-sources": "1.3.0", + "worker-farm": "1.6.0" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.13.0.tgz", + "integrity": "sha1-aWS8pnaF33wfFDDFhPB9dZeIW5w=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "http://registry.npm.taobao.org/uglify-es/download/uglify-es-3.3.9.tgz", + "integrity": "sha1-DBxPBwC+2NvBJM2zBNJZLKID5nc=", + "dev": true, + "requires": { + "commander": "2.13.0", + "source-map": "0.6.1" + } + } + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg=", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw=", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "1.0.4", + "unicode-property-aliases-ecmascript": "1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.0.2.tgz", + "integrity": "sha1-nx3HaSbWzPRSMQVk/YNKzgWWY9Q=", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.0.4.tgz", + "integrity": "sha1-WlM/MbQxfqdvF9gH+g0RZUYRHdA=", + "dev": true + }, + "union-value": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/union-value/download/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "http://registry.npm.taobao.org/set-value/download/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/uniq/download/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/uniqs/download/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz", + "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=", + "dev": true, + "requires": { + "unique-slug": "2.0.1" + } + }, + "unique-slug": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.1.tgz", + "integrity": "sha1-Xp7cbRzo+yZNsYpQfvm9hURFHKY=", + "dev": true, + "requires": { + "imurmurhash": "0.1.4" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz", + "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/unquote/download/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "http://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "upath": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/upath/download/upath-1.1.0.tgz", + "integrity": "sha1-NSVll+RqWB20eT0M5H+prr/J+r0=", + "dev": true + }, + "upper-case": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "http://registry.npm.taobao.org/uri-js/download/uri-js-4.2.2.tgz", + "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", + "dev": true, + "requires": { + "punycode": "2.1.1" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "http://registry.npm.taobao.org/url/download/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-loader": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/url-loader/download/url-loader-1.1.2.tgz", + "integrity": "sha1-uXHRkbg69pPF4/6kBkvp4fLX+Ng=", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "mime": "2.3.1", + "schema-utils": "1.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.5.4", + "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-6.5.4.tgz", + "integrity": "sha1-JH1SdBENtlNwa1UPzCt5fKKM/Fk=", + "dev": true, + "requires": { + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" + } + }, + "ajv-keywords": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "requires": { + "ajv": "6.5.4", + "ajv-errors": "1.0.0", + "ajv-keywords": "3.2.0" + } + } + } + }, + "url-parse": { + "version": "1.4.3", + "resolved": "http://registry.npm.taobao.org/url-parse/download/url-parse-1.4.3.tgz", + "integrity": "sha1-v67kVciJAjIZ11fgRfpqaE7DbBU=", + "dev": true, + "requires": { + "querystringify": "2.1.0", + "requires-port": "1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "http://registry.npm.taobao.org/use/download/use-3.1.1.tgz", + "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=", + "dev": true + }, + "util": { + "version": "0.10.4", + "resolved": "http://registry.npm.taobao.org/util/download/util-0.10.4.tgz", + "integrity": "sha1-OqASW/5mikZy3liFfTrOJ+y3aQE=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz", + "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=", + "dev": true, + "requires": { + "define-properties": "1.1.3", + "object.getownpropertydescriptors": "2.0.3" + } + }, + "utila": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/utila/download/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "http://registry.npm.taobao.org/uuid/download/uuid-3.3.2.tgz", + "integrity": "sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", + "dev": true, + "requires": { + "spdx-correct": "3.0.2", + "spdx-expression-parse": "3.0.0" + } + }, + "vant": { + "version": "1.4.4", + "resolved": "http://npm.leapcloud.cn:4873/vant/-/vant-1.4.4.tgz", + "integrity": "sha1-Xgy2ugBmX1ZhC9N2aYSztI5P81o=", + "requires": { + "@babel/runtime": "7.1.5", + "vue-lazyload": "1.2.3" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.5", + "resolved": "http://npm.leapcloud.cn:4873/@babel%2fruntime/-/runtime-7.1.5.tgz", + "integrity": "sha1-QXCQdkHPH2FQj1Y+zjclFQzG/jk=", + "requires": { + "regenerator-runtime": "0.12.1" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "resolved": "http://npm.leapcloud.cn:4873/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha1-+hpxVEdkwDb4xJsToIsllMn4oN4=" + } + } + }, + "vary": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vee-validate": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/vee-validate/-/vee-validate-2.1.4.tgz", + "integrity": "sha512-71yu8floUnMEdkwswaF9WJc5Xubc5dhIG6MRc/H0egQnP34Y14WwNweK9z31Nf2Zi6JB2H/36EKt0Mqco8R/Nw==" + }, + "vendors": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/vendors/download/vendors-1.0.2.tgz", + "integrity": "sha1-f8te759WI7FWvOqJ7DfWNnbyGAE=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "http://registry.npm.taobao.org/vm-browserify/download/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "vue": { + "version": "2.5.17", + "resolved": "http://registry.npm.taobao.org/vue/download/vue-2.5.17.tgz", + "integrity": "sha1-D4eJrXGL5oyhhyYpgy7VM1icato=" + }, + "vue-eslint-parser": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/vue-eslint-parser/download/vue-eslint-parser-2.0.3.tgz", + "integrity": "sha1-wmjJbG2Uz+PZOKX3WTlZsMozYNE=", + "dev": true, + "requires": { + "debug": "3.2.6", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "1.0.0", + "espree": "3.5.4", + "esquery": "1.0.1", + "lodash": "4.17.11" + } + }, + "vue-hot-reload-api": { + "version": "2.3.1", + "resolved": "http://registry.npm.taobao.org/vue-hot-reload-api/download/vue-hot-reload-api-2.3.1.tgz", + "integrity": "sha1-stPZVAKoEWAjgHg+pPVm64dVaaI=", + "dev": true + }, + "vue-lazyload": { + "version": "1.2.3", + "resolved": "http://npm.leapcloud.cn:4873/vue-lazyload/-/vue-lazyload-1.2.3.tgz", + "integrity": "sha1-kB+ewVx+bKeHgaK65KNDaGve2yw=" + }, + "vue-loader": { + "version": "15.4.2", + "resolved": "http://registry.npm.taobao.org/vue-loader/download/vue-loader-15.4.2.tgz", + "integrity": "sha1-gSuybkR907hMSF62NBkNkUzhJeI=", + "dev": true, + "requires": { + "@vue/component-compiler-utils": "2.2.0", + "hash-sum": "1.0.2", + "loader-utils": "1.1.0", + "vue-hot-reload-api": "2.3.1", + "vue-style-loader": "4.1.2" + } + }, + "vue-router": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/vue-router/download/vue-router-3.0.1.tgz", + "integrity": "sha1-2bBa2cdCC6D2JtZQDWk+YAkswek=" + }, + "vue-style-loader": { + "version": "4.1.2", + "resolved": "http://registry.npm.taobao.org/vue-style-loader/download/vue-style-loader-4.1.2.tgz", + "integrity": "sha1-3t80mAbyXOtOZPOtfApE+6c1/Pg=", + "dev": true, + "requires": { + "hash-sum": "1.0.2", + "loader-utils": "1.1.0" + } + }, + "vue-template-compiler": { + "version": "2.5.17", + "resolved": "http://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.5.17.tgz", + "integrity": "sha1-UqSgeMMn3rk3SCpQmuhcBvNGw8s=", + "dev": true, + "requires": { + "de-indent": "1.0.2", + "he": "1.1.1" + } + }, + "vue-template-es2015-compiler": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.6.0.tgz", + "integrity": "sha1-3EJpcTMwLOMBdSQ1amxht7abShg=", + "dev": true + }, + "vuelidation": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vuelidation/-/vuelidation-1.1.0.tgz", + "integrity": "sha512-6cnc9G63Bo9t4dESZHILh9J8zMggWnMGOAWBaxvVYCjFol4FbBAGq/oBh74KHJBHXL9FmRd2hUvRnVK8Sb8WBg==" + }, + "watchpack": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/watchpack/download/watchpack-1.6.0.tgz", + "integrity": "sha1-S8EsLr6KonenHx0/FNaFx7RGzQA=", + "dev": true, + "requires": { + "chokidar": "2.0.4", + "graceful-fs": "4.1.11", + "neo-async": "2.5.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "http://registry.npm.taobao.org/wbuf/download/wbuf-1.7.3.tgz", + "integrity": "sha1-wdjRSTFtPqhShIiVy2oL/oh7h98=", + "dev": true, + "requires": { + "minimalistic-assert": "1.0.1" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "1.0.3" + } + }, + "webpack": { + "version": "4.20.2", + "resolved": "http://registry.npm.taobao.org/webpack/download/webpack-4.20.2.tgz", + "integrity": "sha1-ifZIa2uydqkbCCNFPTd1AfxiW1o=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.8", + "@webassemblyjs/helper-module-context": "1.7.8", + "@webassemblyjs/wasm-edit": "1.7.8", + "@webassemblyjs/wasm-parser": "1.7.8", + "acorn": "5.7.3", + "acorn-dynamic-import": "3.0.0", + "ajv": "6.5.4", + "ajv-keywords": "3.2.0", + "chrome-trace-event": "1.0.0", + "enhanced-resolve": "4.1.0", + "eslint-scope": "4.0.0", + "json-parse-better-errors": "1.0.2", + "loader-runner": "2.3.1", + "loader-utils": "1.1.0", + "memory-fs": "0.4.1", + "micromatch": "3.1.10", + "mkdirp": "0.5.1", + "neo-async": "2.5.2", + "node-libs-browser": "2.1.0", + "schema-utils": "0.4.7", + "tapable": "1.1.0", + "uglifyjs-webpack-plugin": "1.3.0", + "watchpack": "1.6.0", + "webpack-sources": "1.3.0" + }, + "dependencies": { + "ajv": { + "version": "6.5.4", + "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-6.5.4.tgz", + "integrity": "sha1-JH1SdBENtlNwa1UPzCt5fKKM/Fk=", + "dev": true, + "requires": { + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" + } + }, + "ajv-keywords": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "eslint-scope": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.0.tgz", + "integrity": "sha1-UL8wcekzi83EMzF5Sgy1M/ATYXI=", + "dev": true, + "requires": { + "esrecurse": "4.2.1", + "estraverse": "4.2.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "webpack-bundle-analyzer": { + "version": "2.13.1", + "resolved": "http://registry.npm.taobao.org/webpack-bundle-analyzer/download/webpack-bundle-analyzer-2.13.1.tgz", + "integrity": "sha1-B9IXbG6Gw83OTCPlb64qe2tK1SY=", + "dev": true, + "requires": { + "acorn": "5.7.3", + "bfj-node4": "5.3.1", + "chalk": "2.4.1", + "commander": "2.17.1", + "ejs": "2.6.1", + "express": "4.16.4", + "filesize": "3.6.1", + "gzip-size": "4.1.0", + "lodash": "4.17.11", + "mkdirp": "0.5.1", + "opener": "1.5.1", + "ws": "4.1.0" + } + }, + "webpack-chain": { + "version": "4.12.1", + "resolved": "http://registry.npm.taobao.org/webpack-chain/download/webpack-chain-4.12.1.tgz", + "integrity": "sha1-bIQ5u7KrVQlS1g4eqTGRQZBsAqY=", + "dev": true, + "requires": { + "deepmerge": "1.5.2", + "javascript-stringify": "1.6.0" + } + }, + "webpack-dev-middleware": { + "version": "3.4.0", + "resolved": "http://registry.npm.taobao.org/webpack-dev-middleware/download/webpack-dev-middleware-3.4.0.tgz", + "integrity": "sha1-ETL+zJAm/ZDw7O2sXL/3XR+0WJA=", + "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "2.3.1", + "range-parser": "1.2.0", + "webpack-log": "2.0.0" + } + }, + "webpack-dev-server": { + "version": "3.1.9", + "resolved": "http://registry.npm.taobao.org/webpack-dev-server/download/webpack-dev-server-3.1.9.tgz", + "integrity": "sha1-izIWdiTS+v9A3O3Cy84X7R800+A=", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "3.5.0", + "chokidar": "2.0.4", + "compression": "1.7.3", + "connect-history-api-fallback": "1.5.0", + "debug": "3.2.6", + "del": "3.0.0", + "express": "4.16.4", + "html-entities": "1.2.1", + "http-proxy-middleware": "0.18.0", + "import-local": "2.0.0", + "internal-ip": "3.0.1", + "ip": "1.1.5", + "killable": "1.0.1", + "loglevel": "1.6.1", + "opn": "5.4.0", + "portfinder": "1.0.17", + "schema-utils": "1.0.0", + "selfsigned": "1.10.4", + "serve-index": "1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.1.5", + "spdy": "3.4.7", + "strip-ansi": "3.0.1", + "supports-color": "5.5.0", + "webpack-dev-middleware": "3.4.0", + "webpack-log": "2.0.0", + "yargs": "12.0.2" + }, + "dependencies": { + "ajv": { + "version": "6.5.4", + "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-6.5.4.tgz", + "integrity": "sha1-JH1SdBENtlNwa1UPzCt5fKKM/Fk=", + "dev": true, + "requires": { + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" + } + }, + "ajv-keywords": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "del": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/del/download/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dev": true, + "requires": { + "globby": "6.1.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "p-map": "1.2.0", + "pify": "3.0.0", + "rimraf": "2.6.2" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "globby": { + "version": "6.1.0", + "resolved": "http://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.3", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "requires": { + "ajv": "6.5.4", + "ajv-errors": "1.0.0", + "ajv-keywords": "3.2.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/webpack-log/download/webpack-log-2.0.0.tgz", + "integrity": "sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8=", + "dev": true, + "requires": { + "ansi-colors": "3.1.0", + "uuid": "3.3.2" + } + }, + "webpack-merge": { + "version": "4.1.4", + "resolved": "http://registry.npm.taobao.org/webpack-merge/download/webpack-merge-4.1.4.tgz", + "integrity": "sha1-D9446r8tX9hSUcJKWoxI+KP063s=", + "dev": true, + "requires": { + "lodash": "4.17.11" + } + }, + "webpack-sources": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.3.0.tgz", + "integrity": "sha1-KijcufH0X+lg2PFJMlK17mUw+oU=", + "dev": true, + "requires": { + "source-list-map": "2.0.1", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "websocket-driver": { + "version": "0.7.0", + "resolved": "http://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.7.0.tgz", + "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "dev": true, + "requires": { + "http-parser-js": "0.4.13", + "websocket-extensions": "0.1.3" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.3.tgz", + "integrity": "sha1-XS/yKXcAPsaHpLhwc9+7rBRszyk=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/which/download/which-1.3.1.tgz", + "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "2.1.1" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "worker-farm": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/worker-farm/download/worker-farm-1.6.0.tgz", + "integrity": "sha1-rsxAWXb6talVJhgIRvDboojzpKA=", + "dev": true, + "requires": { + "errno": "0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/write/download/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "0.5.1" + } + }, + "ws": { + "version": "4.1.0", + "resolved": "http://registry.npm.taobao.org/ws/download/ws-4.1.0.tgz", + "integrity": "sha1-qXm119TaaL9U7+BAiWfDJIaacok=", + "dev": true, + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.2" + } + }, + "xregexp": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/xregexp/download/xregexp-4.0.0.tgz", + "integrity": "sha1-5pgYneSd0qGMxWh7BeF8jkOUMCA=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz", + "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "12.0.2", + "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-12.0.2.tgz", + "integrity": "sha1-/lgjQ2k5KvM+y+9TgZFx7/D1qtw=", + "dev": true, + "requires": { + "cliui": "4.1.0", + "decamelize": "2.0.0", + "find-up": "3.0.0", + "get-caller-file": "1.0.3", + "os-locale": "3.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "4.0.0", + "yargs-parser": "10.1.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "dev": true, + "requires": { + "locate-path": "3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz", + "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", + "dev": true, + "requires": { + "p-locate": "3.0.0", + "path-exists": "3.0.0" + } + }, + "p-limit": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/p-limit/download/p-limit-2.0.0.tgz", + "integrity": "sha1-5iTtVO6MRgp3izyfNnBJb/ileuw=", + "dev": true, + "requires": { + "p-try": "2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz", + "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", + "dev": true, + "requires": { + "p-limit": "2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/p-try/download/p-try-2.0.0.tgz", + "integrity": "sha1-hQgLuHxkaI+keZb+j3376CEXYLE=", + "dev": true + } + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-10.1.0.tgz", + "integrity": "sha1-cgImW4n36eny5XZeD+c1qQXtuqg=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + } + }, + "yorkie": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/yorkie/download/yorkie-2.0.0.tgz", + "integrity": "sha1-kkEZEtQ1IU4SxRwq4Qk+VLa7g9k=", + "dev": true, + "requires": { + "execa": "0.8.0", + "is-ci": "1.2.1", + "normalize-path": "1.0.0", + "strip-indent": "2.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.3", + "shebang-command": "1.2.0", + "which": "1.3.1" + } + }, + "execa": { + "version": "0.8.0", + "resolved": "http://registry.npm.taobao.org/execa/download/execa-0.8.0.tgz", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "normalize-path": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/normalize-path/download/normalize-path-1.0.0.tgz", + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", + "dev": true + } + } + } + } +} diff --git a/litemall-vue/package.json b/litemall-vue/package.json new file mode 100644 index 00000000..71a8f032 --- /dev/null +++ b/litemall-vue/package.json @@ -0,0 +1,40 @@ +{ + "name": "lite-mall", + "version": "0.1.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint", + "mock": "json-server ./mock/db.json" + }, + "dependencies": { + "@xkeshi/vue-countdown": "^1.0.1", + "axios": "^0.18.0", + "dayjs": "^1.7.7", + "js-md5": "^0.7.3", + "lodash": "^4.17.11", + "vant": "^1.4.4", + "vee-validate": "^2.1.4", + "vue": "^2.5.17", + "vue-router": "^3.0.1", + "protobufjs": "^6.8.6", + "vuelidation": "^1.1.0" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "^3.0.5", + "@vue/cli-plugin-eslint": "^3.0.5", + "@vue/cli-service": "^3.0.5", + "@vue/eslint-config-prettier": "^3.0.5", + "babel-plugin-import": "^1.9.1", + "babel-plugin-lodash": "^3.3.4", + "node-sass": "^4.9.3", + "sass-loader": "^7.1.0", + "vue-template-compiler": "^2.5.17" + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not ie <= 8" + ] +} \ No newline at end of file diff --git a/litemall-vue/public/favicon.ico b/litemall-vue/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..219c2e75ce96d27e00bbc09a49ee0f1c4cf83cff GIT binary patch literal 4286 zcmb`K4@{JG7{}k^j!uq4fsO+c1=HgYkUxe%!ojh`Er$ivz&WgljYhV_R*spe%`%%& ztTnB)6_$Tc)J?JmMu3LOriC-D+?+ZG)=0q&Ipoi`=lON-+j|G$(e<#0-@oVietz%! z`@O&SJxS8gUu2}j|E0Zwl4O=7DVm(RBs)3x3!^bFESz%7$Ui4POMZiV*y&v7J|5#3 zj{U!EAqh2*GYcL%$8rwm{#T2l#G~Y+n7)A~1jHmGI5h`BDUZNtO@b~Ua8#T#mo->x zB34Ynx5*Vvqcsthm#UCjcLDa3{m5<~aB=&IJD9)wdp!93M)=LJD0xl|)?!UhYz+k| z`G%Qu5MNyn`zePD&z-Ms+fUv>%o|@oA2walacZ*mc=jR!%PFfS^^{ppJllAVw6!WD>q zZ95)5d`ZdWwVGbMN<9Z=FiUL)YFs84agn8KkUhrzPCN7qrskDG>*uf58(sJDK~U;K zByKw@=D}+hmiv@C?lQ5MDO)8~#CTwm4ZN4s_tJiLf3qSVFUFuk94MwpJna6Iq#JR4O1BqK31y9zM%c)DA!K{^Ut2LQ@MvT+F zPjBc{bhD1%fn5PKdpI$v3v+2XyzdqmFT(qw;Jj)8T} zHkUDV+`a0&@3e*hMN8{H89tK?a+}!$JTF6Jw8G%$Rd1dqV)zW@>$n$Zyz%MFR?0m0 zlG)doubUi1@0Guwd**4hIuRRQw8ASk&uiX}R(G!4X14Nz-L%_lKEDH0drr+~cD&3tMkOfE0DoI>f7I&t zz2;{$c8O{)*XjcExSpOXtv8q#d|`PCZi};)`>adLv1CUBlD9U%Xo-hTr^E8)%TZffi{|EL?B25n zrR&~8Le;@h^GL2aNqbML=5n1`?q;HnOXMQfl(_`SpBzI~bu|VC2Ef+U)rExQ`Dkx% z7j5@{EiElbdgWbZ4t$=E@h!-VV0XB)9YbX|xtK%Av!w#j*Vl)0=gy&;=F-^M=#F)1 z*VP?B!UtcA_2DyB)^e7t&5ZFZjs~xiqo$@tXqT0h!Dh1w9~l`@cy)DkC@(KZTU(pb zH#|IyIQt@(GnciTnyl@K@lU8Dm6er3x2dTK`}XZaNlA&qxp?s+0s;b%l9B?G$pnYP zp^W9_<+)$?5z=GL30Y`p=-SrSR`50V^z@*hpg>`Cc6K5tC`hcy>C>k%I5?<`+3j|j z&uhJOLQuD0yTMNob%_;qrSdg%unv*dHMPI{XjB>mHknVXwC%-1gOMJ_u!I*^l-(?`Mu-iUjc zyFjDS9I#rg-RbG+!xoF>8nw4m?nHlQO6Z*eY|vmtlGYDNQkFxKB6=lh$`wh{w@8wf meFOab + + + + + + + + + + liteMall + + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/litemall-vue/public/vconsole.min.js b/litemall-vue/public/vconsole.min.js new file mode 100644 index 00000000..1515253f --- /dev/null +++ b/litemall-vue/public/vconsole.min.js @@ -0,0 +1,7 @@ +/*! + * vconsole v2.4.0 (https://github.com/WechatFE/vConsole) + * Copyright 2016, WechatFE Team + * MIT license + */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.vConsole=t():e.vConsole=t()}(this,function(){return function(e){function t(n){if(o[n])return o[n].exports;var l=o[n]={exports:{},id:n,loaded:!1};return e[n].call(l.exports,l,l.exports,t),l.loaded=!0,l.exports}var o={};return t.m=e,t.c=o,t.p="",t(0)}([function(e,t,o){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var l=o(1),i=n(l),r=o(15),a=n(r),c=o(16),s=n(c),d=o(23),u=n(d),v=o(25),f=n(v),p=new i["default"];p.addPlugin(s["default"]),p.addPlugin(u["default"]),p.addPlugin(f["default"]),p.VConsolePlugin=a["default"],t["default"]=p,e.exports=t["default"]},function(e,t,o){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function l(e){return e&&e.__esModule?e:{"default":e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var o=0;odocument.documentElement.offsetWidth&&(n=document.documentElement.offsetWidth-o.offsetWidth),l+o.offsetHeight>document.documentElement.offsetHeight&&(l=document.documentElement.offsetHeight-o.offsetHeight),0>n&&(n=0),0>l&&(l=0),this.switchPos.x=n,this.switchPos.y=l,v["default"].one(".vc-switch").style.right=n+"px",v["default"].one(".vc-switch").style.bottom=l+"px"),v["default"].one(".vc-mask",this.$dom).style.display="none"}},{key:"_mockTap",value:function(){var e=700,t=10,o=void 0,n=void 0,l=void 0,i=!1,r=null;this.$dom.addEventListener("touchstart",function(e){if(void 0===o){var t=e.targetTouches[0];n=t.pageX,l=t.pageY,o=e.timeStamp,r=e.target.nodeType===Node.TEXT_NODE?e.target.parentNode:e.target}},!1),this.$dom.addEventListener("touchmove",function(e){var o=e.changedTouches[0];(Math.abs(o.pageX-n)>t||Math.abs(o.pageY-l)>t)&&(i=!0)}),this.$dom.addEventListener("touchend",function(t){if(i===!1&&t.timeStamp-o0){var n=o.touches[0].pageX-e.switchPos.startX,l=o.touches[0].pageY-e.switchPos.startY,i=e.switchPos.x-n,r=e.switchPos.y-l;i+t.offsetWidth>document.documentElement.offsetWidth&&(i=document.documentElement.offsetWidth-t.offsetWidth),r+t.offsetHeight>document.documentElement.offsetHeight&&(r=document.documentElement.offsetHeight-t.offsetHeight),0>i&&(i=0),0>r&&(r=0),t.style.right=i+"px",t.style.bottom=r+"px",e.switchPos.endX=i,e.switchPos.endY=r,o.preventDefault()}}),v["default"].bind(v["default"].one(".vc-switch",e.$dom),"click",function(){e.show()}),v["default"].bind(v["default"].one(".vc-hide",e.$dom),"click",function(){e.hide()}),v["default"].bind(v["default"].one(".vc-mask",e.$dom),"click",function(t){return t.target!=v["default"].one(".vc-mask")?!1:void e.hide()}),v["default"].delegate(v["default"].one(".vc-tabbar",e.$dom),"click",".vc-tab",function(t){var o=this.dataset.tab;o!=e.activedTab&&e.showTab(o)}),v["default"].bind(v["default"].one(".vc-panel",e.$dom),"transitionend webkitTransitionEnd oTransitionEnd otransitionend",function(t){return t.target!=v["default"].one(".vc-panel")?!1:void(v["default"].hasClass(e.$dom,"vc-toggle")||(t.target.style.display="none"))})}},{key:"_autoRun",value:function(){this.isReady=!0;for(var e in this.pluginList)this._initPlugin(this.pluginList[e]);this.tabList.length>0&&this.showTab(this.tabList[0])}},{key:"_initPlugin",value:function(e){var t=this;e.trigger("init"),e.trigger("renderTab",function(o){t.tabList.push(e.id);var n=v["default"].render(b["default"],{id:e.id,name:e.name});v["default"].one(".vc-tabbar",t.$dom).appendChild(n);var l=v["default"].render(m["default"],{id:e.id});o&&(d.isString(o)?l.innerHTML+=o:d.isFunction(o.appendTo)?o.appendTo(l):d.isElement(o)&&l.appendChild(o)),v["default"].one(".vc-content",t.$dom).appendChild(l)}),e.trigger("addTopBar",function(o){if(o)for(var n=v["default"].one(".vc-topbar",t.$dom),l=function(t){var l=o[t],i=v["default"].render(_["default"],{name:l.name||"Undefined",className:l.className||"",pluginID:e.id});if(l.data)for(var r in l.data)i.dataset[r]=l.data[r];d.isFunction(l.onClick)&&v["default"].bind(i,"click",function(t){var o=l.onClick.call(i);o===!1||(v["default"].removeClass(v["default"].all(".vc-topbar-"+e.id),"vc-actived"),v["default"].addClass(i,"vc-actived"))}),n.appendChild(i)},i=0;i0?v["default"].addClass(v["default"].one(".vc-content",this.$dom),"vc-has-topbar"):v["default"].removeClass(v["default"].one(".vc-content",this.$dom),"vc-has-topbar"),v["default"].removeClass(v["default"].all(".vc-tool",this.$dom),"vc-toggle"),v["default"].addClass(v["default"].all(".vc-tool-"+e,this.$dom),"vc-toggle"),this._triggerPluginEvent(this.activedTab,"hide"),this.activedTab=e,this._triggerPluginEvent(this.activedTab,"show")}}]),e}();t["default"]=k,e.exports=t["default"]},function(e,t){e.exports={name:"vconsole",version:"2.4.0",description:"A lightweight, extendable front-end developer tool for mobile web page.",homepage:"https://github.com/WechatFE/vConsole",main:"dist/vconsole.min.js",scripts:{test:"mocha",dist:"webpack && npm test"},keywords:["console","debug","mobile"],repository:{type:"git",url:"git+https://github.com/WechatFE/vConsole.git"},dependencies:{},devDependencies:{"babel-core":"^6.7.7","babel-loader":"^6.2.4","babel-plugin-add-module-exports":"^0.1.4","babel-preset-es2015":"^6.6.0","babel-preset-stage-3":"^6.5.0",chai:"^3.5.0","css-loader":"^0.23.1","extract-text-webpack-plugin":"^1.0.1","html-loader":"^0.4.3",jsdom:"^9.2.1","json-loader":"^0.5.4",less:"^2.5.3","less-loader":"^2.2.3",mocha:"^2.5.3","style-loader":"^0.13.1",webpack:"~1.12.11"},author:"WechatFE Team",license:"MIT"}},function(e,t){"use strict";function o(e){var t=e>0?new Date(e):new Date,o=t.getDate()<10?"0"+t.getDate():t.getDate(),n=t.getMonth()<9?"0"+(t.getMonth()+1):t.getMonth()+1,l=t.getFullYear(),i=t.getHours()<10?"0"+t.getHours():t.getHours(),r=t.getMinutes()<10?"0"+t.getMinutes():t.getMinutes(),a=t.getSeconds()<10?"0"+t.getSeconds():t.getSeconds(),c=t.getMilliseconds()<10?"0"+t.getMilliseconds():t.getMilliseconds();return 100>c&&(c="0"+c),{time:+t,year:l,month:n,day:o,hour:i,minute:r,second:a,millisecond:c}}function n(e){return"[object Number]"==Object.prototype.toString.call(e)}function l(e){return"[object String]"==Object.prototype.toString.call(e)}function i(e){return"[object Array]"==Object.prototype.toString.call(e)}function r(e){return"[object Boolean]"==Object.prototype.toString.call(e)}function a(e){return"[object Undefined]"==Object.prototype.toString.call(e)}function c(e){return"[object Null]"==Object.prototype.toString.call(e)}function s(e){return"[object Symbol]"==Object.prototype.toString.call(e)}function d(e){return!("[object Object]"!=Object.prototype.toString.call(e)&&(n(e)||l(e)||r(e)||i(e)||c(e)||u(e)||a(e)||s(e)))}function u(e){return"[object Function]"==Object.prototype.toString.call(e)}function v(e){return"object"===("undefined"==typeof HTMLElement?"undefined":y(HTMLElement))?e instanceof HTMLElement:e&&"object"===("undefined"==typeof e?"undefined":y(e))&&null!==e&&1===e.nodeType&&"string"==typeof e.nodeName}function f(e){return document.createElement("a").appendChild(document.createTextNode(e)).parentNode.innerHTML}function p(e){function t(e){for(var t=p.length-1;t>=0;t--)if(p[t].child==e)return!0;return!1}function o(e){if(d(e)){if(t(e))return void(v+="CircularObject");p.push({parent:parent,child:e});var g=Object.keys(e);v+="{",f++;for(var b=0;b0&&(n=Array.prototype.slice.call(o)),n},a.addClass=function(e,t){if(e){(0,l.isArray)(e)||(e=[e]);for(var o=0;o-1||(i.push(t),e[o].className=i.join(" "))}}},a.removeClass=function(e,t){if(e){(0,l.isArray)(e)||(e=[e]);for(var o=0;o=0&&y.splice(t,1)}function a(e){var t=document.createElement("style");return t.type="text/css",i(e,t),t}function c(e){var t=document.createElement("link");return t.rel="stylesheet",i(e,t),t}function s(e,t){var o,n,l;if(t.singleton){var i=m++;o=h||(h=a(t)),n=d.bind(null,o,i,!1),l=d.bind(null,o,i,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(o=c(t),n=v.bind(null,o),l=function(){r(o),o.href&&URL.revokeObjectURL(o.href)}):(o=a(t),n=u.bind(null,o),l=function(){r(o)});return n(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;n(e=t)}else l()}}function d(e,t,o,n){var l=o?"":n.css;if(e.styleSheet)e.styleSheet.cssText=_(t,l);else{var i=document.createTextNode(l),r=e.childNodes;r[t]&&e.removeChild(r[t]),r.length?e.insertBefore(i,r[t]):e.appendChild(i)}}function u(e,t){var o=t.css,n=t.media;if(n&&e.setAttribute("media",n),e.styleSheet)e.styleSheet.cssText=o;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(o))}}function v(e,t){var o=t.css,n=t.sourceMap;n&&(o+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(n))))+" */");var l=new Blob([o],{type:"text/css"}),i=e.href;e.href=URL.createObjectURL(l),i&&URL.revokeObjectURL(i)}var f={},p=function(e){var t;return function(){return"undefined"==typeof t&&(t=e.apply(this,arguments)),t}},g=p(function(){return/msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase())}),b=p(function(){return document.head||document.getElementsByTagName("head")[0]}),h=null,m=0,y=[];e.exports=function(e,t){t=t||{},"undefined"==typeof t.singleton&&(t.singleton=g()),"undefined"==typeof t.insertAt&&(t.insertAt="bottom");var o=l(e);return n(o,t),function(e){for(var i=[],r=0;r
vConsole
'},function(e,t){e.exports="{{name}}"},function(e,t){e.exports="
"},function(e,t){e.exports='{{name}}'},function(e,t){e.exports='{{name}}'},function(e,t){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var o=0;on;n++)o[n]=arguments[n];var l=_possibleConstructorReturn(this,(e=Object.getPrototypeOf(VConsoleDefaultTab)).call.apply(e,[this].concat(o)));return l.tplTabbox=_tabbox_default2["default"],l.windowOnError=null,l}return _inherits(VConsoleDefaultTab,_VConsoleLogTab),_createClass(VConsoleDefaultTab,[{key:"onReady",value:function(){var e=this;_get(Object.getPrototypeOf(VConsoleDefaultTab.prototype),"onReady",this).call(this),_query2["default"].bind(_query2["default"].one(".vc-cmd",this.$tabbox),"submit",function(t){ +t.preventDefault();var o=_query2["default"].one(".vc-cmd-input",t.target),n=o.value;o.value="",""!==n&&e.evalCommand(n)})}},{key:"mockConsole",value:function(){_get(Object.getPrototypeOf(VConsoleDefaultTab.prototype),"mockConsole",this).call(this);var e=this;tool.isFunction(window.onerror)&&(this.windowOnError=window.onerror),window.onerror=function(t,o,n,l,i){var r=t;o&&(r+="\n"+o.replace(location.origin,"")),(n||l)&&(r+=":"+n+":"+l),e.printLog({logType:"error",logs:[r],noOrigin:!0}),tool.isFunction(e.windowOnError)&&e.windowOnError.apply(window,t,o,n,l,i)}}},{key:"evalCommand",value:function evalCommand(cmd){this.printLog({logType:"log",content:_query2["default"].render(_item_code2["default"],{content:cmd,type:"input"}),noMeta:!0,style:""});var result=eval(cmd),$content=void 0;tool.isArray(result)||tool.isObject(result)?$content=this.getFoldedLine(result):(tool.isNull(result)?result="null":tool.isUndefined(result)?result="undefined":tool.isFunction(result)?result="function()":tool.isString(result)&&(result='"'+result+'"'),$content=_query2["default"].render(_item_code2["default"],{content:result,type:"output"})),this.printLog({logType:"log",content:$content,noMeta:!0,style:""})}}]),VConsoleDefaultTab}(_log2["default"]),tab=new VConsoleDefaultTab("default","Log");exports["default"]=tab,module.exports=exports["default"]},function(e,t,o){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function l(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},s=function(){function e(e,t){for(var o=0;ol;l++)n[l]=arguments[l];var a=r(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(n)));return a.tplTabbox="",a.allowUnformattedLog=!0,a.isReady=!1,a.isShow=!1,a.$tabbox=null,a.console={},a.logList=[],a.isInBottom=!0,a.mockConsole(),a}return a(t,e),s(t,[{key:"onInit",value:function(){this.isReady=!0,this.$tabbox=f["default"].render(this.tplTabbox,{});for(var e=0;e=o.scrollHeight?e.isInBottom=!0:e.isInBottom=!1)})}},{key:"onShow",value:function(){this.isShow=!0,1==this.isInBottom&&this.scrollToBottom()}},{key:"onHide",value:function(){this.isShow=!1}},{key:"onShowConsole",value:function(){1==this.isInBottom&&this.scrollToBottom()}},{key:"showLogType",value:function(e){var t=f["default"].one(".vc-log",this.$tabbox);f["default"].removeClass(t,"vc-log-partly-log"),f["default"].removeClass(t,"vc-log-partly-info"),f["default"].removeClass(t,"vc-log-partly-warn"),f["default"].removeClass(t,"vc-log-partly-error"),"all"==e?f["default"].removeClass(t,"vc-log-partly"):(f["default"].addClass(t,"vc-log-partly"),f["default"].addClass(t,"vc-log-partly-"+e))}},{key:"scrollToBottom",value:function(){var e=f["default"].one(".vc-content");e.scrollTop=e.scrollHeight-e.offsetHeight}},{key:"mockConsole",value:function(){var e=this;window.console?(this.console.log=window.console.log,this.console.info=window.console.info,this.console.warn=window.console.warn,this.console.debug=window.console.debug,this.console.error=window.console.error):window.console={},window.console.log=function(){e.printLog({logType:"log",logs:arguments})},window.console.info=function(){e.printLog({logType:"info",logs:arguments})},window.console.warn=function(){e.printLog({logType:"warn",logs:arguments})},window.console.debug=function(){e.printLog({logType:"debug",logs:arguments})},window.console.error=function(){e.printLog({logType:"error",logs:arguments})}}},{key:"clearLog",value:function(){f["default"].one(".vc-log",this.$tabbox).innerHTML=""}},{key:"printOriginLog",value:function(e){"function"==typeof this.console[e.logType]&&this.console[e.logType].apply(window.console,e.logs)}},{key:"printLog",value:function(e){var t=e.logs||[];if(t.length||e.content){t=[].slice.call(t||[]);var o=!0,n=/^\[(\w+)\] ?/i,l="";if(u.isString(t[0])){var i=t[0].match(n);null!==i&&i.length>0&&(l=i[1].toLowerCase())}if(l?o=l==this.id:0==this.allowUnformattedLog&&(o=!1),!o)return void(e.noOrigin||this.printOriginLog(e));if(e.date||(e.date=+new Date),!this.isReady)return void this.logList.push(e);if(u.isString(t[0])&&(t[0]=t[0].replace(n,""),""===t[0]&&t.shift()),!e.meta){var r=u.getDate(e.date);e.meta=r.hour+":"+r.minute+":"+r.second}for(var a=f["default"].render(h["default"],{logType:e.logType,noMeta:!!e.noMeta,meta:e.meta,style:e.style||""}),s=f["default"].one(".vc-item-content",a),d=0;d")}catch(p){v.innerHTML=" ["+c(t[d])+"]"}v&&s.appendChild(v)}u.isObject(e.content)&&s.appendChild(e.content),f["default"].one(".vc-log",this.$tabbox).appendChild(a),this.isInBottom&&this.scrollToBottom(),e.noOrigin||this.printOriginLog(e)}}},{key:"getFoldedLine",value:function(e,t){var o=this;if(!t){var n=u.JSONStringify(e),l=n.substr(0,26);t=u.getObjName(e),n.length>26&&(l+="..."),t+=" "+l}var i=f["default"].render(y["default"],{outer:t,lineType:"obj"});return f["default"].bind(f["default"].one(".vc-fold-outer",i),"click",function(t){t.preventDefault(),t.stopPropagation(),f["default"].hasClass(i,"vc-toggle")?(f["default"].removeClass(i,"vc-toggle"),f["default"].removeClass(f["default"].one(".vc-fold-inner",i),"vc-toggle"),f["default"].removeClass(f["default"].one(".vc-fold-outer",i),"vc-toggle")):(f["default"].addClass(i,"vc-toggle"),f["default"].addClass(f["default"].one(".vc-fold-inner",i),"vc-toggle"),f["default"].addClass(f["default"].one(".vc-fold-outer",i),"vc-toggle"));var n=f["default"].one(".vc-fold-inner",i);if(0==n.children.length&&e){for(var l=u.getObjAllKeys(e),r=0;r {{if (!noMeta)}}{{meta}}{{/if}}
'},function(e,t){e.exports="
{{if (lineType == 'obj')}} {{outer}}
{{else if (lineType == 'value')}} {{value}} {{else if (lineType == 'kv')}} {{key}}: {{value}} {{/if}}
"},function(e,t){e.exports=' {{key}}: {{value}} '},function(e,t){e.exports="
"},function(e,t){e.exports='
{{content}}
'},function(e,t,o){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function l(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var c=function(){function e(e,t){for(var o=0;ol;l++)n[l]=arguments[l];var a=r(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(n)));return a.tplTabbox=p["default"],a.allowUnformattedLog=!1,a}return a(t,e),c(t,[{key:"onInit",value:function(){s(Object.getPrototypeOf(t.prototype),"onInit",this).call(this),this.printSystemInfo()}},{key:"printSystemInfo",value:function(){var e=navigator.userAgent,t="",o=e.match(/(ipod).*\s([\d_]+)/i),n=e.match(/(ipad).*\s([\d_]+)/i),l=e.match(/(iphone)\sos\s([\d_]+)/i),i=e.match(/(android)\s([\d\.]+)/i);t="Unknown",i?t="Android "+i[2]:l?t="iPhone, iOS "+l[2].replace(/_/g,"."):n?t="iPad, iOS "+n[2].replace(/_/g,"."):o&&(t="iPod, iOS "+o[2].replace(/_/g,"."));var r=t,a=e.match(/MicroMessenger\/([\d\.]+)/i);t="Unknown",a&&a[1]?(t=a[1],r+=", WeChat "+t,console.info("[system]","System:",r)):console.info("[system]","System:",r),t="Unknown",t="https:"==location.protocol?"HTTPS":"http:"==location.protocol?"HTTP":location.protocol.replace(":",""),r=t;var c=e.toLowerCase().match(/ nettype\/([^ ]+)/g);t="Unknown",c&&c[0]?(c=c[0].split("/"),t=c[1],r+=", "+t,console.info("[system]","Network:",r)):console.info("[system]","Protocol:",r),console.info("[system]","UA:",e),setTimeout(function(){var e=window.performance||window.msPerformance||window.webkitPerformance;if(e&&e.timing){var t=e.timing;t.navigationStart&&console.info("[system]","navigationStart:",t.navigationStart),t.navigationStart&&t.domainLookupStart&&console.info("[system]","navigation:",t.domainLookupStart-t.navigationStart+"ms"),t.domainLookupEnd&&t.domainLookupStart&&console.info("[system]","dns:",t.domainLookupEnd-t.domainLookupStart+"ms"),t.connectEnd&&t.connectStart&&(t.connectEnd&&t.secureConnectionStart?console.info("[system]","tcp (ssl):",t.connectEnd-t.connectStart+"ms ("+(t.connectEnd-t.secureConnectionStart)+"ms)"):console.info("[system]","tcp:",t.connectEnd-t.connectStart+"ms")),t.responseStart&&t.requestStart&&console.info("[system]","request:",t.responseStart-t.requestStart+"ms"),t.responseEnd&&t.responseStart&&console.info("[system]","response:",t.responseEnd-t.responseStart+"ms"),t.domComplete&&t.domLoading&&(t.domContentLoadedEventStart&&t.domLoading?console.info("[system]","domComplete (domLoaded):",t.domComplete-t.domLoading+"ms ("+(t.domContentLoadedEventStart-t.domLoading)+"ms)"):console.info("[system]","domComplete:",t.domComplete-t.domLoading+"ms")),t.loadEventEnd&&t.loadEventStart&&console.info("[system]","loadEvent:",t.loadEventEnd-t.loadEventStart+"ms"),t.navigationStart&&t.loadEventEnd&&console.info("[system]","total (DOM):",t.loadEventEnd-t.navigationStart+"ms ("+(t.domComplete-t.navigationStart)+"ms)")}},0)}}]),t}(v["default"]),b=new g("system","System");t["default"]=b,e.exports=t["default"]},function(e,t){e.exports="
"},function(e,t,o){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function l(e){return e&&e.__esModule?e:{"default":e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var c=function(){function e(e,t){for(var o=0;ol;l++)n[l]=arguments[l];var a=r(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(n)));return a.$tabbox=d["default"].render(b["default"],{}),a.$header=null,a.reqList={},a.domList={},a.isShow=!1,a.isInBottom=!0,a.mockAjax(),a}return a(t,e),c(t,[{key:"onRenderTab",value:function(e){e(this.$tabbox)}},{key:"onAddTool",value:function(e){var t=this,o=[{name:"Clear",global:!1,onClick:function(e){t.clearLog()}}];e(o)}},{key:"onReady",value:function(){var e=this;this.renderHeader(),d["default"].delegate(d["default"].one(".vc-log",this.$tabbox),"click",".vc-group-preview",function(e){var t=this.parentNode;d["default"].hasClass(t,"vc-actived")?d["default"].removeClass(t,"vc-actived"):d["default"].addClass(t,"vc-actived"),e.preventDefault()});var t=d["default"].one(".vc-content");d["default"].bind(t,"scroll",function(o){e.isShow&&(t.scrollTop+t.offsetHeight>=t.scrollHeight?e.isInBottom=!0:e.isInBottom=!1)})}},{key:"onShow",value:function(){this.isShow=!0,1==this.isInBottom&&this.scrollToBottom()}},{key:"onHide",value:function(){this.isShow=!1}},{key:"onShowConsole",value:function(){1==this.isInBottom&&this.scrollToBottom()}},{key:"scrollToBottom",value:function(){var e=d["default"].one(".vc-content");e.scrollTop=e.scrollHeight-e.offsetHeight}},{key:"clearLog",value:function(){this.reqList={};for(var e in this.domList)this.domList[e].remove(),this.domList[e]=void 0;this.domList={},this.renderHeader()}},{key:"renderHeader",value:function(){var e=Object.keys(this.reqList).length,t=d["default"].render(m["default"],{count:e}),o=d["default"].one(".vc-log",this.$tabbox);this.$header?this.$header.parentNode.replaceChild(t,this.$header):o.parentNode.insertBefore(t,o),this.$header=t}},{key:"updateRequest",value:function(e,t){var o=Object.keys(this.reqList).length,n=this.reqList[e]||{};for(var l in t)n[l]=t[l];this.reqList[e]=n;var i={url:n.url,status:n.status||"-",type:"-",costTime:n.costTime>0?n.costTime+"ms":"-",header:n.header,response:v.htmlEncode(n.response)};n.readyState<=1?i.status="Pending":n.readyState<4&&(i.status="Loading");var r=d["default"].render(_["default"],i),a=this.domList[e];n.status>=400&&d["default"].addClass(d["default"].one(".vc-group-preview",r),"vc-table-row-error"),a?a.parentNode.replaceChild(r,a):d["default"].one(".vc-log",this.$tabbox).appendChild(r),this.domList[e]=r;var c=Object.keys(this.reqList).length;c!=o&&this.renderHeader(),this.isInBottom&&this.scrollToBottom()}},{key:"mockAjax",value:function(){var e=window.XMLHttpRequest;if(e){var t=this,o=window.XMLHttpRequest.prototype.open;window.XMLHttpRequest.prototype.send;window.XMLHttpRequest.prototype.open=function(){var e=this,n=[].slice.call(arguments),l=n[1],i=t.getUniqueID();e._requestID=i;var r=e.onreadystatechange||function(){};return e.onreadystatechange=function(){var o=t.reqList[i]||{};if(o.url=l,o.readyState=e.readyState,0==e.readyState)o.startTime=+new Date;else if(1==e.readyState)o.startTime=+new Date;else if(2==e.readyState){o.header={};for(var n=e.getAllResponseHeaders()||"",a=n.split("\n"),c=0;c
"},function(e,t){e.exports='
Name {{if (count > 0)}}({{count}}){{/if}}
Status
Time
'},function(e,t){e.exports='
{{url}}
{{status}}
{{costTime}}
Headers
{{for (var key in header)}}
{{key}}
{{header[key]}}
{{/for}}
Response
{{response}}
'}])}); \ No newline at end of file diff --git a/litemall-vue/src/App.vue b/litemall-vue/src/App.vue new file mode 100644 index 00000000..8d57ba22 --- /dev/null +++ b/litemall-vue/src/App.vue @@ -0,0 +1,11 @@ + + + diff --git a/litemall-vue/src/views/home/tabbar-home-sign-board.vue b/litemall-vue/src/views/home/tabbar-home-sign-board.vue new file mode 100755 index 00000000..4ea0bec1 --- /dev/null +++ b/litemall-vue/src/views/home/tabbar-home-sign-board.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/litemall-vue/src/views/home/tabbar-home.vue b/litemall-vue/src/views/home/tabbar-home.vue new file mode 100755 index 00000000..eb3cf164 --- /dev/null +++ b/litemall-vue/src/views/home/tabbar-home.vue @@ -0,0 +1,510 @@ + + + + + + diff --git a/litemall-vue/src/views/items/detail/EntityGroup/area.json b/litemall-vue/src/views/items/detail/EntityGroup/area.json new file mode 100755 index 00000000..68adc1cf --- /dev/null +++ b/litemall-vue/src/views/items/detail/EntityGroup/area.json @@ -0,0 +1,3607 @@ +{ + "province_list": { + "110000": "北京市", + "120000": "天津市", + "130000": "河北省", + "140000": "山西省", + "150000": "内蒙古自治区", + "210000": "辽宁省", + "220000": "吉林省", + "230000": "黑龙江省", + "310000": "上海市", + "320000": "江苏省", + "330000": "浙江省", + "340000": "安徽省", + "350000": "福建省", + "360000": "江西省", + "370000": "山东省", + "410000": "河南省", + "420000": "湖北省", + "430000": "湖南省", + "440000": "广东省", + "450000": "广西壮族自治区", + "460000": "海南省", + "500000": "重庆市", + "510000": "四川省", + "520000": "贵州省", + "530000": "云南省", + "540000": "西藏自治区", + "610000": "陕西省", + "620000": "甘肃省", + "630000": "青海省", + "640000": "宁夏回族自治区", + "650000": "新疆维吾尔自治区", + "710000": "台湾省", + "810000": "香港特别行政区", + "820000": "澳门特别行政区" + }, + "city_list": { + "110100": "北京市", + "110200": "县", + "120100": "天津市", + "120200": "县", + "130100": "石家庄市", + "130200": "唐山市", + "130300": "秦皇岛市", + "130400": "邯郸市", + "130500": "邢台市", + "130600": "保定市", + "130700": "张家口市", + "130800": "承德市", + "130900": "沧州市", + "131000": "廊坊市", + "131100": "衡水市", + "139000": "省直辖县", + "140100": "太原市", + "140200": "大同市", + "140300": "阳泉市", + "140400": "长治市", + "140500": "晋城市", + "140600": "朔州市", + "140700": "晋中市", + "140800": "运城市", + "140900": "忻州市", + "141000": "临汾市", + "141100": "吕梁市", + "150100": "呼和浩特市", + "150200": "包头市", + "150300": "乌海市", + "150400": "赤峰市", + "150500": "通辽市", + "150600": "鄂尔多斯市", + "150700": "呼伦贝尔市", + "150800": "巴彦淖尔市", + "150900": "乌兰察布市", + "152200": "兴安盟", + "152500": "锡林郭勒盟", + "152900": "阿拉善盟", + "210100": "沈阳市", + "210200": "大连市", + "210300": "鞍山市", + "210400": "抚顺市", + "210500": "本溪市", + "210600": "丹东市", + "210700": "锦州市", + "210800": "营口市", + "210900": "阜新市", + "211000": "辽阳市", + "211100": "盘锦市", + "211200": "铁岭市", + "211300": "朝阳市", + "211400": "葫芦岛市", + "220100": "长春市", + "220200": "吉林市", + "220300": "四平市", + "220400": "辽源市", + "220500": "通化市", + "220600": "白山市", + "220700": "松原市", + "220800": "白城市", + "222400": "延边朝鲜族自治州", + "230100": "哈尔滨市", + "230200": "齐齐哈尔市", + "230300": "鸡西市", + "230400": "鹤岗市", + "230500": "双鸭山市", + "230600": "大庆市", + "230700": "伊春市", + "230800": "佳木斯市", + "230900": "七台河市", + "231000": "牡丹江市", + "231100": "黑河市", + "231200": "绥化市", + "232700": "大兴安岭地区", + "310100": "上海市", + "310200": "县", + "320100": "南京市", + "320200": "无锡市", + "320300": "徐州市", + "320400": "常州市", + "320500": "苏州市", + "320600": "南通市", + "320700": "连云港市", + "320800": "淮安市", + "320900": "盐城市", + "321000": "扬州市", + "321100": "镇江市", + "321200": "泰州市", + "321300": "宿迁市", + "330100": "杭州市", + "330200": "宁波市", + "330300": "温州市", + "330400": "嘉兴市", + "330500": "湖州市", + "330600": "绍兴市", + "330700": "金华市", + "330800": "衢州市", + "330900": "舟山市", + "331000": "台州市", + "331100": "丽水市", + "340100": "合肥市", + "340200": "芜湖市", + "340300": "蚌埠市", + "340400": "淮南市", + "340500": "马鞍山市", + "340600": "淮北市", + "340700": "铜陵市", + "340800": "安庆市", + "341000": "黄山市", + "341100": "滁州市", + "341200": "阜阳市", + "341300": "宿州市", + "341500": "六安市", + "341600": "亳州市", + "341700": "池州市", + "341800": "宣城市", + "350100": "福州市", + "350200": "厦门市", + "350300": "莆田市", + "350400": "三明市", + "350500": "泉州市", + "350600": "漳州市", + "350700": "南平市", + "350800": "龙岩市", + "350900": "宁德市", + "360100": "南昌市", + "360200": "景德镇市", + "360300": "萍乡市", + "360400": "九江市", + "360500": "新余市", + "360600": "鹰潭市", + "360700": "赣州市", + "360800": "吉安市", + "360900": "宜春市", + "361000": "抚州市", + "361100": "上饶市", + "370100": "济南市", + "370200": "青岛市", + "370300": "淄博市", + "370400": "枣庄市", + "370500": "东营市", + "370600": "烟台市", + "370700": "潍坊市", + "370800": "济宁市", + "370900": "泰安市", + "371000": "威海市", + "371100": "日照市", + "371200": "莱芜市", + "371300": "临沂市", + "371400": "德州市", + "371500": "聊城市", + "371600": "滨州市", + "371700": "菏泽市", + "410100": "郑州市", + "410200": "开封市", + "410300": "洛阳市", + "410400": "平顶山市", + "410500": "安阳市", + "410600": "鹤壁市", + "410700": "新乡市", + "410800": "焦作市", + "410900": "濮阳市", + "411000": "许昌市", + "411100": "漯河市", + "411200": "三门峡市", + "411300": "南阳市", + "411400": "商丘市", + "411500": "信阳市", + "411600": "周口市", + "411700": "驻马店市", + "419000": "省直辖县", + "420100": "武汉市", + "420200": "黄石市", + "420300": "十堰市", + "420500": "宜昌市", + "420600": "襄阳市", + "420700": "鄂州市", + "420800": "荆门市", + "420900": "孝感市", + "421000": "荆州市", + "421100": "黄冈市", + "421200": "咸宁市", + "421300": "随州市", + "422800": "恩施土家族苗族自治州", + "429000": "省直辖县", + "430100": "长沙市", + "430200": "株洲市", + "430300": "湘潭市", + "430400": "衡阳市", + "430500": "邵阳市", + "430600": "岳阳市", + "430700": "常德市", + "430800": "张家界市", + "430900": "益阳市", + "431000": "郴州市", + "431100": "永州市", + "431200": "怀化市", + "431300": "娄底市", + "433100": "湘西土家族苗族自治州", + "440100": "广州市", + "440200": "韶关市", + "440300": "深圳市", + "440400": "珠海市", + "440500": "汕头市", + "440600": "佛山市", + "440700": "江门市", + "440800": "湛江市", + "440900": "茂名市", + "441200": "肇庆市", + "441300": "惠州市", + "441400": "梅州市", + "441500": "汕尾市", + "441600": "河源市", + "441700": "阳江市", + "441800": "清远市", + "441900": "东莞市", + "442000": "中山市", + "445100": "潮州市", + "445200": "揭阳市", + "445300": "云浮市", + "450100": "南宁市", + "450200": "柳州市", + "450300": "桂林市", + "450400": "梧州市", + "450500": "北海市", + "450600": "防城港市", + "450700": "钦州市", + "450800": "贵港市", + "450900": "玉林市", + "451000": "百色市", + "451100": "贺州市", + "451200": "河池市", + "451300": "来宾市", + "451400": "崇左市", + "460100": "海口市", + "460200": "三亚市", + "460300": "三沙市", + "469000": "省直辖县", + "500100": "重庆市", + "500200": "县", + "510100": "成都市", + "510300": "自贡市", + "510400": "攀枝花市", + "510500": "泸州市", + "510600": "德阳市", + "510700": "绵阳市", + "510800": "广元市", + "510900": "遂宁市", + "511000": "内江市", + "511100": "乐山市", + "511300": "南充市", + "511400": "眉山市", + "511500": "宜宾市", + "511600": "广安市", + "511700": "达州市", + "511800": "雅安市", + "511900": "巴中市", + "512000": "资阳市", + "513200": "阿坝藏族羌族自治州", + "513300": "甘孜藏族自治州", + "513400": "凉山彝族自治州", + "520100": "贵阳市", + "520200": "六盘水市", + "520300": "遵义市", + "520400": "安顺市", + "520500": "毕节市", + "520600": "铜仁市", + "522300": "黔西南布依族苗族自治州", + "522600": "黔东南苗族侗族自治州", + "522700": "黔南布依族苗族自治州", + "530100": "昆明市", + "530300": "曲靖市", + "530400": "玉溪市", + "530500": "保山市", + "530600": "昭通市", + "530700": "丽江市", + "530800": "普洱市", + "530900": "临沧市", + "532300": "楚雄彝族自治州", + "532500": "红河哈尼族彝族自治州", + "532600": "文山壮族苗族自治州", + "532800": "西双版纳傣族自治州", + "532900": "大理白族自治州", + "533100": "德宏傣族景颇族自治州", + "533300": "怒江傈僳族自治州", + "533400": "迪庆藏族自治州", + "540100": "拉萨市", + "540200": "日喀则市", + "540300": "昌都市", + "540400": "林芝市", + "542200": "山南地区", + "542400": "那曲地区", + "542500": "阿里地区", + "610100": "西安市", + "610200": "铜川市", + "610300": "宝鸡市", + "610400": "咸阳市", + "610500": "渭南市", + "610600": "延安市", + "610700": "汉中市", + "610800": "榆林市", + "610900": "安康市", + "611000": "商洛市", + "620100": "兰州市", + "620200": "嘉峪关市", + "620300": "金昌市", + "620400": "白银市", + "620500": "天水市", + "620600": "武威市", + "620700": "张掖市", + "620800": "平凉市", + "620900": "酒泉市", + "621000": "庆阳市", + "621100": "定西市", + "621200": "陇南市", + "622900": "临夏回族自治州", + "623000": "甘南藏族自治州", + "630100": "西宁市", + "630200": "海东市", + "632200": "海北藏族自治州", + "632300": "黄南藏族自治州", + "632500": "海南藏族自治州", + "632600": "果洛藏族自治州", + "632700": "玉树藏族自治州", + "632800": "海西蒙古族藏族自治州", + "640100": "银川市", + "640200": "石嘴山市", + "640300": "吴忠市", + "640400": "固原市", + "640500": "中卫市", + "650100": "乌鲁木齐市", + "650200": "克拉玛依市", + "650400": "吐鲁番市", + "652200": "哈密地区", + "652300": "昌吉回族自治州", + "652700": "博尔塔拉蒙古自治州", + "652800": "巴音郭楞蒙古自治州", + "652900": "阿克苏地区", + "653000": "克孜勒苏柯尔克孜自治州", + "653100": "喀什地区", + "653200": "和田地区", + "654000": "伊犁哈萨克自治州", + "654200": "塔城地区", + "654300": "阿勒泰地区", + "659000": "自治区直辖县级行政区划", + "710100": "台北市", + "710200": "高雄市", + "710300": "台南市", + "710400": "台中市", + "710500": "金门县", + "710600": "南投县", + "710700": "基隆市", + "710800": "新竹市", + "710900": "嘉义市", + "711100": "新北市", + "711200": "宜兰县", + "711300": "新竹县", + "711400": "桃园县", + "711500": "苗栗县", + "711700": "彰化县", + "711900": "嘉义县", + "712100": "云林县", + "712400": "屏东县", + "712500": "台东县", + "712600": "花莲县", + "712700": "澎湖县", + "712800": "连江县", + "810100": "香港岛", + "810200": "九龙", + "810300": "新界", + "820100": "澳门半岛", + "820200": "离岛" + }, + "county_list": { + "110101": "东城区", + "110102": "西城区", + "110105": "朝阳区", + "110106": "丰台区", + "110107": "石景山区", + "110108": "海淀区", + "110109": "门头沟区", + "110111": "房山区", + "110112": "通州区", + "110113": "顺义区", + "110114": "昌平区", + "110115": "大兴区", + "110116": "怀柔区", + "110117": "平谷区", + "110228": "密云县", + "110229": "延庆县", + "120101": "和平区", + "120102": "河东区", + "120103": "河西区", + "120104": "南开区", + "120105": "河北区", + "120106": "红桥区", + "120110": "东丽区", + "120111": "西青区", + "120112": "津南区", + "120113": "北辰区", + "120114": "武清区", + "120115": "宝坻区", + "120116": "滨海新区", + "120117": "宁河区", + "120118": "静海区", + "120225": "蓟县", + "130102": "长安区", + "130104": "桥西区", + "130105": "新华区", + "130107": "井陉矿区", + "130108": "裕华区", + "130109": "藁城区", + "130110": "鹿泉区", + "130111": "栾城区", + "130121": "井陉县", + "130123": "正定县", + "130125": "行唐县", + "130126": "灵寿县", + "130127": "高邑县", + "130128": "深泽县", + "130129": "赞皇县", + "130130": "无极县", + "130131": "平山县", + "130132": "元氏县", + "130133": "赵县", + "130183": "晋州市", + "130184": "新乐市", + "130202": "路南区", + "130203": "路北区", + "130204": "古冶区", + "130205": "开平区", + "130207": "丰南区", + "130208": "丰润区", + "130209": "曹妃甸区", + "130223": "滦县", + "130224": "滦南县", + "130225": "乐亭县", + "130227": "迁西县", + "130229": "玉田县", + "130281": "遵化市", + "130283": "迁安市", + "130302": "海港区", + "130303": "山海关区", + "130304": "北戴河区", + "130306": "抚宁区", + "130321": "青龙满族自治县", + "130322": "昌黎县", + "130324": "卢龙县", + "130390": "经济技术开发区", + "130402": "邯山区", + "130403": "丛台区", + "130404": "复兴区", + "130406": "峰峰矿区", + "130421": "邯郸县", + "130423": "临漳县", + "130424": "成安县", + "130425": "大名县", + "130426": "涉县", + "130427": "磁县", + "130428": "肥乡县", + "130429": "永年县", + "130430": "邱县", + "130431": "鸡泽县", + "130432": "广平县", + "130433": "馆陶县", + "130434": "魏县", + "130435": "曲周县", + "130481": "武安市", + "130502": "桥东区", + "130503": "桥西区", + "130521": "邢台县", + "130522": "临城县", + "130523": "内丘县", + "130524": "柏乡县", + "130525": "隆尧县", + "130526": "任县", + "130527": "南和县", + "130528": "宁晋县", + "130529": "巨鹿县", + "130530": "新河县", + "130531": "广宗县", + "130532": "平乡县", + "130533": "威县", + "130534": "清河县", + "130535": "临西县", + "130581": "南宫市", + "130582": "沙河市", + "130602": "竞秀区", + "130606": "莲池区", + "130607": "满城区", + "130608": "清苑区", + "130609": "徐水区", + "130623": "涞水县", + "130624": "阜平县", + "130626": "定兴县", + "130627": "唐县", + "130628": "高阳县", + "130629": "容城县", + "130630": "涞源县", + "130631": "望都县", + "130632": "安新县", + "130633": "易县", + "130634": "曲阳县", + "130635": "蠡县", + "130636": "顺平县", + "130637": "博野县", + "130638": "雄县", + "130681": "涿州市", + "130683": "安国市", + "130684": "高碑店市", + "130702": "桥东区", + "130703": "桥西区", + "130705": "宣化区", + "130706": "下花园区", + "130721": "宣化县", + "130722": "张北县", + "130723": "康保县", + "130724": "沽源县", + "130725": "尚义县", + "130726": "蔚县", + "130727": "阳原县", + "130728": "怀安县", + "130729": "万全县", + "130730": "怀来县", + "130731": "涿鹿县", + "130732": "赤城县", + "130733": "崇礼县", + "130802": "双桥区", + "130803": "双滦区", + "130804": "鹰手营子矿区", + "130821": "承德县", + "130822": "兴隆县", + "130823": "平泉县", + "130824": "滦平县", + "130825": "隆化县", + "130826": "丰宁满族自治县", + "130827": "宽城满族自治县", + "130828": "围场满族蒙古族自治县", + "130902": "新华区", + "130903": "运河区", + "130921": "沧县", + "130922": "青县", + "130923": "东光县", + "130924": "海兴县", + "130925": "盐山县", + "130926": "肃宁县", + "130927": "南皮县", + "130928": "吴桥县", + "130929": "献县", + "130930": "孟村回族自治县", + "130981": "泊头市", + "130982": "任丘市", + "130983": "黄骅市", + "130984": "河间市", + "131002": "安次区", + "131003": "广阳区", + "131022": "固安县", + "131023": "永清县", + "131024": "香河县", + "131025": "大城县", + "131026": "文安县", + "131028": "大厂回族自治县", + "131081": "霸州市", + "131082": "三河市", + "131090": "开发区", + "131091": "燕郊经济技术开发区", + "131102": "桃城区", + "131121": "枣强县", + "131122": "武邑县", + "131123": "武强县", + "131124": "饶阳县", + "131125": "安平县", + "131126": "故城县", + "131127": "景县", + "131128": "阜城县", + "131181": "冀州市", + "131182": "深州市", + "139001": "定州市", + "139002": "辛集市", + "140105": "小店区", + "140106": "迎泽区", + "140107": "杏花岭区", + "140108": "尖草坪区", + "140109": "万柏林区", + "140110": "晋源区", + "140121": "清徐县", + "140122": "阳曲县", + "140123": "娄烦县", + "140181": "古交市", + "140202": "城区", + "140203": "矿区", + "140211": "南郊区", + "140212": "新荣区", + "140221": "阳高县", + "140222": "天镇县", + "140223": "广灵县", + "140224": "灵丘县", + "140225": "浑源县", + "140226": "左云县", + "140227": "大同县", + "140302": "城区", + "140303": "矿区", + "140311": "郊区", + "140321": "平定县", + "140322": "盂县", + "140402": "城区", + "140411": "郊区", + "140421": "长治县", + "140423": "襄垣县", + "140424": "屯留县", + "140425": "平顺县", + "140426": "黎城县", + "140427": "壶关县", + "140428": "长子县", + "140429": "武乡县", + "140430": "沁县", + "140431": "沁源县", + "140481": "潞城市", + "140502": "城区", + "140521": "沁水县", + "140522": "阳城县", + "140524": "陵川县", + "140525": "泽州县", + "140581": "高平市", + "140602": "朔城区", + "140603": "平鲁区", + "140621": "山阴县", + "140622": "应县", + "140623": "右玉县", + "140624": "怀仁县", + "140702": "榆次区", + "140721": "榆社县", + "140722": "左权县", + "140723": "和顺县", + "140724": "昔阳县", + "140725": "寿阳县", + "140726": "太谷县", + "140727": "祁县", + "140728": "平遥县", + "140729": "灵石县", + "140781": "介休市", + "140802": "盐湖区", + "140821": "临猗县", + "140822": "万荣县", + "140823": "闻喜县", + "140824": "稷山县", + "140825": "新绛县", + "140826": "绛县", + "140827": "垣曲县", + "140828": "夏县", + "140829": "平陆县", + "140830": "芮城县", + "140881": "永济市", + "140882": "河津市", + "140902": "忻府区", + "140921": "定襄县", + "140922": "五台县", + "140923": "代县", + "140924": "繁峙县", + "140925": "宁武县", + "140926": "静乐县", + "140927": "神池县", + "140928": "五寨县", + "140929": "岢岚县", + "140930": "河曲县", + "140931": "保德县", + "140932": "偏关县", + "140981": "原平市", + "141002": "尧都区", + "141021": "曲沃县", + "141022": "翼城县", + "141023": "襄汾县", + "141024": "洪洞县", + "141025": "古县", + "141026": "安泽县", + "141027": "浮山县", + "141028": "吉县", + "141029": "乡宁县", + "141030": "大宁县", + "141031": "隰县", + "141032": "永和县", + "141033": "蒲县", + "141034": "汾西县", + "141081": "侯马市", + "141082": "霍州市", + "141102": "离石区", + "141121": "文水县", + "141122": "交城县", + "141123": "兴县", + "141124": "临县", + "141125": "柳林县", + "141126": "石楼县", + "141127": "岚县", + "141128": "方山县", + "141129": "中阳县", + "141130": "交口县", + "141181": "孝义市", + "141182": "汾阳市", + "150102": "新城区", + "150103": "回民区", + "150104": "玉泉区", + "150105": "赛罕区", + "150121": "土默特左旗", + "150122": "托克托县", + "150123": "和林格尔县", + "150124": "清水河县", + "150125": "武川县", + "150202": "东河区", + "150203": "昆都仑区", + "150204": "青山区", + "150205": "石拐区", + "150206": "白云鄂博矿区", + "150207": "九原区", + "150221": "土默特右旗", + "150222": "固阳县", + "150223": "达尔罕茂明安联合旗", + "150302": "海勃湾区", + "150303": "海南区", + "150304": "乌达区", + "150402": "红山区", + "150403": "元宝山区", + "150404": "松山区", + "150421": "阿鲁科尔沁旗", + "150422": "巴林左旗", + "150423": "巴林右旗", + "150424": "林西县", + "150425": "克什克腾旗", + "150426": "翁牛特旗", + "150428": "喀喇沁旗", + "150429": "宁城县", + "150430": "敖汉旗", + "150502": "科尔沁区", + "150521": "科尔沁左翼中旗", + "150522": "科尔沁左翼后旗", + "150523": "开鲁县", + "150524": "库伦旗", + "150525": "奈曼旗", + "150526": "扎鲁特旗", + "150581": "霍林郭勒市", + "150602": "东胜区", + "150621": "达拉特旗", + "150622": "准格尔旗", + "150623": "鄂托克前旗", + "150624": "鄂托克旗", + "150625": "杭锦旗", + "150626": "乌审旗", + "150627": "伊金霍洛旗", + "150702": "海拉尔区", + "150703": "扎赉诺尔区", + "150721": "阿荣旗", + "150722": "莫力达瓦达斡尔族自治旗", + "150723": "鄂伦春自治旗", + "150724": "鄂温克族自治旗", + "150725": "陈巴尔虎旗", + "150726": "新巴尔虎左旗", + "150727": "新巴尔虎右旗", + "150781": "满洲里市", + "150782": "牙克石市", + "150783": "扎兰屯市", + "150784": "额尔古纳市", + "150785": "根河市", + "150802": "临河区", + "150821": "五原县", + "150822": "磴口县", + "150823": "乌拉特前旗", + "150824": "乌拉特中旗", + "150825": "乌拉特后旗", + "150826": "杭锦后旗", + "150902": "集宁区", + "150921": "卓资县", + "150922": "化德县", + "150923": "商都县", + "150924": "兴和县", + "150925": "凉城县", + "150926": "察哈尔右翼前旗", + "150927": "察哈尔右翼中旗", + "150928": "察哈尔右翼后旗", + "150929": "四子王旗", + "150981": "丰镇市", + "152201": "乌兰浩特市", + "152202": "阿尔山市", + "152221": "科尔沁右翼前旗", + "152222": "科尔沁右翼中旗", + "152223": "扎赉特旗", + "152224": "突泉县", + "152501": "二连浩特市", + "152502": "锡林浩特市", + "152522": "阿巴嘎旗", + "152523": "苏尼特左旗", + "152524": "苏尼特右旗", + "152525": "东乌珠穆沁旗", + "152526": "西乌珠穆沁旗", + "152527": "太仆寺旗", + "152528": "镶黄旗", + "152529": "正镶白旗", + "152530": "正蓝旗", + "152531": "多伦县", + "152921": "阿拉善左旗", + "152922": "阿拉善右旗", + "152923": "额济纳旗", + "210102": "和平区", + "210103": "沈河区", + "210104": "大东区", + "210105": "皇姑区", + "210106": "铁西区", + "210111": "苏家屯区", + "210112": "浑南区", + "210113": "沈北新区", + "210114": "于洪区", + "210122": "辽中县", + "210123": "康平县", + "210124": "法库县", + "210181": "新民市", + "210190": "经济技术开发区", + "210202": "中山区", + "210203": "西岗区", + "210204": "沙河口区", + "210211": "甘井子区", + "210212": "旅顺口区", + "210213": "金州区", + "210224": "长海县", + "210281": "瓦房店市", + "210282": "普兰店市", + "210283": "庄河市", + "210291": "大连经济技术开发区", + "210292": "大连高新区", + "210302": "铁东区", + "210303": "铁西区", + "210304": "立山区", + "210311": "千山区", + "210321": "台安县", + "210323": "岫岩满族自治县", + "210381": "海城市", + "210390": "高新区", + "210402": "新抚区", + "210403": "东洲区", + "210404": "望花区", + "210411": "顺城区", + "210421": "抚顺县", + "210422": "新宾满族自治县", + "210423": "清原满族自治县", + "210502": "平山区", + "210503": "溪湖区", + "210504": "明山区", + "210505": "南芬区", + "210521": "本溪满族自治县", + "210522": "桓仁满族自治县", + "210602": "元宝区", + "210603": "振兴区", + "210604": "振安区", + "210624": "宽甸满族自治县", + "210681": "东港市", + "210682": "凤城市", + "210702": "古塔区", + "210703": "凌河区", + "210711": "太和区", + "210726": "黑山县", + "210727": "义县", + "210781": "凌海市", + "210782": "北镇市", + "210793": "经济技术开发区", + "210802": "站前区", + "210803": "西市区", + "210804": "鲅鱼圈区", + "210811": "老边区", + "210881": "盖州市", + "210882": "大石桥市", + "210902": "海州区", + "210903": "新邱区", + "210904": "太平区", + "210905": "清河门区", + "210911": "细河区", + "210921": "阜新蒙古族自治县", + "210922": "彰武县", + "211002": "白塔区", + "211003": "文圣区", + "211004": "宏伟区", + "211005": "弓长岭区", + "211011": "太子河区", + "211021": "辽阳县", + "211081": "灯塔市", + "211102": "双台子区", + "211103": "兴隆台区", + "211121": "大洼县", + "211122": "盘山县", + "211202": "银州区", + "211204": "清河区", + "211221": "铁岭县", + "211223": "西丰县", + "211224": "昌图县", + "211281": "调兵山市", + "211282": "开原市", + "211302": "双塔区", + "211303": "龙城区", + "211321": "朝阳县", + "211322": "建平县", + "211324": "喀喇沁左翼蒙古族自治县", + "211381": "北票市", + "211382": "凌源市", + "211402": "连山区", + "211403": "龙港区", + "211404": "南票区", + "211421": "绥中县", + "211422": "建昌县", + "211481": "兴城市", + "215090": "工业园区", + "220102": "南关区", + "220103": "宽城区", + "220104": "朝阳区", + "220105": "二道区", + "220106": "绿园区", + "220112": "双阳区", + "220113": "九台区", + "220122": "农安县", + "220182": "榆树市", + "220183": "德惠市", + "220190": "高新技术产业开发区", + "220191": "汽车产业开发区", + "220192": "经济技术开发区", + "220202": "昌邑区", + "220203": "龙潭区", + "220204": "船营区", + "220211": "丰满区", + "220221": "永吉县", + "220281": "蛟河市", + "220282": "桦甸市", + "220283": "舒兰市", + "220284": "磐石市", + "220302": "铁西区", + "220303": "铁东区", + "220322": "梨树县", + "220323": "伊通满族自治县", + "220381": "公主岭市", + "220382": "双辽市", + "220402": "龙山区", + "220403": "西安区", + "220421": "东丰县", + "220422": "东辽县", + "220502": "东昌区", + "220503": "二道江区", + "220521": "通化县", + "220523": "辉南县", + "220524": "柳河县", + "220581": "梅河口市", + "220582": "集安市", + "220602": "浑江区", + "220605": "江源区", + "220621": "抚松县", + "220622": "靖宇县", + "220623": "长白朝鲜族自治县", + "220681": "临江市", + "220702": "宁江区", + "220721": "前郭尔罗斯蒙古族自治县", + "220722": "长岭县", + "220723": "乾安县", + "220781": "扶余市", + "220802": "洮北区", + "220821": "镇赉县", + "220822": "通榆县", + "220881": "洮南市", + "220882": "大安市", + "221090": "工业园区", + "222401": "延吉市", + "222402": "图们市", + "222403": "敦化市", + "222404": "珲春市", + "222405": "龙井市", + "222406": "和龙市", + "222424": "汪清县", + "222426": "安图县", + "230102": "道里区", + "230103": "南岗区", + "230104": "道外区", + "230108": "平房区", + "230109": "松北区", + "230110": "香坊区", + "230111": "呼兰区", + "230112": "阿城区", + "230113": "双城区", + "230123": "依兰县", + "230124": "方正县", + "230125": "宾县", + "230126": "巴彦县", + "230127": "木兰县", + "230128": "通河县", + "230129": "延寿县", + "230183": "尚志市", + "230184": "五常市", + "230202": "龙沙区", + "230203": "建华区", + "230204": "铁锋区", + "230205": "昂昂溪区", + "230206": "富拉尔基区", + "230207": "碾子山区", + "230208": "梅里斯达斡尔族区", + "230221": "龙江县", + "230223": "依安县", + "230224": "泰来县", + "230225": "甘南县", + "230227": "富裕县", + "230229": "克山县", + "230230": "克东县", + "230231": "拜泉县", + "230281": "讷河市", + "230302": "鸡冠区", + "230303": "恒山区", + "230304": "滴道区", + "230305": "梨树区", + "230306": "城子河区", + "230307": "麻山区", + "230321": "鸡东县", + "230381": "虎林市", + "230382": "密山市", + "230402": "向阳区", + "230403": "工农区", + "230404": "南山区", + "230405": "兴安区", + "230406": "东山区", + "230407": "兴山区", + "230421": "萝北县", + "230422": "绥滨县", + "230502": "尖山区", + "230503": "岭东区", + "230505": "四方台区", + "230506": "宝山区", + "230521": "集贤县", + "230522": "友谊县", + "230523": "宝清县", + "230524": "饶河县", + "230602": "萨尔图区", + "230603": "龙凤区", + "230604": "让胡路区", + "230605": "红岗区", + "230606": "大同区", + "230621": "肇州县", + "230622": "肇源县", + "230623": "林甸县", + "230624": "杜尔伯特蒙古族自治县", + "230702": "伊春区", + "230703": "南岔区", + "230704": "友好区", + "230705": "西林区", + "230706": "翠峦区", + "230707": "新青区", + "230708": "美溪区", + "230709": "金山屯区", + "230710": "五营区", + "230711": "乌马河区", + "230712": "汤旺河区", + "230713": "带岭区", + "230714": "乌伊岭区", + "230715": "红星区", + "230716": "上甘岭区", + "230722": "嘉荫县", + "230781": "铁力市", + "230803": "向阳区", + "230804": "前进区", + "230805": "东风区", + "230811": "郊区", + "230822": "桦南县", + "230826": "桦川县", + "230828": "汤原县", + "230833": "抚远县", + "230881": "同江市", + "230882": "富锦市", + "230902": "新兴区", + "230903": "桃山区", + "230904": "茄子河区", + "230921": "勃利县", + "231002": "东安区", + "231003": "阳明区", + "231004": "爱民区", + "231005": "西安区", + "231024": "东宁县", + "231025": "林口县", + "231081": "绥芬河市", + "231083": "海林市", + "231084": "宁安市", + "231085": "穆棱市", + "231102": "爱辉区", + "231121": "嫩江县", + "231123": "逊克县", + "231124": "孙吴县", + "231181": "北安市", + "231182": "五大连池市", + "231202": "北林区", + "231221": "望奎县", + "231222": "兰西县", + "231223": "青冈县", + "231224": "庆安县", + "231225": "明水县", + "231226": "绥棱县", + "231281": "安达市", + "231282": "肇东市", + "231283": "海伦市", + "232721": "呼玛县", + "232722": "塔河县", + "232723": "漠河县", + "232790": "松岭区", + "232791": "呼中区", + "232792": "加格达奇区", + "232793": "新林区", + "264290": "威海临港经济技术开发区", + "310101": "黄浦区", + "310104": "徐汇区", + "310105": "长宁区", + "310106": "静安区", + "310107": "普陀区", + "310108": "闸北区", + "310109": "虹口区", + "310110": "杨浦区", + "310112": "闵行区", + "310113": "宝山区", + "310114": "嘉定区", + "310115": "浦东新区", + "310116": "金山区", + "310117": "松江区", + "310118": "青浦区", + "310120": "奉贤区", + "310230": "崇明县", + "320102": "玄武区", + "320104": "秦淮区", + "320105": "建邺区", + "320106": "鼓楼区", + "320111": "浦口区", + "320113": "栖霞区", + "320114": "雨花台区", + "320115": "江宁区", + "320116": "六合区", + "320117": "溧水区", + "320118": "高淳区", + "320202": "崇安区", + "320203": "南长区", + "320204": "北塘区", + "320205": "锡山区", + "320206": "惠山区", + "320211": "滨湖区", + "320281": "江阴市", + "320282": "宜兴市", + "320290": "新区", + "320302": "鼓楼区", + "320303": "云龙区", + "320305": "贾汪区", + "320311": "泉山区", + "320312": "铜山区", + "320321": "丰县", + "320322": "沛县", + "320324": "睢宁县", + "320381": "新沂市", + "320382": "邳州市", + "320390": "金山桥开发区", + "320391": "工业园区", + "320402": "天宁区", + "320404": "钟楼区", + "320411": "新北区", + "320412": "武进区", + "320413": "金坛区", + "320481": "溧阳市", + "320505": "虎丘区", + "320506": "吴中区", + "320507": "相城区", + "320508": "姑苏区", + "320509": "吴江区", + "320581": "常熟市", + "320582": "张家港市", + "320583": "昆山市", + "320585": "太仓市", + "320590": "工业园区", + "320591": "高新区", + "320602": "崇川区", + "320611": "港闸区", + "320612": "通州区", + "320621": "海安县", + "320623": "如东县", + "320681": "启东市", + "320682": "如皋市", + "320684": "海门市", + "320690": "南通经济技术开发区", + "320691": "高新区", + "320703": "连云区", + "320706": "海州区", + "320707": "赣榆区", + "320722": "东海县", + "320723": "灌云县", + "320724": "灌南县", + "320802": "清河区", + "320803": "淮安区", + "320804": "淮阴区", + "320811": "清浦区", + "320826": "涟水县", + "320829": "洪泽县", + "320830": "盱眙县", + "320831": "金湖县", + "320890": "经济开发区", + "320902": "亭湖区", + "320903": "盐都区", + "320904": "大丰区", + "320921": "响水县", + "320922": "滨海县", + "320923": "阜宁县", + "320924": "射阳县", + "320925": "建湖县", + "320981": "东台市", + "321002": "广陵区", + "321003": "邗江区", + "321012": "江都区", + "321023": "宝应县", + "321081": "仪征市", + "321084": "高邮市", + "321090": "经济开发区", + "321102": "京口区", + "321111": "润州区", + "321112": "丹徒区", + "321181": "丹阳市", + "321182": "扬中市", + "321183": "句容市", + "321202": "海陵区", + "321203": "高港区", + "321204": "姜堰区", + "321281": "兴化市", + "321282": "靖江市", + "321283": "泰兴市", + "321302": "宿城区", + "321311": "宿豫区", + "321322": "沭阳县", + "321323": "泗阳县", + "321324": "泗洪县", + "321390": "宿迁经济开发区", + "330102": "上城区", + "330103": "下城区", + "330104": "江干区", + "330105": "拱墅区", + "330106": "西湖区", + "330108": "滨江区", + "330109": "萧山区", + "330110": "余杭区", + "330111": "富阳区", + "330122": "桐庐县", + "330127": "淳安县", + "330182": "建德市", + "330185": "临安市", + "330203": "海曙区", + "330204": "江东区", + "330205": "江北区", + "330206": "北仑区", + "330211": "镇海区", + "330212": "鄞州区", + "330225": "象山县", + "330226": "宁海县", + "330281": "余姚市", + "330282": "慈溪市", + "330283": "奉化市", + "330290": "高新科技开发区", + "330302": "鹿城区", + "330303": "龙湾区", + "330304": "瓯海区", + "330305": "洞头区", + "330324": "永嘉县", + "330326": "平阳县", + "330327": "苍南县", + "330328": "文成县", + "330329": "泰顺县", + "330381": "瑞安市", + "330382": "乐清市", + "330402": "南湖区", + "330411": "秀洲区", + "330421": "嘉善县", + "330424": "海盐县", + "330481": "海宁市", + "330482": "平湖市", + "330483": "桐乡市", + "330502": "吴兴区", + "330503": "南浔区", + "330521": "德清县", + "330522": "长兴县", + "330523": "安吉县", + "330602": "越城区", + "330603": "柯桥区", + "330604": "上虞区", + "330624": "新昌县", + "330681": "诸暨市", + "330683": "嵊州市", + "330702": "婺城区", + "330703": "金东区", + "330723": "武义县", + "330726": "浦江县", + "330727": "磐安县", + "330781": "兰溪市", + "330782": "义乌市", + "330783": "东阳市", + "330784": "永康市", + "330802": "柯城区", + "330803": "衢江区", + "330822": "常山县", + "330824": "开化县", + "330825": "龙游县", + "330881": "江山市", + "330902": "定海区", + "330903": "普陀区", + "330921": "岱山县", + "330922": "嵊泗县", + "331002": "椒江区", + "331003": "黄岩区", + "331004": "路桥区", + "331021": "玉环县", + "331022": "三门县", + "331023": "天台县", + "331024": "仙居县", + "331081": "温岭市", + "331082": "临海市", + "331102": "莲都区", + "331121": "青田县", + "331122": "缙云县", + "331123": "遂昌县", + "331124": "松阳县", + "331125": "云和县", + "331126": "庆元县", + "331127": "景宁畲族自治县", + "331181": "龙泉市", + "340102": "瑶海区", + "340103": "庐阳区", + "340104": "蜀山区", + "340111": "包河区", + "340121": "长丰县", + "340122": "肥东县", + "340123": "肥西县", + "340124": "庐江县", + "340181": "巢湖市", + "340190": "高新技术开发区", + "340191": "经济技术开发区", + "340192": "北城新区", + "340193": "政务文化新区", + "340194": "滨湖新区", + "340195": "新站高新区", + "340202": "镜湖区", + "340203": "弋江区", + "340207": "鸠江区", + "340208": "三山区", + "340221": "芜湖县", + "340222": "繁昌县", + "340223": "南陵县", + "340225": "无为县", + "340302": "龙子湖区", + "340303": "蚌山区", + "340304": "禹会区", + "340311": "淮上区", + "340321": "怀远县", + "340322": "五河县", + "340323": "固镇县", + "340402": "大通区", + "340403": "田家庵区", + "340404": "谢家集区", + "340405": "八公山区", + "340406": "潘集区", + "340421": "凤台县", + "340490": "淮南高新技术产业开发区", + "340503": "花山区", + "340504": "雨山区", + "340506": "博望区", + "340521": "当涂县", + "340522": "含山县", + "340523": "和县", + "340602": "杜集区", + "340603": "相山区", + "340604": "烈山区", + "340621": "濉溪县", + "340702": "铜官山区", + "340703": "狮子山区", + "340711": "郊区", + "340721": "铜陵县", + "340802": "迎江区", + "340803": "大观区", + "340811": "宜秀区", + "340822": "怀宁县", + "340823": "枞阳县", + "340824": "潜山县", + "340825": "太湖县", + "340826": "宿松县", + "340827": "望江县", + "340828": "岳西县", + "340881": "桐城市", + "340890": "安庆经济技术开发区", + "341002": "屯溪区", + "341003": "黄山区", + "341004": "徽州区", + "341021": "歙县", + "341022": "休宁县", + "341023": "黟县", + "341024": "祁门县", + "341102": "琅琊区", + "341103": "南谯区", + "341122": "来安县", + "341124": "全椒县", + "341125": "定远县", + "341126": "凤阳县", + "341181": "天长市", + "341182": "明光市", + "341202": "颍州区", + "341203": "颍东区", + "341204": "颍泉区", + "341221": "临泉县", + "341222": "太和县", + "341225": "阜南县", + "341226": "颍上县", + "341282": "界首市", + "341290": "阜阳经济技术开发区", + "341302": "埇桥区", + "341321": "砀山县", + "341322": "萧县", + "341323": "灵璧县", + "341324": "泗县", + "341390": "经济开发区", + "341502": "金安区", + "341503": "裕安区", + "341521": "寿县", + "341522": "霍邱县", + "341523": "舒城县", + "341524": "金寨县", + "341525": "霍山县", + "341602": "谯城区", + "341621": "涡阳县", + "341622": "蒙城县", + "341623": "利辛县", + "341702": "贵池区", + "341721": "东至县", + "341722": "石台县", + "341723": "青阳县", + "341802": "宣州区", + "341821": "郎溪县", + "341822": "广德县", + "341823": "泾县", + "341824": "绩溪县", + "341825": "旌德县", + "341881": "宁国市", + "350102": "鼓楼区", + "350103": "台江区", + "350104": "仓山区", + "350105": "马尾区", + "350111": "晋安区", + "350121": "闽侯县", + "350122": "连江县", + "350123": "罗源县", + "350124": "闽清县", + "350125": "永泰县", + "350128": "平潭县", + "350181": "福清市", + "350182": "长乐市", + "350203": "思明区", + "350205": "海沧区", + "350206": "湖里区", + "350211": "集美区", + "350212": "同安区", + "350213": "翔安区", + "350302": "城厢区", + "350303": "涵江区", + "350304": "荔城区", + "350305": "秀屿区", + "350322": "仙游县", + "350402": "梅列区", + "350403": "三元区", + "350421": "明溪县", + "350423": "清流县", + "350424": "宁化县", + "350425": "大田县", + "350426": "尤溪县", + "350427": "沙县", + "350428": "将乐县", + "350429": "泰宁县", + "350430": "建宁县", + "350481": "永安市", + "350502": "鲤城区", + "350503": "丰泽区", + "350504": "洛江区", + "350505": "泉港区", + "350521": "惠安县", + "350524": "安溪县", + "350525": "永春县", + "350526": "德化县", + "350527": "金门县", + "350581": "石狮市", + "350582": "晋江市", + "350583": "南安市", + "350602": "芗城区", + "350603": "龙文区", + "350622": "云霄县", + "350623": "漳浦县", + "350624": "诏安县", + "350625": "长泰县", + "350626": "东山县", + "350627": "南靖县", + "350628": "平和县", + "350629": "华安县", + "350681": "龙海市", + "350702": "延平区", + "350703": "建阳区", + "350721": "顺昌县", + "350722": "浦城县", + "350723": "光泽县", + "350724": "松溪县", + "350725": "政和县", + "350781": "邵武市", + "350782": "武夷山市", + "350783": "建瓯市", + "350802": "新罗区", + "350803": "永定区", + "350821": "长汀县", + "350823": "上杭县", + "350824": "武平县", + "350825": "连城县", + "350881": "漳平市", + "350902": "蕉城区", + "350921": "霞浦县", + "350922": "古田县", + "350923": "屏南县", + "350924": "寿宁县", + "350925": "周宁县", + "350926": "柘荣县", + "350981": "福安市", + "350982": "福鼎市", + "350990": "东侨开发区", + "360102": "东湖区", + "360103": "西湖区", + "360104": "青云谱区", + "360105": "湾里区", + "360111": "青山湖区", + "360112": "新建区", + "360121": "南昌县", + "360123": "安义县", + "360124": "进贤县", + "360190": "经济技术开发区", + "360191": "红谷滩新区", + "360192": "高新区", + "360202": "昌江区", + "360203": "珠山区", + "360222": "浮梁县", + "360281": "乐平市", + "360302": "安源区", + "360313": "湘东区", + "360321": "莲花县", + "360322": "上栗县", + "360323": "芦溪县", + "360402": "庐山区", + "360403": "浔阳区", + "360421": "九江县", + "360423": "武宁县", + "360424": "修水县", + "360425": "永修县", + "360426": "德安县", + "360427": "星子县", + "360428": "都昌县", + "360429": "湖口县", + "360430": "彭泽县", + "360481": "瑞昌市", + "360482": "共青城市", + "360490": "经济技术开发区", + "360491": "八里湖新区", + "360502": "渝水区", + "360521": "分宜县", + "360602": "月湖区", + "360622": "余江县", + "360681": "贵溪市", + "360702": "章贡区", + "360703": "南康区", + "360721": "赣县", + "360722": "信丰县", + "360723": "大余县", + "360724": "上犹县", + "360725": "崇义县", + "360726": "安远县", + "360727": "龙南县", + "360728": "定南县", + "360729": "全南县", + "360730": "宁都县", + "360731": "于都县", + "360732": "兴国县", + "360733": "会昌县", + "360734": "寻乌县", + "360735": "石城县", + "360781": "瑞金市", + "360802": "吉州区", + "360803": "青原区", + "360821": "吉安县", + "360822": "吉水县", + "360823": "峡江县", + "360824": "新干县", + "360825": "永丰县", + "360826": "泰和县", + "360827": "遂川县", + "360828": "万安县", + "360829": "安福县", + "360830": "永新县", + "360881": "井冈山市", + "360902": "袁州区", + "360921": "奉新县", + "360922": "万载县", + "360923": "上高县", + "360924": "宜丰县", + "360925": "靖安县", + "360926": "铜鼓县", + "360981": "丰城市", + "360982": "樟树市", + "360983": "高安市", + "361002": "临川区", + "361021": "南城县", + "361022": "黎川县", + "361023": "南丰县", + "361024": "崇仁县", + "361025": "乐安县", + "361026": "宜黄县", + "361027": "金溪县", + "361028": "资溪县", + "361029": "东乡县", + "361030": "广昌县", + "361102": "信州区", + "361103": "广丰区", + "361121": "上饶县", + "361123": "玉山县", + "361124": "铅山县", + "361125": "横峰县", + "361126": "弋阳县", + "361127": "余干县", + "361128": "鄱阳县", + "361129": "万年县", + "361130": "婺源县", + "361181": "德兴市", + "370102": "历下区", + "370103": "市中区", + "370104": "槐荫区", + "370105": "天桥区", + "370112": "历城区", + "370113": "长清区", + "370124": "平阴县", + "370125": "济阳县", + "370126": "商河县", + "370181": "章丘市", + "370190": "高新区", + "370202": "市南区", + "370203": "市北区", + "370211": "黄岛区", + "370212": "崂山区", + "370213": "李沧区", + "370214": "城阳区", + "370281": "胶州市", + "370282": "即墨市", + "370283": "平度市", + "370285": "莱西市", + "370290": "开发区", + "370302": "淄川区", + "370303": "张店区", + "370304": "博山区", + "370305": "临淄区", + "370306": "周村区", + "370321": "桓台县", + "370322": "高青县", + "370323": "沂源县", + "370402": "市中区", + "370403": "薛城区", + "370404": "峄城区", + "370405": "台儿庄区", + "370406": "山亭区", + "370481": "滕州市", + "370502": "东营区", + "370503": "河口区", + "370521": "垦利县", + "370522": "利津县", + "370523": "广饶县", + "370602": "芝罘区", + "370611": "福山区", + "370612": "牟平区", + "370613": "莱山区", + "370634": "长岛县", + "370681": "龙口市", + "370682": "莱阳市", + "370683": "莱州市", + "370684": "蓬莱市", + "370685": "招远市", + "370686": "栖霞市", + "370687": "海阳市", + "370690": "开发区", + "370702": "潍城区", + "370703": "寒亭区", + "370704": "坊子区", + "370705": "奎文区", + "370724": "临朐县", + "370725": "昌乐县", + "370781": "青州市", + "370782": "诸城市", + "370783": "寿光市", + "370784": "安丘市", + "370785": "高密市", + "370786": "昌邑市", + "370790": "开发区", + "370791": "高新区", + "370811": "任城区", + "370812": "兖州区", + "370826": "微山县", + "370827": "鱼台县", + "370828": "金乡县", + "370829": "嘉祥县", + "370830": "汶上县", + "370831": "泗水县", + "370832": "梁山县", + "370881": "曲阜市", + "370883": "邹城市", + "370890": "高新区", + "370902": "泰山区", + "370911": "岱岳区", + "370921": "宁阳县", + "370923": "东平县", + "370982": "新泰市", + "370983": "肥城市", + "371002": "环翠区", + "371003": "文登区", + "371082": "荣成市", + "371083": "乳山市", + "371090": "工业新区", + "371091": "经济技术开发区", + "371102": "东港区", + "371103": "岚山区", + "371121": "五莲县", + "371122": "莒县", + "371202": "莱城区", + "371203": "钢城区", + "371302": "兰山区", + "371311": "罗庄区", + "371312": "河东区", + "371321": "沂南县", + "371322": "郯城县", + "371323": "沂水县", + "371324": "兰陵县", + "371325": "费县", + "371326": "平邑县", + "371327": "莒南县", + "371328": "蒙阴县", + "371329": "临沭县", + "371402": "德城区", + "371403": "陵城区", + "371422": "宁津县", + "371423": "庆云县", + "371424": "临邑县", + "371425": "齐河县", + "371426": "平原县", + "371427": "夏津县", + "371428": "武城县", + "371481": "乐陵市", + "371482": "禹城市", + "371490": "德州经济技术开发区", + "371502": "东昌府区", + "371521": "阳谷县", + "371522": "莘县", + "371523": "茌平县", + "371524": "东阿县", + "371525": "冠县", + "371526": "高唐县", + "371581": "临清市", + "371602": "滨城区", + "371603": "沾化区", + "371621": "惠民县", + "371622": "阳信县", + "371623": "无棣县", + "371625": "博兴县", + "371626": "邹平县", + "371690": "北海新区", + "371702": "牡丹区", + "371721": "曹县", + "371722": "单县", + "371723": "成武县", + "371724": "巨野县", + "371725": "郓城县", + "371726": "鄄城县", + "371727": "定陶县", + "371728": "东明县", + "410102": "中原区", + "410103": "二七区", + "410104": "管城回族区", + "410105": "金水区", + "410106": "上街区", + "410108": "惠济区", + "410122": "中牟县", + "410181": "巩义市", + "410182": "荥阳市", + "410183": "新密市", + "410184": "新郑市", + "410185": "登封市", + "410190": "高新技术开发区", + "410191": "经济技术开发区", + "410192": "郑东新区", + "410202": "龙亭区", + "410203": "顺河回族区", + "410204": "鼓楼区", + "410205": "禹王台区", + "410211": "金明区", + "410212": "祥符区", + "410221": "杞县", + "410222": "通许县", + "410223": "尉氏县", + "410225": "兰考县", + "410302": "老城区", + "410303": "西工区", + "410304": "瀍河回族区", + "410305": "涧西区", + "410306": "吉利区", + "410311": "洛龙区", + "410322": "孟津县", + "410323": "新安县", + "410324": "栾川县", + "410325": "嵩县", + "410326": "汝阳县", + "410327": "宜阳县", + "410328": "洛宁县", + "410329": "伊川县", + "410381": "偃师市", + "410390": "伊滨区", + "410402": "新华区", + "410403": "卫东区", + "410404": "石龙区", + "410411": "湛河区", + "410421": "宝丰县", + "410422": "叶县", + "410423": "鲁山县", + "410425": "郏县", + "410481": "舞钢市", + "410482": "汝州市", + "410502": "文峰区", + "410503": "北关区", + "410505": "殷都区", + "410506": "龙安区", + "410522": "安阳县", + "410523": "汤阴县", + "410526": "滑县", + "410527": "内黄县", + "410581": "林州市", + "410590": "开发区", + "410602": "鹤山区", + "410603": "山城区", + "410611": "淇滨区", + "410621": "浚县", + "410622": "淇县", + "410702": "红旗区", + "410703": "卫滨区", + "410704": "凤泉区", + "410711": "牧野区", + "410721": "新乡县", + "410724": "获嘉县", + "410725": "原阳县", + "410726": "延津县", + "410727": "封丘县", + "410728": "长垣县", + "410781": "卫辉市", + "410782": "辉县市", + "410802": "解放区", + "410803": "中站区", + "410804": "马村区", + "410811": "山阳区", + "410821": "修武县", + "410822": "博爱县", + "410823": "武陟县", + "410825": "温县", + "410882": "沁阳市", + "410883": "孟州市", + "410902": "华龙区", + "410922": "清丰县", + "410923": "南乐县", + "410926": "范县", + "410927": "台前县", + "410928": "濮阳县", + "411002": "魏都区", + "411023": "许昌县", + "411024": "鄢陵县", + "411025": "襄城县", + "411081": "禹州市", + "411082": "长葛市", + "411102": "源汇区", + "411103": "郾城区", + "411104": "召陵区", + "411121": "舞阳县", + "411122": "临颍县", + "411202": "湖滨区", + "411221": "渑池县", + "411222": "陕县", + "411224": "卢氏县", + "411281": "义马市", + "411282": "灵宝市", + "411302": "宛城区", + "411303": "卧龙区", + "411321": "南召县", + "411322": "方城县", + "411323": "西峡县", + "411324": "镇平县", + "411325": "内乡县", + "411326": "淅川县", + "411327": "社旗县", + "411328": "唐河县", + "411329": "新野县", + "411330": "桐柏县", + "411381": "邓州市", + "411402": "梁园区", + "411403": "睢阳区", + "411421": "民权县", + "411422": "睢县", + "411423": "宁陵县", + "411424": "柘城县", + "411425": "虞城县", + "411426": "夏邑县", + "411481": "永城市", + "411502": "浉河区", + "411503": "平桥区", + "411521": "罗山县", + "411522": "光山县", + "411523": "新县", + "411524": "商城县", + "411525": "固始县", + "411526": "潢川县", + "411527": "淮滨县", + "411528": "息县", + "411602": "川汇区", + "411621": "扶沟县", + "411622": "西华县", + "411623": "商水县", + "411624": "沈丘县", + "411625": "郸城县", + "411626": "淮阳县", + "411627": "太康县", + "411628": "鹿邑县", + "411681": "项城市", + "411690": "经济开发区", + "411691": "东新区", + "411702": "驿城区", + "411721": "西平县", + "411722": "上蔡县", + "411723": "平舆县", + "411724": "正阳县", + "411725": "确山县", + "411726": "泌阳县", + "411727": "汝南县", + "411728": "遂平县", + "411729": "新蔡县", + "419001": "济源市", + "420102": "江岸区", + "420103": "江汉区", + "420104": "硚口区", + "420105": "汉阳区", + "420106": "武昌区", + "420107": "青山区", + "420111": "洪山区", + "420112": "东西湖区", + "420113": "汉南区", + "420114": "蔡甸区", + "420115": "江夏区", + "420116": "黄陂区", + "420117": "新洲区", + "420190": "武汉经济技术开发区", + "420202": "黄石港区", + "420203": "西塞山区", + "420204": "下陆区", + "420205": "铁山区", + "420222": "阳新县", + "420281": "大冶市", + "420290": "黄石经济技术开发区", + "420302": "茅箭区", + "420303": "张湾区", + "420304": "郧阳区", + "420322": "郧西县", + "420323": "竹山县", + "420324": "竹溪县", + "420325": "房县", + "420381": "丹江口市", + "420502": "西陵区", + "420503": "伍家岗区", + "420504": "点军区", + "420505": "猇亭区", + "420506": "夷陵区", + "420525": "远安县", + "420526": "兴山县", + "420527": "秭归县", + "420528": "长阳土家族自治县", + "420529": "五峰土家族自治县", + "420581": "宜都市", + "420582": "当阳市", + "420583": "枝江市", + "420590": "经济开发区", + "420602": "襄城区", + "420606": "樊城区", + "420607": "襄州区", + "420624": "南漳县", + "420625": "谷城县", + "420626": "保康县", + "420682": "老河口市", + "420683": "枣阳市", + "420684": "宜城市", + "420702": "梁子湖区", + "420703": "华容区", + "420704": "鄂城区", + "420802": "东宝区", + "420804": "掇刀区", + "420821": "京山县", + "420822": "沙洋县", + "420881": "钟祥市", + "420902": "孝南区", + "420921": "孝昌县", + "420922": "大悟县", + "420923": "云梦县", + "420981": "应城市", + "420982": "安陆市", + "420984": "汉川市", + "421002": "沙市区", + "421003": "荆州区", + "421022": "公安县", + "421023": "监利县", + "421024": "江陵县", + "421081": "石首市", + "421083": "洪湖市", + "421087": "松滋市", + "421102": "黄州区", + "421121": "团风县", + "421122": "红安县", + "421123": "罗田县", + "421124": "英山县", + "421125": "浠水县", + "421126": "蕲春县", + "421127": "黄梅县", + "421181": "麻城市", + "421182": "武穴市", + "421202": "咸安区", + "421221": "嘉鱼县", + "421222": "通城县", + "421223": "崇阳县", + "421224": "通山县", + "421281": "赤壁市", + "421303": "曾都区", + "421321": "随县", + "421381": "广水市", + "422801": "恩施市", + "422802": "利川市", + "422822": "建始县", + "422823": "巴东县", + "422825": "宣恩县", + "422826": "咸丰县", + "422827": "来凤县", + "422828": "鹤峰县", + "429004": "仙桃市", + "429005": "潜江市", + "429006": "天门市", + "429021": "神农架林区", + "430102": "芙蓉区", + "430103": "天心区", + "430104": "岳麓区", + "430105": "开福区", + "430111": "雨花区", + "430112": "望城区", + "430121": "长沙县", + "430124": "宁乡县", + "430181": "浏阳市", + "430202": "荷塘区", + "430203": "芦淞区", + "430204": "石峰区", + "430211": "天元区", + "430221": "株洲县", + "430223": "攸县", + "430224": "茶陵县", + "430225": "炎陵县", + "430281": "醴陵市", + "430302": "雨湖区", + "430304": "岳塘区", + "430321": "湘潭县", + "430381": "湘乡市", + "430382": "韶山市", + "430405": "珠晖区", + "430406": "雁峰区", + "430407": "石鼓区", + "430408": "蒸湘区", + "430412": "南岳区", + "430421": "衡阳县", + "430422": "衡南县", + "430423": "衡山县", + "430424": "衡东县", + "430426": "祁东县", + "430481": "耒阳市", + "430482": "常宁市", + "430502": "双清区", + "430503": "大祥区", + "430511": "北塔区", + "430521": "邵东县", + "430522": "新邵县", + "430523": "邵阳县", + "430524": "隆回县", + "430525": "洞口县", + "430527": "绥宁县", + "430528": "新宁县", + "430529": "城步苗族自治县", + "430581": "武冈市", + "430602": "岳阳楼区", + "430603": "云溪区", + "430611": "君山区", + "430621": "岳阳县", + "430623": "华容县", + "430624": "湘阴县", + "430626": "平江县", + "430681": "汨罗市", + "430682": "临湘市", + "430702": "武陵区", + "430703": "鼎城区", + "430721": "安乡县", + "430722": "汉寿县", + "430723": "澧县", + "430724": "临澧县", + "430725": "桃源县", + "430726": "石门县", + "430781": "津市市", + "430802": "永定区", + "430811": "武陵源区", + "430821": "慈利县", + "430822": "桑植县", + "430902": "资阳区", + "430903": "赫山区", + "430921": "南县", + "430922": "桃江县", + "430923": "安化县", + "430981": "沅江市", + "431002": "北湖区", + "431003": "苏仙区", + "431021": "桂阳县", + "431022": "宜章县", + "431023": "永兴县", + "431024": "嘉禾县", + "431025": "临武县", + "431026": "汝城县", + "431027": "桂东县", + "431028": "安仁县", + "431081": "资兴市", + "431102": "零陵区", + "431103": "冷水滩区", + "431121": "祁阳县", + "431122": "东安县", + "431123": "双牌县", + "431124": "道县", + "431125": "江永县", + "431126": "宁远县", + "431127": "蓝山县", + "431128": "新田县", + "431129": "江华瑶族自治县", + "431202": "鹤城区", + "431221": "中方县", + "431222": "沅陵县", + "431223": "辰溪县", + "431224": "溆浦县", + "431225": "会同县", + "431226": "麻阳苗族自治县", + "431227": "新晃侗族自治县", + "431228": "芷江侗族自治县", + "431229": "靖州苗族侗族自治县", + "431230": "通道侗族自治县", + "431281": "洪江市", + "431302": "娄星区", + "431321": "双峰县", + "431322": "新化县", + "431381": "冷水江市", + "431382": "涟源市", + "433101": "吉首市", + "433122": "泸溪县", + "433123": "凤凰县", + "433124": "花垣县", + "433125": "保靖县", + "433126": "古丈县", + "433127": "永顺县", + "433130": "龙山县", + "440103": "荔湾区", + "440104": "越秀区", + "440105": "海珠区", + "440106": "天河区", + "440111": "白云区", + "440112": "黄埔区", + "440113": "番禺区", + "440114": "花都区", + "440115": "南沙区", + "440117": "从化区", + "440118": "增城区", + "440203": "武江区", + "440204": "浈江区", + "440205": "曲江区", + "440222": "始兴县", + "440224": "仁化县", + "440229": "翁源县", + "440232": "乳源瑶族自治县", + "440233": "新丰县", + "440281": "乐昌市", + "440282": "南雄市", + "440303": "罗湖区", + "440304": "福田区", + "440305": "南山区", + "440306": "宝安区", + "440307": "龙岗区", + "440308": "盐田区", + "440390": "坪山新区", + "440391": "光明新区", + "440392": "大鹏新区", + "440393": "龙华新区", + "440402": "香洲区", + "440403": "斗门区", + "440404": "金湾区", + "440507": "龙湖区", + "440511": "金平区", + "440512": "濠江区", + "440513": "潮阳区", + "440514": "潮南区", + "440515": "澄海区", + "440523": "南澳县", + "440604": "禅城区", + "440605": "南海区", + "440606": "顺德区", + "440607": "三水区", + "440608": "高明区", + "440703": "蓬江区", + "440704": "江海区", + "440705": "新会区", + "440781": "台山市", + "440783": "开平市", + "440784": "鹤山市", + "440785": "恩平市", + "440802": "赤坎区", + "440803": "霞山区", + "440804": "坡头区", + "440811": "麻章区", + "440823": "遂溪县", + "440825": "徐闻县", + "440881": "廉江市", + "440882": "雷州市", + "440883": "吴川市", + "440890": "经济技术开发区", + "440902": "茂南区", + "440904": "电白区", + "440981": "高州市", + "440982": "化州市", + "440983": "信宜市", + "441202": "端州区", + "441203": "鼎湖区", + "441204": "高要区", + "441223": "广宁县", + "441224": "怀集县", + "441225": "封开县", + "441226": "德庆县", + "441284": "四会市", + "441302": "惠城区", + "441303": "惠阳区", + "441322": "博罗县", + "441323": "惠东县", + "441324": "龙门县", + "441402": "梅江区", + "441403": "梅县区", + "441422": "大埔县", + "441423": "丰顺县", + "441424": "五华县", + "441426": "平远县", + "441427": "蕉岭县", + "441481": "兴宁市", + "441502": "城区", + "441521": "海丰县", + "441523": "陆河县", + "441581": "陆丰市", + "441602": "源城区", + "441621": "紫金县", + "441622": "龙川县", + "441623": "连平县", + "441624": "和平县", + "441625": "东源县", + "441702": "江城区", + "441704": "阳东区", + "441721": "阳西县", + "441781": "阳春市", + "441802": "清城区", + "441803": "清新区", + "441821": "佛冈县", + "441823": "阳山县", + "441825": "连山壮族瑶族自治县", + "441826": "连南瑶族自治县", + "441881": "英德市", + "441882": "连州市", + "441901": "中堂镇", + "441903": "南城区", + "441904": "长安镇", + "441905": "东坑镇", + "441906": "樟木头镇", + "441907": "莞城区", + "441908": "石龙镇", + "441909": "桥头镇", + "441910": "万江区", + "441911": "麻涌镇", + "441912": "虎门镇", + "441913": "谢岗镇", + "441914": "石碣镇", + "441915": "茶山镇", + "441916": "东城区", + "441917": "洪梅镇", + "441918": "道滘镇", + "441919": "高埗镇", + "441920": "企石镇", + "441921": "凤岗镇", + "441922": "大岭山镇", + "441923": "松山湖", + "441924": "清溪镇", + "441925": "望牛墩镇", + "441926": "厚街镇", + "441927": "常平镇", + "441928": "寮步镇", + "441929": "石排镇", + "441930": "横沥镇", + "441931": "塘厦镇", + "441932": "黄江镇", + "441933": "大朗镇", + "441990": "沙田镇", + "442001": "南头镇", + "442002": "神湾镇", + "442003": "东凤镇", + "442004": "五桂山镇", + "442005": "黄圃镇", + "442006": "小榄镇", + "442007": "石岐区街道", + "442008": "横栏镇", + "442009": "三角镇", + "442010": "三乡镇", + "442011": "港口镇", + "442012": "沙溪镇", + "442013": "板芙镇", + "442014": "沙朗镇", + "442015": "东升镇", + "442016": "阜沙镇", + "442017": "民众镇", + "442018": "东区街道", + "442019": "火炬开发区", + "442020": "西区街道", + "442021": "南区街道", + "442022": "古镇", + "442023": "坦洲镇", + "442024": "大涌镇", + "442025": "南朗镇", + "445102": "湘桥区", + "445103": "潮安区", + "445122": "饶平县", + "445190": "枫溪区", + "445202": "榕城区", + "445203": "揭东区", + "445222": "揭西县", + "445224": "惠来县", + "445281": "普宁市", + "445302": "云城区", + "445303": "云安区", + "445321": "新兴县", + "445322": "郁南县", + "445381": "罗定市", + "450102": "兴宁区", + "450103": "青秀区", + "450105": "江南区", + "450107": "西乡塘区", + "450108": "良庆区", + "450109": "邕宁区", + "450110": "武鸣区", + "450123": "隆安县", + "450124": "马山县", + "450125": "上林县", + "450126": "宾阳县", + "450127": "横县", + "450202": "城中区", + "450203": "鱼峰区", + "450204": "柳南区", + "450205": "柳北区", + "450221": "柳江县", + "450222": "柳城县", + "450223": "鹿寨县", + "450224": "融安县", + "450225": "融水苗族自治县", + "450226": "三江侗族自治县", + "450302": "秀峰区", + "450303": "叠彩区", + "450304": "象山区", + "450305": "七星区", + "450311": "雁山区", + "450312": "临桂区", + "450321": "阳朔县", + "450323": "灵川县", + "450324": "全州县", + "450325": "兴安县", + "450326": "永福县", + "450327": "灌阳县", + "450328": "龙胜各族自治县", + "450329": "资源县", + "450330": "平乐县", + "450331": "荔浦县", + "450332": "恭城瑶族自治县", + "450403": "万秀区", + "450405": "长洲区", + "450406": "龙圩区", + "450421": "苍梧县", + "450422": "藤县", + "450423": "蒙山县", + "450481": "岑溪市", + "450502": "海城区", + "450503": "银海区", + "450512": "铁山港区", + "450521": "合浦县", + "450602": "港口区", + "450603": "防城区", + "450621": "上思县", + "450681": "东兴市", + "450702": "钦南区", + "450703": "钦北区", + "450721": "灵山县", + "450722": "浦北县", + "450802": "港北区", + "450803": "港南区", + "450804": "覃塘区", + "450821": "平南县", + "450881": "桂平市", + "450902": "玉州区", + "450903": "福绵区", + "450921": "容县", + "450922": "陆川县", + "450923": "博白县", + "450924": "兴业县", + "450981": "北流市", + "451002": "右江区", + "451021": "田阳县", + "451022": "田东县", + "451023": "平果县", + "451024": "德保县", + "451026": "那坡县", + "451027": "凌云县", + "451028": "乐业县", + "451029": "田林县", + "451030": "西林县", + "451031": "隆林各族自治县", + "451081": "靖西市", + "451102": "八步区", + "451121": "昭平县", + "451122": "钟山县", + "451123": "富川瑶族自治县", + "451202": "金城江区", + "451221": "南丹县", + "451222": "天峨县", + "451223": "凤山县", + "451224": "东兰县", + "451225": "罗城仫佬族自治县", + "451226": "环江毛南族自治县", + "451227": "巴马瑶族自治县", + "451228": "都安瑶族自治县", + "451229": "大化瑶族自治县", + "451281": "宜州市", + "451302": "兴宾区", + "451321": "忻城县", + "451322": "象州县", + "451323": "武宣县", + "451324": "金秀瑶族自治县", + "451381": "合山市", + "451402": "江州区", + "451421": "扶绥县", + "451422": "宁明县", + "451423": "龙州县", + "451424": "大新县", + "451425": "天等县", + "451481": "凭祥市", + "460105": "秀英区", + "460106": "龙华区", + "460107": "琼山区", + "460108": "美兰区", + "460202": "海棠区", + "460203": "吉阳区", + "460204": "天涯区", + "460205": "崖州区", + "460321": "西沙群岛", + "460322": "南沙群岛", + "460323": "中沙群岛的岛礁及其海域", + "469001": "五指山市", + "469002": "琼海市", + "469003": "儋州市", + "469005": "文昌市", + "469006": "万宁市", + "469007": "东方市", + "469021": "定安县", + "469022": "屯昌县", + "469023": "澄迈县", + "469024": "临高县", + "469025": "白沙黎族自治县", + "469026": "昌江黎族自治县", + "469027": "乐东黎族自治县", + "469028": "陵水黎族自治县", + "469029": "保亭黎族苗族自治县", + "469030": "琼中黎族苗族自治县", + "500101": "万州区", + "500102": "涪陵区", + "500103": "渝中区", + "500104": "大渡口区", + "500105": "江北区", + "500106": "沙坪坝区", + "500107": "九龙坡区", + "500108": "南岸区", + "500109": "北碚区", + "500110": "綦江区", + "500111": "大足区", + "500112": "渝北区", + "500113": "巴南区", + "500114": "黔江区", + "500115": "长寿区", + "500116": "江津区", + "500117": "合川区", + "500118": "永川区", + "500119": "南川区", + "500120": "璧山区", + "500151": "铜梁区", + "500152": "潼南区", + "500153": "荣昌区", + "500228": "梁平县", + "500229": "城口县", + "500230": "丰都县", + "500231": "垫江县", + "500232": "武隆县", + "500233": "忠县", + "500234": "开县", + "500235": "云阳县", + "500236": "奉节县", + "500237": "巫山县", + "500238": "巫溪县", + "500240": "石柱土家族自治县", + "500241": "秀山土家族苗族自治县", + "500242": "酉阳土家族苗族自治县", + "500243": "彭水苗族土家族自治县", + "510104": "锦江区", + "510105": "青羊区", + "510106": "金牛区", + "510107": "武侯区", + "510108": "成华区", + "510112": "龙泉驿区", + "510113": "青白江区", + "510114": "新都区", + "510115": "温江区", + "510121": "金堂县", + "510122": "双流县", + "510124": "郫县", + "510129": "大邑县", + "510131": "蒲江县", + "510132": "新津县", + "510181": "都江堰市", + "510182": "彭州市", + "510183": "邛崃市", + "510184": "崇州市", + "510190": "高新西区", + "510191": "高新区", + "510302": "自流井区", + "510303": "贡井区", + "510304": "大安区", + "510311": "沿滩区", + "510321": "荣县", + "510322": "富顺县", + "510402": "东区", + "510403": "西区", + "510411": "仁和区", + "510421": "米易县", + "510422": "盐边县", + "510502": "江阳区", + "510503": "纳溪区", + "510504": "龙马潭区", + "510521": "泸县", + "510522": "合江县", + "510524": "叙永县", + "510525": "古蔺县", + "510603": "旌阳区", + "510623": "中江县", + "510626": "罗江县", + "510681": "广汉市", + "510682": "什邡市", + "510683": "绵竹市", + "510703": "涪城区", + "510704": "游仙区", + "510722": "三台县", + "510723": "盐亭县", + "510724": "安县", + "510725": "梓潼县", + "510726": "北川羌族自治县", + "510727": "平武县", + "510781": "江油市", + "510790": "经开区", + "510791": "高新区", + "510802": "利州区", + "510811": "昭化区", + "510812": "朝天区", + "510821": "旺苍县", + "510822": "青川县", + "510823": "剑阁县", + "510824": "苍溪县", + "510903": "船山区", + "510904": "安居区", + "510921": "蓬溪县", + "510922": "射洪县", + "510923": "大英县", + "511002": "市中区", + "511011": "东兴区", + "511024": "威远县", + "511025": "资中县", + "511028": "隆昌县", + "511102": "市中区", + "511111": "沙湾区", + "511112": "五通桥区", + "511113": "金口河区", + "511123": "犍为县", + "511124": "井研县", + "511126": "夹江县", + "511129": "沐川县", + "511132": "峨边彝族自治县", + "511133": "马边彝族自治县", + "511181": "峨眉山市", + "511302": "顺庆区", + "511303": "高坪区", + "511304": "嘉陵区", + "511321": "南部县", + "511322": "营山县", + "511323": "蓬安县", + "511324": "仪陇县", + "511325": "西充县", + "511381": "阆中市", + "511402": "东坡区", + "511403": "彭山区", + "511421": "仁寿县", + "511423": "洪雅县", + "511424": "丹棱县", + "511425": "青神县", + "511502": "翠屏区", + "511503": "南溪区", + "511521": "宜宾县", + "511523": "江安县", + "511524": "长宁县", + "511525": "高县", + "511526": "珙县", + "511527": "筠连县", + "511528": "兴文县", + "511529": "屏山县", + "511602": "广安区", + "511603": "前锋区", + "511621": "岳池县", + "511622": "武胜县", + "511623": "邻水县", + "511681": "华蓥市", + "511702": "通川区", + "511703": "达川区", + "511722": "宣汉县", + "511723": "开江县", + "511724": "大竹县", + "511725": "渠县", + "511781": "万源市", + "511802": "雨城区", + "511803": "名山区", + "511822": "荥经县", + "511823": "汉源县", + "511824": "石棉县", + "511825": "天全县", + "511826": "芦山县", + "511827": "宝兴县", + "511902": "巴州区", + "511903": "恩阳区", + "511921": "通江县", + "511922": "南江县", + "511923": "平昌县", + "512002": "雁江区", + "512021": "安岳县", + "512022": "乐至县", + "512081": "简阳市", + "513221": "汶川县", + "513222": "理县", + "513223": "茂县", + "513224": "松潘县", + "513225": "九寨沟县", + "513226": "金川县", + "513227": "小金县", + "513228": "黑水县", + "513229": "马尔康县", + "513230": "壤塘县", + "513231": "阿坝县", + "513232": "若尔盖县", + "513233": "红原县", + "513301": "康定市", + "513322": "泸定县", + "513323": "丹巴县", + "513324": "九龙县", + "513325": "雅江县", + "513326": "道孚县", + "513327": "炉霍县", + "513328": "甘孜县", + "513329": "新龙县", + "513330": "德格县", + "513331": "白玉县", + "513332": "石渠县", + "513333": "色达县", + "513334": "理塘县", + "513335": "巴塘县", + "513336": "乡城县", + "513337": "稻城县", + "513338": "得荣县", + "513401": "西昌市", + "513422": "木里藏族自治县", + "513423": "盐源县", + "513424": "德昌县", + "513425": "会理县", + "513426": "会东县", + "513427": "宁南县", + "513428": "普格县", + "513429": "布拖县", + "513430": "金阳县", + "513431": "昭觉县", + "513432": "喜德县", + "513433": "冕宁县", + "513434": "越西县", + "513435": "甘洛县", + "513436": "美姑县", + "513437": "雷波县", + "520102": "南明区", + "520103": "云岩区", + "520111": "花溪区", + "520112": "乌当区", + "520113": "白云区", + "520115": "观山湖区", + "520121": "开阳县", + "520122": "息烽县", + "520123": "修文县", + "520181": "清镇市", + "520201": "钟山区", + "520203": "六枝特区", + "520221": "水城县", + "520222": "盘县", + "520302": "红花岗区", + "520303": "汇川区", + "520321": "遵义县", + "520322": "桐梓县", + "520323": "绥阳县", + "520324": "正安县", + "520325": "道真仡佬族苗族自治县", + "520326": "务川仡佬族苗族自治县", + "520327": "凤冈县", + "520328": "湄潭县", + "520329": "余庆县", + "520330": "习水县", + "520381": "赤水市", + "520382": "仁怀市", + "520402": "西秀区", + "520403": "平坝区", + "520422": "普定县", + "520423": "镇宁布依族苗族自治县", + "520424": "关岭布依族苗族自治县", + "520425": "紫云苗族布依族自治县", + "520502": "七星关区", + "520521": "大方县", + "520522": "黔西县", + "520523": "金沙县", + "520524": "织金县", + "520525": "纳雍县", + "520526": "威宁彝族回族苗族自治县", + "520527": "赫章县", + "520602": "碧江区", + "520603": "万山区", + "520621": "江口县", + "520622": "玉屏侗族自治县", + "520623": "石阡县", + "520624": "思南县", + "520625": "印江土家族苗族自治县", + "520626": "德江县", + "520627": "沿河土家族自治县", + "520628": "松桃苗族自治县", + "522301": "兴义市", + "522322": "兴仁县", + "522323": "普安县", + "522324": "晴隆县", + "522325": "贞丰县", + "522326": "望谟县", + "522327": "册亨县", + "522328": "安龙县", + "522601": "凯里市", + "522622": "黄平县", + "522623": "施秉县", + "522624": "三穗县", + "522625": "镇远县", + "522626": "岑巩县", + "522627": "天柱县", + "522628": "锦屏县", + "522629": "剑河县", + "522630": "台江县", + "522631": "黎平县", + "522632": "榕江县", + "522633": "从江县", + "522634": "雷山县", + "522635": "麻江县", + "522636": "丹寨县", + "522701": "都匀市", + "522702": "福泉市", + "522722": "荔波县", + "522723": "贵定县", + "522725": "瓮安县", + "522726": "独山县", + "522727": "平塘县", + "522728": "罗甸县", + "522729": "长顺县", + "522730": "龙里县", + "522731": "惠水县", + "522732": "三都水族自治县", + "530102": "五华区", + "530103": "盘龙区", + "530111": "官渡区", + "530112": "西山区", + "530113": "东川区", + "530114": "呈贡区", + "530122": "晋宁县", + "530124": "富民县", + "530125": "宜良县", + "530126": "石林彝族自治县", + "530127": "嵩明县", + "530128": "禄劝彝族苗族自治县", + "530129": "寻甸回族彝族自治县", + "530181": "安宁市", + "530302": "麒麟区", + "530321": "马龙县", + "530322": "陆良县", + "530323": "师宗县", + "530324": "罗平县", + "530325": "富源县", + "530326": "会泽县", + "530328": "沾益县", + "530381": "宣威市", + "530402": "红塔区", + "530421": "江川县", + "530422": "澄江县", + "530423": "通海县", + "530424": "华宁县", + "530425": "易门县", + "530426": "峨山彝族自治县", + "530427": "新平彝族傣族自治县", + "530428": "元江哈尼族彝族傣族自治县", + "530502": "隆阳区", + "530521": "施甸县", + "530523": "龙陵县", + "530524": "昌宁县", + "530581": "腾冲市", + "530602": "昭阳区", + "530621": "鲁甸县", + "530622": "巧家县", + "530623": "盐津县", + "530624": "大关县", + "530625": "永善县", + "530626": "绥江县", + "530627": "镇雄县", + "530628": "彝良县", + "530629": "威信县", + "530630": "水富县", + "530702": "古城区", + "530721": "玉龙纳西族自治县", + "530722": "永胜县", + "530723": "华坪县", + "530724": "宁蒗彝族自治县", + "530802": "思茅区", + "530821": "宁洱哈尼族彝族自治县", + "530822": "墨江哈尼族自治县", + "530823": "景东彝族自治县", + "530824": "景谷傣族彝族自治县", + "530825": "镇沅彝族哈尼族拉祜族自治县", + "530826": "江城哈尼族彝族自治县", + "530827": "孟连傣族拉祜族佤族自治县", + "530828": "澜沧拉祜族自治县", + "530829": "西盟佤族自治县", + "530902": "临翔区", + "530921": "凤庆县", + "530922": "云县", + "530923": "永德县", + "530924": "镇康县", + "530925": "双江拉祜族佤族布朗族傣族自治县", + "530926": "耿马傣族佤族自治县", + "530927": "沧源佤族自治县", + "532301": "楚雄市", + "532322": "双柏县", + "532323": "牟定县", + "532324": "南华县", + "532325": "姚安县", + "532326": "大姚县", + "532327": "永仁县", + "532328": "元谋县", + "532329": "武定县", + "532331": "禄丰县", + "532501": "个旧市", + "532502": "开远市", + "532503": "蒙自市", + "532504": "弥勒市", + "532523": "屏边苗族自治县", + "532524": "建水县", + "532525": "石屏县", + "532527": "泸西县", + "532528": "元阳县", + "532529": "红河县", + "532530": "金平苗族瑶族傣族自治县", + "532531": "绿春县", + "532532": "河口瑶族自治县", + "532601": "文山市", + "532622": "砚山县", + "532623": "西畴县", + "532624": "麻栗坡县", + "532625": "马关县", + "532626": "丘北县", + "532627": "广南县", + "532628": "富宁县", + "532801": "景洪市", + "532822": "勐海县", + "532823": "勐腊县", + "532901": "大理市", + "532922": "漾濞彝族自治县", + "532923": "祥云县", + "532924": "宾川县", + "532925": "弥渡县", + "532926": "南涧彝族自治县", + "532927": "巍山彝族回族自治县", + "532928": "永平县", + "532929": "云龙县", + "532930": "洱源县", + "532931": "剑川县", + "532932": "鹤庆县", + "533102": "瑞丽市", + "533103": "芒市", + "533122": "梁河县", + "533123": "盈江县", + "533124": "陇川县", + "533321": "泸水县", + "533323": "福贡县", + "533324": "贡山独龙族怒族自治县", + "533325": "兰坪白族普米族自治县", + "533401": "香格里拉市", + "533422": "德钦县", + "533423": "维西傈僳族自治县", + "540102": "城关区", + "540121": "林周县", + "540122": "当雄县", + "540123": "尼木县", + "540124": "曲水县", + "540125": "堆龙德庆县", + "540126": "达孜县", + "540127": "墨竹工卡县", + "540202": "桑珠孜区", + "540221": "南木林县", + "540222": "江孜县", + "540223": "定日县", + "540224": "萨迦县", + "540225": "拉孜县", + "540226": "昂仁县", + "540227": "谢通门县", + "540228": "白朗县", + "540229": "仁布县", + "540230": "康马县", + "540231": "定结县", + "540232": "仲巴县", + "540233": "亚东县", + "540234": "吉隆县", + "540235": "聂拉木县", + "540236": "萨嘎县", + "540237": "岗巴县", + "540302": "卡若区", + "540321": "江达县", + "540322": "贡觉县", + "540323": "类乌齐县", + "540324": "丁青县", + "540325": "察雅县", + "540326": "八宿县", + "540327": "左贡县", + "540328": "芒康县", + "540329": "洛隆县", + "540330": "边坝县", + "540402": "巴宜区", + "540421": "工布江达县", + "540422": "米林县", + "540423": "墨脱县", + "540424": "波密县", + "540425": "察隅县", + "540426": "朗县", + "542221": "乃东县", + "542222": "扎囊县", + "542223": "贡嘎县", + "542224": "桑日县", + "542225": "琼结县", + "542226": "曲松县", + "542227": "措美县", + "542228": "洛扎县", + "542229": "加查县", + "542231": "隆子县", + "542232": "错那县", + "542233": "浪卡子县", + "542421": "那曲县", + "542422": "嘉黎县", + "542423": "比如县", + "542424": "聂荣县", + "542425": "安多县", + "542426": "申扎县", + "542427": "索县", + "542428": "班戈县", + "542429": "巴青县", + "542430": "尼玛县", + "542431": "双湖县", + "542521": "普兰县", + "542522": "札达县", + "542523": "噶尔县", + "542524": "日土县", + "542525": "革吉县", + "542526": "改则县", + "542527": "措勤县", + "610102": "新城区", + "610103": "碑林区", + "610104": "莲湖区", + "610111": "灞桥区", + "610112": "未央区", + "610113": "雁塔区", + "610114": "阎良区", + "610115": "临潼区", + "610116": "长安区", + "610117": "高陵区", + "610122": "蓝田县", + "610124": "周至县", + "610125": "户县", + "610202": "王益区", + "610203": "印台区", + "610204": "耀州区", + "610222": "宜君县", + "610302": "渭滨区", + "610303": "金台区", + "610304": "陈仓区", + "610322": "凤翔县", + "610323": "岐山县", + "610324": "扶风县", + "610326": "眉县", + "610327": "陇县", + "610328": "千阳县", + "610329": "麟游县", + "610330": "凤县", + "610331": "太白县", + "610402": "秦都区", + "610403": "杨陵区", + "610404": "渭城区", + "610422": "三原县", + "610423": "泾阳县", + "610424": "乾县", + "610425": "礼泉县", + "610426": "永寿县", + "610427": "彬县", + "610428": "长武县", + "610429": "旬邑县", + "610430": "淳化县", + "610431": "武功县", + "610481": "兴平市", + "610502": "临渭区", + "610521": "华县", + "610522": "潼关县", + "610523": "大荔县", + "610524": "合阳县", + "610525": "澄城县", + "610526": "蒲城县", + "610527": "白水县", + "610528": "富平县", + "610581": "韩城市", + "610582": "华阴市", + "610602": "宝塔区", + "610621": "延长县", + "610622": "延川县", + "610623": "子长县", + "610624": "安塞县", + "610625": "志丹县", + "610626": "吴起县", + "610627": "甘泉县", + "610628": "富县", + "610629": "洛川县", + "610630": "宜川县", + "610631": "黄龙县", + "610632": "黄陵县", + "610702": "汉台区", + "610721": "南郑县", + "610722": "城固县", + "610723": "洋县", + "610724": "西乡县", + "610725": "勉县", + "610726": "宁强县", + "610727": "略阳县", + "610728": "镇巴县", + "610729": "留坝县", + "610730": "佛坪县", + "610802": "榆阳区", + "610821": "神木县", + "610822": "府谷县", + "610823": "横山县", + "610824": "靖边县", + "610825": "定边县", + "610826": "绥德县", + "610827": "米脂县", + "610828": "佳县", + "610829": "吴堡县", + "610830": "清涧县", + "610831": "子洲县", + "610902": "汉滨区", + "610921": "汉阴县", + "610922": "石泉县", + "610923": "宁陕县", + "610924": "紫阳县", + "610925": "岚皋县", + "610926": "平利县", + "610927": "镇坪县", + "610928": "旬阳县", + "610929": "白河县", + "611002": "商州区", + "611021": "洛南县", + "611022": "丹凤县", + "611023": "商南县", + "611024": "山阳县", + "611025": "镇安县", + "611026": "柞水县", + "620102": "城关区", + "620103": "七里河区", + "620104": "西固区", + "620105": "安宁区", + "620111": "红古区", + "620121": "永登县", + "620122": "皋兰县", + "620123": "榆中县", + "620201": "市辖区", + "620290": "雄关区", + "620291": "长城区", + "620292": "镜铁区", + "620293": "新城镇", + "620294": "峪泉镇", + "620295": "文殊镇", + "620302": "金川区", + "620321": "永昌县", + "620402": "白银区", + "620403": "平川区", + "620421": "靖远县", + "620422": "会宁县", + "620423": "景泰县", + "620502": "秦州区", + "620503": "麦积区", + "620521": "清水县", + "620522": "秦安县", + "620523": "甘谷县", + "620524": "武山县", + "620525": "张家川回族自治县", + "620602": "凉州区", + "620621": "民勤县", + "620622": "古浪县", + "620623": "天祝藏族自治县", + "620702": "甘州区", + "620721": "肃南裕固族自治县", + "620722": "民乐县", + "620723": "临泽县", + "620724": "高台县", + "620725": "山丹县", + "620802": "崆峒区", + "620821": "泾川县", + "620822": "灵台县", + "620823": "崇信县", + "620824": "华亭县", + "620825": "庄浪县", + "620826": "静宁县", + "620902": "肃州区", + "620921": "金塔县", + "620922": "瓜州县", + "620923": "肃北蒙古族自治县", + "620924": "阿克塞哈萨克族自治县", + "620981": "玉门市", + "620982": "敦煌市", + "621002": "西峰区", + "621021": "庆城县", + "621022": "环县", + "621023": "华池县", + "621024": "合水县", + "621025": "正宁县", + "621026": "宁县", + "621027": "镇原县", + "621102": "安定区", + "621121": "通渭县", + "621122": "陇西县", + "621123": "渭源县", + "621124": "临洮县", + "621125": "漳县", + "621126": "岷县", + "621202": "武都区", + "621221": "成县", + "621222": "文县", + "621223": "宕昌县", + "621224": "康县", + "621225": "西和县", + "621226": "礼县", + "621227": "徽县", + "621228": "两当县", + "622901": "临夏市", + "622921": "临夏县", + "622922": "康乐县", + "622923": "永靖县", + "622924": "广河县", + "622925": "和政县", + "622926": "东乡族自治县", + "622927": "积石山保安族东乡族撒拉族自治县", + "623001": "合作市", + "623021": "临潭县", + "623022": "卓尼县", + "623023": "舟曲县", + "623024": "迭部县", + "623025": "玛曲县", + "623026": "碌曲县", + "623027": "夏河县", + "630102": "城东区", + "630103": "城中区", + "630104": "城西区", + "630105": "城北区", + "630121": "大通回族土族自治县", + "630122": "湟中县", + "630123": "湟源县", + "630202": "乐都区", + "630203": "平安区", + "630222": "民和回族土族自治县", + "630223": "互助土族自治县", + "630224": "化隆回族自治县", + "630225": "循化撒拉族自治县", + "632221": "门源回族自治县", + "632222": "祁连县", + "632223": "海晏县", + "632224": "刚察县", + "632321": "同仁县", + "632322": "尖扎县", + "632323": "泽库县", + "632324": "河南蒙古族自治县", + "632521": "共和县", + "632522": "同德县", + "632523": "贵德县", + "632524": "兴海县", + "632525": "贵南县", + "632621": "玛沁县", + "632622": "班玛县", + "632623": "甘德县", + "632624": "达日县", + "632625": "久治县", + "632626": "玛多县", + "632701": "玉树市", + "632722": "杂多县", + "632723": "称多县", + "632724": "治多县", + "632725": "囊谦县", + "632726": "曲麻莱县", + "632801": "格尔木市", + "632802": "德令哈市", + "632821": "乌兰县", + "632822": "都兰县", + "632823": "天峻县", + "640104": "兴庆区", + "640105": "西夏区", + "640106": "金凤区", + "640121": "永宁县", + "640122": "贺兰县", + "640181": "灵武市", + "640202": "大武口区", + "640205": "惠农区", + "640221": "平罗县", + "640302": "利通区", + "640303": "红寺堡区", + "640323": "盐池县", + "640324": "同心县", + "640381": "青铜峡市", + "640402": "原州区", + "640422": "西吉县", + "640423": "隆德县", + "640424": "泾源县", + "640425": "彭阳县", + "640502": "沙坡头区", + "640521": "中宁县", + "640522": "海原县", + "650102": "天山区", + "650103": "沙依巴克区", + "650104": "新市区", + "650105": "水磨沟区", + "650106": "头屯河区", + "650107": "达坂城区", + "650109": "米东区", + "650121": "乌鲁木齐县", + "650202": "独山子区", + "650203": "克拉玛依区", + "650204": "白碱滩区", + "650205": "乌尔禾区", + "650402": "高昌区", + "650421": "鄯善县", + "650422": "托克逊县", + "652201": "哈密市", + "652222": "巴里坤哈萨克自治县", + "652223": "伊吾县", + "652301": "昌吉市", + "652302": "阜康市", + "652323": "呼图壁县", + "652324": "玛纳斯县", + "652325": "奇台县", + "652327": "吉木萨尔县", + "652328": "木垒哈萨克自治县", + "652701": "博乐市", + "652702": "阿拉山口市", + "652722": "精河县", + "652723": "温泉县", + "652801": "库尔勒市", + "652822": "轮台县", + "652823": "尉犁县", + "652824": "若羌县", + "652825": "且末县", + "652826": "焉耆回族自治县", + "652827": "和静县", + "652828": "和硕县", + "652829": "博湖县", + "652901": "阿克苏市", + "652922": "温宿县", + "652923": "库车县", + "652924": "沙雅县", + "652925": "新和县", + "652926": "拜城县", + "652927": "乌什县", + "652928": "阿瓦提县", + "652929": "柯坪县", + "653001": "阿图什市", + "653022": "阿克陶县", + "653023": "阿合奇县", + "653024": "乌恰县", + "653101": "喀什市", + "653121": "疏附县", + "653122": "疏勒县", + "653123": "英吉沙县", + "653124": "泽普县", + "653125": "莎车县", + "653126": "叶城县", + "653127": "麦盖提县", + "653128": "岳普湖县", + "653129": "伽师县", + "653130": "巴楚县", + "653131": "塔什库尔干塔吉克自治县", + "653201": "和田市", + "653221": "和田县", + "653222": "墨玉县", + "653223": "皮山县", + "653224": "洛浦县", + "653225": "策勒县", + "653226": "于田县", + "653227": "民丰县", + "654002": "伊宁市", + "654003": "奎屯市", + "654004": "霍尔果斯市", + "654021": "伊宁县", + "654022": "察布查尔锡伯自治县", + "654023": "霍城县", + "654024": "巩留县", + "654025": "新源县", + "654026": "昭苏县", + "654027": "特克斯县", + "654028": "尼勒克县", + "654201": "塔城市", + "654202": "乌苏市", + "654221": "额敏县", + "654223": "沙湾县", + "654224": "托里县", + "654225": "裕民县", + "654226": "和布克赛尔蒙古自治县", + "654301": "阿勒泰市", + "654321": "布尔津县", + "654322": "富蕴县", + "654323": "福海县", + "654324": "哈巴河县", + "654325": "青河县", + "654326": "吉木乃县", + "654390": "北屯市", + "659001": "石河子市", + "659002": "阿拉尔市", + "659003": "图木舒克市", + "659004": "五家渠市", + "710101": "中正区", + "710102": "大同区", + "710103": "中山区", + "710104": "松山区", + "710105": "大安区", + "710106": "万华区", + "710107": "信义区", + "710108": "士林区", + "710109": "北投区", + "710110": "内湖区", + "710111": "南港区", + "710112": "文山区", + "710199": "其它区", + "710201": "新兴区", + "710202": "前金区", + "710203": "芩雅区", + "710204": "盐埕区", + "710205": "鼓山区", + "710206": "旗津区", + "710207": "前镇区", + "710208": "三民区", + "710209": "左营区", + "710210": "楠梓区", + "710211": "小港区", + "710241": "苓雅区", + "710242": "仁武区", + "710243": "大社区", + "710244": "冈山区", + "710245": "路竹区", + "710246": "阿莲区", + "710247": "田寮区", + "710248": "燕巢区", + "710249": "桥头区", + "710250": "梓官区", + "710251": "弥陀区", + "710252": "永安区", + "710253": "湖内区", + "710254": "凤山区", + "710255": "大寮区", + "710256": "林园区", + "710257": "鸟松区", + "710258": "大树区", + "710259": "旗山区", + "710260": "美浓区", + "710261": "六龟区", + "710262": "内门区", + "710263": "杉林区", + "710264": "甲仙区", + "710265": "桃源区", + "710266": "那玛夏区", + "710267": "茂林区", + "710268": "茄萣区", + "710299": "其它区", + "710301": "中西区", + "710302": "东区", + "710303": "南区", + "710304": "北区", + "710305": "安平区", + "710306": "安南区", + "710339": "永康区", + "710340": "归仁区", + "710341": "新化区", + "710342": "左镇区", + "710343": "玉井区", + "710344": "楠西区", + "710345": "南化区", + "710346": "仁德区", + "710347": "关庙区", + "710348": "龙崎区", + "710349": "官田区", + "710350": "麻豆区", + "710351": "佳里区", + "710352": "西港区", + "710353": "七股区", + "710354": "将军区", + "710355": "学甲区", + "710356": "北门区", + "710357": "新营区", + "710358": "后壁区", + "710359": "白河区", + "710360": "东山区", + "710361": "六甲区", + "710362": "下营区", + "710363": "柳营区", + "710364": "盐水区", + "710365": "善化区", + "710366": "大内区", + "710367": "山上区", + "710368": "新市区", + "710369": "安定区", + "710399": "其它区", + "710401": "中区", + "710402": "东区", + "710403": "南区", + "710404": "西区", + "710405": "北区", + "710406": "北屯区", + "710407": "西屯区", + "710408": "南屯区", + "710431": "太平区", + "710432": "大里区", + "710433": "雾峰区", + "710434": "乌日区", + "710435": "丰原区", + "710436": "后里区", + "710437": "石冈区", + "710438": "东势区", + "710439": "和平区", + "710440": "新社区", + "710441": "潭子区", + "710442": "大雅区", + "710443": "神冈区", + "710444": "大肚区", + "710445": "沙鹿区", + "710446": "龙井区", + "710447": "梧栖区", + "710448": "清水区", + "710449": "大甲区", + "710450": "外埔区", + "710451": "大安区", + "710499": "其它区", + "710507": "金沙镇", + "710508": "金湖镇", + "710509": "金宁乡", + "710510": "金城镇", + "710511": "烈屿乡", + "710512": "乌坵乡", + "710614": "南投市", + "710615": "中寮乡", + "710616": "草屯镇", + "710617": "国姓乡", + "710618": "埔里镇", + "710619": "仁爱乡", + "710620": "名间乡", + "710621": "集集镇", + "710622": "水里乡", + "710623": "鱼池乡", + "710624": "信义乡", + "710625": "竹山镇", + "710626": "鹿谷乡", + "710701": "仁爱区", + "710702": "信义区", + "710703": "中正区", + "710704": "中山区", + "710705": "安乐区", + "710706": "暖暖区", + "710707": "七堵区", + "710799": "其它区", + "710801": "东区", + "710802": "北区", + "710803": "香山区", + "710899": "其它区", + "710901": "东区", + "710902": "西区", + "710999": "其它区", + "711130": "万里区", + "711132": "板桥区", + "711133": "汐止区", + "711134": "深坑区", + "711136": "瑞芳区", + "711137": "平溪区", + "711138": "双溪区", + "711140": "新店区", + "711141": "坪林区", + "711142": "乌来区", + "711143": "永和区", + "711144": "中和区", + "711145": "土城区", + "711146": "三峡区", + "711147": "树林区", + "711149": "三重区", + "711150": "新庄区", + "711151": "泰山区", + "711152": "林口区", + "711154": "五股区", + "711155": "八里区", + "711156": "淡水区", + "711157": "三芝区", + "810101": "中西区", + "810102": "湾仔", + "810103": "东区", + "810104": "南区", + "810201": "九龙城区", + "810202": "油尖旺区", + "810203": "深水埗区", + "810204": "黄大仙区", + "810205": "观塘区", + "810301": "北区", + "810302": "大埔区", + "810303": "沙田区", + "810304": "西贡区", + "810305": "元朗区", + "810306": "屯门区", + "810307": "荃湾区", + "810308": "葵青区", + "810309": "离岛区", + "820101": "澳门半岛", + "820201": "离岛" + } +} \ No newline at end of file diff --git a/litemall-vue/src/views/items/detail/EntityGroup/index.vue b/litemall-vue/src/views/items/detail/EntityGroup/index.vue new file mode 100755 index 00000000..13b0d347 --- /dev/null +++ b/litemall-vue/src/views/items/detail/EntityGroup/index.vue @@ -0,0 +1,513 @@ + + + + + diff --git a/litemall-vue/src/views/items/detail/EntityGroup/popup-address.vue b/litemall-vue/src/views/items/detail/EntityGroup/popup-address.vue new file mode 100755 index 00000000..1dc5afe2 --- /dev/null +++ b/litemall-vue/src/views/items/detail/EntityGroup/popup-address.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/litemall-vue/src/views/items/detail/EntityGroup/popup-area.vue b/litemall-vue/src/views/items/detail/EntityGroup/popup-area.vue new file mode 100755 index 00000000..03f95546 --- /dev/null +++ b/litemall-vue/src/views/items/detail/EntityGroup/popup-area.vue @@ -0,0 +1,50 @@ + + + + diff --git a/litemall-vue/src/views/items/detail/EntityGroup/popup-props.vue b/litemall-vue/src/views/items/detail/EntityGroup/popup-props.vue new file mode 100755 index 00000000..f2c06517 --- /dev/null +++ b/litemall-vue/src/views/items/detail/EntityGroup/popup-props.vue @@ -0,0 +1,79 @@ + + + + + + diff --git a/litemall-vue/src/views/items/detail/VirtualGroup/index.vue b/litemall-vue/src/views/items/detail/VirtualGroup/index.vue new file mode 100755 index 00000000..dba406ae --- /dev/null +++ b/litemall-vue/src/views/items/detail/VirtualGroup/index.vue @@ -0,0 +1,121 @@ + + + + + + diff --git a/litemall-vue/src/views/items/detail/index.vue b/litemall-vue/src/views/items/detail/index.vue new file mode 100755 index 00000000..e64466f9 --- /dev/null +++ b/litemall-vue/src/views/items/detail/index.vue @@ -0,0 +1,274 @@ + + + + + diff --git a/litemall-vue/src/views/items/detail/mix.js b/litemall-vue/src/views/items/detail/mix.js new file mode 100755 index 00000000..af469235 --- /dev/null +++ b/litemall-vue/src/views/items/detail/mix.js @@ -0,0 +1,42 @@ +import { Sku, Popup } from 'vant'; + +export default { + props: { + selectSku: Object + }, + data() { + return { + showSku: false, + showAddCartBtn: false, + isSkuBuy: false, + buyText: '确定' + }; + }, + methods: { + buyGoods(data) { + data = this.selectSkuData(data); + this.showSku = false; + this.$emit('update:selectSku', data); + this.isSkuBuy && this.$emit('skuBuy', data); + }, + selectSkuData(data) { + debugger + if (data.selectedSkuComb) { + data.selectedSkuComb.sku_str = data.selectedSkuComb.props_str_arr + .map(str => str.match(/[^:]*:([^:]*)/)[1]) + .join(','); + } else { + data.selectedSkuComb = {}; + } + return data; + }, + skuClick() { + this.isSkuBuy = false; + this.showSku = true; + } + }, + components: { + [Sku.name]: Sku, + [Popup.name]: Popup + } +}; diff --git a/litemall-vue/src/views/items/list/index.vue b/litemall-vue/src/views/items/list/index.vue new file mode 100755 index 00000000..c936c9ed --- /dev/null +++ b/litemall-vue/src/views/items/list/index.vue @@ -0,0 +1,251 @@ + + + + + diff --git a/litemall-vue/src/views/items/search-result/index.vue b/litemall-vue/src/views/items/search-result/index.vue new file mode 100755 index 00000000..7f87f2a1 --- /dev/null +++ b/litemall-vue/src/views/items/search-result/index.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/litemall-vue/src/views/items/search/index.vue b/litemall-vue/src/views/items/search/index.vue new file mode 100755 index 00000000..7a997f6b --- /dev/null +++ b/litemall-vue/src/views/items/search/index.vue @@ -0,0 +1,104 @@ + + + + + + diff --git a/litemall-vue/src/views/items/search/search-tag.vue b/litemall-vue/src/views/items/search/search-tag.vue new file mode 100755 index 00000000..9ec235f2 --- /dev/null +++ b/litemall-vue/src/views/items/search/search-tag.vue @@ -0,0 +1,28 @@ + + + + + diff --git a/litemall-vue/src/views/items/tabbar-class-tree.vue b/litemall-vue/src/views/items/tabbar-class-tree.vue new file mode 100755 index 00000000..90f9a1d0 --- /dev/null +++ b/litemall-vue/src/views/items/tabbar-class-tree.vue @@ -0,0 +1,170 @@ + + + + + diff --git a/litemall-vue/src/views/items/tabbar-class.vue b/litemall-vue/src/views/items/tabbar-class.vue new file mode 100755 index 00000000..10338ba3 --- /dev/null +++ b/litemall-vue/src/views/items/tabbar-class.vue @@ -0,0 +1,112 @@ + + + + + + diff --git a/litemall-vue/src/views/login/forget-reset/index.vue b/litemall-vue/src/views/login/forget-reset/index.vue new file mode 100755 index 00000000..77c9d457 --- /dev/null +++ b/litemall-vue/src/views/login/forget-reset/index.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/litemall-vue/src/views/login/forget-status/index.vue b/litemall-vue/src/views/login/forget-status/index.vue new file mode 100755 index 00000000..958fa308 --- /dev/null +++ b/litemall-vue/src/views/login/forget-status/index.vue @@ -0,0 +1,81 @@ + + + + + + diff --git a/litemall-vue/src/views/login/forget/index.vue b/litemall-vue/src/views/login/forget/index.vue new file mode 100755 index 00000000..6903d354 --- /dev/null +++ b/litemall-vue/src/views/login/forget/index.vue @@ -0,0 +1,80 @@ + + + + + diff --git a/litemall-vue/src/views/login/login-footer.vue b/litemall-vue/src/views/login/login-footer.vue new file mode 100755 index 00000000..27fb8baa --- /dev/null +++ b/litemall-vue/src/views/login/login-footer.vue @@ -0,0 +1,18 @@ + + + + + + diff --git a/litemall-vue/src/views/login/login-header.vue b/litemall-vue/src/views/login/login-header.vue new file mode 100755 index 00000000..f17ce54c --- /dev/null +++ b/litemall-vue/src/views/login/login-header.vue @@ -0,0 +1,29 @@ + + + + + + diff --git a/litemall-vue/src/views/login/login-request.vue b/litemall-vue/src/views/login/login-request.vue new file mode 100755 index 00000000..c418bb45 --- /dev/null +++ b/litemall-vue/src/views/login/login-request.vue @@ -0,0 +1,182 @@ + + + + + diff --git a/litemall-vue/src/views/login/login.vue b/litemall-vue/src/views/login/login.vue new file mode 100755 index 00000000..2778bd2d --- /dev/null +++ b/litemall-vue/src/views/login/login.vue @@ -0,0 +1,29 @@ + + + + + + diff --git a/litemall-vue/src/views/login/register-getCode/index.vue b/litemall-vue/src/views/login/register-getCode/index.vue new file mode 100755 index 00000000..95933ee7 --- /dev/null +++ b/litemall-vue/src/views/login/register-getCode/index.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/litemall-vue/src/views/login/register-status/index.vue b/litemall-vue/src/views/login/register-status/index.vue new file mode 100755 index 00000000..2d2635dc --- /dev/null +++ b/litemall-vue/src/views/login/register-status/index.vue @@ -0,0 +1,81 @@ + + + + + + diff --git a/litemall-vue/src/views/login/register-submit/index.vue b/litemall-vue/src/views/login/register-submit/index.vue new file mode 100755 index 00000000..217ef971 --- /dev/null +++ b/litemall-vue/src/views/login/register-submit/index.vue @@ -0,0 +1,78 @@ + + + + + + diff --git a/litemall-vue/src/views/order/orderDetail/bottom-goods-info.vue b/litemall-vue/src/views/order/orderDetail/bottom-goods-info.vue new file mode 100755 index 00000000..a1092b25 --- /dev/null +++ b/litemall-vue/src/views/order/orderDetail/bottom-goods-info.vue @@ -0,0 +1,66 @@ + + + + diff --git a/litemall-vue/src/views/order/orderDetail/index.vue b/litemall-vue/src/views/order/orderDetail/index.vue new file mode 100755 index 00000000..2fcc2a30 --- /dev/null +++ b/litemall-vue/src/views/order/orderDetail/index.vue @@ -0,0 +1,257 @@ + + + + + + diff --git a/litemall-vue/src/views/order/orderDetail/top-user-info.vue b/litemall-vue/src/views/order/orderDetail/top-user-info.vue new file mode 100755 index 00000000..2d45892a --- /dev/null +++ b/litemall-vue/src/views/order/orderDetail/top-user-info.vue @@ -0,0 +1,62 @@ + + + + + + diff --git a/litemall-vue/src/views/order/payment-status/index.vue b/litemall-vue/src/views/order/payment-status/index.vue new file mode 100755 index 00000000..8d6b0ff4 --- /dev/null +++ b/litemall-vue/src/views/order/payment-status/index.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/litemall-vue/src/views/order/payment/index.vue b/litemall-vue/src/views/order/payment/index.vue new file mode 100755 index 00000000..d81cea89 --- /dev/null +++ b/litemall-vue/src/views/order/payment/index.vue @@ -0,0 +1,165 @@ + + + + + diff --git a/litemall-vue/src/views/order/place-order-entity/bottom-goods-info.vue b/litemall-vue/src/views/order/place-order-entity/bottom-goods-info.vue new file mode 100755 index 00000000..48c3c066 --- /dev/null +++ b/litemall-vue/src/views/order/place-order-entity/bottom-goods-info.vue @@ -0,0 +1,68 @@ + + + + diff --git a/litemall-vue/src/views/order/place-order-entity/index.vue b/litemall-vue/src/views/order/place-order-entity/index.vue new file mode 100755 index 00000000..63ca0da2 --- /dev/null +++ b/litemall-vue/src/views/order/place-order-entity/index.vue @@ -0,0 +1,83 @@ + + + + + + diff --git a/litemall-vue/src/views/order/place-order-entity/top-user-info.vue b/litemall-vue/src/views/order/place-order-entity/top-user-info.vue new file mode 100755 index 00000000..505f43fd --- /dev/null +++ b/litemall-vue/src/views/order/place-order-entity/top-user-info.vue @@ -0,0 +1,78 @@ + + + + + + diff --git a/litemall-vue/src/views/order/place-order-virtual/index.vue b/litemall-vue/src/views/order/place-order-virtual/index.vue new file mode 100755 index 00000000..cf36025f --- /dev/null +++ b/litemall-vue/src/views/order/place-order-virtual/index.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/litemall-vue/src/views/order/tabbar-cart.vue b/litemall-vue/src/views/order/tabbar-cart.vue new file mode 100755 index 00000000..4be7adca --- /dev/null +++ b/litemall-vue/src/views/order/tabbar-cart.vue @@ -0,0 +1,311 @@ + + + + + + diff --git a/litemall-vue/src/views/user/module-address-edit/area.json b/litemall-vue/src/views/user/module-address-edit/area.json new file mode 100755 index 00000000..68adc1cf --- /dev/null +++ b/litemall-vue/src/views/user/module-address-edit/area.json @@ -0,0 +1,3607 @@ +{ + "province_list": { + "110000": "北京市", + "120000": "天津市", + "130000": "河北省", + "140000": "山西省", + "150000": "内蒙古自治区", + "210000": "辽宁省", + "220000": "吉林省", + "230000": "黑龙江省", + "310000": "上海市", + "320000": "江苏省", + "330000": "浙江省", + "340000": "安徽省", + "350000": "福建省", + "360000": "江西省", + "370000": "山东省", + "410000": "河南省", + "420000": "湖北省", + "430000": "湖南省", + "440000": "广东省", + "450000": "广西壮族自治区", + "460000": "海南省", + "500000": "重庆市", + "510000": "四川省", + "520000": "贵州省", + "530000": "云南省", + "540000": "西藏自治区", + "610000": "陕西省", + "620000": "甘肃省", + "630000": "青海省", + "640000": "宁夏回族自治区", + "650000": "新疆维吾尔自治区", + "710000": "台湾省", + "810000": "香港特别行政区", + "820000": "澳门特别行政区" + }, + "city_list": { + "110100": "北京市", + "110200": "县", + "120100": "天津市", + "120200": "县", + "130100": "石家庄市", + "130200": "唐山市", + "130300": "秦皇岛市", + "130400": "邯郸市", + "130500": "邢台市", + "130600": "保定市", + "130700": "张家口市", + "130800": "承德市", + "130900": "沧州市", + "131000": "廊坊市", + "131100": "衡水市", + "139000": "省直辖县", + "140100": "太原市", + "140200": "大同市", + "140300": "阳泉市", + "140400": "长治市", + "140500": "晋城市", + "140600": "朔州市", + "140700": "晋中市", + "140800": "运城市", + "140900": "忻州市", + "141000": "临汾市", + "141100": "吕梁市", + "150100": "呼和浩特市", + "150200": "包头市", + "150300": "乌海市", + "150400": "赤峰市", + "150500": "通辽市", + "150600": "鄂尔多斯市", + "150700": "呼伦贝尔市", + "150800": "巴彦淖尔市", + "150900": "乌兰察布市", + "152200": "兴安盟", + "152500": "锡林郭勒盟", + "152900": "阿拉善盟", + "210100": "沈阳市", + "210200": "大连市", + "210300": "鞍山市", + "210400": "抚顺市", + "210500": "本溪市", + "210600": "丹东市", + "210700": "锦州市", + "210800": "营口市", + "210900": "阜新市", + "211000": "辽阳市", + "211100": "盘锦市", + "211200": "铁岭市", + "211300": "朝阳市", + "211400": "葫芦岛市", + "220100": "长春市", + "220200": "吉林市", + "220300": "四平市", + "220400": "辽源市", + "220500": "通化市", + "220600": "白山市", + "220700": "松原市", + "220800": "白城市", + "222400": "延边朝鲜族自治州", + "230100": "哈尔滨市", + "230200": "齐齐哈尔市", + "230300": "鸡西市", + "230400": "鹤岗市", + "230500": "双鸭山市", + "230600": "大庆市", + "230700": "伊春市", + "230800": "佳木斯市", + "230900": "七台河市", + "231000": "牡丹江市", + "231100": "黑河市", + "231200": "绥化市", + "232700": "大兴安岭地区", + "310100": "上海市", + "310200": "县", + "320100": "南京市", + "320200": "无锡市", + "320300": "徐州市", + "320400": "常州市", + "320500": "苏州市", + "320600": "南通市", + "320700": "连云港市", + "320800": "淮安市", + "320900": "盐城市", + "321000": "扬州市", + "321100": "镇江市", + "321200": "泰州市", + "321300": "宿迁市", + "330100": "杭州市", + "330200": "宁波市", + "330300": "温州市", + "330400": "嘉兴市", + "330500": "湖州市", + "330600": "绍兴市", + "330700": "金华市", + "330800": "衢州市", + "330900": "舟山市", + "331000": "台州市", + "331100": "丽水市", + "340100": "合肥市", + "340200": "芜湖市", + "340300": "蚌埠市", + "340400": "淮南市", + "340500": "马鞍山市", + "340600": "淮北市", + "340700": "铜陵市", + "340800": "安庆市", + "341000": "黄山市", + "341100": "滁州市", + "341200": "阜阳市", + "341300": "宿州市", + "341500": "六安市", + "341600": "亳州市", + "341700": "池州市", + "341800": "宣城市", + "350100": "福州市", + "350200": "厦门市", + "350300": "莆田市", + "350400": "三明市", + "350500": "泉州市", + "350600": "漳州市", + "350700": "南平市", + "350800": "龙岩市", + "350900": "宁德市", + "360100": "南昌市", + "360200": "景德镇市", + "360300": "萍乡市", + "360400": "九江市", + "360500": "新余市", + "360600": "鹰潭市", + "360700": "赣州市", + "360800": "吉安市", + "360900": "宜春市", + "361000": "抚州市", + "361100": "上饶市", + "370100": "济南市", + "370200": "青岛市", + "370300": "淄博市", + "370400": "枣庄市", + "370500": "东营市", + "370600": "烟台市", + "370700": "潍坊市", + "370800": "济宁市", + "370900": "泰安市", + "371000": "威海市", + "371100": "日照市", + "371200": "莱芜市", + "371300": "临沂市", + "371400": "德州市", + "371500": "聊城市", + "371600": "滨州市", + "371700": "菏泽市", + "410100": "郑州市", + "410200": "开封市", + "410300": "洛阳市", + "410400": "平顶山市", + "410500": "安阳市", + "410600": "鹤壁市", + "410700": "新乡市", + "410800": "焦作市", + "410900": "濮阳市", + "411000": "许昌市", + "411100": "漯河市", + "411200": "三门峡市", + "411300": "南阳市", + "411400": "商丘市", + "411500": "信阳市", + "411600": "周口市", + "411700": "驻马店市", + "419000": "省直辖县", + "420100": "武汉市", + "420200": "黄石市", + "420300": "十堰市", + "420500": "宜昌市", + "420600": "襄阳市", + "420700": "鄂州市", + "420800": "荆门市", + "420900": "孝感市", + "421000": "荆州市", + "421100": "黄冈市", + "421200": "咸宁市", + "421300": "随州市", + "422800": "恩施土家族苗族自治州", + "429000": "省直辖县", + "430100": "长沙市", + "430200": "株洲市", + "430300": "湘潭市", + "430400": "衡阳市", + "430500": "邵阳市", + "430600": "岳阳市", + "430700": "常德市", + "430800": "张家界市", + "430900": "益阳市", + "431000": "郴州市", + "431100": "永州市", + "431200": "怀化市", + "431300": "娄底市", + "433100": "湘西土家族苗族自治州", + "440100": "广州市", + "440200": "韶关市", + "440300": "深圳市", + "440400": "珠海市", + "440500": "汕头市", + "440600": "佛山市", + "440700": "江门市", + "440800": "湛江市", + "440900": "茂名市", + "441200": "肇庆市", + "441300": "惠州市", + "441400": "梅州市", + "441500": "汕尾市", + "441600": "河源市", + "441700": "阳江市", + "441800": "清远市", + "441900": "东莞市", + "442000": "中山市", + "445100": "潮州市", + "445200": "揭阳市", + "445300": "云浮市", + "450100": "南宁市", + "450200": "柳州市", + "450300": "桂林市", + "450400": "梧州市", + "450500": "北海市", + "450600": "防城港市", + "450700": "钦州市", + "450800": "贵港市", + "450900": "玉林市", + "451000": "百色市", + "451100": "贺州市", + "451200": "河池市", + "451300": "来宾市", + "451400": "崇左市", + "460100": "海口市", + "460200": "三亚市", + "460300": "三沙市", + "469000": "省直辖县", + "500100": "重庆市", + "500200": "县", + "510100": "成都市", + "510300": "自贡市", + "510400": "攀枝花市", + "510500": "泸州市", + "510600": "德阳市", + "510700": "绵阳市", + "510800": "广元市", + "510900": "遂宁市", + "511000": "内江市", + "511100": "乐山市", + "511300": "南充市", + "511400": "眉山市", + "511500": "宜宾市", + "511600": "广安市", + "511700": "达州市", + "511800": "雅安市", + "511900": "巴中市", + "512000": "资阳市", + "513200": "阿坝藏族羌族自治州", + "513300": "甘孜藏族自治州", + "513400": "凉山彝族自治州", + "520100": "贵阳市", + "520200": "六盘水市", + "520300": "遵义市", + "520400": "安顺市", + "520500": "毕节市", + "520600": "铜仁市", + "522300": "黔西南布依族苗族自治州", + "522600": "黔东南苗族侗族自治州", + "522700": "黔南布依族苗族自治州", + "530100": "昆明市", + "530300": "曲靖市", + "530400": "玉溪市", + "530500": "保山市", + "530600": "昭通市", + "530700": "丽江市", + "530800": "普洱市", + "530900": "临沧市", + "532300": "楚雄彝族自治州", + "532500": "红河哈尼族彝族自治州", + "532600": "文山壮族苗族自治州", + "532800": "西双版纳傣族自治州", + "532900": "大理白族自治州", + "533100": "德宏傣族景颇族自治州", + "533300": "怒江傈僳族自治州", + "533400": "迪庆藏族自治州", + "540100": "拉萨市", + "540200": "日喀则市", + "540300": "昌都市", + "540400": "林芝市", + "542200": "山南地区", + "542400": "那曲地区", + "542500": "阿里地区", + "610100": "西安市", + "610200": "铜川市", + "610300": "宝鸡市", + "610400": "咸阳市", + "610500": "渭南市", + "610600": "延安市", + "610700": "汉中市", + "610800": "榆林市", + "610900": "安康市", + "611000": "商洛市", + "620100": "兰州市", + "620200": "嘉峪关市", + "620300": "金昌市", + "620400": "白银市", + "620500": "天水市", + "620600": "武威市", + "620700": "张掖市", + "620800": "平凉市", + "620900": "酒泉市", + "621000": "庆阳市", + "621100": "定西市", + "621200": "陇南市", + "622900": "临夏回族自治州", + "623000": "甘南藏族自治州", + "630100": "西宁市", + "630200": "海东市", + "632200": "海北藏族自治州", + "632300": "黄南藏族自治州", + "632500": "海南藏族自治州", + "632600": "果洛藏族自治州", + "632700": "玉树藏族自治州", + "632800": "海西蒙古族藏族自治州", + "640100": "银川市", + "640200": "石嘴山市", + "640300": "吴忠市", + "640400": "固原市", + "640500": "中卫市", + "650100": "乌鲁木齐市", + "650200": "克拉玛依市", + "650400": "吐鲁番市", + "652200": "哈密地区", + "652300": "昌吉回族自治州", + "652700": "博尔塔拉蒙古自治州", + "652800": "巴音郭楞蒙古自治州", + "652900": "阿克苏地区", + "653000": "克孜勒苏柯尔克孜自治州", + "653100": "喀什地区", + "653200": "和田地区", + "654000": "伊犁哈萨克自治州", + "654200": "塔城地区", + "654300": "阿勒泰地区", + "659000": "自治区直辖县级行政区划", + "710100": "台北市", + "710200": "高雄市", + "710300": "台南市", + "710400": "台中市", + "710500": "金门县", + "710600": "南投县", + "710700": "基隆市", + "710800": "新竹市", + "710900": "嘉义市", + "711100": "新北市", + "711200": "宜兰县", + "711300": "新竹县", + "711400": "桃园县", + "711500": "苗栗县", + "711700": "彰化县", + "711900": "嘉义县", + "712100": "云林县", + "712400": "屏东县", + "712500": "台东县", + "712600": "花莲县", + "712700": "澎湖县", + "712800": "连江县", + "810100": "香港岛", + "810200": "九龙", + "810300": "新界", + "820100": "澳门半岛", + "820200": "离岛" + }, + "county_list": { + "110101": "东城区", + "110102": "西城区", + "110105": "朝阳区", + "110106": "丰台区", + "110107": "石景山区", + "110108": "海淀区", + "110109": "门头沟区", + "110111": "房山区", + "110112": "通州区", + "110113": "顺义区", + "110114": "昌平区", + "110115": "大兴区", + "110116": "怀柔区", + "110117": "平谷区", + "110228": "密云县", + "110229": "延庆县", + "120101": "和平区", + "120102": "河东区", + "120103": "河西区", + "120104": "南开区", + "120105": "河北区", + "120106": "红桥区", + "120110": "东丽区", + "120111": "西青区", + "120112": "津南区", + "120113": "北辰区", + "120114": "武清区", + "120115": "宝坻区", + "120116": "滨海新区", + "120117": "宁河区", + "120118": "静海区", + "120225": "蓟县", + "130102": "长安区", + "130104": "桥西区", + "130105": "新华区", + "130107": "井陉矿区", + "130108": "裕华区", + "130109": "藁城区", + "130110": "鹿泉区", + "130111": "栾城区", + "130121": "井陉县", + "130123": "正定县", + "130125": "行唐县", + "130126": "灵寿县", + "130127": "高邑县", + "130128": "深泽县", + "130129": "赞皇县", + "130130": "无极县", + "130131": "平山县", + "130132": "元氏县", + "130133": "赵县", + "130183": "晋州市", + "130184": "新乐市", + "130202": "路南区", + "130203": "路北区", + "130204": "古冶区", + "130205": "开平区", + "130207": "丰南区", + "130208": "丰润区", + "130209": "曹妃甸区", + "130223": "滦县", + "130224": "滦南县", + "130225": "乐亭县", + "130227": "迁西县", + "130229": "玉田县", + "130281": "遵化市", + "130283": "迁安市", + "130302": "海港区", + "130303": "山海关区", + "130304": "北戴河区", + "130306": "抚宁区", + "130321": "青龙满族自治县", + "130322": "昌黎县", + "130324": "卢龙县", + "130390": "经济技术开发区", + "130402": "邯山区", + "130403": "丛台区", + "130404": "复兴区", + "130406": "峰峰矿区", + "130421": "邯郸县", + "130423": "临漳县", + "130424": "成安县", + "130425": "大名县", + "130426": "涉县", + "130427": "磁县", + "130428": "肥乡县", + "130429": "永年县", + "130430": "邱县", + "130431": "鸡泽县", + "130432": "广平县", + "130433": "馆陶县", + "130434": "魏县", + "130435": "曲周县", + "130481": "武安市", + "130502": "桥东区", + "130503": "桥西区", + "130521": "邢台县", + "130522": "临城县", + "130523": "内丘县", + "130524": "柏乡县", + "130525": "隆尧县", + "130526": "任县", + "130527": "南和县", + "130528": "宁晋县", + "130529": "巨鹿县", + "130530": "新河县", + "130531": "广宗县", + "130532": "平乡县", + "130533": "威县", + "130534": "清河县", + "130535": "临西县", + "130581": "南宫市", + "130582": "沙河市", + "130602": "竞秀区", + "130606": "莲池区", + "130607": "满城区", + "130608": "清苑区", + "130609": "徐水区", + "130623": "涞水县", + "130624": "阜平县", + "130626": "定兴县", + "130627": "唐县", + "130628": "高阳县", + "130629": "容城县", + "130630": "涞源县", + "130631": "望都县", + "130632": "安新县", + "130633": "易县", + "130634": "曲阳县", + "130635": "蠡县", + "130636": "顺平县", + "130637": "博野县", + "130638": "雄县", + "130681": "涿州市", + "130683": "安国市", + "130684": "高碑店市", + "130702": "桥东区", + "130703": "桥西区", + "130705": "宣化区", + "130706": "下花园区", + "130721": "宣化县", + "130722": "张北县", + "130723": "康保县", + "130724": "沽源县", + "130725": "尚义县", + "130726": "蔚县", + "130727": "阳原县", + "130728": "怀安县", + "130729": "万全县", + "130730": "怀来县", + "130731": "涿鹿县", + "130732": "赤城县", + "130733": "崇礼县", + "130802": "双桥区", + "130803": "双滦区", + "130804": "鹰手营子矿区", + "130821": "承德县", + "130822": "兴隆县", + "130823": "平泉县", + "130824": "滦平县", + "130825": "隆化县", + "130826": "丰宁满族自治县", + "130827": "宽城满族自治县", + "130828": "围场满族蒙古族自治县", + "130902": "新华区", + "130903": "运河区", + "130921": "沧县", + "130922": "青县", + "130923": "东光县", + "130924": "海兴县", + "130925": "盐山县", + "130926": "肃宁县", + "130927": "南皮县", + "130928": "吴桥县", + "130929": "献县", + "130930": "孟村回族自治县", + "130981": "泊头市", + "130982": "任丘市", + "130983": "黄骅市", + "130984": "河间市", + "131002": "安次区", + "131003": "广阳区", + "131022": "固安县", + "131023": "永清县", + "131024": "香河县", + "131025": "大城县", + "131026": "文安县", + "131028": "大厂回族自治县", + "131081": "霸州市", + "131082": "三河市", + "131090": "开发区", + "131091": "燕郊经济技术开发区", + "131102": "桃城区", + "131121": "枣强县", + "131122": "武邑县", + "131123": "武强县", + "131124": "饶阳县", + "131125": "安平县", + "131126": "故城县", + "131127": "景县", + "131128": "阜城县", + "131181": "冀州市", + "131182": "深州市", + "139001": "定州市", + "139002": "辛集市", + "140105": "小店区", + "140106": "迎泽区", + "140107": "杏花岭区", + "140108": "尖草坪区", + "140109": "万柏林区", + "140110": "晋源区", + "140121": "清徐县", + "140122": "阳曲县", + "140123": "娄烦县", + "140181": "古交市", + "140202": "城区", + "140203": "矿区", + "140211": "南郊区", + "140212": "新荣区", + "140221": "阳高县", + "140222": "天镇县", + "140223": "广灵县", + "140224": "灵丘县", + "140225": "浑源县", + "140226": "左云县", + "140227": "大同县", + "140302": "城区", + "140303": "矿区", + "140311": "郊区", + "140321": "平定县", + "140322": "盂县", + "140402": "城区", + "140411": "郊区", + "140421": "长治县", + "140423": "襄垣县", + "140424": "屯留县", + "140425": "平顺县", + "140426": "黎城县", + "140427": "壶关县", + "140428": "长子县", + "140429": "武乡县", + "140430": "沁县", + "140431": "沁源县", + "140481": "潞城市", + "140502": "城区", + "140521": "沁水县", + "140522": "阳城县", + "140524": "陵川县", + "140525": "泽州县", + "140581": "高平市", + "140602": "朔城区", + "140603": "平鲁区", + "140621": "山阴县", + "140622": "应县", + "140623": "右玉县", + "140624": "怀仁县", + "140702": "榆次区", + "140721": "榆社县", + "140722": "左权县", + "140723": "和顺县", + "140724": "昔阳县", + "140725": "寿阳县", + "140726": "太谷县", + "140727": "祁县", + "140728": "平遥县", + "140729": "灵石县", + "140781": "介休市", + "140802": "盐湖区", + "140821": "临猗县", + "140822": "万荣县", + "140823": "闻喜县", + "140824": "稷山县", + "140825": "新绛县", + "140826": "绛县", + "140827": "垣曲县", + "140828": "夏县", + "140829": "平陆县", + "140830": "芮城县", + "140881": "永济市", + "140882": "河津市", + "140902": "忻府区", + "140921": "定襄县", + "140922": "五台县", + "140923": "代县", + "140924": "繁峙县", + "140925": "宁武县", + "140926": "静乐县", + "140927": "神池县", + "140928": "五寨县", + "140929": "岢岚县", + "140930": "河曲县", + "140931": "保德县", + "140932": "偏关县", + "140981": "原平市", + "141002": "尧都区", + "141021": "曲沃县", + "141022": "翼城县", + "141023": "襄汾县", + "141024": "洪洞县", + "141025": "古县", + "141026": "安泽县", + "141027": "浮山县", + "141028": "吉县", + "141029": "乡宁县", + "141030": "大宁县", + "141031": "隰县", + "141032": "永和县", + "141033": "蒲县", + "141034": "汾西县", + "141081": "侯马市", + "141082": "霍州市", + "141102": "离石区", + "141121": "文水县", + "141122": "交城县", + "141123": "兴县", + "141124": "临县", + "141125": "柳林县", + "141126": "石楼县", + "141127": "岚县", + "141128": "方山县", + "141129": "中阳县", + "141130": "交口县", + "141181": "孝义市", + "141182": "汾阳市", + "150102": "新城区", + "150103": "回民区", + "150104": "玉泉区", + "150105": "赛罕区", + "150121": "土默特左旗", + "150122": "托克托县", + "150123": "和林格尔县", + "150124": "清水河县", + "150125": "武川县", + "150202": "东河区", + "150203": "昆都仑区", + "150204": "青山区", + "150205": "石拐区", + "150206": "白云鄂博矿区", + "150207": "九原区", + "150221": "土默特右旗", + "150222": "固阳县", + "150223": "达尔罕茂明安联合旗", + "150302": "海勃湾区", + "150303": "海南区", + "150304": "乌达区", + "150402": "红山区", + "150403": "元宝山区", + "150404": "松山区", + "150421": "阿鲁科尔沁旗", + "150422": "巴林左旗", + "150423": "巴林右旗", + "150424": "林西县", + "150425": "克什克腾旗", + "150426": "翁牛特旗", + "150428": "喀喇沁旗", + "150429": "宁城县", + "150430": "敖汉旗", + "150502": "科尔沁区", + "150521": "科尔沁左翼中旗", + "150522": "科尔沁左翼后旗", + "150523": "开鲁县", + "150524": "库伦旗", + "150525": "奈曼旗", + "150526": "扎鲁特旗", + "150581": "霍林郭勒市", + "150602": "东胜区", + "150621": "达拉特旗", + "150622": "准格尔旗", + "150623": "鄂托克前旗", + "150624": "鄂托克旗", + "150625": "杭锦旗", + "150626": "乌审旗", + "150627": "伊金霍洛旗", + "150702": "海拉尔区", + "150703": "扎赉诺尔区", + "150721": "阿荣旗", + "150722": "莫力达瓦达斡尔族自治旗", + "150723": "鄂伦春自治旗", + "150724": "鄂温克族自治旗", + "150725": "陈巴尔虎旗", + "150726": "新巴尔虎左旗", + "150727": "新巴尔虎右旗", + "150781": "满洲里市", + "150782": "牙克石市", + "150783": "扎兰屯市", + "150784": "额尔古纳市", + "150785": "根河市", + "150802": "临河区", + "150821": "五原县", + "150822": "磴口县", + "150823": "乌拉特前旗", + "150824": "乌拉特中旗", + "150825": "乌拉特后旗", + "150826": "杭锦后旗", + "150902": "集宁区", + "150921": "卓资县", + "150922": "化德县", + "150923": "商都县", + "150924": "兴和县", + "150925": "凉城县", + "150926": "察哈尔右翼前旗", + "150927": "察哈尔右翼中旗", + "150928": "察哈尔右翼后旗", + "150929": "四子王旗", + "150981": "丰镇市", + "152201": "乌兰浩特市", + "152202": "阿尔山市", + "152221": "科尔沁右翼前旗", + "152222": "科尔沁右翼中旗", + "152223": "扎赉特旗", + "152224": "突泉县", + "152501": "二连浩特市", + "152502": "锡林浩特市", + "152522": "阿巴嘎旗", + "152523": "苏尼特左旗", + "152524": "苏尼特右旗", + "152525": "东乌珠穆沁旗", + "152526": "西乌珠穆沁旗", + "152527": "太仆寺旗", + "152528": "镶黄旗", + "152529": "正镶白旗", + "152530": "正蓝旗", + "152531": "多伦县", + "152921": "阿拉善左旗", + "152922": "阿拉善右旗", + "152923": "额济纳旗", + "210102": "和平区", + "210103": "沈河区", + "210104": "大东区", + "210105": "皇姑区", + "210106": "铁西区", + "210111": "苏家屯区", + "210112": "浑南区", + "210113": "沈北新区", + "210114": "于洪区", + "210122": "辽中县", + "210123": "康平县", + "210124": "法库县", + "210181": "新民市", + "210190": "经济技术开发区", + "210202": "中山区", + "210203": "西岗区", + "210204": "沙河口区", + "210211": "甘井子区", + "210212": "旅顺口区", + "210213": "金州区", + "210224": "长海县", + "210281": "瓦房店市", + "210282": "普兰店市", + "210283": "庄河市", + "210291": "大连经济技术开发区", + "210292": "大连高新区", + "210302": "铁东区", + "210303": "铁西区", + "210304": "立山区", + "210311": "千山区", + "210321": "台安县", + "210323": "岫岩满族自治县", + "210381": "海城市", + "210390": "高新区", + "210402": "新抚区", + "210403": "东洲区", + "210404": "望花区", + "210411": "顺城区", + "210421": "抚顺县", + "210422": "新宾满族自治县", + "210423": "清原满族自治县", + "210502": "平山区", + "210503": "溪湖区", + "210504": "明山区", + "210505": "南芬区", + "210521": "本溪满族自治县", + "210522": "桓仁满族自治县", + "210602": "元宝区", + "210603": "振兴区", + "210604": "振安区", + "210624": "宽甸满族自治县", + "210681": "东港市", + "210682": "凤城市", + "210702": "古塔区", + "210703": "凌河区", + "210711": "太和区", + "210726": "黑山县", + "210727": "义县", + "210781": "凌海市", + "210782": "北镇市", + "210793": "经济技术开发区", + "210802": "站前区", + "210803": "西市区", + "210804": "鲅鱼圈区", + "210811": "老边区", + "210881": "盖州市", + "210882": "大石桥市", + "210902": "海州区", + "210903": "新邱区", + "210904": "太平区", + "210905": "清河门区", + "210911": "细河区", + "210921": "阜新蒙古族自治县", + "210922": "彰武县", + "211002": "白塔区", + "211003": "文圣区", + "211004": "宏伟区", + "211005": "弓长岭区", + "211011": "太子河区", + "211021": "辽阳县", + "211081": "灯塔市", + "211102": "双台子区", + "211103": "兴隆台区", + "211121": "大洼县", + "211122": "盘山县", + "211202": "银州区", + "211204": "清河区", + "211221": "铁岭县", + "211223": "西丰县", + "211224": "昌图县", + "211281": "调兵山市", + "211282": "开原市", + "211302": "双塔区", + "211303": "龙城区", + "211321": "朝阳县", + "211322": "建平县", + "211324": "喀喇沁左翼蒙古族自治县", + "211381": "北票市", + "211382": "凌源市", + "211402": "连山区", + "211403": "龙港区", + "211404": "南票区", + "211421": "绥中县", + "211422": "建昌县", + "211481": "兴城市", + "215090": "工业园区", + "220102": "南关区", + "220103": "宽城区", + "220104": "朝阳区", + "220105": "二道区", + "220106": "绿园区", + "220112": "双阳区", + "220113": "九台区", + "220122": "农安县", + "220182": "榆树市", + "220183": "德惠市", + "220190": "高新技术产业开发区", + "220191": "汽车产业开发区", + "220192": "经济技术开发区", + "220202": "昌邑区", + "220203": "龙潭区", + "220204": "船营区", + "220211": "丰满区", + "220221": "永吉县", + "220281": "蛟河市", + "220282": "桦甸市", + "220283": "舒兰市", + "220284": "磐石市", + "220302": "铁西区", + "220303": "铁东区", + "220322": "梨树县", + "220323": "伊通满族自治县", + "220381": "公主岭市", + "220382": "双辽市", + "220402": "龙山区", + "220403": "西安区", + "220421": "东丰县", + "220422": "东辽县", + "220502": "东昌区", + "220503": "二道江区", + "220521": "通化县", + "220523": "辉南县", + "220524": "柳河县", + "220581": "梅河口市", + "220582": "集安市", + "220602": "浑江区", + "220605": "江源区", + "220621": "抚松县", + "220622": "靖宇县", + "220623": "长白朝鲜族自治县", + "220681": "临江市", + "220702": "宁江区", + "220721": "前郭尔罗斯蒙古族自治县", + "220722": "长岭县", + "220723": "乾安县", + "220781": "扶余市", + "220802": "洮北区", + "220821": "镇赉县", + "220822": "通榆县", + "220881": "洮南市", + "220882": "大安市", + "221090": "工业园区", + "222401": "延吉市", + "222402": "图们市", + "222403": "敦化市", + "222404": "珲春市", + "222405": "龙井市", + "222406": "和龙市", + "222424": "汪清县", + "222426": "安图县", + "230102": "道里区", + "230103": "南岗区", + "230104": "道外区", + "230108": "平房区", + "230109": "松北区", + "230110": "香坊区", + "230111": "呼兰区", + "230112": "阿城区", + "230113": "双城区", + "230123": "依兰县", + "230124": "方正县", + "230125": "宾县", + "230126": "巴彦县", + "230127": "木兰县", + "230128": "通河县", + "230129": "延寿县", + "230183": "尚志市", + "230184": "五常市", + "230202": "龙沙区", + "230203": "建华区", + "230204": "铁锋区", + "230205": "昂昂溪区", + "230206": "富拉尔基区", + "230207": "碾子山区", + "230208": "梅里斯达斡尔族区", + "230221": "龙江县", + "230223": "依安县", + "230224": "泰来县", + "230225": "甘南县", + "230227": "富裕县", + "230229": "克山县", + "230230": "克东县", + "230231": "拜泉县", + "230281": "讷河市", + "230302": "鸡冠区", + "230303": "恒山区", + "230304": "滴道区", + "230305": "梨树区", + "230306": "城子河区", + "230307": "麻山区", + "230321": "鸡东县", + "230381": "虎林市", + "230382": "密山市", + "230402": "向阳区", + "230403": "工农区", + "230404": "南山区", + "230405": "兴安区", + "230406": "东山区", + "230407": "兴山区", + "230421": "萝北县", + "230422": "绥滨县", + "230502": "尖山区", + "230503": "岭东区", + "230505": "四方台区", + "230506": "宝山区", + "230521": "集贤县", + "230522": "友谊县", + "230523": "宝清县", + "230524": "饶河县", + "230602": "萨尔图区", + "230603": "龙凤区", + "230604": "让胡路区", + "230605": "红岗区", + "230606": "大同区", + "230621": "肇州县", + "230622": "肇源县", + "230623": "林甸县", + "230624": "杜尔伯特蒙古族自治县", + "230702": "伊春区", + "230703": "南岔区", + "230704": "友好区", + "230705": "西林区", + "230706": "翠峦区", + "230707": "新青区", + "230708": "美溪区", + "230709": "金山屯区", + "230710": "五营区", + "230711": "乌马河区", + "230712": "汤旺河区", + "230713": "带岭区", + "230714": "乌伊岭区", + "230715": "红星区", + "230716": "上甘岭区", + "230722": "嘉荫县", + "230781": "铁力市", + "230803": "向阳区", + "230804": "前进区", + "230805": "东风区", + "230811": "郊区", + "230822": "桦南县", + "230826": "桦川县", + "230828": "汤原县", + "230833": "抚远县", + "230881": "同江市", + "230882": "富锦市", + "230902": "新兴区", + "230903": "桃山区", + "230904": "茄子河区", + "230921": "勃利县", + "231002": "东安区", + "231003": "阳明区", + "231004": "爱民区", + "231005": "西安区", + "231024": "东宁县", + "231025": "林口县", + "231081": "绥芬河市", + "231083": "海林市", + "231084": "宁安市", + "231085": "穆棱市", + "231102": "爱辉区", + "231121": "嫩江县", + "231123": "逊克县", + "231124": "孙吴县", + "231181": "北安市", + "231182": "五大连池市", + "231202": "北林区", + "231221": "望奎县", + "231222": "兰西县", + "231223": "青冈县", + "231224": "庆安县", + "231225": "明水县", + "231226": "绥棱县", + "231281": "安达市", + "231282": "肇东市", + "231283": "海伦市", + "232721": "呼玛县", + "232722": "塔河县", + "232723": "漠河县", + "232790": "松岭区", + "232791": "呼中区", + "232792": "加格达奇区", + "232793": "新林区", + "264290": "威海临港经济技术开发区", + "310101": "黄浦区", + "310104": "徐汇区", + "310105": "长宁区", + "310106": "静安区", + "310107": "普陀区", + "310108": "闸北区", + "310109": "虹口区", + "310110": "杨浦区", + "310112": "闵行区", + "310113": "宝山区", + "310114": "嘉定区", + "310115": "浦东新区", + "310116": "金山区", + "310117": "松江区", + "310118": "青浦区", + "310120": "奉贤区", + "310230": "崇明县", + "320102": "玄武区", + "320104": "秦淮区", + "320105": "建邺区", + "320106": "鼓楼区", + "320111": "浦口区", + "320113": "栖霞区", + "320114": "雨花台区", + "320115": "江宁区", + "320116": "六合区", + "320117": "溧水区", + "320118": "高淳区", + "320202": "崇安区", + "320203": "南长区", + "320204": "北塘区", + "320205": "锡山区", + "320206": "惠山区", + "320211": "滨湖区", + "320281": "江阴市", + "320282": "宜兴市", + "320290": "新区", + "320302": "鼓楼区", + "320303": "云龙区", + "320305": "贾汪区", + "320311": "泉山区", + "320312": "铜山区", + "320321": "丰县", + "320322": "沛县", + "320324": "睢宁县", + "320381": "新沂市", + "320382": "邳州市", + "320390": "金山桥开发区", + "320391": "工业园区", + "320402": "天宁区", + "320404": "钟楼区", + "320411": "新北区", + "320412": "武进区", + "320413": "金坛区", + "320481": "溧阳市", + "320505": "虎丘区", + "320506": "吴中区", + "320507": "相城区", + "320508": "姑苏区", + "320509": "吴江区", + "320581": "常熟市", + "320582": "张家港市", + "320583": "昆山市", + "320585": "太仓市", + "320590": "工业园区", + "320591": "高新区", + "320602": "崇川区", + "320611": "港闸区", + "320612": "通州区", + "320621": "海安县", + "320623": "如东县", + "320681": "启东市", + "320682": "如皋市", + "320684": "海门市", + "320690": "南通经济技术开发区", + "320691": "高新区", + "320703": "连云区", + "320706": "海州区", + "320707": "赣榆区", + "320722": "东海县", + "320723": "灌云县", + "320724": "灌南县", + "320802": "清河区", + "320803": "淮安区", + "320804": "淮阴区", + "320811": "清浦区", + "320826": "涟水县", + "320829": "洪泽县", + "320830": "盱眙县", + "320831": "金湖县", + "320890": "经济开发区", + "320902": "亭湖区", + "320903": "盐都区", + "320904": "大丰区", + "320921": "响水县", + "320922": "滨海县", + "320923": "阜宁县", + "320924": "射阳县", + "320925": "建湖县", + "320981": "东台市", + "321002": "广陵区", + "321003": "邗江区", + "321012": "江都区", + "321023": "宝应县", + "321081": "仪征市", + "321084": "高邮市", + "321090": "经济开发区", + "321102": "京口区", + "321111": "润州区", + "321112": "丹徒区", + "321181": "丹阳市", + "321182": "扬中市", + "321183": "句容市", + "321202": "海陵区", + "321203": "高港区", + "321204": "姜堰区", + "321281": "兴化市", + "321282": "靖江市", + "321283": "泰兴市", + "321302": "宿城区", + "321311": "宿豫区", + "321322": "沭阳县", + "321323": "泗阳县", + "321324": "泗洪县", + "321390": "宿迁经济开发区", + "330102": "上城区", + "330103": "下城区", + "330104": "江干区", + "330105": "拱墅区", + "330106": "西湖区", + "330108": "滨江区", + "330109": "萧山区", + "330110": "余杭区", + "330111": "富阳区", + "330122": "桐庐县", + "330127": "淳安县", + "330182": "建德市", + "330185": "临安市", + "330203": "海曙区", + "330204": "江东区", + "330205": "江北区", + "330206": "北仑区", + "330211": "镇海区", + "330212": "鄞州区", + "330225": "象山县", + "330226": "宁海县", + "330281": "余姚市", + "330282": "慈溪市", + "330283": "奉化市", + "330290": "高新科技开发区", + "330302": "鹿城区", + "330303": "龙湾区", + "330304": "瓯海区", + "330305": "洞头区", + "330324": "永嘉县", + "330326": "平阳县", + "330327": "苍南县", + "330328": "文成县", + "330329": "泰顺县", + "330381": "瑞安市", + "330382": "乐清市", + "330402": "南湖区", + "330411": "秀洲区", + "330421": "嘉善县", + "330424": "海盐县", + "330481": "海宁市", + "330482": "平湖市", + "330483": "桐乡市", + "330502": "吴兴区", + "330503": "南浔区", + "330521": "德清县", + "330522": "长兴县", + "330523": "安吉县", + "330602": "越城区", + "330603": "柯桥区", + "330604": "上虞区", + "330624": "新昌县", + "330681": "诸暨市", + "330683": "嵊州市", + "330702": "婺城区", + "330703": "金东区", + "330723": "武义县", + "330726": "浦江县", + "330727": "磐安县", + "330781": "兰溪市", + "330782": "义乌市", + "330783": "东阳市", + "330784": "永康市", + "330802": "柯城区", + "330803": "衢江区", + "330822": "常山县", + "330824": "开化县", + "330825": "龙游县", + "330881": "江山市", + "330902": "定海区", + "330903": "普陀区", + "330921": "岱山县", + "330922": "嵊泗县", + "331002": "椒江区", + "331003": "黄岩区", + "331004": "路桥区", + "331021": "玉环县", + "331022": "三门县", + "331023": "天台县", + "331024": "仙居县", + "331081": "温岭市", + "331082": "临海市", + "331102": "莲都区", + "331121": "青田县", + "331122": "缙云县", + "331123": "遂昌县", + "331124": "松阳县", + "331125": "云和县", + "331126": "庆元县", + "331127": "景宁畲族自治县", + "331181": "龙泉市", + "340102": "瑶海区", + "340103": "庐阳区", + "340104": "蜀山区", + "340111": "包河区", + "340121": "长丰县", + "340122": "肥东县", + "340123": "肥西县", + "340124": "庐江县", + "340181": "巢湖市", + "340190": "高新技术开发区", + "340191": "经济技术开发区", + "340192": "北城新区", + "340193": "政务文化新区", + "340194": "滨湖新区", + "340195": "新站高新区", + "340202": "镜湖区", + "340203": "弋江区", + "340207": "鸠江区", + "340208": "三山区", + "340221": "芜湖县", + "340222": "繁昌县", + "340223": "南陵县", + "340225": "无为县", + "340302": "龙子湖区", + "340303": "蚌山区", + "340304": "禹会区", + "340311": "淮上区", + "340321": "怀远县", + "340322": "五河县", + "340323": "固镇县", + "340402": "大通区", + "340403": "田家庵区", + "340404": "谢家集区", + "340405": "八公山区", + "340406": "潘集区", + "340421": "凤台县", + "340490": "淮南高新技术产业开发区", + "340503": "花山区", + "340504": "雨山区", + "340506": "博望区", + "340521": "当涂县", + "340522": "含山县", + "340523": "和县", + "340602": "杜集区", + "340603": "相山区", + "340604": "烈山区", + "340621": "濉溪县", + "340702": "铜官山区", + "340703": "狮子山区", + "340711": "郊区", + "340721": "铜陵县", + "340802": "迎江区", + "340803": "大观区", + "340811": "宜秀区", + "340822": "怀宁县", + "340823": "枞阳县", + "340824": "潜山县", + "340825": "太湖县", + "340826": "宿松县", + "340827": "望江县", + "340828": "岳西县", + "340881": "桐城市", + "340890": "安庆经济技术开发区", + "341002": "屯溪区", + "341003": "黄山区", + "341004": "徽州区", + "341021": "歙县", + "341022": "休宁县", + "341023": "黟县", + "341024": "祁门县", + "341102": "琅琊区", + "341103": "南谯区", + "341122": "来安县", + "341124": "全椒县", + "341125": "定远县", + "341126": "凤阳县", + "341181": "天长市", + "341182": "明光市", + "341202": "颍州区", + "341203": "颍东区", + "341204": "颍泉区", + "341221": "临泉县", + "341222": "太和县", + "341225": "阜南县", + "341226": "颍上县", + "341282": "界首市", + "341290": "阜阳经济技术开发区", + "341302": "埇桥区", + "341321": "砀山县", + "341322": "萧县", + "341323": "灵璧县", + "341324": "泗县", + "341390": "经济开发区", + "341502": "金安区", + "341503": "裕安区", + "341521": "寿县", + "341522": "霍邱县", + "341523": "舒城县", + "341524": "金寨县", + "341525": "霍山县", + "341602": "谯城区", + "341621": "涡阳县", + "341622": "蒙城县", + "341623": "利辛县", + "341702": "贵池区", + "341721": "东至县", + "341722": "石台县", + "341723": "青阳县", + "341802": "宣州区", + "341821": "郎溪县", + "341822": "广德县", + "341823": "泾县", + "341824": "绩溪县", + "341825": "旌德县", + "341881": "宁国市", + "350102": "鼓楼区", + "350103": "台江区", + "350104": "仓山区", + "350105": "马尾区", + "350111": "晋安区", + "350121": "闽侯县", + "350122": "连江县", + "350123": "罗源县", + "350124": "闽清县", + "350125": "永泰县", + "350128": "平潭县", + "350181": "福清市", + "350182": "长乐市", + "350203": "思明区", + "350205": "海沧区", + "350206": "湖里区", + "350211": "集美区", + "350212": "同安区", + "350213": "翔安区", + "350302": "城厢区", + "350303": "涵江区", + "350304": "荔城区", + "350305": "秀屿区", + "350322": "仙游县", + "350402": "梅列区", + "350403": "三元区", + "350421": "明溪县", + "350423": "清流县", + "350424": "宁化县", + "350425": "大田县", + "350426": "尤溪县", + "350427": "沙县", + "350428": "将乐县", + "350429": "泰宁县", + "350430": "建宁县", + "350481": "永安市", + "350502": "鲤城区", + "350503": "丰泽区", + "350504": "洛江区", + "350505": "泉港区", + "350521": "惠安县", + "350524": "安溪县", + "350525": "永春县", + "350526": "德化县", + "350527": "金门县", + "350581": "石狮市", + "350582": "晋江市", + "350583": "南安市", + "350602": "芗城区", + "350603": "龙文区", + "350622": "云霄县", + "350623": "漳浦县", + "350624": "诏安县", + "350625": "长泰县", + "350626": "东山县", + "350627": "南靖县", + "350628": "平和县", + "350629": "华安县", + "350681": "龙海市", + "350702": "延平区", + "350703": "建阳区", + "350721": "顺昌县", + "350722": "浦城县", + "350723": "光泽县", + "350724": "松溪县", + "350725": "政和县", + "350781": "邵武市", + "350782": "武夷山市", + "350783": "建瓯市", + "350802": "新罗区", + "350803": "永定区", + "350821": "长汀县", + "350823": "上杭县", + "350824": "武平县", + "350825": "连城县", + "350881": "漳平市", + "350902": "蕉城区", + "350921": "霞浦县", + "350922": "古田县", + "350923": "屏南县", + "350924": "寿宁县", + "350925": "周宁县", + "350926": "柘荣县", + "350981": "福安市", + "350982": "福鼎市", + "350990": "东侨开发区", + "360102": "东湖区", + "360103": "西湖区", + "360104": "青云谱区", + "360105": "湾里区", + "360111": "青山湖区", + "360112": "新建区", + "360121": "南昌县", + "360123": "安义县", + "360124": "进贤县", + "360190": "经济技术开发区", + "360191": "红谷滩新区", + "360192": "高新区", + "360202": "昌江区", + "360203": "珠山区", + "360222": "浮梁县", + "360281": "乐平市", + "360302": "安源区", + "360313": "湘东区", + "360321": "莲花县", + "360322": "上栗县", + "360323": "芦溪县", + "360402": "庐山区", + "360403": "浔阳区", + "360421": "九江县", + "360423": "武宁县", + "360424": "修水县", + "360425": "永修县", + "360426": "德安县", + "360427": "星子县", + "360428": "都昌县", + "360429": "湖口县", + "360430": "彭泽县", + "360481": "瑞昌市", + "360482": "共青城市", + "360490": "经济技术开发区", + "360491": "八里湖新区", + "360502": "渝水区", + "360521": "分宜县", + "360602": "月湖区", + "360622": "余江县", + "360681": "贵溪市", + "360702": "章贡区", + "360703": "南康区", + "360721": "赣县", + "360722": "信丰县", + "360723": "大余县", + "360724": "上犹县", + "360725": "崇义县", + "360726": "安远县", + "360727": "龙南县", + "360728": "定南县", + "360729": "全南县", + "360730": "宁都县", + "360731": "于都县", + "360732": "兴国县", + "360733": "会昌县", + "360734": "寻乌县", + "360735": "石城县", + "360781": "瑞金市", + "360802": "吉州区", + "360803": "青原区", + "360821": "吉安县", + "360822": "吉水县", + "360823": "峡江县", + "360824": "新干县", + "360825": "永丰县", + "360826": "泰和县", + "360827": "遂川县", + "360828": "万安县", + "360829": "安福县", + "360830": "永新县", + "360881": "井冈山市", + "360902": "袁州区", + "360921": "奉新县", + "360922": "万载县", + "360923": "上高县", + "360924": "宜丰县", + "360925": "靖安县", + "360926": "铜鼓县", + "360981": "丰城市", + "360982": "樟树市", + "360983": "高安市", + "361002": "临川区", + "361021": "南城县", + "361022": "黎川县", + "361023": "南丰县", + "361024": "崇仁县", + "361025": "乐安县", + "361026": "宜黄县", + "361027": "金溪县", + "361028": "资溪县", + "361029": "东乡县", + "361030": "广昌县", + "361102": "信州区", + "361103": "广丰区", + "361121": "上饶县", + "361123": "玉山县", + "361124": "铅山县", + "361125": "横峰县", + "361126": "弋阳县", + "361127": "余干县", + "361128": "鄱阳县", + "361129": "万年县", + "361130": "婺源县", + "361181": "德兴市", + "370102": "历下区", + "370103": "市中区", + "370104": "槐荫区", + "370105": "天桥区", + "370112": "历城区", + "370113": "长清区", + "370124": "平阴县", + "370125": "济阳县", + "370126": "商河县", + "370181": "章丘市", + "370190": "高新区", + "370202": "市南区", + "370203": "市北区", + "370211": "黄岛区", + "370212": "崂山区", + "370213": "李沧区", + "370214": "城阳区", + "370281": "胶州市", + "370282": "即墨市", + "370283": "平度市", + "370285": "莱西市", + "370290": "开发区", + "370302": "淄川区", + "370303": "张店区", + "370304": "博山区", + "370305": "临淄区", + "370306": "周村区", + "370321": "桓台县", + "370322": "高青县", + "370323": "沂源县", + "370402": "市中区", + "370403": "薛城区", + "370404": "峄城区", + "370405": "台儿庄区", + "370406": "山亭区", + "370481": "滕州市", + "370502": "东营区", + "370503": "河口区", + "370521": "垦利县", + "370522": "利津县", + "370523": "广饶县", + "370602": "芝罘区", + "370611": "福山区", + "370612": "牟平区", + "370613": "莱山区", + "370634": "长岛县", + "370681": "龙口市", + "370682": "莱阳市", + "370683": "莱州市", + "370684": "蓬莱市", + "370685": "招远市", + "370686": "栖霞市", + "370687": "海阳市", + "370690": "开发区", + "370702": "潍城区", + "370703": "寒亭区", + "370704": "坊子区", + "370705": "奎文区", + "370724": "临朐县", + "370725": "昌乐县", + "370781": "青州市", + "370782": "诸城市", + "370783": "寿光市", + "370784": "安丘市", + "370785": "高密市", + "370786": "昌邑市", + "370790": "开发区", + "370791": "高新区", + "370811": "任城区", + "370812": "兖州区", + "370826": "微山县", + "370827": "鱼台县", + "370828": "金乡县", + "370829": "嘉祥县", + "370830": "汶上县", + "370831": "泗水县", + "370832": "梁山县", + "370881": "曲阜市", + "370883": "邹城市", + "370890": "高新区", + "370902": "泰山区", + "370911": "岱岳区", + "370921": "宁阳县", + "370923": "东平县", + "370982": "新泰市", + "370983": "肥城市", + "371002": "环翠区", + "371003": "文登区", + "371082": "荣成市", + "371083": "乳山市", + "371090": "工业新区", + "371091": "经济技术开发区", + "371102": "东港区", + "371103": "岚山区", + "371121": "五莲县", + "371122": "莒县", + "371202": "莱城区", + "371203": "钢城区", + "371302": "兰山区", + "371311": "罗庄区", + "371312": "河东区", + "371321": "沂南县", + "371322": "郯城县", + "371323": "沂水县", + "371324": "兰陵县", + "371325": "费县", + "371326": "平邑县", + "371327": "莒南县", + "371328": "蒙阴县", + "371329": "临沭县", + "371402": "德城区", + "371403": "陵城区", + "371422": "宁津县", + "371423": "庆云县", + "371424": "临邑县", + "371425": "齐河县", + "371426": "平原县", + "371427": "夏津县", + "371428": "武城县", + "371481": "乐陵市", + "371482": "禹城市", + "371490": "德州经济技术开发区", + "371502": "东昌府区", + "371521": "阳谷县", + "371522": "莘县", + "371523": "茌平县", + "371524": "东阿县", + "371525": "冠县", + "371526": "高唐县", + "371581": "临清市", + "371602": "滨城区", + "371603": "沾化区", + "371621": "惠民县", + "371622": "阳信县", + "371623": "无棣县", + "371625": "博兴县", + "371626": "邹平县", + "371690": "北海新区", + "371702": "牡丹区", + "371721": "曹县", + "371722": "单县", + "371723": "成武县", + "371724": "巨野县", + "371725": "郓城县", + "371726": "鄄城县", + "371727": "定陶县", + "371728": "东明县", + "410102": "中原区", + "410103": "二七区", + "410104": "管城回族区", + "410105": "金水区", + "410106": "上街区", + "410108": "惠济区", + "410122": "中牟县", + "410181": "巩义市", + "410182": "荥阳市", + "410183": "新密市", + "410184": "新郑市", + "410185": "登封市", + "410190": "高新技术开发区", + "410191": "经济技术开发区", + "410192": "郑东新区", + "410202": "龙亭区", + "410203": "顺河回族区", + "410204": "鼓楼区", + "410205": "禹王台区", + "410211": "金明区", + "410212": "祥符区", + "410221": "杞县", + "410222": "通许县", + "410223": "尉氏县", + "410225": "兰考县", + "410302": "老城区", + "410303": "西工区", + "410304": "瀍河回族区", + "410305": "涧西区", + "410306": "吉利区", + "410311": "洛龙区", + "410322": "孟津县", + "410323": "新安县", + "410324": "栾川县", + "410325": "嵩县", + "410326": "汝阳县", + "410327": "宜阳县", + "410328": "洛宁县", + "410329": "伊川县", + "410381": "偃师市", + "410390": "伊滨区", + "410402": "新华区", + "410403": "卫东区", + "410404": "石龙区", + "410411": "湛河区", + "410421": "宝丰县", + "410422": "叶县", + "410423": "鲁山县", + "410425": "郏县", + "410481": "舞钢市", + "410482": "汝州市", + "410502": "文峰区", + "410503": "北关区", + "410505": "殷都区", + "410506": "龙安区", + "410522": "安阳县", + "410523": "汤阴县", + "410526": "滑县", + "410527": "内黄县", + "410581": "林州市", + "410590": "开发区", + "410602": "鹤山区", + "410603": "山城区", + "410611": "淇滨区", + "410621": "浚县", + "410622": "淇县", + "410702": "红旗区", + "410703": "卫滨区", + "410704": "凤泉区", + "410711": "牧野区", + "410721": "新乡县", + "410724": "获嘉县", + "410725": "原阳县", + "410726": "延津县", + "410727": "封丘县", + "410728": "长垣县", + "410781": "卫辉市", + "410782": "辉县市", + "410802": "解放区", + "410803": "中站区", + "410804": "马村区", + "410811": "山阳区", + "410821": "修武县", + "410822": "博爱县", + "410823": "武陟县", + "410825": "温县", + "410882": "沁阳市", + "410883": "孟州市", + "410902": "华龙区", + "410922": "清丰县", + "410923": "南乐县", + "410926": "范县", + "410927": "台前县", + "410928": "濮阳县", + "411002": "魏都区", + "411023": "许昌县", + "411024": "鄢陵县", + "411025": "襄城县", + "411081": "禹州市", + "411082": "长葛市", + "411102": "源汇区", + "411103": "郾城区", + "411104": "召陵区", + "411121": "舞阳县", + "411122": "临颍县", + "411202": "湖滨区", + "411221": "渑池县", + "411222": "陕县", + "411224": "卢氏县", + "411281": "义马市", + "411282": "灵宝市", + "411302": "宛城区", + "411303": "卧龙区", + "411321": "南召县", + "411322": "方城县", + "411323": "西峡县", + "411324": "镇平县", + "411325": "内乡县", + "411326": "淅川县", + "411327": "社旗县", + "411328": "唐河县", + "411329": "新野县", + "411330": "桐柏县", + "411381": "邓州市", + "411402": "梁园区", + "411403": "睢阳区", + "411421": "民权县", + "411422": "睢县", + "411423": "宁陵县", + "411424": "柘城县", + "411425": "虞城县", + "411426": "夏邑县", + "411481": "永城市", + "411502": "浉河区", + "411503": "平桥区", + "411521": "罗山县", + "411522": "光山县", + "411523": "新县", + "411524": "商城县", + "411525": "固始县", + "411526": "潢川县", + "411527": "淮滨县", + "411528": "息县", + "411602": "川汇区", + "411621": "扶沟县", + "411622": "西华县", + "411623": "商水县", + "411624": "沈丘县", + "411625": "郸城县", + "411626": "淮阳县", + "411627": "太康县", + "411628": "鹿邑县", + "411681": "项城市", + "411690": "经济开发区", + "411691": "东新区", + "411702": "驿城区", + "411721": "西平县", + "411722": "上蔡县", + "411723": "平舆县", + "411724": "正阳县", + "411725": "确山县", + "411726": "泌阳县", + "411727": "汝南县", + "411728": "遂平县", + "411729": "新蔡县", + "419001": "济源市", + "420102": "江岸区", + "420103": "江汉区", + "420104": "硚口区", + "420105": "汉阳区", + "420106": "武昌区", + "420107": "青山区", + "420111": "洪山区", + "420112": "东西湖区", + "420113": "汉南区", + "420114": "蔡甸区", + "420115": "江夏区", + "420116": "黄陂区", + "420117": "新洲区", + "420190": "武汉经济技术开发区", + "420202": "黄石港区", + "420203": "西塞山区", + "420204": "下陆区", + "420205": "铁山区", + "420222": "阳新县", + "420281": "大冶市", + "420290": "黄石经济技术开发区", + "420302": "茅箭区", + "420303": "张湾区", + "420304": "郧阳区", + "420322": "郧西县", + "420323": "竹山县", + "420324": "竹溪县", + "420325": "房县", + "420381": "丹江口市", + "420502": "西陵区", + "420503": "伍家岗区", + "420504": "点军区", + "420505": "猇亭区", + "420506": "夷陵区", + "420525": "远安县", + "420526": "兴山县", + "420527": "秭归县", + "420528": "长阳土家族自治县", + "420529": "五峰土家族自治县", + "420581": "宜都市", + "420582": "当阳市", + "420583": "枝江市", + "420590": "经济开发区", + "420602": "襄城区", + "420606": "樊城区", + "420607": "襄州区", + "420624": "南漳县", + "420625": "谷城县", + "420626": "保康县", + "420682": "老河口市", + "420683": "枣阳市", + "420684": "宜城市", + "420702": "梁子湖区", + "420703": "华容区", + "420704": "鄂城区", + "420802": "东宝区", + "420804": "掇刀区", + "420821": "京山县", + "420822": "沙洋县", + "420881": "钟祥市", + "420902": "孝南区", + "420921": "孝昌县", + "420922": "大悟县", + "420923": "云梦县", + "420981": "应城市", + "420982": "安陆市", + "420984": "汉川市", + "421002": "沙市区", + "421003": "荆州区", + "421022": "公安县", + "421023": "监利县", + "421024": "江陵县", + "421081": "石首市", + "421083": "洪湖市", + "421087": "松滋市", + "421102": "黄州区", + "421121": "团风县", + "421122": "红安县", + "421123": "罗田县", + "421124": "英山县", + "421125": "浠水县", + "421126": "蕲春县", + "421127": "黄梅县", + "421181": "麻城市", + "421182": "武穴市", + "421202": "咸安区", + "421221": "嘉鱼县", + "421222": "通城县", + "421223": "崇阳县", + "421224": "通山县", + "421281": "赤壁市", + "421303": "曾都区", + "421321": "随县", + "421381": "广水市", + "422801": "恩施市", + "422802": "利川市", + "422822": "建始县", + "422823": "巴东县", + "422825": "宣恩县", + "422826": "咸丰县", + "422827": "来凤县", + "422828": "鹤峰县", + "429004": "仙桃市", + "429005": "潜江市", + "429006": "天门市", + "429021": "神农架林区", + "430102": "芙蓉区", + "430103": "天心区", + "430104": "岳麓区", + "430105": "开福区", + "430111": "雨花区", + "430112": "望城区", + "430121": "长沙县", + "430124": "宁乡县", + "430181": "浏阳市", + "430202": "荷塘区", + "430203": "芦淞区", + "430204": "石峰区", + "430211": "天元区", + "430221": "株洲县", + "430223": "攸县", + "430224": "茶陵县", + "430225": "炎陵县", + "430281": "醴陵市", + "430302": "雨湖区", + "430304": "岳塘区", + "430321": "湘潭县", + "430381": "湘乡市", + "430382": "韶山市", + "430405": "珠晖区", + "430406": "雁峰区", + "430407": "石鼓区", + "430408": "蒸湘区", + "430412": "南岳区", + "430421": "衡阳县", + "430422": "衡南县", + "430423": "衡山县", + "430424": "衡东县", + "430426": "祁东县", + "430481": "耒阳市", + "430482": "常宁市", + "430502": "双清区", + "430503": "大祥区", + "430511": "北塔区", + "430521": "邵东县", + "430522": "新邵县", + "430523": "邵阳县", + "430524": "隆回县", + "430525": "洞口县", + "430527": "绥宁县", + "430528": "新宁县", + "430529": "城步苗族自治县", + "430581": "武冈市", + "430602": "岳阳楼区", + "430603": "云溪区", + "430611": "君山区", + "430621": "岳阳县", + "430623": "华容县", + "430624": "湘阴县", + "430626": "平江县", + "430681": "汨罗市", + "430682": "临湘市", + "430702": "武陵区", + "430703": "鼎城区", + "430721": "安乡县", + "430722": "汉寿县", + "430723": "澧县", + "430724": "临澧县", + "430725": "桃源县", + "430726": "石门县", + "430781": "津市市", + "430802": "永定区", + "430811": "武陵源区", + "430821": "慈利县", + "430822": "桑植县", + "430902": "资阳区", + "430903": "赫山区", + "430921": "南县", + "430922": "桃江县", + "430923": "安化县", + "430981": "沅江市", + "431002": "北湖区", + "431003": "苏仙区", + "431021": "桂阳县", + "431022": "宜章县", + "431023": "永兴县", + "431024": "嘉禾县", + "431025": "临武县", + "431026": "汝城县", + "431027": "桂东县", + "431028": "安仁县", + "431081": "资兴市", + "431102": "零陵区", + "431103": "冷水滩区", + "431121": "祁阳县", + "431122": "东安县", + "431123": "双牌县", + "431124": "道县", + "431125": "江永县", + "431126": "宁远县", + "431127": "蓝山县", + "431128": "新田县", + "431129": "江华瑶族自治县", + "431202": "鹤城区", + "431221": "中方县", + "431222": "沅陵县", + "431223": "辰溪县", + "431224": "溆浦县", + "431225": "会同县", + "431226": "麻阳苗族自治县", + "431227": "新晃侗族自治县", + "431228": "芷江侗族自治县", + "431229": "靖州苗族侗族自治县", + "431230": "通道侗族自治县", + "431281": "洪江市", + "431302": "娄星区", + "431321": "双峰县", + "431322": "新化县", + "431381": "冷水江市", + "431382": "涟源市", + "433101": "吉首市", + "433122": "泸溪县", + "433123": "凤凰县", + "433124": "花垣县", + "433125": "保靖县", + "433126": "古丈县", + "433127": "永顺县", + "433130": "龙山县", + "440103": "荔湾区", + "440104": "越秀区", + "440105": "海珠区", + "440106": "天河区", + "440111": "白云区", + "440112": "黄埔区", + "440113": "番禺区", + "440114": "花都区", + "440115": "南沙区", + "440117": "从化区", + "440118": "增城区", + "440203": "武江区", + "440204": "浈江区", + "440205": "曲江区", + "440222": "始兴县", + "440224": "仁化县", + "440229": "翁源县", + "440232": "乳源瑶族自治县", + "440233": "新丰县", + "440281": "乐昌市", + "440282": "南雄市", + "440303": "罗湖区", + "440304": "福田区", + "440305": "南山区", + "440306": "宝安区", + "440307": "龙岗区", + "440308": "盐田区", + "440390": "坪山新区", + "440391": "光明新区", + "440392": "大鹏新区", + "440393": "龙华新区", + "440402": "香洲区", + "440403": "斗门区", + "440404": "金湾区", + "440507": "龙湖区", + "440511": "金平区", + "440512": "濠江区", + "440513": "潮阳区", + "440514": "潮南区", + "440515": "澄海区", + "440523": "南澳县", + "440604": "禅城区", + "440605": "南海区", + "440606": "顺德区", + "440607": "三水区", + "440608": "高明区", + "440703": "蓬江区", + "440704": "江海区", + "440705": "新会区", + "440781": "台山市", + "440783": "开平市", + "440784": "鹤山市", + "440785": "恩平市", + "440802": "赤坎区", + "440803": "霞山区", + "440804": "坡头区", + "440811": "麻章区", + "440823": "遂溪县", + "440825": "徐闻县", + "440881": "廉江市", + "440882": "雷州市", + "440883": "吴川市", + "440890": "经济技术开发区", + "440902": "茂南区", + "440904": "电白区", + "440981": "高州市", + "440982": "化州市", + "440983": "信宜市", + "441202": "端州区", + "441203": "鼎湖区", + "441204": "高要区", + "441223": "广宁县", + "441224": "怀集县", + "441225": "封开县", + "441226": "德庆县", + "441284": "四会市", + "441302": "惠城区", + "441303": "惠阳区", + "441322": "博罗县", + "441323": "惠东县", + "441324": "龙门县", + "441402": "梅江区", + "441403": "梅县区", + "441422": "大埔县", + "441423": "丰顺县", + "441424": "五华县", + "441426": "平远县", + "441427": "蕉岭县", + "441481": "兴宁市", + "441502": "城区", + "441521": "海丰县", + "441523": "陆河县", + "441581": "陆丰市", + "441602": "源城区", + "441621": "紫金县", + "441622": "龙川县", + "441623": "连平县", + "441624": "和平县", + "441625": "东源县", + "441702": "江城区", + "441704": "阳东区", + "441721": "阳西县", + "441781": "阳春市", + "441802": "清城区", + "441803": "清新区", + "441821": "佛冈县", + "441823": "阳山县", + "441825": "连山壮族瑶族自治县", + "441826": "连南瑶族自治县", + "441881": "英德市", + "441882": "连州市", + "441901": "中堂镇", + "441903": "南城区", + "441904": "长安镇", + "441905": "东坑镇", + "441906": "樟木头镇", + "441907": "莞城区", + "441908": "石龙镇", + "441909": "桥头镇", + "441910": "万江区", + "441911": "麻涌镇", + "441912": "虎门镇", + "441913": "谢岗镇", + "441914": "石碣镇", + "441915": "茶山镇", + "441916": "东城区", + "441917": "洪梅镇", + "441918": "道滘镇", + "441919": "高埗镇", + "441920": "企石镇", + "441921": "凤岗镇", + "441922": "大岭山镇", + "441923": "松山湖", + "441924": "清溪镇", + "441925": "望牛墩镇", + "441926": "厚街镇", + "441927": "常平镇", + "441928": "寮步镇", + "441929": "石排镇", + "441930": "横沥镇", + "441931": "塘厦镇", + "441932": "黄江镇", + "441933": "大朗镇", + "441990": "沙田镇", + "442001": "南头镇", + "442002": "神湾镇", + "442003": "东凤镇", + "442004": "五桂山镇", + "442005": "黄圃镇", + "442006": "小榄镇", + "442007": "石岐区街道", + "442008": "横栏镇", + "442009": "三角镇", + "442010": "三乡镇", + "442011": "港口镇", + "442012": "沙溪镇", + "442013": "板芙镇", + "442014": "沙朗镇", + "442015": "东升镇", + "442016": "阜沙镇", + "442017": "民众镇", + "442018": "东区街道", + "442019": "火炬开发区", + "442020": "西区街道", + "442021": "南区街道", + "442022": "古镇", + "442023": "坦洲镇", + "442024": "大涌镇", + "442025": "南朗镇", + "445102": "湘桥区", + "445103": "潮安区", + "445122": "饶平县", + "445190": "枫溪区", + "445202": "榕城区", + "445203": "揭东区", + "445222": "揭西县", + "445224": "惠来县", + "445281": "普宁市", + "445302": "云城区", + "445303": "云安区", + "445321": "新兴县", + "445322": "郁南县", + "445381": "罗定市", + "450102": "兴宁区", + "450103": "青秀区", + "450105": "江南区", + "450107": "西乡塘区", + "450108": "良庆区", + "450109": "邕宁区", + "450110": "武鸣区", + "450123": "隆安县", + "450124": "马山县", + "450125": "上林县", + "450126": "宾阳县", + "450127": "横县", + "450202": "城中区", + "450203": "鱼峰区", + "450204": "柳南区", + "450205": "柳北区", + "450221": "柳江县", + "450222": "柳城县", + "450223": "鹿寨县", + "450224": "融安县", + "450225": "融水苗族自治县", + "450226": "三江侗族自治县", + "450302": "秀峰区", + "450303": "叠彩区", + "450304": "象山区", + "450305": "七星区", + "450311": "雁山区", + "450312": "临桂区", + "450321": "阳朔县", + "450323": "灵川县", + "450324": "全州县", + "450325": "兴安县", + "450326": "永福县", + "450327": "灌阳县", + "450328": "龙胜各族自治县", + "450329": "资源县", + "450330": "平乐县", + "450331": "荔浦县", + "450332": "恭城瑶族自治县", + "450403": "万秀区", + "450405": "长洲区", + "450406": "龙圩区", + "450421": "苍梧县", + "450422": "藤县", + "450423": "蒙山县", + "450481": "岑溪市", + "450502": "海城区", + "450503": "银海区", + "450512": "铁山港区", + "450521": "合浦县", + "450602": "港口区", + "450603": "防城区", + "450621": "上思县", + "450681": "东兴市", + "450702": "钦南区", + "450703": "钦北区", + "450721": "灵山县", + "450722": "浦北县", + "450802": "港北区", + "450803": "港南区", + "450804": "覃塘区", + "450821": "平南县", + "450881": "桂平市", + "450902": "玉州区", + "450903": "福绵区", + "450921": "容县", + "450922": "陆川县", + "450923": "博白县", + "450924": "兴业县", + "450981": "北流市", + "451002": "右江区", + "451021": "田阳县", + "451022": "田东县", + "451023": "平果县", + "451024": "德保县", + "451026": "那坡县", + "451027": "凌云县", + "451028": "乐业县", + "451029": "田林县", + "451030": "西林县", + "451031": "隆林各族自治县", + "451081": "靖西市", + "451102": "八步区", + "451121": "昭平县", + "451122": "钟山县", + "451123": "富川瑶族自治县", + "451202": "金城江区", + "451221": "南丹县", + "451222": "天峨县", + "451223": "凤山县", + "451224": "东兰县", + "451225": "罗城仫佬族自治县", + "451226": "环江毛南族自治县", + "451227": "巴马瑶族自治县", + "451228": "都安瑶族自治县", + "451229": "大化瑶族自治县", + "451281": "宜州市", + "451302": "兴宾区", + "451321": "忻城县", + "451322": "象州县", + "451323": "武宣县", + "451324": "金秀瑶族自治县", + "451381": "合山市", + "451402": "江州区", + "451421": "扶绥县", + "451422": "宁明县", + "451423": "龙州县", + "451424": "大新县", + "451425": "天等县", + "451481": "凭祥市", + "460105": "秀英区", + "460106": "龙华区", + "460107": "琼山区", + "460108": "美兰区", + "460202": "海棠区", + "460203": "吉阳区", + "460204": "天涯区", + "460205": "崖州区", + "460321": "西沙群岛", + "460322": "南沙群岛", + "460323": "中沙群岛的岛礁及其海域", + "469001": "五指山市", + "469002": "琼海市", + "469003": "儋州市", + "469005": "文昌市", + "469006": "万宁市", + "469007": "东方市", + "469021": "定安县", + "469022": "屯昌县", + "469023": "澄迈县", + "469024": "临高县", + "469025": "白沙黎族自治县", + "469026": "昌江黎族自治县", + "469027": "乐东黎族自治县", + "469028": "陵水黎族自治县", + "469029": "保亭黎族苗族自治县", + "469030": "琼中黎族苗族自治县", + "500101": "万州区", + "500102": "涪陵区", + "500103": "渝中区", + "500104": "大渡口区", + "500105": "江北区", + "500106": "沙坪坝区", + "500107": "九龙坡区", + "500108": "南岸区", + "500109": "北碚区", + "500110": "綦江区", + "500111": "大足区", + "500112": "渝北区", + "500113": "巴南区", + "500114": "黔江区", + "500115": "长寿区", + "500116": "江津区", + "500117": "合川区", + "500118": "永川区", + "500119": "南川区", + "500120": "璧山区", + "500151": "铜梁区", + "500152": "潼南区", + "500153": "荣昌区", + "500228": "梁平县", + "500229": "城口县", + "500230": "丰都县", + "500231": "垫江县", + "500232": "武隆县", + "500233": "忠县", + "500234": "开县", + "500235": "云阳县", + "500236": "奉节县", + "500237": "巫山县", + "500238": "巫溪县", + "500240": "石柱土家族自治县", + "500241": "秀山土家族苗族自治县", + "500242": "酉阳土家族苗族自治县", + "500243": "彭水苗族土家族自治县", + "510104": "锦江区", + "510105": "青羊区", + "510106": "金牛区", + "510107": "武侯区", + "510108": "成华区", + "510112": "龙泉驿区", + "510113": "青白江区", + "510114": "新都区", + "510115": "温江区", + "510121": "金堂县", + "510122": "双流县", + "510124": "郫县", + "510129": "大邑县", + "510131": "蒲江县", + "510132": "新津县", + "510181": "都江堰市", + "510182": "彭州市", + "510183": "邛崃市", + "510184": "崇州市", + "510190": "高新西区", + "510191": "高新区", + "510302": "自流井区", + "510303": "贡井区", + "510304": "大安区", + "510311": "沿滩区", + "510321": "荣县", + "510322": "富顺县", + "510402": "东区", + "510403": "西区", + "510411": "仁和区", + "510421": "米易县", + "510422": "盐边县", + "510502": "江阳区", + "510503": "纳溪区", + "510504": "龙马潭区", + "510521": "泸县", + "510522": "合江县", + "510524": "叙永县", + "510525": "古蔺县", + "510603": "旌阳区", + "510623": "中江县", + "510626": "罗江县", + "510681": "广汉市", + "510682": "什邡市", + "510683": "绵竹市", + "510703": "涪城区", + "510704": "游仙区", + "510722": "三台县", + "510723": "盐亭县", + "510724": "安县", + "510725": "梓潼县", + "510726": "北川羌族自治县", + "510727": "平武县", + "510781": "江油市", + "510790": "经开区", + "510791": "高新区", + "510802": "利州区", + "510811": "昭化区", + "510812": "朝天区", + "510821": "旺苍县", + "510822": "青川县", + "510823": "剑阁县", + "510824": "苍溪县", + "510903": "船山区", + "510904": "安居区", + "510921": "蓬溪县", + "510922": "射洪县", + "510923": "大英县", + "511002": "市中区", + "511011": "东兴区", + "511024": "威远县", + "511025": "资中县", + "511028": "隆昌县", + "511102": "市中区", + "511111": "沙湾区", + "511112": "五通桥区", + "511113": "金口河区", + "511123": "犍为县", + "511124": "井研县", + "511126": "夹江县", + "511129": "沐川县", + "511132": "峨边彝族自治县", + "511133": "马边彝族自治县", + "511181": "峨眉山市", + "511302": "顺庆区", + "511303": "高坪区", + "511304": "嘉陵区", + "511321": "南部县", + "511322": "营山县", + "511323": "蓬安县", + "511324": "仪陇县", + "511325": "西充县", + "511381": "阆中市", + "511402": "东坡区", + "511403": "彭山区", + "511421": "仁寿县", + "511423": "洪雅县", + "511424": "丹棱县", + "511425": "青神县", + "511502": "翠屏区", + "511503": "南溪区", + "511521": "宜宾县", + "511523": "江安县", + "511524": "长宁县", + "511525": "高县", + "511526": "珙县", + "511527": "筠连县", + "511528": "兴文县", + "511529": "屏山县", + "511602": "广安区", + "511603": "前锋区", + "511621": "岳池县", + "511622": "武胜县", + "511623": "邻水县", + "511681": "华蓥市", + "511702": "通川区", + "511703": "达川区", + "511722": "宣汉县", + "511723": "开江县", + "511724": "大竹县", + "511725": "渠县", + "511781": "万源市", + "511802": "雨城区", + "511803": "名山区", + "511822": "荥经县", + "511823": "汉源县", + "511824": "石棉县", + "511825": "天全县", + "511826": "芦山县", + "511827": "宝兴县", + "511902": "巴州区", + "511903": "恩阳区", + "511921": "通江县", + "511922": "南江县", + "511923": "平昌县", + "512002": "雁江区", + "512021": "安岳县", + "512022": "乐至县", + "512081": "简阳市", + "513221": "汶川县", + "513222": "理县", + "513223": "茂县", + "513224": "松潘县", + "513225": "九寨沟县", + "513226": "金川县", + "513227": "小金县", + "513228": "黑水县", + "513229": "马尔康县", + "513230": "壤塘县", + "513231": "阿坝县", + "513232": "若尔盖县", + "513233": "红原县", + "513301": "康定市", + "513322": "泸定县", + "513323": "丹巴县", + "513324": "九龙县", + "513325": "雅江县", + "513326": "道孚县", + "513327": "炉霍县", + "513328": "甘孜县", + "513329": "新龙县", + "513330": "德格县", + "513331": "白玉县", + "513332": "石渠县", + "513333": "色达县", + "513334": "理塘县", + "513335": "巴塘县", + "513336": "乡城县", + "513337": "稻城县", + "513338": "得荣县", + "513401": "西昌市", + "513422": "木里藏族自治县", + "513423": "盐源县", + "513424": "德昌县", + "513425": "会理县", + "513426": "会东县", + "513427": "宁南县", + "513428": "普格县", + "513429": "布拖县", + "513430": "金阳县", + "513431": "昭觉县", + "513432": "喜德县", + "513433": "冕宁县", + "513434": "越西县", + "513435": "甘洛县", + "513436": "美姑县", + "513437": "雷波县", + "520102": "南明区", + "520103": "云岩区", + "520111": "花溪区", + "520112": "乌当区", + "520113": "白云区", + "520115": "观山湖区", + "520121": "开阳县", + "520122": "息烽县", + "520123": "修文县", + "520181": "清镇市", + "520201": "钟山区", + "520203": "六枝特区", + "520221": "水城县", + "520222": "盘县", + "520302": "红花岗区", + "520303": "汇川区", + "520321": "遵义县", + "520322": "桐梓县", + "520323": "绥阳县", + "520324": "正安县", + "520325": "道真仡佬族苗族自治县", + "520326": "务川仡佬族苗族自治县", + "520327": "凤冈县", + "520328": "湄潭县", + "520329": "余庆县", + "520330": "习水县", + "520381": "赤水市", + "520382": "仁怀市", + "520402": "西秀区", + "520403": "平坝区", + "520422": "普定县", + "520423": "镇宁布依族苗族自治县", + "520424": "关岭布依族苗族自治县", + "520425": "紫云苗族布依族自治县", + "520502": "七星关区", + "520521": "大方县", + "520522": "黔西县", + "520523": "金沙县", + "520524": "织金县", + "520525": "纳雍县", + "520526": "威宁彝族回族苗族自治县", + "520527": "赫章县", + "520602": "碧江区", + "520603": "万山区", + "520621": "江口县", + "520622": "玉屏侗族自治县", + "520623": "石阡县", + "520624": "思南县", + "520625": "印江土家族苗族自治县", + "520626": "德江县", + "520627": "沿河土家族自治县", + "520628": "松桃苗族自治县", + "522301": "兴义市", + "522322": "兴仁县", + "522323": "普安县", + "522324": "晴隆县", + "522325": "贞丰县", + "522326": "望谟县", + "522327": "册亨县", + "522328": "安龙县", + "522601": "凯里市", + "522622": "黄平县", + "522623": "施秉县", + "522624": "三穗县", + "522625": "镇远县", + "522626": "岑巩县", + "522627": "天柱县", + "522628": "锦屏县", + "522629": "剑河县", + "522630": "台江县", + "522631": "黎平县", + "522632": "榕江县", + "522633": "从江县", + "522634": "雷山县", + "522635": "麻江县", + "522636": "丹寨县", + "522701": "都匀市", + "522702": "福泉市", + "522722": "荔波县", + "522723": "贵定县", + "522725": "瓮安县", + "522726": "独山县", + "522727": "平塘县", + "522728": "罗甸县", + "522729": "长顺县", + "522730": "龙里县", + "522731": "惠水县", + "522732": "三都水族自治县", + "530102": "五华区", + "530103": "盘龙区", + "530111": "官渡区", + "530112": "西山区", + "530113": "东川区", + "530114": "呈贡区", + "530122": "晋宁县", + "530124": "富民县", + "530125": "宜良县", + "530126": "石林彝族自治县", + "530127": "嵩明县", + "530128": "禄劝彝族苗族自治县", + "530129": "寻甸回族彝族自治县", + "530181": "安宁市", + "530302": "麒麟区", + "530321": "马龙县", + "530322": "陆良县", + "530323": "师宗县", + "530324": "罗平县", + "530325": "富源县", + "530326": "会泽县", + "530328": "沾益县", + "530381": "宣威市", + "530402": "红塔区", + "530421": "江川县", + "530422": "澄江县", + "530423": "通海县", + "530424": "华宁县", + "530425": "易门县", + "530426": "峨山彝族自治县", + "530427": "新平彝族傣族自治县", + "530428": "元江哈尼族彝族傣族自治县", + "530502": "隆阳区", + "530521": "施甸县", + "530523": "龙陵县", + "530524": "昌宁县", + "530581": "腾冲市", + "530602": "昭阳区", + "530621": "鲁甸县", + "530622": "巧家县", + "530623": "盐津县", + "530624": "大关县", + "530625": "永善县", + "530626": "绥江县", + "530627": "镇雄县", + "530628": "彝良县", + "530629": "威信县", + "530630": "水富县", + "530702": "古城区", + "530721": "玉龙纳西族自治县", + "530722": "永胜县", + "530723": "华坪县", + "530724": "宁蒗彝族自治县", + "530802": "思茅区", + "530821": "宁洱哈尼族彝族自治县", + "530822": "墨江哈尼族自治县", + "530823": "景东彝族自治县", + "530824": "景谷傣族彝族自治县", + "530825": "镇沅彝族哈尼族拉祜族自治县", + "530826": "江城哈尼族彝族自治县", + "530827": "孟连傣族拉祜族佤族自治县", + "530828": "澜沧拉祜族自治县", + "530829": "西盟佤族自治县", + "530902": "临翔区", + "530921": "凤庆县", + "530922": "云县", + "530923": "永德县", + "530924": "镇康县", + "530925": "双江拉祜族佤族布朗族傣族自治县", + "530926": "耿马傣族佤族自治县", + "530927": "沧源佤族自治县", + "532301": "楚雄市", + "532322": "双柏县", + "532323": "牟定县", + "532324": "南华县", + "532325": "姚安县", + "532326": "大姚县", + "532327": "永仁县", + "532328": "元谋县", + "532329": "武定县", + "532331": "禄丰县", + "532501": "个旧市", + "532502": "开远市", + "532503": "蒙自市", + "532504": "弥勒市", + "532523": "屏边苗族自治县", + "532524": "建水县", + "532525": "石屏县", + "532527": "泸西县", + "532528": "元阳县", + "532529": "红河县", + "532530": "金平苗族瑶族傣族自治县", + "532531": "绿春县", + "532532": "河口瑶族自治县", + "532601": "文山市", + "532622": "砚山县", + "532623": "西畴县", + "532624": "麻栗坡县", + "532625": "马关县", + "532626": "丘北县", + "532627": "广南县", + "532628": "富宁县", + "532801": "景洪市", + "532822": "勐海县", + "532823": "勐腊县", + "532901": "大理市", + "532922": "漾濞彝族自治县", + "532923": "祥云县", + "532924": "宾川县", + "532925": "弥渡县", + "532926": "南涧彝族自治县", + "532927": "巍山彝族回族自治县", + "532928": "永平县", + "532929": "云龙县", + "532930": "洱源县", + "532931": "剑川县", + "532932": "鹤庆县", + "533102": "瑞丽市", + "533103": "芒市", + "533122": "梁河县", + "533123": "盈江县", + "533124": "陇川县", + "533321": "泸水县", + "533323": "福贡县", + "533324": "贡山独龙族怒族自治县", + "533325": "兰坪白族普米族自治县", + "533401": "香格里拉市", + "533422": "德钦县", + "533423": "维西傈僳族自治县", + "540102": "城关区", + "540121": "林周县", + "540122": "当雄县", + "540123": "尼木县", + "540124": "曲水县", + "540125": "堆龙德庆县", + "540126": "达孜县", + "540127": "墨竹工卡县", + "540202": "桑珠孜区", + "540221": "南木林县", + "540222": "江孜县", + "540223": "定日县", + "540224": "萨迦县", + "540225": "拉孜县", + "540226": "昂仁县", + "540227": "谢通门县", + "540228": "白朗县", + "540229": "仁布县", + "540230": "康马县", + "540231": "定结县", + "540232": "仲巴县", + "540233": "亚东县", + "540234": "吉隆县", + "540235": "聂拉木县", + "540236": "萨嘎县", + "540237": "岗巴县", + "540302": "卡若区", + "540321": "江达县", + "540322": "贡觉县", + "540323": "类乌齐县", + "540324": "丁青县", + "540325": "察雅县", + "540326": "八宿县", + "540327": "左贡县", + "540328": "芒康县", + "540329": "洛隆县", + "540330": "边坝县", + "540402": "巴宜区", + "540421": "工布江达县", + "540422": "米林县", + "540423": "墨脱县", + "540424": "波密县", + "540425": "察隅县", + "540426": "朗县", + "542221": "乃东县", + "542222": "扎囊县", + "542223": "贡嘎县", + "542224": "桑日县", + "542225": "琼结县", + "542226": "曲松县", + "542227": "措美县", + "542228": "洛扎县", + "542229": "加查县", + "542231": "隆子县", + "542232": "错那县", + "542233": "浪卡子县", + "542421": "那曲县", + "542422": "嘉黎县", + "542423": "比如县", + "542424": "聂荣县", + "542425": "安多县", + "542426": "申扎县", + "542427": "索县", + "542428": "班戈县", + "542429": "巴青县", + "542430": "尼玛县", + "542431": "双湖县", + "542521": "普兰县", + "542522": "札达县", + "542523": "噶尔县", + "542524": "日土县", + "542525": "革吉县", + "542526": "改则县", + "542527": "措勤县", + "610102": "新城区", + "610103": "碑林区", + "610104": "莲湖区", + "610111": "灞桥区", + "610112": "未央区", + "610113": "雁塔区", + "610114": "阎良区", + "610115": "临潼区", + "610116": "长安区", + "610117": "高陵区", + "610122": "蓝田县", + "610124": "周至县", + "610125": "户县", + "610202": "王益区", + "610203": "印台区", + "610204": "耀州区", + "610222": "宜君县", + "610302": "渭滨区", + "610303": "金台区", + "610304": "陈仓区", + "610322": "凤翔县", + "610323": "岐山县", + "610324": "扶风县", + "610326": "眉县", + "610327": "陇县", + "610328": "千阳县", + "610329": "麟游县", + "610330": "凤县", + "610331": "太白县", + "610402": "秦都区", + "610403": "杨陵区", + "610404": "渭城区", + "610422": "三原县", + "610423": "泾阳县", + "610424": "乾县", + "610425": "礼泉县", + "610426": "永寿县", + "610427": "彬县", + "610428": "长武县", + "610429": "旬邑县", + "610430": "淳化县", + "610431": "武功县", + "610481": "兴平市", + "610502": "临渭区", + "610521": "华县", + "610522": "潼关县", + "610523": "大荔县", + "610524": "合阳县", + "610525": "澄城县", + "610526": "蒲城县", + "610527": "白水县", + "610528": "富平县", + "610581": "韩城市", + "610582": "华阴市", + "610602": "宝塔区", + "610621": "延长县", + "610622": "延川县", + "610623": "子长县", + "610624": "安塞县", + "610625": "志丹县", + "610626": "吴起县", + "610627": "甘泉县", + "610628": "富县", + "610629": "洛川县", + "610630": "宜川县", + "610631": "黄龙县", + "610632": "黄陵县", + "610702": "汉台区", + "610721": "南郑县", + "610722": "城固县", + "610723": "洋县", + "610724": "西乡县", + "610725": "勉县", + "610726": "宁强县", + "610727": "略阳县", + "610728": "镇巴县", + "610729": "留坝县", + "610730": "佛坪县", + "610802": "榆阳区", + "610821": "神木县", + "610822": "府谷县", + "610823": "横山县", + "610824": "靖边县", + "610825": "定边县", + "610826": "绥德县", + "610827": "米脂县", + "610828": "佳县", + "610829": "吴堡县", + "610830": "清涧县", + "610831": "子洲县", + "610902": "汉滨区", + "610921": "汉阴县", + "610922": "石泉县", + "610923": "宁陕县", + "610924": "紫阳县", + "610925": "岚皋县", + "610926": "平利县", + "610927": "镇坪县", + "610928": "旬阳县", + "610929": "白河县", + "611002": "商州区", + "611021": "洛南县", + "611022": "丹凤县", + "611023": "商南县", + "611024": "山阳县", + "611025": "镇安县", + "611026": "柞水县", + "620102": "城关区", + "620103": "七里河区", + "620104": "西固区", + "620105": "安宁区", + "620111": "红古区", + "620121": "永登县", + "620122": "皋兰县", + "620123": "榆中县", + "620201": "市辖区", + "620290": "雄关区", + "620291": "长城区", + "620292": "镜铁区", + "620293": "新城镇", + "620294": "峪泉镇", + "620295": "文殊镇", + "620302": "金川区", + "620321": "永昌县", + "620402": "白银区", + "620403": "平川区", + "620421": "靖远县", + "620422": "会宁县", + "620423": "景泰县", + "620502": "秦州区", + "620503": "麦积区", + "620521": "清水县", + "620522": "秦安县", + "620523": "甘谷县", + "620524": "武山县", + "620525": "张家川回族自治县", + "620602": "凉州区", + "620621": "民勤县", + "620622": "古浪县", + "620623": "天祝藏族自治县", + "620702": "甘州区", + "620721": "肃南裕固族自治县", + "620722": "民乐县", + "620723": "临泽县", + "620724": "高台县", + "620725": "山丹县", + "620802": "崆峒区", + "620821": "泾川县", + "620822": "灵台县", + "620823": "崇信县", + "620824": "华亭县", + "620825": "庄浪县", + "620826": "静宁县", + "620902": "肃州区", + "620921": "金塔县", + "620922": "瓜州县", + "620923": "肃北蒙古族自治县", + "620924": "阿克塞哈萨克族自治县", + "620981": "玉门市", + "620982": "敦煌市", + "621002": "西峰区", + "621021": "庆城县", + "621022": "环县", + "621023": "华池县", + "621024": "合水县", + "621025": "正宁县", + "621026": "宁县", + "621027": "镇原县", + "621102": "安定区", + "621121": "通渭县", + "621122": "陇西县", + "621123": "渭源县", + "621124": "临洮县", + "621125": "漳县", + "621126": "岷县", + "621202": "武都区", + "621221": "成县", + "621222": "文县", + "621223": "宕昌县", + "621224": "康县", + "621225": "西和县", + "621226": "礼县", + "621227": "徽县", + "621228": "两当县", + "622901": "临夏市", + "622921": "临夏县", + "622922": "康乐县", + "622923": "永靖县", + "622924": "广河县", + "622925": "和政县", + "622926": "东乡族自治县", + "622927": "积石山保安族东乡族撒拉族自治县", + "623001": "合作市", + "623021": "临潭县", + "623022": "卓尼县", + "623023": "舟曲县", + "623024": "迭部县", + "623025": "玛曲县", + "623026": "碌曲县", + "623027": "夏河县", + "630102": "城东区", + "630103": "城中区", + "630104": "城西区", + "630105": "城北区", + "630121": "大通回族土族自治县", + "630122": "湟中县", + "630123": "湟源县", + "630202": "乐都区", + "630203": "平安区", + "630222": "民和回族土族自治县", + "630223": "互助土族自治县", + "630224": "化隆回族自治县", + "630225": "循化撒拉族自治县", + "632221": "门源回族自治县", + "632222": "祁连县", + "632223": "海晏县", + "632224": "刚察县", + "632321": "同仁县", + "632322": "尖扎县", + "632323": "泽库县", + "632324": "河南蒙古族自治县", + "632521": "共和县", + "632522": "同德县", + "632523": "贵德县", + "632524": "兴海县", + "632525": "贵南县", + "632621": "玛沁县", + "632622": "班玛县", + "632623": "甘德县", + "632624": "达日县", + "632625": "久治县", + "632626": "玛多县", + "632701": "玉树市", + "632722": "杂多县", + "632723": "称多县", + "632724": "治多县", + "632725": "囊谦县", + "632726": "曲麻莱县", + "632801": "格尔木市", + "632802": "德令哈市", + "632821": "乌兰县", + "632822": "都兰县", + "632823": "天峻县", + "640104": "兴庆区", + "640105": "西夏区", + "640106": "金凤区", + "640121": "永宁县", + "640122": "贺兰县", + "640181": "灵武市", + "640202": "大武口区", + "640205": "惠农区", + "640221": "平罗县", + "640302": "利通区", + "640303": "红寺堡区", + "640323": "盐池县", + "640324": "同心县", + "640381": "青铜峡市", + "640402": "原州区", + "640422": "西吉县", + "640423": "隆德县", + "640424": "泾源县", + "640425": "彭阳县", + "640502": "沙坡头区", + "640521": "中宁县", + "640522": "海原县", + "650102": "天山区", + "650103": "沙依巴克区", + "650104": "新市区", + "650105": "水磨沟区", + "650106": "头屯河区", + "650107": "达坂城区", + "650109": "米东区", + "650121": "乌鲁木齐县", + "650202": "独山子区", + "650203": "克拉玛依区", + "650204": "白碱滩区", + "650205": "乌尔禾区", + "650402": "高昌区", + "650421": "鄯善县", + "650422": "托克逊县", + "652201": "哈密市", + "652222": "巴里坤哈萨克自治县", + "652223": "伊吾县", + "652301": "昌吉市", + "652302": "阜康市", + "652323": "呼图壁县", + "652324": "玛纳斯县", + "652325": "奇台县", + "652327": "吉木萨尔县", + "652328": "木垒哈萨克自治县", + "652701": "博乐市", + "652702": "阿拉山口市", + "652722": "精河县", + "652723": "温泉县", + "652801": "库尔勒市", + "652822": "轮台县", + "652823": "尉犁县", + "652824": "若羌县", + "652825": "且末县", + "652826": "焉耆回族自治县", + "652827": "和静县", + "652828": "和硕县", + "652829": "博湖县", + "652901": "阿克苏市", + "652922": "温宿县", + "652923": "库车县", + "652924": "沙雅县", + "652925": "新和县", + "652926": "拜城县", + "652927": "乌什县", + "652928": "阿瓦提县", + "652929": "柯坪县", + "653001": "阿图什市", + "653022": "阿克陶县", + "653023": "阿合奇县", + "653024": "乌恰县", + "653101": "喀什市", + "653121": "疏附县", + "653122": "疏勒县", + "653123": "英吉沙县", + "653124": "泽普县", + "653125": "莎车县", + "653126": "叶城县", + "653127": "麦盖提县", + "653128": "岳普湖县", + "653129": "伽师县", + "653130": "巴楚县", + "653131": "塔什库尔干塔吉克自治县", + "653201": "和田市", + "653221": "和田县", + "653222": "墨玉县", + "653223": "皮山县", + "653224": "洛浦县", + "653225": "策勒县", + "653226": "于田县", + "653227": "民丰县", + "654002": "伊宁市", + "654003": "奎屯市", + "654004": "霍尔果斯市", + "654021": "伊宁县", + "654022": "察布查尔锡伯自治县", + "654023": "霍城县", + "654024": "巩留县", + "654025": "新源县", + "654026": "昭苏县", + "654027": "特克斯县", + "654028": "尼勒克县", + "654201": "塔城市", + "654202": "乌苏市", + "654221": "额敏县", + "654223": "沙湾县", + "654224": "托里县", + "654225": "裕民县", + "654226": "和布克赛尔蒙古自治县", + "654301": "阿勒泰市", + "654321": "布尔津县", + "654322": "富蕴县", + "654323": "福海县", + "654324": "哈巴河县", + "654325": "青河县", + "654326": "吉木乃县", + "654390": "北屯市", + "659001": "石河子市", + "659002": "阿拉尔市", + "659003": "图木舒克市", + "659004": "五家渠市", + "710101": "中正区", + "710102": "大同区", + "710103": "中山区", + "710104": "松山区", + "710105": "大安区", + "710106": "万华区", + "710107": "信义区", + "710108": "士林区", + "710109": "北投区", + "710110": "内湖区", + "710111": "南港区", + "710112": "文山区", + "710199": "其它区", + "710201": "新兴区", + "710202": "前金区", + "710203": "芩雅区", + "710204": "盐埕区", + "710205": "鼓山区", + "710206": "旗津区", + "710207": "前镇区", + "710208": "三民区", + "710209": "左营区", + "710210": "楠梓区", + "710211": "小港区", + "710241": "苓雅区", + "710242": "仁武区", + "710243": "大社区", + "710244": "冈山区", + "710245": "路竹区", + "710246": "阿莲区", + "710247": "田寮区", + "710248": "燕巢区", + "710249": "桥头区", + "710250": "梓官区", + "710251": "弥陀区", + "710252": "永安区", + "710253": "湖内区", + "710254": "凤山区", + "710255": "大寮区", + "710256": "林园区", + "710257": "鸟松区", + "710258": "大树区", + "710259": "旗山区", + "710260": "美浓区", + "710261": "六龟区", + "710262": "内门区", + "710263": "杉林区", + "710264": "甲仙区", + "710265": "桃源区", + "710266": "那玛夏区", + "710267": "茂林区", + "710268": "茄萣区", + "710299": "其它区", + "710301": "中西区", + "710302": "东区", + "710303": "南区", + "710304": "北区", + "710305": "安平区", + "710306": "安南区", + "710339": "永康区", + "710340": "归仁区", + "710341": "新化区", + "710342": "左镇区", + "710343": "玉井区", + "710344": "楠西区", + "710345": "南化区", + "710346": "仁德区", + "710347": "关庙区", + "710348": "龙崎区", + "710349": "官田区", + "710350": "麻豆区", + "710351": "佳里区", + "710352": "西港区", + "710353": "七股区", + "710354": "将军区", + "710355": "学甲区", + "710356": "北门区", + "710357": "新营区", + "710358": "后壁区", + "710359": "白河区", + "710360": "东山区", + "710361": "六甲区", + "710362": "下营区", + "710363": "柳营区", + "710364": "盐水区", + "710365": "善化区", + "710366": "大内区", + "710367": "山上区", + "710368": "新市区", + "710369": "安定区", + "710399": "其它区", + "710401": "中区", + "710402": "东区", + "710403": "南区", + "710404": "西区", + "710405": "北区", + "710406": "北屯区", + "710407": "西屯区", + "710408": "南屯区", + "710431": "太平区", + "710432": "大里区", + "710433": "雾峰区", + "710434": "乌日区", + "710435": "丰原区", + "710436": "后里区", + "710437": "石冈区", + "710438": "东势区", + "710439": "和平区", + "710440": "新社区", + "710441": "潭子区", + "710442": "大雅区", + "710443": "神冈区", + "710444": "大肚区", + "710445": "沙鹿区", + "710446": "龙井区", + "710447": "梧栖区", + "710448": "清水区", + "710449": "大甲区", + "710450": "外埔区", + "710451": "大安区", + "710499": "其它区", + "710507": "金沙镇", + "710508": "金湖镇", + "710509": "金宁乡", + "710510": "金城镇", + "710511": "烈屿乡", + "710512": "乌坵乡", + "710614": "南投市", + "710615": "中寮乡", + "710616": "草屯镇", + "710617": "国姓乡", + "710618": "埔里镇", + "710619": "仁爱乡", + "710620": "名间乡", + "710621": "集集镇", + "710622": "水里乡", + "710623": "鱼池乡", + "710624": "信义乡", + "710625": "竹山镇", + "710626": "鹿谷乡", + "710701": "仁爱区", + "710702": "信义区", + "710703": "中正区", + "710704": "中山区", + "710705": "安乐区", + "710706": "暖暖区", + "710707": "七堵区", + "710799": "其它区", + "710801": "东区", + "710802": "北区", + "710803": "香山区", + "710899": "其它区", + "710901": "东区", + "710902": "西区", + "710999": "其它区", + "711130": "万里区", + "711132": "板桥区", + "711133": "汐止区", + "711134": "深坑区", + "711136": "瑞芳区", + "711137": "平溪区", + "711138": "双溪区", + "711140": "新店区", + "711141": "坪林区", + "711142": "乌来区", + "711143": "永和区", + "711144": "中和区", + "711145": "土城区", + "711146": "三峡区", + "711147": "树林区", + "711149": "三重区", + "711150": "新庄区", + "711151": "泰山区", + "711152": "林口区", + "711154": "五股区", + "711155": "八里区", + "711156": "淡水区", + "711157": "三芝区", + "810101": "中西区", + "810102": "湾仔", + "810103": "东区", + "810104": "南区", + "810201": "九龙城区", + "810202": "油尖旺区", + "810203": "深水埗区", + "810204": "黄大仙区", + "810205": "观塘区", + "810301": "北区", + "810302": "大埔区", + "810303": "沙田区", + "810304": "西贡区", + "810305": "元朗区", + "810306": "屯门区", + "810307": "荃湾区", + "810308": "葵青区", + "810309": "离岛区", + "820101": "澳门半岛", + "820201": "离岛" + } +} \ No newline at end of file diff --git a/litemall-vue/src/views/user/module-address-edit/index.vue b/litemall-vue/src/views/user/module-address-edit/index.vue new file mode 100755 index 00000000..0205a6b4 --- /dev/null +++ b/litemall-vue/src/views/user/module-address-edit/index.vue @@ -0,0 +1,112 @@ + + + diff --git a/litemall-vue/src/views/user/module-address/index.vue b/litemall-vue/src/views/user/module-address/index.vue new file mode 100755 index 00000000..c1f1e91b --- /dev/null +++ b/litemall-vue/src/views/user/module-address/index.vue @@ -0,0 +1,114 @@ + + + + + + diff --git a/litemall-vue/src/views/user/module-autonym-edit/id-card-upload.vue b/litemall-vue/src/views/user/module-autonym-edit/id-card-upload.vue new file mode 100755 index 00000000..9ff0cfe4 --- /dev/null +++ b/litemall-vue/src/views/user/module-autonym-edit/id-card-upload.vue @@ -0,0 +1,115 @@ + + + + + + diff --git a/litemall-vue/src/views/user/module-autonym-edit/index.vue b/litemall-vue/src/views/user/module-autonym-edit/index.vue new file mode 100755 index 00000000..f78badbb --- /dev/null +++ b/litemall-vue/src/views/user/module-autonym-edit/index.vue @@ -0,0 +1,112 @@ + + + + + + diff --git a/litemall-vue/src/views/user/module-autonym/index.vue b/litemall-vue/src/views/user/module-autonym/index.vue new file mode 100755 index 00000000..1e190256 --- /dev/null +++ b/litemall-vue/src/views/user/module-autonym/index.vue @@ -0,0 +1,96 @@ + + + + + + diff --git a/litemall-vue/src/views/user/module-collect/index.vue b/litemall-vue/src/views/user/module-collect/index.vue new file mode 100644 index 00000000..c9a5de80 --- /dev/null +++ b/litemall-vue/src/views/user/module-collect/index.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/litemall-vue/src/views/user/module-invitation/index.vue b/litemall-vue/src/views/user/module-invitation/index.vue new file mode 100755 index 00000000..f75000cf --- /dev/null +++ b/litemall-vue/src/views/user/module-invitation/index.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/litemall-vue/src/views/user/module-server/index.vue b/litemall-vue/src/views/user/module-server/index.vue new file mode 100755 index 00000000..2cd55687 --- /dev/null +++ b/litemall-vue/src/views/user/module-server/index.vue @@ -0,0 +1,30 @@ + + + diff --git a/litemall-vue/src/views/user/module-team/index.vue b/litemall-vue/src/views/user/module-team/index.vue new file mode 100755 index 00000000..f77db8a9 --- /dev/null +++ b/litemall-vue/src/views/user/module-team/index.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/litemall-vue/src/views/user/order-ele-list/handle-status-10.vue b/litemall-vue/src/views/user/order-ele-list/handle-status-10.vue new file mode 100644 index 00000000..5911d0fd --- /dev/null +++ b/litemall-vue/src/views/user/order-ele-list/handle-status-10.vue @@ -0,0 +1,6 @@ + diff --git a/litemall-vue/src/views/user/order-ele-list/handle-status-100.vue b/litemall-vue/src/views/user/order-ele-list/handle-status-100.vue new file mode 100644 index 00000000..0e54e2ba --- /dev/null +++ b/litemall-vue/src/views/user/order-ele-list/handle-status-100.vue @@ -0,0 +1,5 @@ + diff --git a/litemall-vue/src/views/user/order-ele-list/handle-status-110.vue b/litemall-vue/src/views/user/order-ele-list/handle-status-110.vue new file mode 100644 index 00000000..69c7e082 --- /dev/null +++ b/litemall-vue/src/views/user/order-ele-list/handle-status-110.vue @@ -0,0 +1,5 @@ + diff --git a/litemall-vue/src/views/user/order-ele-list/handle-status-120.vue b/litemall-vue/src/views/user/order-ele-list/handle-status-120.vue new file mode 100644 index 00000000..69c7e082 --- /dev/null +++ b/litemall-vue/src/views/user/order-ele-list/handle-status-120.vue @@ -0,0 +1,5 @@ + diff --git a/litemall-vue/src/views/user/order-ele-list/handle-status-40.vue b/litemall-vue/src/views/user/order-ele-list/handle-status-40.vue new file mode 100644 index 00000000..69c7e082 --- /dev/null +++ b/litemall-vue/src/views/user/order-ele-list/handle-status-40.vue @@ -0,0 +1,5 @@ + diff --git a/litemall-vue/src/views/user/order-ele-list/handle-status-60.vue b/litemall-vue/src/views/user/order-ele-list/handle-status-60.vue new file mode 100644 index 00000000..a754a66a --- /dev/null +++ b/litemall-vue/src/views/user/order-ele-list/handle-status-60.vue @@ -0,0 +1,5 @@ + diff --git a/litemall-vue/src/views/user/order-ele-list/handle-status-70.vue b/litemall-vue/src/views/user/order-ele-list/handle-status-70.vue new file mode 100644 index 00000000..a754a66a --- /dev/null +++ b/litemall-vue/src/views/user/order-ele-list/handle-status-70.vue @@ -0,0 +1,5 @@ + diff --git a/litemall-vue/src/views/user/order-ele-list/index.vue b/litemall-vue/src/views/user/order-ele-list/index.vue new file mode 100644 index 00000000..cc25b3b0 --- /dev/null +++ b/litemall-vue/src/views/user/order-ele-list/index.vue @@ -0,0 +1,198 @@ + + + + + diff --git a/litemall-vue/src/views/user/order-entity-list/handle-status-10.vue b/litemall-vue/src/views/user/order-entity-list/handle-status-10.vue new file mode 100644 index 00000000..49e77b20 --- /dev/null +++ b/litemall-vue/src/views/user/order-entity-list/handle-status-10.vue @@ -0,0 +1,9 @@ + + + diff --git a/litemall-vue/src/views/user/order-entity-list/handle-status-20.vue b/litemall-vue/src/views/user/order-entity-list/handle-status-20.vue new file mode 100644 index 00000000..0ffeebef --- /dev/null +++ b/litemall-vue/src/views/user/order-entity-list/handle-status-20.vue @@ -0,0 +1,13 @@ + + + diff --git a/litemall-vue/src/views/user/order-entity-list/handle-status-25.vue b/litemall-vue/src/views/user/order-entity-list/handle-status-25.vue new file mode 100644 index 00000000..f5996bc3 --- /dev/null +++ b/litemall-vue/src/views/user/order-entity-list/handle-status-25.vue @@ -0,0 +1,14 @@ + + + diff --git a/litemall-vue/src/views/user/order-entity-list/handle-status-30.vue b/litemall-vue/src/views/user/order-entity-list/handle-status-30.vue new file mode 100644 index 00000000..787a28ae --- /dev/null +++ b/litemall-vue/src/views/user/order-entity-list/handle-status-30.vue @@ -0,0 +1,9 @@ + + + diff --git a/litemall-vue/src/views/user/order-entity-list/handle-status-40.vue b/litemall-vue/src/views/user/order-entity-list/handle-status-40.vue new file mode 100644 index 00000000..995c998f --- /dev/null +++ b/litemall-vue/src/views/user/order-entity-list/handle-status-40.vue @@ -0,0 +1,8 @@ + + + diff --git a/litemall-vue/src/views/user/order-entity-list/handle-status-50.vue b/litemall-vue/src/views/user/order-entity-list/handle-status-50.vue new file mode 100644 index 00000000..33e7369a --- /dev/null +++ b/litemall-vue/src/views/user/order-entity-list/handle-status-50.vue @@ -0,0 +1,8 @@ + + + diff --git a/litemall-vue/src/views/user/order-entity-list/handle-status-60.vue b/litemall-vue/src/views/user/order-entity-list/handle-status-60.vue new file mode 100644 index 00000000..6672701a --- /dev/null +++ b/litemall-vue/src/views/user/order-entity-list/handle-status-60.vue @@ -0,0 +1,8 @@ + + + diff --git a/litemall-vue/src/views/user/order-entity-list/handle-status-70.vue b/litemall-vue/src/views/user/order-entity-list/handle-status-70.vue new file mode 100644 index 00000000..6672701a --- /dev/null +++ b/litemall-vue/src/views/user/order-entity-list/handle-status-70.vue @@ -0,0 +1,8 @@ + + + diff --git a/litemall-vue/src/views/user/order-entity-list/index.vue b/litemall-vue/src/views/user/order-entity-list/index.vue new file mode 100644 index 00000000..209b5fca --- /dev/null +++ b/litemall-vue/src/views/user/order-entity-list/index.vue @@ -0,0 +1,243 @@ + + + + + diff --git a/litemall-vue/src/views/user/refund-list/index.vue b/litemall-vue/src/views/user/refund-list/index.vue new file mode 100644 index 00000000..f25dda45 --- /dev/null +++ b/litemall-vue/src/views/user/refund-list/index.vue @@ -0,0 +1,156 @@ + + + + + diff --git a/litemall-vue/src/views/user/tabbar-user-ecoupon.vue b/litemall-vue/src/views/user/tabbar-user-ecoupon.vue new file mode 100755 index 00000000..1ae7bf83 --- /dev/null +++ b/litemall-vue/src/views/user/tabbar-user-ecoupon.vue @@ -0,0 +1,86 @@ + + + + + + diff --git a/litemall-vue/src/views/user/tabbar-user-header.vue b/litemall-vue/src/views/user/tabbar-user-header.vue new file mode 100755 index 00000000..53f5383f --- /dev/null +++ b/litemall-vue/src/views/user/tabbar-user-header.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/litemall-vue/src/views/user/tabbar-user-module.vue b/litemall-vue/src/views/user/tabbar-user-module.vue new file mode 100755 index 00000000..ba11a8b9 --- /dev/null +++ b/litemall-vue/src/views/user/tabbar-user-module.vue @@ -0,0 +1,25 @@ + + + + + + diff --git a/litemall-vue/src/views/user/tabbar-user-order.vue b/litemall-vue/src/views/user/tabbar-user-order.vue new file mode 100755 index 00000000..1a31eef6 --- /dev/null +++ b/litemall-vue/src/views/user/tabbar-user-order.vue @@ -0,0 +1,105 @@ + + + + + + diff --git a/litemall-vue/src/views/user/tabbar-user.vue b/litemall-vue/src/views/user/tabbar-user.vue new file mode 100755 index 00000000..4b52ad4b --- /dev/null +++ b/litemall-vue/src/views/user/tabbar-user.vue @@ -0,0 +1,68 @@ + + + + + + diff --git a/litemall-vue/src/views/user/user-information-set/index.vue b/litemall-vue/src/views/user/user-information-set/index.vue new file mode 100755 index 00000000..2f2273d2 --- /dev/null +++ b/litemall-vue/src/views/user/user-information-set/index.vue @@ -0,0 +1,141 @@ + + + + + + diff --git a/litemall-vue/src/views/user/user-information-set/set-bg/index.vue b/litemall-vue/src/views/user/user-information-set/set-bg/index.vue new file mode 100755 index 00000000..25d9698a --- /dev/null +++ b/litemall-vue/src/views/user/user-information-set/set-bg/index.vue @@ -0,0 +1,7 @@ + + + diff --git a/litemall-vue/src/views/user/user-information-set/set-mobile/index.vue b/litemall-vue/src/views/user/user-information-set/set-mobile/index.vue new file mode 100755 index 00000000..d85d7ca1 --- /dev/null +++ b/litemall-vue/src/views/user/user-information-set/set-mobile/index.vue @@ -0,0 +1,121 @@ + + + + + + diff --git a/litemall-vue/src/views/user/user-information-set/set-nickname/index.vue b/litemall-vue/src/views/user/user-information-set/set-nickname/index.vue new file mode 100755 index 00000000..1482835d --- /dev/null +++ b/litemall-vue/src/views/user/user-information-set/set-nickname/index.vue @@ -0,0 +1,58 @@ + + + + + + + diff --git a/litemall-vue/src/views/user/user-information-set/set-password/index.vue b/litemall-vue/src/views/user/user-information-set/set-password/index.vue new file mode 100755 index 00000000..544c8fce --- /dev/null +++ b/litemall-vue/src/views/user/user-information-set/set-password/index.vue @@ -0,0 +1,89 @@ + + + + + + diff --git a/litemall-vue/src/vue/components/Tabbar/index.vue b/litemall-vue/src/vue/components/Tabbar/index.vue new file mode 100755 index 00000000..1b5fa45d --- /dev/null +++ b/litemall-vue/src/vue/components/Tabbar/index.vue @@ -0,0 +1,88 @@ + + + + diff --git a/litemall-vue/src/vue/components/_directive/scrollMore.js b/litemall-vue/src/vue/components/_directive/scrollMore.js new file mode 100755 index 00000000..9571f9ca --- /dev/null +++ b/litemall-vue/src/vue/components/_directive/scrollMore.js @@ -0,0 +1,113 @@ +import { debounce } from 'lodash'; +import scroll from 'core/utils/scroll'; + +const CONTEXT = '$scrollArrow'; +const OFFSET = 30; + +// 绑定事件 +function startBind(el) { + const context = el[CONTEXT]; + + context.vm.$nextTick(() => { + if (scroll.isAttached(el)) { + doBindEvent.call(el[CONTEXT]); + } + }); +} + +// 绑定事件到元素上 +// 读取基本的控制变量 +function doBindEvent() { + if (this.el[CONTEXT].binded) { + return; + } + this.el[CONTEXT].binded = true; + + this.scrollEventListener = debounce(handleScrollEvent.bind(this), 100); + // this.scrollEventTarget = this.el; + + // var disabledExpr = this.el.getAttribute('waterfall-disabled'); + // var disabled = false; + // if (disabledExpr) { + // this.vm.$watch(disabledExpr, (value) => { + // this.disabled = value; + // this.scrollEventListener(); + // }); + // disabled = Boolean(this.vm[disabledExpr]); + // } + // this.disabled = disabled; + + const offset = this.el.getAttribute('scroll-offset'); + this.offset = Number(offset) || OFFSET; + this.el.addEventListener('scroll', this.scrollEventListener); + + // this.scrollEventListener(); +} + +// 处理滚动函数 +function handleScrollEvent() { + const element = this.el; + // 已被禁止的滚动处理 + // if (this.disabled) return; + + const targetScrollLeft = scroll.getScrollLeft(element); + const targetVisibleWidth = scroll.getVisibleWidth(element); + // 滚动元素可视区域下边沿到滚动元素元素最顶上 距离 + const targetRight = targetScrollLeft + targetVisibleWidth; + // 如果无元素高度,考虑为元素隐藏,直接返回 + if (!targetVisibleWidth) return; + + // 判断是否到了最右边 + const isRightOver = element.scrollWidth - targetRight < this.offset; + + // 判断是否到了最左边 + const isLeftOver = targetScrollLeft < this.offset; + + this.cb && + this.cb({ + target: element, + isRightOver, + isLeftOver + }); + + // // 判断是否到了顶 + // let needLoadMoreToUpper = targetScrollTop < this.offset; + // if (needLoadMoreToUpper) { + // this.cb.upper && this.cb.upper({ + // target: scrollEventTarget, + // top: targetScrollTop + // }); + // } +} + +// 确认何时绑事件监听函数 +function doCheckStartBind(el) { + const context = el[CONTEXT]; + + if (context.vm._isMounted) { + startBind(el); + } else { + context.vm.$on('hook:mounted', () => { + startBind(el); + }); + } +} + +export default { + bind(el, binding, vnode) { + if (!el[CONTEXT]) { + el[CONTEXT] = { + el, + vm: vnode.context, + cb: {} + }; + } + el[CONTEXT].cb = binding.value; + + doCheckStartBind(el); + }, + update(el) { + const context = el[CONTEXT]; + context.scrollEventListener && context.scrollEventListener(); + } +}; diff --git a/litemall-vue/src/vue/components/field-group/index.vue b/litemall-vue/src/vue/components/field-group/index.vue new file mode 100755 index 00000000..0e8e8e1f --- /dev/null +++ b/litemall-vue/src/vue/components/field-group/index.vue @@ -0,0 +1,26 @@ + + + + + + diff --git a/litemall-vue/src/vue/components/field/index.vue b/litemall-vue/src/vue/components/field/index.vue new file mode 100755 index 00000000..e7e9a114 --- /dev/null +++ b/litemall-vue/src/vue/components/field/index.vue @@ -0,0 +1,104 @@ + + + + + + diff --git a/litemall-vue/src/vue/components/infinity-scroll/index.vue b/litemall-vue/src/vue/components/infinity-scroll/index.vue new file mode 100644 index 00000000..a1f1f6b2 --- /dev/null +++ b/litemall-vue/src/vue/components/infinity-scroll/index.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/litemall-vue/src/vue/components/is-empty/index.vue b/litemall-vue/src/vue/components/is-empty/index.vue new file mode 100644 index 00000000..0dd42c23 --- /dev/null +++ b/litemall-vue/src/vue/components/is-empty/index.vue @@ -0,0 +1,28 @@ + + + + + + diff --git a/litemall-vue/src/vue/components/item-card-hori/index.vue b/litemall-vue/src/vue/components/item-card-hori/index.vue new file mode 100644 index 00000000..a4f01c5b --- /dev/null +++ b/litemall-vue/src/vue/components/item-card-hori/index.vue @@ -0,0 +1,161 @@ + + + + + + diff --git a/litemall-vue/src/vue/components/item-card-vert/index.vue b/litemall-vue/src/vue/components/item-card-vert/index.vue new file mode 100644 index 00000000..ccf8bc55 --- /dev/null +++ b/litemall-vue/src/vue/components/item-card-vert/index.vue @@ -0,0 +1,116 @@ + + + + + + diff --git a/litemall-vue/src/vue/components/item-group/index.vue b/litemall-vue/src/vue/components/item-group/index.vue new file mode 100644 index 00000000..5c0c42ca --- /dev/null +++ b/litemall-vue/src/vue/components/item-group/index.vue @@ -0,0 +1,152 @@ + + + + diff --git a/litemall-vue/src/vue/components/md-kefu/index.vue b/litemall-vue/src/vue/components/md-kefu/index.vue new file mode 100755 index 00000000..a72af21a --- /dev/null +++ b/litemall-vue/src/vue/components/md-kefu/index.vue @@ -0,0 +1,61 @@ + + + + + + diff --git a/litemall-vue/src/vue/components/spinner/index.js b/litemall-vue/src/vue/components/spinner/index.js new file mode 100644 index 00000000..2b361bef --- /dev/null +++ b/litemall-vue/src/vue/components/spinner/index.js @@ -0,0 +1,3 @@ +import spinner from './spinner'; + +export default spinner; diff --git a/litemall-vue/src/vue/components/spinner/spinner.vue b/litemall-vue/src/vue/components/spinner/spinner.vue new file mode 100644 index 00000000..23271bbc --- /dev/null +++ b/litemall-vue/src/vue/components/spinner/spinner.vue @@ -0,0 +1,11 @@ + + + diff --git a/litemall-vue/src/vue/event-bus/index.js b/litemall-vue/src/vue/event-bus/index.js new file mode 100644 index 00000000..45d98f06 --- /dev/null +++ b/litemall-vue/src/vue/event-bus/index.js @@ -0,0 +1,21 @@ +export default { + install(Vue) { + Vue.prototype.$bus = new Vue({ + data() { + return { + item_list: [] + }; + }, + created() { + this.$on('item_list', val => { + const isArr = Array.isArray(val); + if (isArr) { + this.item_list = val; + } else { + throw Error('item_list必须为数组'); + } + }); + } + }); + } +}; diff --git a/litemall-vue/src/vue/filter/index.js b/litemall-vue/src/vue/filter/index.js new file mode 100755 index 00000000..c58d07f1 --- /dev/null +++ b/litemall-vue/src/vue/filter/index.js @@ -0,0 +1,14 @@ +import dayjs from 'dayjs'; +import { isNumber } from 'lodash'; +export const dateFormat = (value, format = 'YYYY-MM-DD') => + value ? dayjs(value * 1000).format(format) : ''; + +export const yuan = value => + isNumber(value) ? `¥${(value / 100).toFixed(2)}` : value; + +export default { + install(Vue) { + Vue.filter('yuan', yuan); + Vue.filter('dateFormat', dateFormat); + } +}; diff --git a/litemall-vue/src/vue/mixin/get-shop-info.js b/litemall-vue/src/vue/mixin/get-shop-info.js new file mode 100644 index 00000000..1f0c74b7 --- /dev/null +++ b/litemall-vue/src/vue/mixin/get-shop-info.js @@ -0,0 +1,23 @@ +import { SHOPINFO } from '@/api/shop'; + +export default { + methods: { + getShopInfo(...keys) { + return new Promise((resolve, reject) => { + const id = window.sessionStorage.getItem('id'); + if (id === null) { + const shop_id = this.$util.getLocationParam('shop_id'); + this.$reqGet(`${SHOPINFO}/${shop_id}`) + .then(res => { + const { data } = res.data; + this.$util.setSessionStorage(data); + resolve(data); + }) + .catch(reject); + } else { + resolve(this.$util.getSessionStorage(...keys)); + } + }); + } + } +}; diff --git a/litemall-vue/src/vue/mixin/item-card.js b/litemall-vue/src/vue/mixin/item-card.js new file mode 100755 index 00000000..19790b7d --- /dev/null +++ b/litemall-vue/src/vue/mixin/item-card.js @@ -0,0 +1,22 @@ +export default { + props: { + goods: { + type: Object, + default: () => ({}) + } + }, + + computed: { + goodsStatusToMe() { + const is_buy = this.goods.is_buy; + const is_collect = this.goods.is_collect; + return is_buy ? '我购买过' : is_collect ? '我收藏过' : ''; + } + }, + + methods: { + OnClick() { + this.$emit('click'); + } + } +}; diff --git a/litemall-vue/src/vue/mixin/list-load-more.js b/litemall-vue/src/vue/mixin/list-load-more.js new file mode 100644 index 00000000..45937b1e --- /dev/null +++ b/litemall-vue/src/vue/mixin/list-load-more.js @@ -0,0 +1,70 @@ +export default { + data() { + return { + pages: { + perPage: 8, + currPage: 1, + pageCount: 1 + }, + items: [], + loading: false, + finished: false, + isEmpty: false + }; + }, + + methods: { + async resetInit() { + this.resetData(); + debugger; + const page = await this.initData(); + this.$nextTick(() => { + this.setPages(page); + }); + }, + isFinished() { + this.finished = true; + this.loading = false; + }, + async loadMore() { + console.log('loadmore'); + const vm = this; + if (vm.pages.pageCount < vm.pages.currPage) { + vm.$toast({ + message: '没有更多了~', + position: 'top' + }); + vm.isFinished(); + } else { + const page = await vm.initData(true); + vm.nextPage(page.pageCount); + } + vm.loading = false; + }, + nextPage(pageCount = 1) { + this.pages.currPage += 1; + this.pages.pageCount = pageCount; + }, + setPages(page = {}) { + this.isEmpty = page.totalCount === 0; + if (page.totalCount <= this.pages.perPage) { + // 不满一页 + this.isFinished(); + } else { + // 下一页 + this.nextPage(page.pageCount); + } + }, + resetData() { + this.items = []; + this.pages = { + perPage: 8, + currPage: 1, + pageCount: 1 + }; + this.loading = false; + this.finished = false; + this.isEmpty = false; + } + } +}; diff --git a/litemall-vue/src/vue/mixin/load-more.js b/litemall-vue/src/vue/mixin/load-more.js new file mode 100755 index 00000000..9255c697 --- /dev/null +++ b/litemall-vue/src/vue/mixin/load-more.js @@ -0,0 +1,66 @@ +export default { + data() { + return { + pages: { + perPage: 8, + currPage: 1, + pageCount: 1 + }, + loading: false, + finished: false, + isEmpty: false + }; + }, + + methods: { + async resetInit() { + this.resetData(); + const page = await this.initData(); + this.$nextTick(() => { + this.setPages(page); + }); + }, + isFinished() { + this.finished = true; + this.loading = false; + }, + async loadMore() { + console.log('loadmore'); + const { + pages: { pageCount, currPage } + } = this; + const finish = pageCount < currPage; + if (finish) { + this.isFinished(); + } else { + this.setPages(await this.initData(true)); + } + this.loading = false; + }, + nextPage(pageCount = 1) { + this.pages.currPage += 1; + this.pages.pageCount = pageCount; + this.loading = false; + }, + setPages(page = {}) { + this.isEmpty = page.totalCount === 0; + if (page.totalCount <= this.pages.perPage) { + // 不满一页 + this.isFinished(); + } else { + // 下一页 + this.nextPage(page.pageCount); + } + }, + resetData() { + this.pages = { + perPage: 8, + currPage: 1, + pageCount: 1 + }; + this.loading = true; + this.finished = false; + this.isEmpty = false; + } + } +}; diff --git a/litemall-vue/src/vue/mixin/scroll-fixed.js b/litemall-vue/src/vue/mixin/scroll-fixed.js new file mode 100644 index 00000000..981783c4 --- /dev/null +++ b/litemall-vue/src/vue/mixin/scroll-fixed.js @@ -0,0 +1,24 @@ +// 滚动条记录, 适用于 keep-alive 组件 +import { debounce } from 'lodash'; +export default { + data() { + return { + scrollTop: 0 + }; + }, + + mounted() { + const vm = this; + + vm.$el.addEventListener( + 'scroll', + debounce(() => { + vm.scrollTop = vm.$el.scrollTop; + }, 50) + ); + }, + + activated() { + this.$el.scrollTop = this.scrollTop; + } +}; diff --git a/litemall-vue/src/vue/plugins/axios.js b/litemall-vue/src/vue/plugins/axios.js new file mode 100755 index 00000000..3d7edad6 --- /dev/null +++ b/litemall-vue/src/vue/plugins/axios.js @@ -0,0 +1,92 @@ +import axios from 'axios'; +import _ from 'lodash'; +import qs from 'qs'; +import { Dialog, Toast } from 'vant'; +import Vue from 'vue'; +Vue.use(Toast); +const instance = axios.create({ + timeout: 5000, + baseURL: '' +}); + +instance.interceptors.request.use( + config => { + if (!config.headers['X-Litemall-Token']) { + config.headers['X-Litemall-Token'] = `${window.localStorage.getItem( + 'Authorization' + ) || ''}`; + } + return config; + }, + err => Promise.reject(err) +); + +instance.interceptors.response.use( + res => { + let litemall = _.has(res.data, 'errno') && res.data.errno !== 0; + let oldmall = _.has(res.data, 'success') && !res.data.success; + if (litemall || oldmall) { + switch (res.data.code || res.data.errno) { + case 422: { + const flag = Array.isArray(res.data.data) && res.data.data.length; + Dialog.alert({ + message: flag ? res.data.data[0].message : res.data.message + }); + break; + } + case 401: + break; + case 404: + break; + case 740: { + Toast.fail('优惠券已经领取过'); + break; + } + case 501: { + Toast.fail('请登录'); + setTimeout(() => { + window.location = '#/login/' + }, 1500) + break; + } + default: + Toast.fail(res.data.errmsg) + } + return Promise.reject(res); + } + return res; + }, + error => { + Dialog.alert({ + title: '警告', + message: error.message + }); + return Promise.reject(error); + } +); + +const post = (url, data, config = {}) => instance.post(url, data, config); + +const put = (url, data, config = {}) => instance.put(url, data, config); + +const get = (url, params, config = {}) => + instance.get(url, { + params, + ...config + }); + +const deleteMethod = (url, config = {}) => + instance({ + url, + method: 'delete', + ...config + }); + +export default { + install(Vue) { + Vue.prototype.$reqGet = get; + Vue.prototype.$reqPost = post; + Vue.prototype.$reqPut = put; + Vue.prototype.$reqDel = deleteMethod; + } +}; diff --git a/litemall-vue/src/vue/plugins/vue-countdown.js b/litemall-vue/src/vue/plugins/vue-countdown.js new file mode 100755 index 00000000..99ac29d7 --- /dev/null +++ b/litemall-vue/src/vue/plugins/vue-countdown.js @@ -0,0 +1,7 @@ +import VueCountdown from '@xkeshi/vue-countdown'; + +export default { + install(Vue) { + Vue.component('countdown', VueCountdown); + } +}; diff --git a/litemall-vue/src/vue/router/home.js b/litemall-vue/src/vue/router/home.js new file mode 100755 index 00000000..ad9c7c09 --- /dev/null +++ b/litemall-vue/src/vue/router/home.js @@ -0,0 +1,23 @@ +const Tabbar = () => + import(/* webpackChunkName: "Tabbar" */ '@/vue/components/Tabbar/'); +import asyncLoader from 'core/async-loader'; + +export default [ + { + path: '/', + name: 'home', + components: { + default: asyncLoader('home/tabbar-home'), + tabbar: Tabbar + }, + meta: { + keepAlive: true + } + }, + { + path: '*', + redirect: { + name: 'home' + } + } +]; diff --git a/litemall-vue/src/vue/router/index.js b/litemall-vue/src/vue/router/index.js new file mode 100755 index 00000000..5ba925e8 --- /dev/null +++ b/litemall-vue/src/vue/router/index.js @@ -0,0 +1,31 @@ +import Vue from 'vue'; +import Router from 'vue-router'; +import { getLocalStorage } from '@/core/utils/local-storage'; + +import home from './home'; +import items from './items'; +import user from './user'; +import order from './order'; +import login from './login'; + +Vue.use(Router); + +const RouterModel = new Router({ + routes: [...home, ...items, ...user, ...order, ...login] +}); + +RouterModel.beforeEach((to, from, next) => { + const { Authorization, user_id } = getLocalStorage( + 'Authorization', + 'user_id' + ); + if (!Authorization && !user_id) { + if (to.meta.login) { + next({ name: 'login', query: { redirect: to.name } }); + return; + } + } + next(); +}); + +export default RouterModel; diff --git a/litemall-vue/src/vue/router/items.js b/litemall-vue/src/vue/router/items.js new file mode 100755 index 00000000..8e1e7251 --- /dev/null +++ b/litemall-vue/src/vue/router/items.js @@ -0,0 +1,49 @@ +import asyncLoader from 'core/async-loader'; + +const Tabbar = () => + import(/* webpackChunkName: "Tabbar" */ '@/vue/components/Tabbar/'); + +export default [ + { + path: '/items', + name: 'class', + meta: { + keepAlive: true + }, + components: { + default: asyncLoader('items/tabbar-class'), + tabbar: Tabbar + } + }, + { + path: '/items/search', + name: 'search', + meta: { + keepAlive: true + }, + component: asyncLoader('items/search') + }, + { + path: '/items/search/result', + name: 'search-result', + meta: { + keepAlive: true + }, + component: asyncLoader('items/search-result'), + props: route => route.query + }, + { + path: '/items/detail/:itemId', + name: 'detail', + props: true, + component: asyncLoader('items/detail') + }, + { + path: '/items/list', + name: 'list', + component: asyncLoader('items/list'), + props: route => ({ + itemClass: +route.query.itemClass + }) + } +]; diff --git a/litemall-vue/src/vue/router/login.js b/litemall-vue/src/vue/router/login.js new file mode 100755 index 00000000..0bf74675 --- /dev/null +++ b/litemall-vue/src/vue/router/login.js @@ -0,0 +1,48 @@ +import asyncLoader from 'core/async-loader'; +const login = asyncLoader('login/login'); +const registerGetCode = asyncLoader('login/register-getCode'); +const registerSubmit = asyncLoader('login/register-submit'); +const registerStatus = asyncLoader('login/register-status'); +const forget = asyncLoader('login/forget'); +const forgetReset = asyncLoader('login/forget-reset'); +const forgetStatus = asyncLoader('login/forget-status'); + +export default [ + { + path: '/login', + name: 'login', + component: login + }, + { + path: '/login/registerGetCode', + name: 'registerGetCode', + component: registerGetCode + }, + { + path: '/login/registerSubmit', + name: 'registerSubmit', + component: registerSubmit + }, + { + path: '/login/registerStatus/:status', + name: 'registerStatus', + props: true, + component: registerStatus + }, + { + path: '/login/forget', + name: 'forget', + component: forget + }, + { + path: '/login/forget/reset', + name: 'forgetReset', + component: forgetReset + }, + { + path: '/login/forget/reset/:status', + name: 'forgetStatus', + props: true, + component: forgetStatus + } +]; diff --git a/litemall-vue/src/vue/router/order.js b/litemall-vue/src/vue/router/order.js new file mode 100755 index 00000000..09c65e3e --- /dev/null +++ b/litemall-vue/src/vue/router/order.js @@ -0,0 +1,47 @@ +import asyncLoader from 'core/async-loader'; +const tab_cart = asyncLoader('order/tabbar-cart'); +const PlaceOrderEntity = asyncLoader('order/place-order-entity'); +const orderDetail = asyncLoader('order/orderDetail'); +const PlaceOrderVirtual = asyncLoader('order/place-order-virtual'); +const Payment = asyncLoader('order/payment'); +const PaymentStatus = asyncLoader('order/payment-status'); + +const Tabbar = () => + import(/* webpackChunkName: "Tabbar" */ '@/vue/components/Tabbar/'); + +export default [ + { + path: '/order', + name: 'cart', + meta: { + login: true + }, + components: { default: tab_cart, tabbar: Tabbar } + }, + { + path: '/order/placeOrderEntity', + name: 'placeOrderEntity', + component: PlaceOrderEntity + }, + { + path: '/order/orderDetail', + name: 'orderDetail', + component: orderDetail + }, + { + path: '/order/placeOrderVirtual', + name: 'placeOrderVirtual', + component: PlaceOrderVirtual + }, + { + path: '/order/payment', + name: 'payment', + component: Payment + }, + { + path: '/order/payment/:status', + name: 'paymentStatus', + component: PaymentStatus, + props: true + } +]; diff --git a/litemall-vue/src/vue/router/user.js b/litemall-vue/src/vue/router/user.js new file mode 100755 index 00000000..2545774c --- /dev/null +++ b/litemall-vue/src/vue/router/user.js @@ -0,0 +1,140 @@ +import asyncLoader from 'core/async-loader'; + +const tab_user = asyncLoader('user/tabbar-user'); +const UserCollect = asyncLoader('user/module-collect'); +const UserTeam = asyncLoader('user/module-team'); +const UserInvitation = asyncLoader('user/module-invitation'); +const UserAddress = asyncLoader('user/module-address'); +const UserAddressEdit = asyncLoader('user/module-address-edit'); +const UserAutonym = asyncLoader('user/module-autonym'); +const UserAutonymEdit = asyncLoader('user/module-autonym-edit'); +const UserServer = asyncLoader('user/module-server'); + +const UserInformation = asyncLoader('user/user-information-set'); +const UserInfo_SetBg = asyncLoader('user/user-information-set/set-bg'); +const UserInfo_SetMobile = asyncLoader('user/user-information-set/set-mobile'); +const UserInfo_SetNickname = asyncLoader( + 'user/user-information-set/set-nickname' +); +const UserInfo_SetPassword = asyncLoader( + 'user/user-information-set/set-password' +); + +const UserOrderEntityList = asyncLoader('user/order-entity-list'); +const UserOrderEleList = asyncLoader('user/order-ele-list'); +const UserRefundList = asyncLoader('user/refund-list'); + +const Tabbar = () => + import(/* webpackChunkName: "Tabbar" */ '@/vue/components/Tabbar/'); + +export default [ + { + path: '/user', + name: 'user', + meta: { + keepAlive: true + }, + components: { default: tab_user, tabbar: Tabbar } + }, + { + path: '/user/collect', + name: 'collect', + meta: { + login: true + }, + component: UserCollect + }, + { + path: '/user/team', + name: 'team', + meta: { + login: true + }, + component: UserTeam + }, + { + path: '/user/invitation', + name: 'invitation', + meta: { + login: true + }, + component: UserInvitation + }, + { + path: '/user/address', + name: 'address', + meta: { + login: true + }, + component: UserAddress + }, + { + path: '/user/address/edit/:addressId', + name: 'address-edit', + props: true, + meta: { + login: true + }, + component: UserAddressEdit + }, + { + path: '/user/autonym', + name: 'autonym', + component: UserAutonym + }, + { + path: '/user/autonym/edit', + name: 'autonym-edit', + component: UserAutonymEdit + }, + { + path: '/user/server', + name: 'user-server', + component: UserServer + }, + { + path: '/user/information', + name: 'user-information', + meta: { + login: true + }, + component: UserInformation + }, + { + path: '/user/information/setbg', + name: 'user-info-setbg', + component: UserInfo_SetBg + }, + { + path: '/user/information/setMobile', + name: 'user-info-setMobile', + component: UserInfo_SetMobile + }, + { + path: '/user/information/setNickname', + name: 'user-info-setNickname', + component: UserInfo_SetNickname + }, + { + path: '/user/information/setPassword', + name: 'user-info-setPassword', + component: UserInfo_SetPassword + }, + { + path: '/user/order/list/:active', + name: 'user-order-list', + props: true, + component: UserOrderEntityList + }, + { + path: '/user/orderEle/list/:active', + name: 'user-order-ele-list', + props: true, + component: UserOrderEleList + }, + { + path: '/user/refund/list', + name: 'user-refund-list', + component: UserRefundList + } +]; diff --git a/litemall-vue/vue.config.js b/litemall-vue/vue.config.js new file mode 100755 index 00000000..7f755dda --- /dev/null +++ b/litemall-vue/vue.config.js @@ -0,0 +1,54 @@ +const path = require('path'); + +function resolve(dir = '') { + return path.join(__dirname, './src', dir); +} + +module.exports = { + outputDir: 'dist', + assetsDir: 'static', + productionSourceMap: false, + devServer: { + proxy: { + '/wx': { + target: 'http://127.0.0.1:8080', + // pathRewrite: { + // '/api': '' + // } + } + }, + //九键输入法的 「mall」= 「6255」 + port: 6255, + }, + chainWebpack: config => { + config.plugins.delete('prefetch'); + config.plugins.delete('preload'); + }, + configureWebpack: { + resolve: { + alias: { + core: resolve('core') + } + }, + optimization: { + runtimeChunk: { + name: entrypoint => `runtime~${entrypoint.name}` + }, + splitChunks: { + minChunks: 2, + minSize: 20000, + maxAsyncRequests: 20, + maxInitialRequests: 30, + name: false + } + } + }, + css: { + loaderOptions: { + sass: { + data: + '@import "@/assets/scss/_var.scss";@import "@/assets/scss/_mixin.scss";' + } + } + } +}; -- Gitee From 82a4a48394d115224e3a924b14949849ed2f2c33 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Sun, 14 Apr 2019 10:04:11 +0800 Subject: [PATCH 068/391] =?UTF-8?q?refactor[litemall-admin-api]:=20?= =?UTF-8?q?=E5=85=B3=E9=94=AE=E5=AD=97=E5=8F=98=E9=87=8F=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../litemall/admin/web/AdminKeywordController.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminKeywordController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminKeywordController.java index 2c3f0116..2aaeef4f 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminKeywordController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminKeywordController.java @@ -37,11 +37,11 @@ public class AdminKeywordController { @RequestParam(defaultValue = "10") Integer limit, @Sort @RequestParam(defaultValue = "add_time") String sort, @Order @RequestParam(defaultValue = "desc") String order) { - List brandList = keywordService.querySelective(keyword, url, page, limit, sort, order); - long total = PageInfo.of(brandList).getTotal(); + List keywordList = keywordService.querySelective(keyword, url, page, limit, sort, order); + long total = PageInfo.of(keywordList).getTotal(); Map data = new HashMap<>(); data.put("total", total); - data.put("items", brandList); + data.put("items", keywordList); return ResponseUtil.ok(data); } @@ -74,8 +74,8 @@ public class AdminKeywordController { @RequiresPermissionsDesc(menu={"商场管理" , "关键词"}, button="详情") @GetMapping("/read") public Object read(@NotNull Integer id) { - LitemallKeyword brand = keywordService.findById(id); - return ResponseUtil.ok(brand); + LitemallKeyword keyword = keywordService.findById(id); + return ResponseUtil.ok(keyword); } @RequiresPermissions("admin:keyword:update") -- Gitee From 490ebfb0451411345e59637f53c8c45880a8f7a0 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Sun, 14 Apr 2019 11:43:05 +0800 Subject: [PATCH 069/391] =?UTF-8?q?fix[litemall-admin]:=20=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=91=98=E8=A7=92=E8=89=B2=E5=90=8D=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-admin/src/views/sys/role.vue | 2 +- .../linlinjava/litemall/db/service/LitemallRoleService.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/litemall-admin/src/views/sys/role.vue b/litemall-admin/src/views/sys/role.vue index 5b703c85..2c52f81a 100644 --- a/litemall-admin/src/views/sys/role.vue +++ b/litemall-admin/src/views/sys/role.vue @@ -3,7 +3,7 @@
- + 查找 添加
diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallRoleService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallRoleService.java index 9e0c421e..ede69ade 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallRoleService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallRoleService.java @@ -37,12 +37,12 @@ public class LitemallRoleService { } - public List querySelective(String roleName, Integer page, Integer size, String sort, String order) { + public List querySelective(String name, Integer page, Integer size, String sort, String order) { LitemallRoleExample example = new LitemallRoleExample(); LitemallRoleExample.Criteria criteria = example.createCriteria(); - if (!StringUtils.isEmpty(roleName)) { - criteria.andNameEqualTo("%" + roleName + "%"); + if (!StringUtils.isEmpty(name)) { + criteria.andNameLike("%" + name + "%"); } criteria.andDeletedEqualTo(false); -- Gitee From f3d21d8bfec89679ef339410d9e16d25497edef6 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Sun, 14 Apr 2019 11:53:58 +0800 Subject: [PATCH 070/391] =?UTF-8?q?SQL:=20=E5=A2=9E=E5=8A=A0=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E6=97=A5=E5=BF=97=E8=A1=A8=EF=BC=8C=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=97=A0=E7=94=A8=E7=9A=84=E7=B3=BB=E7=BB=9F=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-db/sql/litemall_data.sql | 10 +++++++++- litemall-db/sql/litemall_table.sql | 25 ++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/litemall-db/sql/litemall_data.sql b/litemall-db/sql/litemall_data.sql index 7cdc5bf3..6d117d80 100644 --- a/litemall-db/sql/litemall_data.sql +++ b/litemall-db/sql/litemall_data.sql @@ -209,6 +209,15 @@ INSERT INTO `litemall_keyword` VALUES (1,'母亲节','',0,0,100,'2018-02-01 00:0 /*!40000 ALTER TABLE `litemall_keyword` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Dumping data for table `litemall_log` +-- + +LOCK TABLES `litemall_log` WRITE; +/*!40000 ALTER TABLE `litemall_log` DISABLE KEYS */; +/*!40000 ALTER TABLE `litemall_log` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Dumping data for table `litemall_order` -- @@ -281,7 +290,6 @@ UNLOCK TABLES; LOCK TABLES `litemall_system` WRITE; /*!40000 ALTER TABLE `litemall_system` DISABLE KEYS */; -INSERT INTO `litemall_system` VALUES (1,'litemall.system.banner.new.title','大家都在买的','2018-02-01 00:00:00','2018-02-01 00:00:00',0),(2,'litemall.system.banner.new.imageurl','http://yanxuan.nosdn.127.net/8976116db321744084774643a933c5ce.png','2018-02-01 00:00:00','2018-02-01 00:00:00',0),(3,'litemall.system.banner.hot.title','大家都在买的','2018-02-01 00:00:00','2018-02-01 00:00:00',0),(4,'litemall.system.banner.hot.imageurl','http://yanxuan.nosdn.127.net/8976116db321744084774643a933c5ce.png','2018-02-01 00:00:00','2018-02-01 00:00:00',0),(5,'litemall.system.freight.value','8','2018-02-01 00:00:00','2018-02-01 00:00:00',0),(6,'litemall.system.freight.limit','88','2018-02-01 00:00:00','2018-02-01 00:00:00',0),(7,'litemall.system.indexlimit.new','6','2018-02-01 00:00:00','2018-02-01 00:00:00',0),(8,'litemall.system.indexlimit.hot','6','2018-02-01 00:00:00','2018-02-01 00:00:00',0),(9,'litemall.system.indexlimit.brand','4','2018-02-01 00:00:00','2018-02-01 00:00:00',0),(10,'litemall.system.indexlimit.topic','4','2018-02-01 00:00:00','2018-02-01 00:00:00',0),(11,'litemall.system.indexlimit.catloglist','4','2018-02-01 00:00:00','2018-02-01 00:00:00',0),(12,'litemall.system.indexlimit.catloggood','4','2018-02-01 00:00:00','2018-02-01 00:00:00',0),(13,'litemall.system.mallname','litemall','2018-02-01 00:00:00','2018-02-01 00:00:00',0),(14,'litemall.system.shareimage.autocreate','0','2018-02-01 00:00:00','2018-02-01 00:00:00',0); /*!40000 ALTER TABLE `litemall_system` ENABLE KEYS */; UNLOCK TABLES; diff --git a/litemall-db/sql/litemall_table.sql b/litemall-db/sql/litemall_table.sql index 4e9e7146..a4572912 100644 --- a/litemall-db/sql/litemall_table.sql +++ b/litemall-db/sql/litemall_table.sql @@ -485,6 +485,29 @@ CREATE TABLE `litemall_keyword` ( ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COMMENT='关键字表'; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `litemall_log` +-- + +DROP TABLE IF EXISTS `litemall_log`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `litemall_log` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `admin` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '管理员', + `ip` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '管理员地址', + `type` int(11) DEFAULT NULL COMMENT '操作分类', + `action` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作动作', + `status` tinyint(1) DEFAULT NULL COMMENT '操作状态', + `result` varchar(127) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作结果,或者成功消息,或者失败消息', + `comment` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '补充信息', + `add_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志表'; +/*!40101 SET character_set_client = @saved_cs_client */; + -- -- Table structure for table `litemall_order` -- @@ -664,7 +687,7 @@ CREATE TABLE `litemall_system` ( `update_time` datetime DEFAULT NULL COMMENT '更新时间', `deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='系统配置表'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='系统配置表'; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Gitee From d27fd3892c6ab8f820f31cf4c3b29553cc7cdb4b Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Sun, 14 Apr 2019 11:55:09 +0800 Subject: [PATCH 071/391] =?UTF-8?q?feat[litemall-admin,=20litemall-admin-a?= =?UTF-8?q?pi]:=20=E6=94=AF=E6=8C=81=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/platform.md | 56 +- .../admin/service/AdminOrderService.java | 4 + .../litemall/admin/service/LogHelper.java | 114 + .../admin/web/AdminAdminController.java | 6 + .../admin/web/AdminAuthController.java | 12 + .../admin/web/AdminLogController.java | 47 + litemall-admin/src/api/log.js | 9 + litemall-admin/src/router/index.js | 10 + litemall-admin/src/views/sys/log.vue | 98 + .../litemall/core}/util/IpUtil.java | 9 +- .../mybatis-generator/generatorConfig.xml | 3 + .../litemall/db/dao/LitemallLogMapper.java | 159 ++ .../litemall/db/domain/LitemallLog.java | 666 ++++++ .../db/domain/LitemallLogExample.java | 1918 +++++++++++++++++ .../db/service/LitemallLogService.java | 46 + .../litemall/db/dao/LitemallLogMapper.xml | 504 +++++ .../litemall/wx/service/WxOrderService.java | 2 +- .../litemall/wx/web/WxAuthController.java | 8 +- 18 files changed, 3654 insertions(+), 17 deletions(-) create mode 100644 litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/LogHelper.java create mode 100644 litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminLogController.java create mode 100644 litemall-admin/src/api/log.js create mode 100644 litemall-admin/src/views/sys/log.vue rename {litemall-wx-api/src/main/java/org/linlinjava/litemall/wx => litemall-core/src/main/java/org/linlinjava/litemall/core}/util/IpUtil.java (87%) create mode 100644 litemall-db/src/main/java/org/linlinjava/litemall/db/dao/LitemallLogMapper.java create mode 100644 litemall-db/src/main/java/org/linlinjava/litemall/db/domain/LitemallLog.java create mode 100644 litemall-db/src/main/java/org/linlinjava/litemall/db/domain/LitemallLogExample.java create mode 100644 litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallLogService.java create mode 100644 litemall-db/src/main/resources/org/linlinjava/litemall/db/dao/LitemallLogMapper.xml diff --git a/doc/platform.md b/doc/platform.md index 29b5aef1..dc1adbde 100644 --- a/doc/platform.md +++ b/doc/platform.md @@ -463,25 +463,73 @@ litemall_coupon_user表的status字段,包含以后三种状态: 当用户或者管理员上传图像时,图像文件会保存到本地或者第三方云存储服务器中, 同时在存储对象表中记录一下。 -### 2.1.10 通用设计 +### 2.1.10 操作日志设计 + +业务日志表litemall_log记录管理员的关键性操作。 + +需要讨论的是,很多项目的业务日志模块采用注解方式,即加上方法注解,因此可以自动捕获 +用户的操作行为。虽然这样做很方便且不会影响业务代码,但是实际上最终是粗颗粒地记录,反而记录意义不大。 + +因此本项目采用在方法内手写业务日志代码方式记录业务操作行为及结果。 +虽然比较繁琐,但是可以保证记录是细颗粒的。而且,如果管理员最终关心的操作较少,那么 +实际上需要写的代码不是很多。 + +考虑到语义,操作业务应该是“谁做了什么操作,结果成功还是失败,失败原因是什么,补充信息是什么”, +因此这里设计的业务日志表关键字段如下: +* 管理员 +* IP地址 +* 操作分类 +* 操作动作 +* 操作状态 +* 操作结果 +* 补充信息 + +#### 2.1.10.1 操作类别 + +这里的日志类型设计成四种(当然开发者需要可以扩展) +* 一般日志:用户觉得需要查看的一般操作日志,建议是默认的日志级别 +* 安全日志:用户安全相关的操作日志,例如登录、删除管理员 +* 订单日志:用户交易相关的操作日志,例如订单发货、退款 +* 其他日志:如果以上三种不合适,可以选择其他日志,建议是优先级最低的日志级别 + +当然建议开发者应该和最终用户讨论交流,记录真正关键性的业务操作,例如登录相关或订单相关等。 + +#### 2.1.10.2 操作结果 + +如果操作成功,可以使用操作结果字段记录被操作的对象。 +当然,有些操作没有具体对象,那么可以省略。 + +如果操作失败,也可以使用操作结果字段记录失败的原因。 + +#### 2.1.10.3 操作失败 + +虽然这里有操作状态字段和操作结果字段,可以记录操作失败的状态。 +但是通常失败操作不会对系统或者数据库带来影响,因此实际上开发者其实不需要 +记录太多操作失败的日志,而是记录操作成功的日志,告诉系统管理员当前状态的变化。 + +当然,是否记录操作失败取决于开发者或者最终用户是否需要。 +例如,登录这里应该记录用户登录失败的日志,因为保存的IP地址可以帮助管理员了解 +系统被访问的情况。 + +### 2.1.11 通用设计 除了以上表,数据库还存在其他一些业务表,例如专题表litemall_topic, 但是都很直观,不需要多讨论。 以下是一些表设计中无具体业务意义可通用的字段。 -#### 2.1.10.1 deleted +#### 2.1.11.1 deleted 除极少数表,其他所有表都存在`deleted`字段,支持逻辑删除。 因此目前删除数据时,不会直接删除数据,而是修改`deleted`字段。 当然,数据库管理员可以连接到数据库直接删除数据,或者开发者 可以修改这里的逻辑采用物理删除。 -#### 2.1.10.2 add_time +#### 2.1.11.2 add_time 除极少数表,其他所有表都存在`add_time`字段,记录数据创建时间。 -#### 2.1.10.3 update_time +#### 2.1.11.3 update_time 除极少数表,其他所有表都存在`update_time`字段,记录数据修改时间。 diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminOrderService.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminOrderService.java index 92cc8845..e361922c 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminOrderService.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminOrderService.java @@ -49,6 +49,8 @@ public class AdminOrderService { private WxPayService wxPayService; @Autowired private NotifyService notifyService; + @Autowired + private LogHelper logHelper; public Object list(Integer userId, String orderSn, List orderStatusArray, Integer page, Integer limit, String sort, String order) { @@ -161,6 +163,7 @@ public class AdminOrderService { // 注意订单号只发后6位 notifyService.notifySmsTemplate(order.getMobile(), NotifyType.REFUND, new String[]{order.getOrderSn().substring(8, 14)}); + logHelper.logOrderSucceed("退款", "订单编号 " + orderId); return ResponseUtil.ok(); } @@ -205,6 +208,7 @@ public class AdminOrderService { // "您的订单已经发货,快递公司 {1},快递单 {2} ,请注意查收" notifyService.notifySmsTemplate(order.getMobile(), NotifyType.SHIP, new String[]{shipChannel, shipSn}); + logHelper.logOrderSucceed("发货", "订单编号 " + orderId); return ResponseUtil.ok(); } diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/LogHelper.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/LogHelper.java new file mode 100644 index 00000000..445cc29f --- /dev/null +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/LogHelper.java @@ -0,0 +1,114 @@ +package org.linlinjava.litemall.admin.service; + +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.subject.Subject; +import org.linlinjava.litemall.core.util.IpUtil; +import org.linlinjava.litemall.db.domain.LitemallAdmin; +import org.linlinjava.litemall.db.domain.LitemallLog; +import org.linlinjava.litemall.db.service.LitemallLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; + +/** + * 这里的日志类型设计成四种(当然开发者需要可以自己扩展) + * 一般日志:用户觉得需要查看的一般操作日志,建议是默认的日志级别 + * 安全日志:用户安全相关的操作日志,例如登录、删除管理员 + * 订单日志:用户交易相关的操作日志,例如订单发货、退款 + * 其他日志:如果以上三种不合适,可以选择其他日志,建议是优先级最低的日志级别 + * + * 当然可能很多操作是不需要记录到数据库的,例如编辑商品、编辑广告品之类。 + */ +@Component +public class LogHelper { + public final static Integer LOG_TYPE_GENERAL = 0; + public final static Integer LOG_TYPE_AUTH = 1; + public final static Integer LOG_TYPE_ORDER = 2; + public final static Integer LOG_TYPE_OTHER = 3; + + @Autowired + private LitemallLogService logService; + + public void logGeneralSucceed(String action){ + logAdmin(LOG_TYPE_GENERAL, action, true, "", ""); + } + + public void logGeneralSucceed(String action, String result){ + logAdmin(LOG_TYPE_GENERAL, action, true, result, ""); + } + + public void logGeneralFail(String action, String error){ + logAdmin(LOG_TYPE_GENERAL, action, false, error, ""); + } + + public void logAuthSucceed(String action){ + logAdmin(LOG_TYPE_AUTH, action, true, "", ""); + } + + public void logAuthSucceed(String action, String result){ + logAdmin(LOG_TYPE_AUTH, action, true, result, ""); + } + + public void logAuthFail(String action, String error){ + logAdmin(LOG_TYPE_AUTH, action, false, error, ""); + } + + public void logOrderSucceed(String action){ + logAdmin(LOG_TYPE_ORDER, action, true, "", ""); + } + + public void logOrderSucceed(String action, String result){ + logAdmin(LOG_TYPE_ORDER, action, true, result, ""); + } + + public void logOrderFail(String action, String error){ + logAdmin(LOG_TYPE_ORDER, action, false, error, ""); + } + + public void logOtherSucceed(String action){ + logAdmin(LOG_TYPE_OTHER, action, true, "", ""); + } + + public void logOtherSucceed(String action, String result){ + logAdmin(LOG_TYPE_OTHER, action, true, result, ""); + } + + + public void logOtherFail(String action, String error){ + logAdmin(LOG_TYPE_OTHER, action, false, error, ""); + } + + public void logAdmin (Integer type, String action, Boolean succeed, String result, String comment){ + LitemallLog log = new LitemallLog(); + + Subject currentUser = SecurityUtils.getSubject(); + if(currentUser != null) { + LitemallAdmin admin = (LitemallAdmin) currentUser.getPrincipal(); + if(admin != null) { + log.setAdmin(admin.getUsername()); + } + else{ + log.setAdmin("匿名用户"); + } + } + else{ + log.setAdmin("匿名用户"); + } + + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + if(request != null) { + log.setIp(IpUtil.getIpAddr(request)); + } + + log.setType(type); + log.setAction(action); + log.setStatus(succeed); + log.setResult(result); + log.setComment(comment); + logService.add(log); + } + +} diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAdminController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAdminController.java index ea374536..b18ed640 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAdminController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAdminController.java @@ -5,6 +5,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.linlinjava.litemall.admin.annotation.RequiresPermissionsDesc; +import org.linlinjava.litemall.admin.service.LogHelper; import org.linlinjava.litemall.core.util.RegexUtil; import org.linlinjava.litemall.core.util.ResponseUtil; import org.linlinjava.litemall.core.util.bcrypt.BCryptPasswordEncoder; @@ -32,6 +33,8 @@ public class AdminAdminController { @Autowired private LitemallAdminService adminService; + @Autowired + private LogHelper logHelper; @RequiresPermissions("admin:admin:list") @RequiresPermissionsDesc(menu={"系统管理" , "管理员管理"}, button="查询") @@ -85,6 +88,7 @@ public class AdminAdminController { String encodedPassword = encoder.encode(rawPassword); admin.setPassword(encodedPassword); adminService.add(admin); + logHelper.logAuthSucceed("添加管理员", username); return ResponseUtil.ok(admin); } @@ -119,6 +123,7 @@ public class AdminAdminController { return ResponseUtil.updatedDataFailed(); } + logHelper.logAuthSucceed("编辑管理员", admin.getUsername()); return ResponseUtil.ok(admin); } @@ -132,6 +137,7 @@ public class AdminAdminController { } adminService.deleteById(anotherAdminId); + logHelper.logAuthSucceed("删除管理员", admin.getUsername()); return ResponseUtil.ok(); } } diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAuthController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAuthController.java index c0834414..1e2c1fe2 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAuthController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAuthController.java @@ -9,12 +9,15 @@ import org.apache.shiro.authc.UnknownAccountException; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.subject.Subject; +import org.linlinjava.litemall.admin.service.LogHelper; import org.linlinjava.litemall.admin.util.Permission; import org.linlinjava.litemall.admin.util.PermissionUtil; import org.linlinjava.litemall.core.util.JacksonUtil; import org.linlinjava.litemall.core.util.ResponseUtil; import org.linlinjava.litemall.db.domain.LitemallAdmin; +import org.linlinjava.litemall.db.domain.LitemallLog; import org.linlinjava.litemall.db.service.LitemallAdminService; +import org.linlinjava.litemall.db.service.LitemallLogService; import org.linlinjava.litemall.db.service.LitemallPermissionService; import org.linlinjava.litemall.db.service.LitemallRoleService; import org.springframework.beans.factory.annotation.Autowired; @@ -39,6 +42,8 @@ public class AdminAuthController { private LitemallRoleService roleService; @Autowired private LitemallPermissionService permissionService; + @Autowired + private LogHelper logHelper; /* * { username : value, password : value } @@ -56,13 +61,18 @@ public class AdminAuthController { try { currentUser.login(new UsernamePasswordToken(username, password)); } catch (UnknownAccountException uae) { + logHelper.logAuthFail("登录", "用户帐号或密码不正确"); return ResponseUtil.fail(ADMIN_INVALID_ACCOUNT, "用户帐号或密码不正确"); } catch (LockedAccountException lae) { + logHelper.logAuthFail("登录", "用户帐号已锁定不可用"); return ResponseUtil.fail(ADMIN_INVALID_ACCOUNT, "用户帐号已锁定不可用"); } catch (AuthenticationException ae) { + logHelper.logAuthFail("登录", "认证失败"); return ResponseUtil.fail(ADMIN_INVALID_ACCOUNT, "认证失败"); } + + logHelper.logAuthSucceed("登录"); return ResponseUtil.ok(currentUser.getSession().getId()); } @@ -73,6 +83,8 @@ public class AdminAuthController { @PostMapping("/logout") public Object login() { Subject currentUser = SecurityUtils.getSubject(); + + logHelper.logAuthSucceed("退出"); currentUser.logout(); return ResponseUtil.ok(); } diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminLogController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminLogController.java new file mode 100644 index 00000000..bb72eddf --- /dev/null +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminLogController.java @@ -0,0 +1,47 @@ +package org.linlinjava.litemall.admin.web; + +import com.github.pagehelper.PageInfo; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.linlinjava.litemall.admin.annotation.RequiresPermissionsDesc; +import org.linlinjava.litemall.core.util.ResponseUtil; +import org.linlinjava.litemall.core.validator.Order; +import org.linlinjava.litemall.core.validator.Sort; +import org.linlinjava.litemall.db.domain.LitemallLog; +import org.linlinjava.litemall.db.service.LitemallLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotNull; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/admin/log") +@Validated +public class AdminLogController { + private final Log logger = LogFactory.getLog(AdminLogController.class); + + @Autowired + private LitemallLogService logService; + + @RequiresPermissions("admin:log:list") + @RequiresPermissionsDesc(menu={"系统管理" , "操作日志"}, button="查询") + @GetMapping("/list") + public Object list(String name, + @RequestParam(defaultValue = "1") Integer page, + @RequestParam(defaultValue = "10") Integer limit, + @Sort @RequestParam(defaultValue = "add_time") String sort, + @Order @RequestParam(defaultValue = "desc") String order) { + List logList = logService.querySelective(name, page, limit, sort, order); + long total = PageInfo.of(logList).getTotal(); + Map data = new HashMap<>(); + data.put("total", total); + data.put("items", logList); + + return ResponseUtil.ok(data); + } +} diff --git a/litemall-admin/src/api/log.js b/litemall-admin/src/api/log.js new file mode 100644 index 00000000..0b69a8fb --- /dev/null +++ b/litemall-admin/src/api/log.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +export function listLog(query) { + return request({ + url: '/log/list', + method: 'get', + params: query + }) +} diff --git a/litemall-admin/src/router/index.js b/litemall-admin/src/router/index.js index bbc054bd..ab5c8508 100644 --- a/litemall-admin/src/router/index.js +++ b/litemall-admin/src/router/index.js @@ -375,6 +375,16 @@ export const asyncRouterMap = [ noCache: true } }, + { + path: 'log', + component: () => import('@/views/sys/log'), + name: 'log', + meta: { + perms: ['GET /admin/admin/log'], + title: '操作日志', + noCache: true + } + }, { path: 'role', component: () => import('@/views/sys/role'), diff --git a/litemall-admin/src/views/sys/log.vue b/litemall-admin/src/views/sys/log.vue new file mode 100644 index 00000000..e6708be8 --- /dev/null +++ b/litemall-admin/src/views/sys/log.vue @@ -0,0 +1,98 @@ + + + diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/util/IpUtil.java b/litemall-core/src/main/java/org/linlinjava/litemall/core/util/IpUtil.java similarity index 87% rename from litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/util/IpUtil.java rename to litemall-core/src/main/java/org/linlinjava/litemall/core/util/IpUtil.java index 6774697d..2618bbd8 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/util/IpUtil.java +++ b/litemall-core/src/main/java/org/linlinjava/litemall/core/util/IpUtil.java @@ -1,4 +1,4 @@ -package org.linlinjava.litemall.wx.util; +package org.linlinjava.litemall.core.util; import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; @@ -8,13 +8,6 @@ import java.net.UnknownHostException; * IP地址相关工具类 */ public class IpUtil { - public static String client(HttpServletRequest request) { - String xff = request.getHeader("x-forwarded-for"); - if (xff == null) { - xff = request.getRemoteAddr(); - } - return xff; - } public static String getIpAddr(HttpServletRequest request) { String ipAddress = null; diff --git a/litemall-db/mybatis-generator/generatorConfig.xml b/litemall-db/mybatis-generator/generatorConfig.xml index 6c1502c5..5290ad69 100644 --- a/litemall-db/mybatis-generator/generatorConfig.xml +++ b/litemall-db/mybatis-generator/generatorConfig.xml @@ -174,5 +174,8 @@
+ + +
\ No newline at end of file diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/dao/LitemallLogMapper.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/dao/LitemallLogMapper.java new file mode 100644 index 00000000..30da82ea --- /dev/null +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/dao/LitemallLogMapper.java @@ -0,0 +1,159 @@ +package org.linlinjava.litemall.db.dao; + +import java.util.List; +import org.apache.ibatis.annotations.Param; +import org.linlinjava.litemall.db.domain.LitemallLog; +import org.linlinjava.litemall.db.domain.LitemallLogExample; + +public interface LitemallLogMapper { + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + long countByExample(LitemallLogExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + int deleteByExample(LitemallLogExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + int deleteByPrimaryKey(Integer id); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + int insert(LitemallLog record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + int insertSelective(LitemallLog record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + LitemallLog selectOneByExample(LitemallLogExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + LitemallLog selectOneByExampleSelective(@Param("example") LitemallLogExample example, @Param("selective") LitemallLog.Column ... selective); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + List selectByExampleSelective(@Param("example") LitemallLogExample example, @Param("selective") LitemallLog.Column ... selective); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + List selectByExample(LitemallLogExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + LitemallLog selectByPrimaryKeySelective(@Param("id") Integer id, @Param("selective") LitemallLog.Column ... selective); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + LitemallLog selectByPrimaryKey(Integer id); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + LitemallLog selectByPrimaryKeyWithLogicalDelete(@Param("id") Integer id, @Param("andLogicalDeleted") boolean andLogicalDeleted); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + int updateByExampleSelective(@Param("record") LitemallLog record, @Param("example") LitemallLogExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + int updateByExample(@Param("record") LitemallLog record, @Param("example") LitemallLogExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + int updateByPrimaryKeySelective(LitemallLog record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + int updateByPrimaryKey(LitemallLog record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + int logicalDeleteByExample(@Param("example") LitemallLogExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + int logicalDeleteByPrimaryKey(Integer id); +} \ No newline at end of file diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/domain/LitemallLog.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/domain/LitemallLog.java new file mode 100644 index 00000000..6d714482 --- /dev/null +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/domain/LitemallLog.java @@ -0,0 +1,666 @@ +package org.linlinjava.litemall.db.domain; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Arrays; + +public class LitemallLog { + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public static final Boolean NOT_DELETED = false; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public static final Boolean IS_DELETED = true; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column litemall_log.id + * + * @mbg.generated + */ + private Integer id; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column litemall_log.admin + * + * @mbg.generated + */ + private String admin; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column litemall_log.ip + * + * @mbg.generated + */ + private String ip; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column litemall_log.type + * + * @mbg.generated + */ + private Integer type; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column litemall_log.action + * + * @mbg.generated + */ + private String action; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column litemall_log.status + * + * @mbg.generated + */ + private Boolean status; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column litemall_log.result + * + * @mbg.generated + */ + private String result; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column litemall_log.comment + * + * @mbg.generated + */ + private String comment; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column litemall_log.add_time + * + * @mbg.generated + */ + private LocalDateTime addTime; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column litemall_log.update_time + * + * @mbg.generated + */ + private LocalDateTime updateTime; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column litemall_log.deleted + * + * @mbg.generated + */ + private Boolean deleted; + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column litemall_log.id + * + * @return the value of litemall_log.id + * + * @mbg.generated + */ + public Integer getId() { + return id; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column litemall_log.id + * + * @param id the value for litemall_log.id + * + * @mbg.generated + */ + public void setId(Integer id) { + this.id = id; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column litemall_log.admin + * + * @return the value of litemall_log.admin + * + * @mbg.generated + */ + public String getAdmin() { + return admin; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column litemall_log.admin + * + * @param admin the value for litemall_log.admin + * + * @mbg.generated + */ + public void setAdmin(String admin) { + this.admin = admin; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column litemall_log.ip + * + * @return the value of litemall_log.ip + * + * @mbg.generated + */ + public String getIp() { + return ip; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column litemall_log.ip + * + * @param ip the value for litemall_log.ip + * + * @mbg.generated + */ + public void setIp(String ip) { + this.ip = ip; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column litemall_log.type + * + * @return the value of litemall_log.type + * + * @mbg.generated + */ + public Integer getType() { + return type; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column litemall_log.type + * + * @param type the value for litemall_log.type + * + * @mbg.generated + */ + public void setType(Integer type) { + this.type = type; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column litemall_log.action + * + * @return the value of litemall_log.action + * + * @mbg.generated + */ + public String getAction() { + return action; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column litemall_log.action + * + * @param action the value for litemall_log.action + * + * @mbg.generated + */ + public void setAction(String action) { + this.action = action; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column litemall_log.status + * + * @return the value of litemall_log.status + * + * @mbg.generated + */ + public Boolean getStatus() { + return status; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column litemall_log.status + * + * @param status the value for litemall_log.status + * + * @mbg.generated + */ + public void setStatus(Boolean status) { + this.status = status; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column litemall_log.result + * + * @return the value of litemall_log.result + * + * @mbg.generated + */ + public String getResult() { + return result; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column litemall_log.result + * + * @param result the value for litemall_log.result + * + * @mbg.generated + */ + public void setResult(String result) { + this.result = result; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column litemall_log.comment + * + * @return the value of litemall_log.comment + * + * @mbg.generated + */ + public String getComment() { + return comment; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column litemall_log.comment + * + * @param comment the value for litemall_log.comment + * + * @mbg.generated + */ + public void setComment(String comment) { + this.comment = comment; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column litemall_log.add_time + * + * @return the value of litemall_log.add_time + * + * @mbg.generated + */ + public LocalDateTime getAddTime() { + return addTime; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column litemall_log.add_time + * + * @param addTime the value for litemall_log.add_time + * + * @mbg.generated + */ + public void setAddTime(LocalDateTime addTime) { + this.addTime = addTime; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column litemall_log.update_time + * + * @return the value of litemall_log.update_time + * + * @mbg.generated + */ + public LocalDateTime getUpdateTime() { + return updateTime; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column litemall_log.update_time + * + * @param updateTime the value for litemall_log.update_time + * + * @mbg.generated + */ + public void setUpdateTime(LocalDateTime updateTime) { + this.updateTime = updateTime; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column litemall_log.deleted + * + * @return the value of litemall_log.deleted + * + * @mbg.generated + */ + public Boolean getDeleted() { + return deleted; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column litemall_log.deleted + * + * @param deleted the value for litemall_log.deleted + * + * @mbg.generated + */ + public void setDeleted(Boolean deleted) { + this.deleted = deleted; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(getClass().getSimpleName()); + sb.append(" ["); + sb.append("Hash = ").append(hashCode()); + sb.append(", id=").append(id); + sb.append(", admin=").append(admin); + sb.append(", ip=").append(ip); + sb.append(", type=").append(type); + sb.append(", action=").append(action); + sb.append(", status=").append(status); + sb.append(", result=").append(result); + sb.append(", comment=").append(comment); + sb.append(", addTime=").append(addTime); + sb.append(", updateTime=").append(updateTime); + sb.append(", deleted=").append(deleted); + sb.append("]"); + return sb.toString(); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + @Override + public boolean equals(Object that) { + if (this == that) { + return true; + } + if (that == null) { + return false; + } + if (getClass() != that.getClass()) { + return false; + } + LitemallLog other = (LitemallLog) that; + return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) + && (this.getAdmin() == null ? other.getAdmin() == null : this.getAdmin().equals(other.getAdmin())) + && (this.getIp() == null ? other.getIp() == null : this.getIp().equals(other.getIp())) + && (this.getType() == null ? other.getType() == null : this.getType().equals(other.getType())) + && (this.getAction() == null ? other.getAction() == null : this.getAction().equals(other.getAction())) + && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus())) + && (this.getResult() == null ? other.getResult() == null : this.getResult().equals(other.getResult())) + && (this.getComment() == null ? other.getComment() == null : this.getComment().equals(other.getComment())) + && (this.getAddTime() == null ? other.getAddTime() == null : this.getAddTime().equals(other.getAddTime())) + && (this.getUpdateTime() == null ? other.getUpdateTime() == null : this.getUpdateTime().equals(other.getUpdateTime())) + && (this.getDeleted() == null ? other.getDeleted() == null : this.getDeleted().equals(other.getDeleted())); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); + result = prime * result + ((getAdmin() == null) ? 0 : getAdmin().hashCode()); + result = prime * result + ((getIp() == null) ? 0 : getIp().hashCode()); + result = prime * result + ((getType() == null) ? 0 : getType().hashCode()); + result = prime * result + ((getAction() == null) ? 0 : getAction().hashCode()); + result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode()); + result = prime * result + ((getResult() == null) ? 0 : getResult().hashCode()); + result = prime * result + ((getComment() == null) ? 0 : getComment().hashCode()); + result = prime * result + ((getAddTime() == null) ? 0 : getAddTime().hashCode()); + result = prime * result + ((getUpdateTime() == null) ? 0 : getUpdateTime().hashCode()); + result = prime * result + ((getDeleted() == null) ? 0 : getDeleted().hashCode()); + return result; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public void andLogicalDeleted(boolean deleted) { + setDeleted(deleted ? IS_DELETED : NOT_DELETED); + } + + /** + * This enum was generated by MyBatis Generator. + * This enum corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public enum Column { + id("id", "id", "INTEGER", false), + admin("admin", "admin", "VARCHAR", true), + ip("ip", "ip", "VARCHAR", false), + type("type", "type", "INTEGER", true), + action("action", "action", "VARCHAR", true), + status("status", "status", "BIT", true), + result("result", "result", "VARCHAR", true), + comment("comment", "comment", "VARCHAR", true), + addTime("add_time", "addTime", "TIMESTAMP", false), + updateTime("update_time", "updateTime", "TIMESTAMP", false), + deleted("deleted", "deleted", "BIT", false); + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + private static final String BEGINNING_DELIMITER = "`"; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + private static final String ENDING_DELIMITER = "`"; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + private final String column; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + private final boolean isColumnNameDelimited; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + private final String javaProperty; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + private final String jdbcType; + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public String value() { + return this.column; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public String getValue() { + return this.column; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public String getJavaProperty() { + return this.javaProperty; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public String getJdbcType() { + return this.jdbcType; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + Column(String column, String javaProperty, String jdbcType, boolean isColumnNameDelimited) { + this.column = column; + this.javaProperty = javaProperty; + this.jdbcType = jdbcType; + this.isColumnNameDelimited = isColumnNameDelimited; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public String desc() { + return this.getEscapedColumnName() + " DESC"; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public String asc() { + return this.getEscapedColumnName() + " ASC"; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public static Column[] excludes(Column ... excludes) { + ArrayList columns = new ArrayList<>(Arrays.asList(Column.values())); + if (excludes != null && excludes.length > 0) { + columns.removeAll(new ArrayList<>(Arrays.asList(excludes))); + } + return columns.toArray(new Column[]{}); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public String getEscapedColumnName() { + if (this.isColumnNameDelimited) { + return new StringBuilder().append(BEGINNING_DELIMITER).append(this.column).append(ENDING_DELIMITER).toString(); + } else { + return this.column; + } + } + } +} \ No newline at end of file diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/domain/LitemallLogExample.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/domain/LitemallLogExample.java new file mode 100644 index 00000000..f2250ba0 --- /dev/null +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/domain/LitemallLogExample.java @@ -0,0 +1,1918 @@ +package org.linlinjava.litemall.db.domain; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +public class LitemallLogExample { + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table litemall_log + * + * @mbg.generated + */ + protected String orderByClause; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table litemall_log + * + * @mbg.generated + */ + protected boolean distinct; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table litemall_log + * + * @mbg.generated + */ + protected List oredCriteria; + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + public LitemallLogExample() { + oredCriteria = new ArrayList(); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + public String getOrderByClause() { + return orderByClause; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + public boolean isDistinct() { + return distinct; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + public List getOredCriteria() { + return oredCriteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public LitemallLogExample orderBy(String orderByClause) { + this.setOrderByClause(orderByClause); + return this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public LitemallLogExample orderBy(String ... orderByClauses) { + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < orderByClauses.length; i++) { + sb.append(orderByClauses[i]); + if (i < orderByClauses.length - 1) { + sb.append(" , "); + } + } + this.setOrderByClause(sb.toString()); + return this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(this); + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + */ + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public static Criteria newAndCreateCriteria() { + LitemallLogExample example = new LitemallLogExample(); + return example.createCriteria(); + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table litemall_log + * + * @mbg.generated + */ + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andIdEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("id = ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andIdNotEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("id <> ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andIdGreaterThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("id > ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andIdGreaterThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("id >= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andIdLessThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("id < ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andIdLessThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("id <= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andAdminIsNull() { + addCriterion("`admin` is null"); + return (Criteria) this; + } + + public Criteria andAdminIsNotNull() { + addCriterion("`admin` is not null"); + return (Criteria) this; + } + + public Criteria andAdminEqualTo(String value) { + addCriterion("`admin` =", value, "admin"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andAdminEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`admin` = ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andAdminNotEqualTo(String value) { + addCriterion("`admin` <>", value, "admin"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andAdminNotEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`admin` <> ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andAdminGreaterThan(String value) { + addCriterion("`admin` >", value, "admin"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andAdminGreaterThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`admin` > ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andAdminGreaterThanOrEqualTo(String value) { + addCriterion("`admin` >=", value, "admin"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andAdminGreaterThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`admin` >= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andAdminLessThan(String value) { + addCriterion("`admin` <", value, "admin"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andAdminLessThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`admin` < ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andAdminLessThanOrEqualTo(String value) { + addCriterion("`admin` <=", value, "admin"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andAdminLessThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`admin` <= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andAdminLike(String value) { + addCriterion("`admin` like", value, "admin"); + return (Criteria) this; + } + + public Criteria andAdminNotLike(String value) { + addCriterion("`admin` not like", value, "admin"); + return (Criteria) this; + } + + public Criteria andAdminIn(List values) { + addCriterion("`admin` in", values, "admin"); + return (Criteria) this; + } + + public Criteria andAdminNotIn(List values) { + addCriterion("`admin` not in", values, "admin"); + return (Criteria) this; + } + + public Criteria andAdminBetween(String value1, String value2) { + addCriterion("`admin` between", value1, value2, "admin"); + return (Criteria) this; + } + + public Criteria andAdminNotBetween(String value1, String value2) { + addCriterion("`admin` not between", value1, value2, "admin"); + return (Criteria) this; + } + + public Criteria andIpIsNull() { + addCriterion("ip is null"); + return (Criteria) this; + } + + public Criteria andIpIsNotNull() { + addCriterion("ip is not null"); + return (Criteria) this; + } + + public Criteria andIpEqualTo(String value) { + addCriterion("ip =", value, "ip"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andIpEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("ip = ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andIpNotEqualTo(String value) { + addCriterion("ip <>", value, "ip"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andIpNotEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("ip <> ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andIpGreaterThan(String value) { + addCriterion("ip >", value, "ip"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andIpGreaterThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("ip > ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andIpGreaterThanOrEqualTo(String value) { + addCriterion("ip >=", value, "ip"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andIpGreaterThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("ip >= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andIpLessThan(String value) { + addCriterion("ip <", value, "ip"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andIpLessThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("ip < ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andIpLessThanOrEqualTo(String value) { + addCriterion("ip <=", value, "ip"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andIpLessThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("ip <= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andIpLike(String value) { + addCriterion("ip like", value, "ip"); + return (Criteria) this; + } + + public Criteria andIpNotLike(String value) { + addCriterion("ip not like", value, "ip"); + return (Criteria) this; + } + + public Criteria andIpIn(List values) { + addCriterion("ip in", values, "ip"); + return (Criteria) this; + } + + public Criteria andIpNotIn(List values) { + addCriterion("ip not in", values, "ip"); + return (Criteria) this; + } + + public Criteria andIpBetween(String value1, String value2) { + addCriterion("ip between", value1, value2, "ip"); + return (Criteria) this; + } + + public Criteria andIpNotBetween(String value1, String value2) { + addCriterion("ip not between", value1, value2, "ip"); + return (Criteria) this; + } + + public Criteria andTypeIsNull() { + addCriterion("`type` is null"); + return (Criteria) this; + } + + public Criteria andTypeIsNotNull() { + addCriterion("`type` is not null"); + return (Criteria) this; + } + + public Criteria andTypeEqualTo(Integer value) { + addCriterion("`type` =", value, "type"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andTypeEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`type` = ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andTypeNotEqualTo(Integer value) { + addCriterion("`type` <>", value, "type"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andTypeNotEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`type` <> ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andTypeGreaterThan(Integer value) { + addCriterion("`type` >", value, "type"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andTypeGreaterThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`type` > ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andTypeGreaterThanOrEqualTo(Integer value) { + addCriterion("`type` >=", value, "type"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andTypeGreaterThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`type` >= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andTypeLessThan(Integer value) { + addCriterion("`type` <", value, "type"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andTypeLessThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`type` < ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andTypeLessThanOrEqualTo(Integer value) { + addCriterion("`type` <=", value, "type"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andTypeLessThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`type` <= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andTypeIn(List values) { + addCriterion("`type` in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotIn(List values) { + addCriterion("`type` not in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeBetween(Integer value1, Integer value2) { + addCriterion("`type` between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotBetween(Integer value1, Integer value2) { + addCriterion("`type` not between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andActionIsNull() { + addCriterion("`action` is null"); + return (Criteria) this; + } + + public Criteria andActionIsNotNull() { + addCriterion("`action` is not null"); + return (Criteria) this; + } + + public Criteria andActionEqualTo(String value) { + addCriterion("`action` =", value, "action"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andActionEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`action` = ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andActionNotEqualTo(String value) { + addCriterion("`action` <>", value, "action"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andActionNotEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`action` <> ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andActionGreaterThan(String value) { + addCriterion("`action` >", value, "action"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andActionGreaterThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`action` > ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andActionGreaterThanOrEqualTo(String value) { + addCriterion("`action` >=", value, "action"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andActionGreaterThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`action` >= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andActionLessThan(String value) { + addCriterion("`action` <", value, "action"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andActionLessThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`action` < ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andActionLessThanOrEqualTo(String value) { + addCriterion("`action` <=", value, "action"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andActionLessThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`action` <= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andActionLike(String value) { + addCriterion("`action` like", value, "action"); + return (Criteria) this; + } + + public Criteria andActionNotLike(String value) { + addCriterion("`action` not like", value, "action"); + return (Criteria) this; + } + + public Criteria andActionIn(List values) { + addCriterion("`action` in", values, "action"); + return (Criteria) this; + } + + public Criteria andActionNotIn(List values) { + addCriterion("`action` not in", values, "action"); + return (Criteria) this; + } + + public Criteria andActionBetween(String value1, String value2) { + addCriterion("`action` between", value1, value2, "action"); + return (Criteria) this; + } + + public Criteria andActionNotBetween(String value1, String value2) { + addCriterion("`action` not between", value1, value2, "action"); + return (Criteria) this; + } + + public Criteria andStatusIsNull() { + addCriterion("`status` is null"); + return (Criteria) this; + } + + public Criteria andStatusIsNotNull() { + addCriterion("`status` is not null"); + return (Criteria) this; + } + + public Criteria andStatusEqualTo(Boolean value) { + addCriterion("`status` =", value, "status"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andStatusEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`status` = ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andStatusNotEqualTo(Boolean value) { + addCriterion("`status` <>", value, "status"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andStatusNotEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`status` <> ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andStatusGreaterThan(Boolean value) { + addCriterion("`status` >", value, "status"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andStatusGreaterThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`status` > ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andStatusGreaterThanOrEqualTo(Boolean value) { + addCriterion("`status` >=", value, "status"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andStatusGreaterThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`status` >= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andStatusLessThan(Boolean value) { + addCriterion("`status` <", value, "status"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andStatusLessThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`status` < ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andStatusLessThanOrEqualTo(Boolean value) { + addCriterion("`status` <=", value, "status"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andStatusLessThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`status` <= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andStatusIn(List values) { + addCriterion("`status` in", values, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotIn(List values) { + addCriterion("`status` not in", values, "status"); + return (Criteria) this; + } + + public Criteria andStatusBetween(Boolean value1, Boolean value2) { + addCriterion("`status` between", value1, value2, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotBetween(Boolean value1, Boolean value2) { + addCriterion("`status` not between", value1, value2, "status"); + return (Criteria) this; + } + + public Criteria andResultIsNull() { + addCriterion("`result` is null"); + return (Criteria) this; + } + + public Criteria andResultIsNotNull() { + addCriterion("`result` is not null"); + return (Criteria) this; + } + + public Criteria andResultEqualTo(String value) { + addCriterion("`result` =", value, "result"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andResultEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`result` = ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andResultNotEqualTo(String value) { + addCriterion("`result` <>", value, "result"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andResultNotEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`result` <> ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andResultGreaterThan(String value) { + addCriterion("`result` >", value, "result"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andResultGreaterThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`result` > ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andResultGreaterThanOrEqualTo(String value) { + addCriterion("`result` >=", value, "result"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andResultGreaterThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`result` >= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andResultLessThan(String value) { + addCriterion("`result` <", value, "result"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andResultLessThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`result` < ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andResultLessThanOrEqualTo(String value) { + addCriterion("`result` <=", value, "result"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andResultLessThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`result` <= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andResultLike(String value) { + addCriterion("`result` like", value, "result"); + return (Criteria) this; + } + + public Criteria andResultNotLike(String value) { + addCriterion("`result` not like", value, "result"); + return (Criteria) this; + } + + public Criteria andResultIn(List values) { + addCriterion("`result` in", values, "result"); + return (Criteria) this; + } + + public Criteria andResultNotIn(List values) { + addCriterion("`result` not in", values, "result"); + return (Criteria) this; + } + + public Criteria andResultBetween(String value1, String value2) { + addCriterion("`result` between", value1, value2, "result"); + return (Criteria) this; + } + + public Criteria andResultNotBetween(String value1, String value2) { + addCriterion("`result` not between", value1, value2, "result"); + return (Criteria) this; + } + + public Criteria andCommentIsNull() { + addCriterion("`comment` is null"); + return (Criteria) this; + } + + public Criteria andCommentIsNotNull() { + addCriterion("`comment` is not null"); + return (Criteria) this; + } + + public Criteria andCommentEqualTo(String value) { + addCriterion("`comment` =", value, "comment"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andCommentEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`comment` = ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andCommentNotEqualTo(String value) { + addCriterion("`comment` <>", value, "comment"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andCommentNotEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`comment` <> ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andCommentGreaterThan(String value) { + addCriterion("`comment` >", value, "comment"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andCommentGreaterThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`comment` > ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andCommentGreaterThanOrEqualTo(String value) { + addCriterion("`comment` >=", value, "comment"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andCommentGreaterThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`comment` >= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andCommentLessThan(String value) { + addCriterion("`comment` <", value, "comment"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andCommentLessThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`comment` < ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andCommentLessThanOrEqualTo(String value) { + addCriterion("`comment` <=", value, "comment"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andCommentLessThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("`comment` <= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andCommentLike(String value) { + addCriterion("`comment` like", value, "comment"); + return (Criteria) this; + } + + public Criteria andCommentNotLike(String value) { + addCriterion("`comment` not like", value, "comment"); + return (Criteria) this; + } + + public Criteria andCommentIn(List values) { + addCriterion("`comment` in", values, "comment"); + return (Criteria) this; + } + + public Criteria andCommentNotIn(List values) { + addCriterion("`comment` not in", values, "comment"); + return (Criteria) this; + } + + public Criteria andCommentBetween(String value1, String value2) { + addCriterion("`comment` between", value1, value2, "comment"); + return (Criteria) this; + } + + public Criteria andCommentNotBetween(String value1, String value2) { + addCriterion("`comment` not between", value1, value2, "comment"); + return (Criteria) this; + } + + public Criteria andAddTimeIsNull() { + addCriterion("add_time is null"); + return (Criteria) this; + } + + public Criteria andAddTimeIsNotNull() { + addCriterion("add_time is not null"); + return (Criteria) this; + } + + public Criteria andAddTimeEqualTo(LocalDateTime value) { + addCriterion("add_time =", value, "addTime"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andAddTimeEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("add_time = ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andAddTimeNotEqualTo(LocalDateTime value) { + addCriterion("add_time <>", value, "addTime"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andAddTimeNotEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("add_time <> ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andAddTimeGreaterThan(LocalDateTime value) { + addCriterion("add_time >", value, "addTime"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andAddTimeGreaterThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("add_time > ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andAddTimeGreaterThanOrEqualTo(LocalDateTime value) { + addCriterion("add_time >=", value, "addTime"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andAddTimeGreaterThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("add_time >= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andAddTimeLessThan(LocalDateTime value) { + addCriterion("add_time <", value, "addTime"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andAddTimeLessThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("add_time < ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andAddTimeLessThanOrEqualTo(LocalDateTime value) { + addCriterion("add_time <=", value, "addTime"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andAddTimeLessThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("add_time <= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andAddTimeIn(List values) { + addCriterion("add_time in", values, "addTime"); + return (Criteria) this; + } + + public Criteria andAddTimeNotIn(List values) { + addCriterion("add_time not in", values, "addTime"); + return (Criteria) this; + } + + public Criteria andAddTimeBetween(LocalDateTime value1, LocalDateTime value2) { + addCriterion("add_time between", value1, value2, "addTime"); + return (Criteria) this; + } + + public Criteria andAddTimeNotBetween(LocalDateTime value1, LocalDateTime value2) { + addCriterion("add_time not between", value1, value2, "addTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIsNull() { + addCriterion("update_time is null"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIsNotNull() { + addCriterion("update_time is not null"); + return (Criteria) this; + } + + public Criteria andUpdateTimeEqualTo(LocalDateTime value) { + addCriterion("update_time =", value, "updateTime"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andUpdateTimeEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("update_time = ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotEqualTo(LocalDateTime value) { + addCriterion("update_time <>", value, "updateTime"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andUpdateTimeNotEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("update_time <> ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andUpdateTimeGreaterThan(LocalDateTime value) { + addCriterion("update_time >", value, "updateTime"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andUpdateTimeGreaterThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("update_time > ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andUpdateTimeGreaterThanOrEqualTo(LocalDateTime value) { + addCriterion("update_time >=", value, "updateTime"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andUpdateTimeGreaterThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("update_time >= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andUpdateTimeLessThan(LocalDateTime value) { + addCriterion("update_time <", value, "updateTime"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andUpdateTimeLessThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("update_time < ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andUpdateTimeLessThanOrEqualTo(LocalDateTime value) { + addCriterion("update_time <=", value, "updateTime"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andUpdateTimeLessThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("update_time <= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andUpdateTimeIn(List values) { + addCriterion("update_time in", values, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotIn(List values) { + addCriterion("update_time not in", values, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeBetween(LocalDateTime value1, LocalDateTime value2) { + addCriterion("update_time between", value1, value2, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotBetween(LocalDateTime value1, LocalDateTime value2) { + addCriterion("update_time not between", value1, value2, "updateTime"); + return (Criteria) this; + } + + public Criteria andDeletedIsNull() { + addCriterion("deleted is null"); + return (Criteria) this; + } + + public Criteria andDeletedIsNotNull() { + addCriterion("deleted is not null"); + return (Criteria) this; + } + + public Criteria andDeletedEqualTo(Boolean value) { + addCriterion("deleted =", value, "deleted"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andDeletedEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("deleted = ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andDeletedNotEqualTo(Boolean value) { + addCriterion("deleted <>", value, "deleted"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andDeletedNotEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("deleted <> ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andDeletedGreaterThan(Boolean value) { + addCriterion("deleted >", value, "deleted"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andDeletedGreaterThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("deleted > ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andDeletedGreaterThanOrEqualTo(Boolean value) { + addCriterion("deleted >=", value, "deleted"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andDeletedGreaterThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("deleted >= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andDeletedLessThan(Boolean value) { + addCriterion("deleted <", value, "deleted"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andDeletedLessThanColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("deleted < ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andDeletedLessThanOrEqualTo(Boolean value) { + addCriterion("deleted <=", value, "deleted"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andDeletedLessThanOrEqualToColumn(LitemallLog.Column column) { + addCriterion(new StringBuilder("deleted <= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andDeletedIn(List values) { + addCriterion("deleted in", values, "deleted"); + return (Criteria) this; + } + + public Criteria andDeletedNotIn(List values) { + addCriterion("deleted not in", values, "deleted"); + return (Criteria) this; + } + + public Criteria andDeletedBetween(Boolean value1, Boolean value2) { + addCriterion("deleted between", value1, value2, "deleted"); + return (Criteria) this; + } + + public Criteria andDeletedNotBetween(Boolean value1, Boolean value2) { + addCriterion("deleted not between", value1, value2, "deleted"); + return (Criteria) this; + } + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table litemall_log + * + * @mbg.generated do_not_delete_during_merge + */ + public static class Criteria extends GeneratedCriteria { + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + private LitemallLogExample example; + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + protected Criteria(LitemallLogExample example) { + super(); + this.example = example; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public LitemallLogExample example() { + return this.example; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andIf(boolean ifAdd, ICriteriaAdd add) { + if (ifAdd) { + add.add(this); + } + return this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andLogicalDeleted(boolean deleted) { + return deleted ? andDeletedEqualTo(LitemallLog.IS_DELETED) : andDeletedNotEqualTo(LitemallLog.IS_DELETED); + } + + /** + * This interface was generated by MyBatis Generator. + * This interface corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public interface ICriteriaAdd { + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_log + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + Criteria add(Criteria add); + } + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table litemall_log + * + * @mbg.generated + */ + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallLogService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallLogService.java new file mode 100644 index 00000000..5a59fc10 --- /dev/null +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallLogService.java @@ -0,0 +1,46 @@ +package org.linlinjava.litemall.db.service; + +import com.github.pagehelper.PageHelper; +import org.linlinjava.litemall.db.dao.LitemallLogMapper; +import org.linlinjava.litemall.db.domain.LitemallAd; +import org.linlinjava.litemall.db.domain.LitemallLog; +import org.linlinjava.litemall.db.domain.LitemallLogExample; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.List; + +@Service +public class LitemallLogService { + @Resource + private LitemallLogMapper logMapper; + + public void deleteById(Integer id) { + logMapper.logicalDeleteByPrimaryKey(id); + } + + public void add(LitemallLog log) { + log.setAddTime(LocalDateTime.now()); + log.setUpdateTime(LocalDateTime.now()); + logMapper.insertSelective(log); + } + + public List querySelective(String name, Integer page, Integer size, String sort, String order) { + LitemallLogExample example = new LitemallLogExample(); + LitemallLogExample.Criteria criteria = example.createCriteria(); + + if (!StringUtils.isEmpty(name)) { + criteria.andAdminLike("%" + name + "%"); + } + criteria.andDeletedEqualTo(false); + + if (!StringUtils.isEmpty(sort) && !StringUtils.isEmpty(order)) { + example.setOrderByClause(sort + " " + order); + } + + PageHelper.startPage(page, size); + return logMapper.selectByExample(example); + } +} diff --git a/litemall-db/src/main/resources/org/linlinjava/litemall/db/dao/LitemallLogMapper.xml b/litemall-db/src/main/resources/org/linlinjava/litemall/db/dao/LitemallLogMapper.xml new file mode 100644 index 00000000..1d59e1a6 --- /dev/null +++ b/litemall-db/src/main/resources/org/linlinjava/litemall/db/dao/LitemallLogMapper.xml @@ -0,0 +1,504 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + id, `admin`, ip, `type`, `action`, `status`, `result`, `comment`, add_time, update_time, + deleted + + + + + + + + + delete from litemall_log + where id = #{id,jdbcType=INTEGER} + + + + delete from litemall_log + + + + + + + + SELECT LAST_INSERT_ID() + + insert into litemall_log (`admin`, ip, `type`, + `action`, `status`, `result`, + `comment`, add_time, update_time, + deleted) + values (#{admin,jdbcType=VARCHAR}, #{ip,jdbcType=VARCHAR}, #{type,jdbcType=INTEGER}, + #{action,jdbcType=VARCHAR}, #{status,jdbcType=BIT}, #{result,jdbcType=VARCHAR}, + #{comment,jdbcType=VARCHAR}, #{addTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}, + #{deleted,jdbcType=BIT}) + + + + + SELECT LAST_INSERT_ID() + + insert into litemall_log + + + `admin`, + + + ip, + + + `type`, + + + `action`, + + + `status`, + + + `result`, + + + `comment`, + + + add_time, + + + update_time, + + + deleted, + + + + + #{admin,jdbcType=VARCHAR}, + + + #{ip,jdbcType=VARCHAR}, + + + #{type,jdbcType=INTEGER}, + + + #{action,jdbcType=VARCHAR}, + + + #{status,jdbcType=BIT}, + + + #{result,jdbcType=VARCHAR}, + + + #{comment,jdbcType=VARCHAR}, + + + #{addTime,jdbcType=TIMESTAMP}, + + + #{updateTime,jdbcType=TIMESTAMP}, + + + #{deleted,jdbcType=BIT}, + + + + + + + update litemall_log + + + id = #{record.id,jdbcType=INTEGER}, + + + `admin` = #{record.admin,jdbcType=VARCHAR}, + + + ip = #{record.ip,jdbcType=VARCHAR}, + + + `type` = #{record.type,jdbcType=INTEGER}, + + + `action` = #{record.action,jdbcType=VARCHAR}, + + + `status` = #{record.status,jdbcType=BIT}, + + + `result` = #{record.result,jdbcType=VARCHAR}, + + + `comment` = #{record.comment,jdbcType=VARCHAR}, + + + add_time = #{record.addTime,jdbcType=TIMESTAMP}, + + + update_time = #{record.updateTime,jdbcType=TIMESTAMP}, + + + deleted = #{record.deleted,jdbcType=BIT}, + + + + + + + + + update litemall_log + set id = #{record.id,jdbcType=INTEGER}, + `admin` = #{record.admin,jdbcType=VARCHAR}, + ip = #{record.ip,jdbcType=VARCHAR}, + `type` = #{record.type,jdbcType=INTEGER}, + `action` = #{record.action,jdbcType=VARCHAR}, + `status` = #{record.status,jdbcType=BIT}, + `result` = #{record.result,jdbcType=VARCHAR}, + `comment` = #{record.comment,jdbcType=VARCHAR}, + add_time = #{record.addTime,jdbcType=TIMESTAMP}, + update_time = #{record.updateTime,jdbcType=TIMESTAMP}, + deleted = #{record.deleted,jdbcType=BIT} + + + + + + + update litemall_log + + + `admin` = #{admin,jdbcType=VARCHAR}, + + + ip = #{ip,jdbcType=VARCHAR}, + + + `type` = #{type,jdbcType=INTEGER}, + + + `action` = #{action,jdbcType=VARCHAR}, + + + `status` = #{status,jdbcType=BIT}, + + + `result` = #{result,jdbcType=VARCHAR}, + + + `comment` = #{comment,jdbcType=VARCHAR}, + + + add_time = #{addTime,jdbcType=TIMESTAMP}, + + + update_time = #{updateTime,jdbcType=TIMESTAMP}, + + + deleted = #{deleted,jdbcType=BIT}, + + + where id = #{id,jdbcType=INTEGER} + + + + update litemall_log + set `admin` = #{admin,jdbcType=VARCHAR}, + ip = #{ip,jdbcType=VARCHAR}, + `type` = #{type,jdbcType=INTEGER}, + `action` = #{action,jdbcType=VARCHAR}, + `status` = #{status,jdbcType=BIT}, + `result` = #{result,jdbcType=VARCHAR}, + `comment` = #{comment,jdbcType=VARCHAR}, + add_time = #{addTime,jdbcType=TIMESTAMP}, + update_time = #{updateTime,jdbcType=TIMESTAMP}, + deleted = #{deleted,jdbcType=BIT} + where id = #{id,jdbcType=INTEGER} + + + + + + update litemall_log set deleted = 1 + + + + + + + update litemall_log set deleted = 1 + where id = #{id,jdbcType=INTEGER} + + \ No newline at end of file diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java index 4df636d0..a8dafd51 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java @@ -25,7 +25,7 @@ import org.linlinjava.litemall.db.service.*; import org.linlinjava.litemall.db.util.CouponUserConstant; import org.linlinjava.litemall.db.util.OrderHandleOption; import org.linlinjava.litemall.db.util.OrderUtil; -import org.linlinjava.litemall.wx.util.IpUtil; +import org.linlinjava.litemall.core.util.IpUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAuthController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAuthController.java index bfd50167..40d0c259 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAuthController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAuthController.java @@ -21,7 +21,7 @@ import org.linlinjava.litemall.wx.dao.UserToken; import org.linlinjava.litemall.wx.dao.WxLoginInfo; import org.linlinjava.litemall.wx.service.CaptchaCodeManager; import org.linlinjava.litemall.wx.service.UserTokenManager; -import org.linlinjava.litemall.wx.util.IpUtil; +import org.linlinjava.litemall.core.util.IpUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; @@ -145,7 +145,7 @@ public class WxAuthController { user.setUserLevel((byte) 0); user.setStatus((byte) 0); user.setLastLoginTime(LocalDateTime.now()); - user.setLastLoginIp(IpUtil.client(request)); + user.setLastLoginIp(IpUtil.getIpAddr(request)); userService.add(user); @@ -153,7 +153,7 @@ public class WxAuthController { couponAssignService.assignForRegister(user.getId()); } else { user.setLastLoginTime(LocalDateTime.now()); - user.setLastLoginIp(IpUtil.client(request)); + user.setLastLoginIp(IpUtil.getIpAddr(request)); if (userService.updateById(user) == 0) { return ResponseUtil.updatedDataFailed(); } @@ -293,7 +293,7 @@ public class WxAuthController { user.setUserLevel((byte) 0); user.setStatus((byte) 0); user.setLastLoginTime(LocalDateTime.now()); - user.setLastLoginIp(IpUtil.client(request)); + user.setLastLoginIp(IpUtil.getIpAddr(request)); userService.add(user); // 给新用户发送注册优惠券 -- Gitee From f5e46125ad29255ebb4a6479bf31cf23e980a039 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Sun, 14 Apr 2019 12:00:02 +0800 Subject: [PATCH 072/391] =?UTF-8?q?feat[litemall-admin-api]:=20=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=91=98=E4=B8=8D=E8=83=BD=E5=88=A0=E9=99=A4=E8=87=AA?= =?UTF-8?q?=E5=B7=B1=E8=B4=A6=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../litemall/admin/web/AdminAdminController.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAdminController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAdminController.java index b18ed640..c4568162 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAdminController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAdminController.java @@ -3,7 +3,9 @@ package org.linlinjava.litemall.admin.web; import com.github.pagehelper.PageInfo; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.apache.shiro.subject.Subject; import org.linlinjava.litemall.admin.annotation.RequiresPermissionsDesc; import org.linlinjava.litemall.admin.service.LogHelper; import org.linlinjava.litemall.core.util.RegexUtil; @@ -136,6 +138,13 @@ public class AdminAdminController { return ResponseUtil.badArgument(); } + // 管理员不能删除自身账号 + Subject currentUser = SecurityUtils.getSubject(); + LitemallAdmin currentAdmin = (LitemallAdmin) currentUser.getPrincipal(); + if (currentAdmin.getId().equals(anotherAdminId)) { + return ResponseUtil.fail(ADMIN_DELETE_NOT_ALLOWED, "管理员不能删除自己账号"); + } + adminService.deleteById(anotherAdminId); logHelper.logAuthSucceed("删除管理员", admin.getUsername()); return ResponseUtil.ok(); -- Gitee From 3cb559bb87278b25baa461cff30cc9c96aa4049c Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Sun, 14 Apr 2019 14:26:29 +0800 Subject: [PATCH 073/391] =?UTF-8?q?fix[litemall-admin]:=E5=95=86=E5=93=81?= =?UTF-8?q?=E7=B1=BB=E7=9B=AE=E9=A1=B5=E9=9D=A2=E6=8C=89=E9=92=AE=E6=A0=B7?= =?UTF-8?q?=E5=BC=8Fscoped?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-admin/src/views/mall/category.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litemall-admin/src/views/mall/category.vue b/litemall-admin/src/views/mall/category.vue index 37aaf30a..ff20c2ce 100644 --- a/litemall-admin/src/views/mall/category.vue +++ b/litemall-admin/src/views/mall/category.vue @@ -101,7 +101,7 @@ - + + + + + diff --git a/litemall-vue/src/views/items/search-result/index.vue b/litemall-vue/src/views/items/search-result/index.vue index 7f87f2a1..66723ab7 100755 --- a/litemall-vue/src/views/items/search-result/index.vue +++ b/litemall-vue/src/views/items/search-result/index.vue @@ -1,166 +1,166 @@ - - - - - + + + + + diff --git a/litemall-vue/src/views/user/module-collect/index.vue b/litemall-vue/src/views/user/module-collect/index.vue index c9a5de80..3a81eb57 100644 --- a/litemall-vue/src/views/user/module-collect/index.vue +++ b/litemall-vue/src/views/user/module-collect/index.vue @@ -1,127 +1,127 @@ - - - - - + + + + + diff --git a/litemall-vue/src/views/user/user-information-set/index.vue b/litemall-vue/src/views/user/user-information-set/index.vue index 2f2273d2..051470d8 100755 --- a/litemall-vue/src/views/user/user-information-set/index.vue +++ b/litemall-vue/src/views/user/user-information-set/index.vue @@ -1,141 +1,141 @@ - - - - - - + + + + + + diff --git a/litemall-vue/src/vue/mixin/list-load-more.js b/litemall-vue/src/vue/mixin/list-load-more.js index 45937b1e..29edd17f 100644 --- a/litemall-vue/src/vue/mixin/list-load-more.js +++ b/litemall-vue/src/vue/mixin/list-load-more.js @@ -16,7 +16,7 @@ export default { methods: { async resetInit() { this.resetData(); - debugger; + // debugger; const page = await this.initData(); this.$nextTick(() => { this.setPages(page); -- Gitee From 8c0c737c12311c31d9df1d69fd1922897ca9193e Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Tue, 16 Apr 2019 10:31:34 +0800 Subject: [PATCH 076/391] =?UTF-8?q?fix[litemall-admin-api]:=20=E8=B7=9F?= =?UTF-8?q?=E7=BB=9F=E8=AE=B0=E5=BD=95=E7=AE=A1=E7=90=86=E5=91=98=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E4=BF=A1=E6=81=AF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../litemall/admin/web/AdminAuthController.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAuthController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAuthController.java index 1e2c1fe2..f1ce0541 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAuthController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAuthController.java @@ -12,6 +12,7 @@ import org.apache.shiro.subject.Subject; import org.linlinjava.litemall.admin.service.LogHelper; import org.linlinjava.litemall.admin.util.Permission; import org.linlinjava.litemall.admin.util.PermissionUtil; +import org.linlinjava.litemall.core.util.IpUtil; import org.linlinjava.litemall.core.util.JacksonUtil; import org.linlinjava.litemall.core.util.ResponseUtil; import org.linlinjava.litemall.db.domain.LitemallAdmin; @@ -26,6 +27,8 @@ import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import java.time.LocalDateTime; import java.util.*; import static org.linlinjava.litemall.admin.util.AdminResponseCode.ADMIN_INVALID_ACCOUNT; @@ -49,7 +52,7 @@ public class AdminAuthController { * { username : value, password : value } */ @PostMapping("/login") - public Object login(@RequestBody String body) { + public Object login(@RequestBody String body, HttpServletRequest request) { String username = JacksonUtil.parseString(body, "username"); String password = JacksonUtil.parseString(body, "password"); @@ -72,6 +75,12 @@ public class AdminAuthController { return ResponseUtil.fail(ADMIN_INVALID_ACCOUNT, "认证失败"); } + currentUser = SecurityUtils.getSubject(); + LitemallAdmin admin = (LitemallAdmin) currentUser.getPrincipal(); + admin.setLastLoginIp(IpUtil.getIpAddr(request)); + admin.setLastLoginTime(LocalDateTime.now()); + adminService.updateById(admin); + logHelper.logAuthSucceed("登录"); return ResponseUtil.ok(currentUser.getSession().getId()); } @@ -81,7 +90,7 @@ public class AdminAuthController { */ @RequiresAuthentication @PostMapping("/logout") - public Object login() { + public Object logout() { Subject currentUser = SecurityUtils.getSubject(); logHelper.logAuthSucceed("退出"); -- Gitee From 2568c8ba7d690386ab8081b46735f5486790cc7b Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Tue, 16 Apr 2019 10:32:02 +0800 Subject: [PATCH 077/391] doc --- doc/project.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/doc/project.md b/doc/project.md index 4f2f854e..3d23cc0a 100644 --- a/doc/project.md +++ b/doc/project.md @@ -42,13 +42,14 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实 ## 1.2 系统功能 -从业务功能上,目前由五个业务模块组成: +从业务功能上,目前由六个业务模块组成: * 会员业务模块 * 商场业务模块 * 商品业务模块 * 推广业务模块 * 系统业务模块 +* 配置业务模块 ### 1.2.1 小程序端功能 @@ -98,10 +99,10 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实 * 系统管理 * 管理员 * 对象存储 - * 权限管理(待定) + * 权限管理 * 定时任务(待定) - * 参数管理(待定) - * 系统日志(待定) + * 参数管理 + * 操作日志 * 统计管理 * 用户统计 * 订单统计 -- Gitee From 74396eb763fd2b3eb3ff3b08e213fe2f8b40e776 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Tue, 16 Apr 2019 17:20:29 +0800 Subject: [PATCH 078/391] doc --- doc/project.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/project.md b/doc/project.md index 3d23cc0a..fd4c92df 100644 --- a/doc/project.md +++ b/doc/project.md @@ -608,6 +608,10 @@ litemall: 当配置好信息以后,开发者可以litemall-core模块的`ExpressTest`测试类中设置快递公司编码和 真实测试快递单号,独立启动`ExpressTest`测试类查询物流信息。 +注意: +> 一部分快递公司(例如顺丰速运、申通快递等)的轨迹查询在开发环境下不支持, +> 具体支持情况或者使用限制请阅读[官方资料](http://www.kdniao.com/UserCenter/v2/UserHome.aspx) + #### 1.4.5.9 对象存储配置 对象存储,即存储和下载文件。 -- Gitee From b252cf2b5bf5b0a5f43aa4d71f064dc5bb107335 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Tue, 16 Apr 2019 17:40:43 +0800 Subject: [PATCH 079/391] =?UTF-8?q?fix[litemall-wx-api]:=20=E4=B8=8B?= =?UTF-8?q?=E5=8D=95=E6=97=B6=E5=AD=98=E5=9C=A8=E4=BC=A0=E9=80=92=E4=B8=8D?= =?UTF-8?q?=E5=90=88=E9=80=82=E7=9A=84=E4=BC=98=E6=83=A0=E5=88=B8=E7=9A=84?= =?UTF-8?q?=E6=83=85=E5=86=B5=EF=BC=8C=E6=AD=A4=E6=97=B6=E5=90=8E=E7=AB=AF?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E9=80=89=E6=8B=A9=E5=90=88=E9=80=82=E7=9A=84?= =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/linlinjava/litemall/wx/web/WxCartController.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCartController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCartController.java index c8d75425..7d01f3a8 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCartController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCartController.java @@ -466,11 +466,14 @@ public class WxCartController { } else { LitemallCoupon coupon = couponVerifyService.checkCoupon(userId, couponId, checkedGoodsPrice); - // 用户选择的优惠券有问题 + // 用户选择的优惠券有问题,则选择合适优惠券,否则使用用户选择的优惠券 if(coupon == null){ - return ResponseUtil.badArgumentValue(); + couponPrice = tmpCouponPrice; + couponId = tmpCouponId; + } + else { + couponPrice = coupon.getDiscount(); } - couponPrice = coupon.getDiscount(); } // 根据订单商品总价计算运费,满88则免运费,否则8元; -- Gitee From 35b161cb844f75364da363bcbb4778a4c09cda6b Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Wed, 17 Apr 2019 10:36:00 +0800 Subject: [PATCH 080/391] =?UTF-8?q?feat[litemall-wx,=20litemall-wx-api]:?= =?UTF-8?q?=20=E5=A2=9E=E5=8A=A0=E5=B8=AE=E5=8A=A9=E4=B8=AD=E5=BF=83?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../db/service/LitemallIssueService.java | 6 - .../litemall/wx/web/WxGoodsController.java | 2 +- .../litemall/wx/web/WxIssueController.java | 45 +++++++ litemall-wx/app.json | 3 +- litemall-wx/config/api.js | 1 + litemall-wx/pages/help/help.js | 120 ++++++++++++++++++ litemall-wx/pages/help/help.json | 3 + litemall-wx/pages/help/help.wxml | 20 +++ litemall-wx/pages/help/help.wxss | 70 ++++++++++ litemall-wx/pages/ucenter/index/index.js | 5 + litemall-wx/pages/ucenter/index/index.wxml | 20 ++- litemall-wx/project.config.json | 9 +- 12 files changed, 288 insertions(+), 16 deletions(-) create mode 100644 litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxIssueController.java create mode 100644 litemall-wx/pages/help/help.js create mode 100644 litemall-wx/pages/help/help.json create mode 100644 litemall-wx/pages/help/help.wxml create mode 100644 litemall-wx/pages/help/help.wxss diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallIssueService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallIssueService.java index 6fc30155..440e06f3 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallIssueService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallIssueService.java @@ -16,12 +16,6 @@ public class LitemallIssueService { @Resource private LitemallIssueMapper issueMapper; - public List query() { - LitemallIssueExample example = new LitemallIssueExample(); - example.or().andDeletedEqualTo(false); - return issueMapper.selectByExample(example); - } - public void deleteById(Integer id) { issueMapper.logicalDeleteByPrimaryKey(id); } diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGoodsController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGoodsController.java index a89af310..a595c2e3 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGoodsController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGoodsController.java @@ -105,7 +105,7 @@ public class WxGoodsController { Callable productListCallable = () -> productService.queryByGid(id); // 商品问题,这里是一些通用问题 - Callable issueCallable = () -> goodsIssueService.query(); + Callable issueCallable = () -> goodsIssueService.querySelective("", 1, 4, "", ""); // 商品品牌商 Callable brandCallable = ()->{ diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxIssueController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxIssueController.java new file mode 100644 index 00000000..18f579ca --- /dev/null +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxIssueController.java @@ -0,0 +1,45 @@ +package org.linlinjava.litemall.wx.web; + +import com.github.pagehelper.PageInfo; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.linlinjava.litemall.core.util.ResponseUtil; +import org.linlinjava.litemall.core.validator.Order; +import org.linlinjava.litemall.core.validator.Sort; +import org.linlinjava.litemall.db.domain.LitemallIssue; +import org.linlinjava.litemall.db.service.LitemallIssueService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/wx/issue") +@Validated +public class WxIssueController { + private final Log logger = LogFactory.getLog(WxIssueController.class); + + @Autowired + private LitemallIssueService issueService; + + /** + * 帮助中心 + */ + @RequestMapping("/list") + public Object list(String question, + @RequestParam(defaultValue = "1") Integer page, + @RequestParam(defaultValue = "10") Integer size, + @Sort @RequestParam(defaultValue = "add_time") String sort, + @Order @RequestParam(defaultValue = "desc") String order) { + List issueList = issueService.querySelective(question, page, size, sort, order); + long total = PageInfo.of(issueList).getTotal(); + Map data = new HashMap(); + data.put("data", issueList); + data.put("count", total); + return ResponseUtil.ok(data); + } + +} diff --git a/litemall-wx/app.json b/litemall-wx/app.json index ca537f44..c014aab1 100644 --- a/litemall-wx/app.json +++ b/litemall-wx/app.json @@ -36,7 +36,8 @@ "pages/groupon/myGroupon/myGroupon", "pages/groupon/grouponDetail/grouponDetail", "pages/groupon/grouponList/grouponList", - "pages/coupon/coupon" + "pages/coupon/coupon", + "pages/help/help" ], "window": { "navigationBarBackgroundColor": "#FFFFFF", diff --git a/litemall-wx/config/api.js b/litemall-wx/config/api.js index 5cb86d6a..6d4700ba 100644 --- a/litemall-wx/config/api.js +++ b/litemall-wx/config/api.js @@ -96,5 +96,6 @@ module.exports = { StorageUpload: WxApiRoot + 'storage/upload', //图片上传, UserIndex: WxApiRoot + 'user/index', //个人页面用户相关信息 + IssueList: WxApiRoot + 'issue/list', //帮助信息 }; \ No newline at end of file diff --git a/litemall-wx/pages/help/help.js b/litemall-wx/pages/help/help.js new file mode 100644 index 00000000..ed8f16ce --- /dev/null +++ b/litemall-wx/pages/help/help.js @@ -0,0 +1,120 @@ +var util = require('../../utils/util.js'); +var api = require('../../config/api.js'); +var app = getApp() + +Page({ + + /** + * 页面的初始数据 + */ + data: { + issueList: [], + page: 1, + size: 10, + count: 0, + showPage: false + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.getIssue(); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + nextPage: function (event) { + var that = this; + if (this.data.page > that.data.count / that.data.size) { + return true; + } + + that.setData({ + page: that.data.page + 1 + }); + + this.getIssue(); + + }, + getIssue: function () { + + let that = this; + that.setData({ + showPage: false, + issueList: [] + }); + + util.request(api.IssueList, { + page: that.data.page, + size: that.data.size + }).then(function (res) { + if (res.errno === 0) { + + that.setData({ + issueList: res.data.data, + showPage: true, + count: res.data.count + }); + } + }); + + }, + prevPage: function (event) { + if (this.data.page <= 1) { + return false; + } + + var that = this; + that.setData({ + page: that.data.page - 1 + }); + this.getIssue(); + } +}) \ No newline at end of file diff --git a/litemall-wx/pages/help/help.json b/litemall-wx/pages/help/help.json new file mode 100644 index 00000000..b546013f --- /dev/null +++ b/litemall-wx/pages/help/help.json @@ -0,0 +1,3 @@ +{ + "navigationBarTitleText": "帮助中心" +} \ No newline at end of file diff --git a/litemall-wx/pages/help/help.wxml b/litemall-wx/pages/help/help.wxml new file mode 100644 index 00000000..a2c604c5 --- /dev/null +++ b/litemall-wx/pages/help/help.wxml @@ -0,0 +1,20 @@ + + + + + + + {{item.question}} + + + {{item.answer}} + + + + + + 上一页 + 下一页 + + + \ No newline at end of file diff --git a/litemall-wx/pages/help/help.wxss b/litemall-wx/pages/help/help.wxss new file mode 100644 index 00000000..d49fc3e7 --- /dev/null +++ b/litemall-wx/pages/help/help.wxss @@ -0,0 +1,70 @@ +.common-problem { + width: 750rpx; + height: auto; + overflow: hidden; + padding: 0rpx 30rpx; + background: #fff; +} + +.item { + height: auto; + overflow: hidden; + padding-bottom: 25rpx; +} + +.question-box .spot { + float: left; + display: block; + height: 10rpx; + width: 10rpx; + background: #b4282d; + border-radius: 50%; + margin-top: 11rpx; +} + +.question-box .question { + float: left; + line-height: 30rpx; + padding-left: 8rpx; + display: block; + font-size: 26rpx; + padding-bottom: 15rpx; + color: #303030; + width: 680rpx; + +} + +.answer { + line-height: 36rpx; + padding-left: 16rpx; + font-size: 26rpx; + color: #787878; + display: block; + +} + + +.page{ + width: 750rpx; + height: 108rpx; + background: #fff; + margin-bottom: 20rpx; +} + +.page view{ + height: 108rpx; + width: 50%; + float: left; + font-size: 29rpx; + color: #333; + text-align: center; + line-height: 108rpx; +} + +.page .prev{ + border-right: 1px solid #D9D9D9; +} + +.page .disabled{ + color: #ccc; +} \ No newline at end of file diff --git a/litemall-wx/pages/ucenter/index/index.js b/litemall-wx/pages/ucenter/index/index.js index cd8f8111..8cbb4051 100644 --- a/litemall-wx/pages/ucenter/index/index.js +++ b/litemall-wx/pages/ucenter/index/index.js @@ -196,6 +196,11 @@ Page({ url: '/pages/about/about' }); }, + goHelp: function () { + wx.navigateTo({ + url: '/pages/help/help' + }); + }, exitLogin: function() { wx.showModal({ title: '', diff --git a/litemall-wx/pages/ucenter/index/index.wxml b/litemall-wx/pages/ucenter/index/index.wxml index 4fd9bdf5..f686bd86 100644 --- a/litemall-wx/pages/ucenter/index/index.wxml +++ b/litemall-wx/pages/ucenter/index/index.wxml @@ -35,6 +35,10 @@ 待评价
+ + + 售后 +
@@ -61,9 +65,10 @@ 我的拼团
- - - 售后 + + + + 地址管理 @@ -72,14 +77,15 @@ 必备工具 - - - 地址管理 - + + + + 帮助中心 + 意见反馈 diff --git a/litemall-wx/project.config.json b/litemall-wx/project.config.json index 368123e4..053d33e7 100644 --- a/litemall-wx/project.config.json +++ b/litemall-wx/project.config.json @@ -258,8 +258,15 @@ "name": "优惠券列表", "pathName": "pages/coupon/coupon", "query": "" + }, + { + "id": -1, + "name": "帮助中心", + "pathName": "pages/help/help", + "query": "", + "scene": null } ] } } -} +} \ No newline at end of file -- Gitee From 6b187d9beb322d4b9f15e52e05595e5bcc758e65 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Wed, 17 Apr 2019 12:13:09 +0800 Subject: [PATCH 081/391] =?UTF-8?q?chore[litemall-admin-api]:=20=E5=85=B3?= =?UTF-8?q?=E9=94=AE=E5=AD=97=E7=9A=84url=E5=AD=97=E6=AE=B5=E6=98=AF?= =?UTF-8?q?=E5=8F=AF=E9=80=89=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../linlinjava/litemall/admin/web/AdminKeywordController.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminKeywordController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminKeywordController.java index 2aaeef4f..fd95cf23 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminKeywordController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminKeywordController.java @@ -51,10 +51,6 @@ public class AdminKeywordController { if (StringUtils.isEmpty(keyword)) { return ResponseUtil.badArgument(); } - String url = keywords.getUrl(); - if (StringUtils.isEmpty(url)) { - return ResponseUtil.badArgument(); - } return null; } -- Gitee From 6db1c80d42da2301b24350f2b59ab53295692413 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Wed, 17 Apr 2019 14:17:51 +0800 Subject: [PATCH 082/391] =?UTF-8?q?refactor[litemall-admin-api,=20litemall?= =?UTF-8?q?-wx-api]:=20=E8=A7=84=E8=8C=83VO=E5=92=8CDTO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../litemall/admin/dao/Product.java | 42 ------------------- .../admin/{dao => dto}/GoodsAllinone.java | 3 +- .../admin/service/AdminGoodsService.java | 5 +-- .../litemall/admin/util/PermissionUtil.java | 1 + .../litemall/admin/{util => vo}/CatVo.java | 2 +- .../vo/{CategoryVO.java => CategoryVo.java} | 8 ++-- .../litemall/admin/{util => vo}/PermVo.java | 2 +- .../admin/vo/{RegionVO.java => RegionVo.java} | 8 ++-- .../litemall/admin/{util => vo}/StatVo.java | 2 +- .../admin/web/AdminCategoryController.java | 35 +++++++--------- .../admin/web/AdminGoodsController.java | 2 +- .../admin/web/AdminRegionController.java | 24 ++++------- .../admin/web/AdminRoleController.java | 5 +-- .../admin/web/AdminStatController.java | 2 +- .../litemall/admin/PermissionTest.java | 2 +- .../litemall/wx/{dao => dto}/CaptchaItem.java | 2 +- .../litemall/wx/{dao => dto}/UserInfo.java | 2 +- .../litemall/wx/{dao => dto}/UserToken.java | 2 +- .../litemall/wx/{dao => dto}/WxLoginInfo.java | 2 +- .../wx/service/CaptchaCodeManager.java | 2 +- .../litemall/wx/service/UserInfoService.java | 2 +- .../litemall/wx/service/UserTokenManager.java | 2 +- .../litemall/wx/{dao => vo}/CouponVo.java | 17 ++++---- .../litemall/wx/web/WxAuthController.java | 6 +-- .../litemall/wx/web/WxCommentController.java | 2 +- .../litemall/wx/web/WxCouponController.java | 2 +- 26 files changed, 64 insertions(+), 120 deletions(-) delete mode 100644 litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/dao/Product.java rename litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/{dao => dto}/GoodsAllinone.java (92%) rename litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/{util => vo}/CatVo.java (92%) rename litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/{CategoryVO.java => CategoryVo.java} (88%) rename litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/{util => vo}/PermVo.java (94%) rename litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/{RegionVO.java => RegionVo.java} (82%) rename litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/{util => vo}/StatVo.java (92%) rename litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/{dao => dto}/CaptchaItem.java (94%) rename litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/{dao => dto}/UserInfo.java (96%) rename litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/{dao => dto}/UserToken.java (96%) rename litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/{dao => dto}/WxLoginInfo.java (90%) rename litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/{dao => vo}/CouponVo.java (97%) diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/dao/Product.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/dao/Product.java deleted file mode 100644 index b2636a10..00000000 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/dao/Product.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.linlinjava.litemall.admin.dao; - -import java.math.BigDecimal; - -public class Product { - String[] specifications; - BigDecimal price; - Integer number; - String url; - - public String[] getSpecifications() { - return specifications; - } - - public void setSpecifications(String[] specifications) { - this.specifications = specifications; - } - - public BigDecimal getPrice() { - return price; - } - - public void setPrice(BigDecimal price) { - this.price = price; - } - - public Integer getNumber() { - return number; - } - - public void setNumber(Integer number) { - this.number = number; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } -} diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/dao/GoodsAllinone.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/dto/GoodsAllinone.java similarity index 92% rename from litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/dao/GoodsAllinone.java rename to litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/dto/GoodsAllinone.java index 84c037fa..5bd93c50 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/dao/GoodsAllinone.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/dto/GoodsAllinone.java @@ -1,4 +1,4 @@ -package org.linlinjava.litemall.admin.dao; +package org.linlinjava.litemall.admin.dto; import org.linlinjava.litemall.db.domain.LitemallGoods; import org.linlinjava.litemall.db.domain.LitemallGoodsAttribute; @@ -9,7 +9,6 @@ public class GoodsAllinone { LitemallGoods goods; LitemallGoodsSpecification[] specifications; LitemallGoodsAttribute[] attributes; - // 这里采用 Product 再转换到 LitemallGoodsProduct LitemallGoodsProduct[] products; public LitemallGoods getGoods() { diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminGoodsService.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminGoodsService.java index df98de11..9ac2fc05 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminGoodsService.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminGoodsService.java @@ -3,8 +3,8 @@ package org.linlinjava.litemall.admin.service; import com.github.pagehelper.PageInfo; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.linlinjava.litemall.admin.dao.GoodsAllinone; -import org.linlinjava.litemall.admin.util.CatVo; +import org.linlinjava.litemall.admin.dto.GoodsAllinone; +import org.linlinjava.litemall.admin.vo.CatVo; import org.linlinjava.litemall.core.qcode.QCodeService; import org.linlinjava.litemall.core.util.ResponseUtil; import org.linlinjava.litemall.db.domain.*; @@ -21,7 +21,6 @@ import java.util.List; import java.util.Map; import static org.linlinjava.litemall.admin.util.AdminResponseCode.GOODS_NAME_EXIST; -import static org.linlinjava.litemall.admin.util.AdminResponseCode.GOODS_UPDATE_NOT_ALLOWED; @Service public class AdminGoodsService { diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/PermissionUtil.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/PermissionUtil.java index 3a095b9d..4c9991ac 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/PermissionUtil.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/PermissionUtil.java @@ -4,6 +4,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.reflect.MethodUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.linlinjava.litemall.admin.annotation.RequiresPermissionsDesc; +import org.linlinjava.litemall.admin.vo.PermVo; import org.springframework.context.ApplicationContext; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.stereotype.Controller; diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/CatVo.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/CatVo.java similarity index 92% rename from litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/CatVo.java rename to litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/CatVo.java index 033bb944..05a04df2 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/CatVo.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/CatVo.java @@ -1,4 +1,4 @@ -package org.linlinjava.litemall.admin.util; +package org.linlinjava.litemall.admin.vo; import java.util.List; diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/CategoryVO.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/CategoryVo.java similarity index 88% rename from litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/CategoryVO.java rename to litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/CategoryVo.java index da3a1b87..27fe89ef 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/CategoryVO.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/CategoryVo.java @@ -2,7 +2,7 @@ package org.linlinjava.litemall.admin.vo; import java.util.List; -public class CategoryVO { +public class CategoryVo { private Integer id; private String name; private String keywords; @@ -10,13 +10,13 @@ public class CategoryVO { private String iconUrl; private String picUrl; private String level; - private List children; + private List children; - public List getChildren() { + public List getChildren() { return children; } - public void setChildren(List children) { + public void setChildren(List children) { this.children = children; } diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/PermVo.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/PermVo.java similarity index 94% rename from litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/PermVo.java rename to litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/PermVo.java index 83c6055a..6bd3958a 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/PermVo.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/PermVo.java @@ -1,4 +1,4 @@ -package org.linlinjava.litemall.admin.util; +package org.linlinjava.litemall.admin.vo; import java.util.List; diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/RegionVO.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/RegionVo.java similarity index 82% rename from litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/RegionVO.java rename to litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/RegionVo.java index 56e46f4b..1ca43e2f 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/RegionVO.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/RegionVo.java @@ -2,13 +2,13 @@ package org.linlinjava.litemall.admin.vo; import java.util.List; -public class RegionVO { +public class RegionVo { private Integer id; private String name; private Byte type; private Integer code; - private List children; + private List children; public Integer getId() { return id; @@ -18,7 +18,7 @@ public class RegionVO { this.id = id; } - public List getChildren() { + public List getChildren() { return children; } @@ -46,7 +46,7 @@ public class RegionVO { this.code = code; } - public void setChildren(List children) { + public void setChildren(List children) { this.children = children; } } diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/StatVo.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/StatVo.java similarity index 92% rename from litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/StatVo.java rename to litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/StatVo.java index 04005d25..dcd9c76b 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/StatVo.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/vo/StatVo.java @@ -1,4 +1,4 @@ -package org.linlinjava.litemall.admin.util; +package org.linlinjava.litemall.admin.vo; import java.util.ArrayList; import java.util.Arrays; diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminCategoryController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminCategoryController.java index 347f492c..9bc40264 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminCategoryController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminCategoryController.java @@ -1,14 +1,11 @@ package org.linlinjava.litemall.admin.web; -import com.github.pagehelper.PageInfo; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.linlinjava.litemall.admin.annotation.RequiresPermissionsDesc; -import org.linlinjava.litemall.admin.vo.CategoryVO; +import org.linlinjava.litemall.admin.vo.CategoryVo; import org.linlinjava.litemall.core.util.ResponseUtil; -import org.linlinjava.litemall.core.validator.Order; -import org.linlinjava.litemall.core.validator.Sort; import org.linlinjava.litemall.db.domain.LitemallCategory; import org.linlinjava.litemall.db.service.LitemallCategoryService; import org.springframework.beans.factory.annotation.Autowired; @@ -35,11 +32,11 @@ public class AdminCategoryController { @RequiresPermissionsDesc(menu={"商场管理" , "类目管理"}, button="查询") @GetMapping("/list") public Object list() { - List categoryVOList = new ArrayList<>(); + List categoryVoList = new ArrayList<>(); List categoryList = categoryService.queryByPid(0); for(LitemallCategory category : categoryList){ - CategoryVO categoryVO = new CategoryVO(); + CategoryVo categoryVO = new CategoryVo(); categoryVO.setId(category.getId()); categoryVO.setDesc(category.getDesc()); categoryVO.setIconUrl(category.getIconUrl()); @@ -48,26 +45,26 @@ public class AdminCategoryController { categoryVO.setName(category.getName()); categoryVO.setLevel(category.getLevel()); - List children = new ArrayList<>(); + List children = new ArrayList<>(); List subCategoryList = categoryService.queryByPid(category.getId()); for(LitemallCategory subCategory : subCategoryList){ - CategoryVO subCategoryVO = new CategoryVO(); - subCategoryVO.setId(subCategory.getId()); - subCategoryVO.setDesc(subCategory.getDesc()); - subCategoryVO.setIconUrl(subCategory.getIconUrl()); - subCategoryVO.setPicUrl(subCategory.getPicUrl()); - subCategoryVO.setKeywords(subCategory.getKeywords()); - subCategoryVO.setName(subCategory.getName()); - subCategoryVO.setLevel(subCategory.getLevel()); - - children.add(subCategoryVO); + CategoryVo subCategoryVo = new CategoryVo(); + subCategoryVo.setId(subCategory.getId()); + subCategoryVo.setDesc(subCategory.getDesc()); + subCategoryVo.setIconUrl(subCategory.getIconUrl()); + subCategoryVo.setPicUrl(subCategory.getPicUrl()); + subCategoryVo.setKeywords(subCategory.getKeywords()); + subCategoryVo.setName(subCategory.getName()); + subCategoryVo.setLevel(subCategory.getLevel()); + + children.add(subCategoryVo); } categoryVO.setChildren(children); - categoryVOList.add(categoryVO); + categoryVoList.add(categoryVO); } - return ResponseUtil.ok(categoryVOList); + return ResponseUtil.ok(categoryVoList); } private Object validate(LitemallCategory category) { diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGoodsController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGoodsController.java index 120f5ec1..edf2792a 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGoodsController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGoodsController.java @@ -4,7 +4,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.linlinjava.litemall.admin.annotation.RequiresPermissionsDesc; -import org.linlinjava.litemall.admin.dao.GoodsAllinone; +import org.linlinjava.litemall.admin.dto.GoodsAllinone; import org.linlinjava.litemall.admin.service.AdminGoodsService; import org.linlinjava.litemall.core.validator.Order; import org.linlinjava.litemall.core.validator.Sort; diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminRegionController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminRegionController.java index bfc82727..133b7166 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminRegionController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminRegionController.java @@ -1,26 +1,20 @@ package org.linlinjava.litemall.admin.web; -import com.github.pagehelper.PageInfo; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.linlinjava.litemall.admin.vo.RegionVO; +import org.linlinjava.litemall.admin.vo.RegionVo; import org.linlinjava.litemall.core.util.ResponseUtil; -import org.linlinjava.litemall.core.validator.Order; -import org.linlinjava.litemall.core.validator.Sort; import org.linlinjava.litemall.db.domain.LitemallRegion; import org.linlinjava.litemall.db.service.LitemallRegionService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.validation.constraints.NotNull; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; @RestController @RequestMapping("/admin/region") @@ -39,29 +33,29 @@ public class AdminRegionController { @GetMapping("/list") public Object list() { - List regionVOList = new ArrayList<>(); + List regionVoList = new ArrayList<>(); List provinceList = regionService.queryByPid(0); for(LitemallRegion province : provinceList){ - RegionVO provinceVO = new RegionVO(); + RegionVo provinceVO = new RegionVo(); provinceVO.setId(province.getId()); provinceVO.setName(province.getName()); provinceVO.setCode(province.getCode()); provinceVO.setType(province.getType()); List cityList = regionService.queryByPid(province.getId()); - List cityVOList = new ArrayList<>(); + List cityVOList = new ArrayList<>(); for(LitemallRegion city : cityList){ - RegionVO cityVO = new RegionVO(); + RegionVo cityVO = new RegionVo(); cityVO.setId(city.getId()); cityVO.setName(city.getName()); cityVO.setCode(city.getCode()); cityVO.setType(city.getType()); List areaList = regionService.queryByPid(city.getId()); - List areaVOList = new ArrayList<>(); + List areaVOList = new ArrayList<>(); for(LitemallRegion area : areaList){ - RegionVO areaVO = new RegionVO(); + RegionVo areaVO = new RegionVo(); areaVO.setId(area.getId()); areaVO.setName(area.getName()); areaVO.setCode(area.getCode()); @@ -73,9 +67,9 @@ public class AdminRegionController { cityVOList.add(cityVO); } provinceVO.setChildren(cityVOList); - regionVOList.add(provinceVO); + regionVoList.add(provinceVO); } - return ResponseUtil.ok(regionVOList); + return ResponseUtil.ok(regionVoList); } } diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminRoleController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminRoleController.java index 44bb645e..6d3df828 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminRoleController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminRoleController.java @@ -3,12 +3,10 @@ package org.linlinjava.litemall.admin.web; import com.github.pagehelper.PageInfo; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.apache.shiro.subject.Subject; import org.linlinjava.litemall.admin.annotation.RequiresPermissionsDesc; import org.linlinjava.litemall.admin.util.AdminResponseCode; -import org.linlinjava.litemall.admin.util.PermVo; +import org.linlinjava.litemall.admin.vo.PermVo; import org.linlinjava.litemall.admin.util.Permission; import org.linlinjava.litemall.admin.util.PermissionUtil; import org.linlinjava.litemall.core.util.JacksonUtil; @@ -16,7 +14,6 @@ import org.linlinjava.litemall.core.util.ResponseUtil; import org.linlinjava.litemall.core.validator.Order; import org.linlinjava.litemall.core.validator.Sort; import org.linlinjava.litemall.db.domain.LitemallAdmin; -import org.linlinjava.litemall.db.domain.LitemallBrand; import org.linlinjava.litemall.db.domain.LitemallPermission; import org.linlinjava.litemall.db.domain.LitemallRole; import org.linlinjava.litemall.db.service.LitemallAdminService; diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminStatController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminStatController.java index a0832005..90b4a05c 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminStatController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminStatController.java @@ -4,7 +4,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.linlinjava.litemall.admin.annotation.RequiresPermissionsDesc; -import org.linlinjava.litemall.admin.util.StatVo; +import org.linlinjava.litemall.admin.vo.StatVo; import org.linlinjava.litemall.core.util.ResponseUtil; import org.linlinjava.litemall.db.service.StatService; import org.springframework.beans.factory.annotation.Autowired; diff --git a/litemall-admin-api/src/test/java/org/linlinjava/litemall/admin/PermissionTest.java b/litemall-admin-api/src/test/java/org/linlinjava/litemall/admin/PermissionTest.java index 2f4bc8ec..0906aa2b 100644 --- a/litemall-admin-api/src/test/java/org/linlinjava/litemall/admin/PermissionTest.java +++ b/litemall-admin-api/src/test/java/org/linlinjava/litemall/admin/PermissionTest.java @@ -2,7 +2,7 @@ package org.linlinjava.litemall.admin; import org.junit.Test; import org.junit.runner.RunWith; -import org.linlinjava.litemall.admin.util.PermVo; +import org.linlinjava.litemall.admin.vo.PermVo; import org.linlinjava.litemall.admin.util.Permission; import org.linlinjava.litemall.admin.util.PermissionUtil; import org.springframework.beans.factory.annotation.Autowired; diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dao/CaptchaItem.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dto/CaptchaItem.java similarity index 94% rename from litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dao/CaptchaItem.java rename to litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dto/CaptchaItem.java index 59848e4a..765c9e8e 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dao/CaptchaItem.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dto/CaptchaItem.java @@ -1,4 +1,4 @@ -package org.linlinjava.litemall.wx.dao; +package org.linlinjava.litemall.wx.dto; import java.time.LocalDateTime; diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dao/UserInfo.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dto/UserInfo.java similarity index 96% rename from litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dao/UserInfo.java rename to litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dto/UserInfo.java index 70f168f8..6b934999 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dao/UserInfo.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dto/UserInfo.java @@ -1,4 +1,4 @@ -package org.linlinjava.litemall.wx.dao; +package org.linlinjava.litemall.wx.dto; public class UserInfo { private String nickName; diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dao/UserToken.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dto/UserToken.java similarity index 96% rename from litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dao/UserToken.java rename to litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dto/UserToken.java index e890a45c..329473b4 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dao/UserToken.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dto/UserToken.java @@ -1,4 +1,4 @@ -package org.linlinjava.litemall.wx.dao; +package org.linlinjava.litemall.wx.dto; import java.time.LocalDateTime; diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dao/WxLoginInfo.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dto/WxLoginInfo.java similarity index 90% rename from litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dao/WxLoginInfo.java rename to litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dto/WxLoginInfo.java index 89f072ed..bfa763cf 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dao/WxLoginInfo.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dto/WxLoginInfo.java @@ -1,4 +1,4 @@ -package org.linlinjava.litemall.wx.dao; +package org.linlinjava.litemall.wx.dto; public class WxLoginInfo { private String code; diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/CaptchaCodeManager.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/CaptchaCodeManager.java index 4008c684..8b9ab573 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/CaptchaCodeManager.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/CaptchaCodeManager.java @@ -1,6 +1,6 @@ package org.linlinjava.litemall.wx.service; -import org.linlinjava.litemall.wx.dao.CaptchaItem; +import org.linlinjava.litemall.wx.dto.CaptchaItem; import java.time.LocalDateTime; import java.util.HashMap; diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/UserInfoService.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/UserInfoService.java index a12c6253..a8182173 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/UserInfoService.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/UserInfoService.java @@ -2,7 +2,7 @@ package org.linlinjava.litemall.wx.service; import org.linlinjava.litemall.db.domain.LitemallUser; import org.linlinjava.litemall.db.service.LitemallUserService; -import org.linlinjava.litemall.wx.dao.UserInfo; +import org.linlinjava.litemall.wx.dto.UserInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.Assert; diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/UserTokenManager.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/UserTokenManager.java index 67717b68..c87147c4 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/UserTokenManager.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/UserTokenManager.java @@ -1,7 +1,7 @@ package org.linlinjava.litemall.wx.service; import org.linlinjava.litemall.core.util.CharUtil; -import org.linlinjava.litemall.wx.dao.UserToken; +import org.linlinjava.litemall.wx.dto.UserToken; import java.time.LocalDateTime; import java.util.HashMap; diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dao/CouponVo.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/vo/CouponVo.java similarity index 97% rename from litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dao/CouponVo.java rename to litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/vo/CouponVo.java index 5b8150b0..fdbf5984 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/dao/CouponVo.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/vo/CouponVo.java @@ -1,9 +1,16 @@ -package org.linlinjava.litemall.wx.dao; +package org.linlinjava.litemall.wx.vo; import java.time.LocalDateTime; public class CouponVo { private Integer id; + private String name; + private String desc; + private String tag; + private String min; + private String discount; + private LocalDateTime startTime; + private LocalDateTime endTime; public Integer getId() { return id; @@ -13,14 +20,6 @@ public class CouponVo { this.id = id; } - private String name; - private String desc; - private String tag; - private String min; - private String discount; - private LocalDateTime startTime; - private LocalDateTime endTime; - public String getName() { return name; } diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAuthController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAuthController.java index 40d0c259..3e4a192f 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAuthController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAuthController.java @@ -16,9 +16,9 @@ import org.linlinjava.litemall.db.domain.LitemallUser; import org.linlinjava.litemall.db.service.CouponAssignService; import org.linlinjava.litemall.db.service.LitemallUserService; import org.linlinjava.litemall.wx.annotation.LoginUser; -import org.linlinjava.litemall.wx.dao.UserInfo; -import org.linlinjava.litemall.wx.dao.UserToken; -import org.linlinjava.litemall.wx.dao.WxLoginInfo; +import org.linlinjava.litemall.wx.dto.UserInfo; +import org.linlinjava.litemall.wx.dto.UserToken; +import org.linlinjava.litemall.wx.dto.WxLoginInfo; import org.linlinjava.litemall.wx.service.CaptchaCodeManager; import org.linlinjava.litemall.wx.service.UserTokenManager; import org.linlinjava.litemall.core.util.IpUtil; diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCommentController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCommentController.java index 953844a6..b371e469 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCommentController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCommentController.java @@ -11,7 +11,7 @@ import org.linlinjava.litemall.db.service.LitemallGoodsService; import org.linlinjava.litemall.db.service.LitemallTopicService; import org.linlinjava.litemall.db.service.LitemallUserService; import org.linlinjava.litemall.wx.annotation.LoginUser; -import org.linlinjava.litemall.wx.dao.UserInfo; +import org.linlinjava.litemall.wx.dto.UserInfo; import org.linlinjava.litemall.wx.service.UserInfoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCouponController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCouponController.java index 03641a5e..1963e904 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCouponController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCouponController.java @@ -13,7 +13,7 @@ import org.linlinjava.litemall.db.domain.LitemallGrouponRules; import org.linlinjava.litemall.db.service.*; import org.linlinjava.litemall.db.util.CouponConstant; import org.linlinjava.litemall.wx.annotation.LoginUser; -import org.linlinjava.litemall.wx.dao.CouponVo; +import org.linlinjava.litemall.wx.vo.CouponVo; import org.linlinjava.litemall.wx.util.WxResponseCode; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; -- Gitee From ca5d9984b1d4394ccc0a718c6a406441405452f3 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Wed, 17 Apr 2019 15:04:08 +0800 Subject: [PATCH 083/391] =?UTF-8?q?refactor:=20=E5=88=86=E9=A1=B5=E7=9A=84?= =?UTF-8?q?=E4=B8=AD=E6=AF=8F=E9=A1=B5=E7=9A=84=E6=95=B0=E9=87=8F=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E9=87=87=E7=94=A8limit=EF=BC=8C=E8=80=8C=E4=B8=8D?= =?UTF-8?q?=E6=98=AFsize?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/platform.md | 4 ++-- .../litemall/db/service/LitemallIssueService.java | 4 ++-- .../litemall/db/service/LitemallKeywordService.java | 4 ++-- .../litemall/db/service/LitemallOrderService.java | 8 ++++---- .../litemall/db/service/LitemallRoleService.java | 4 ++-- .../litemall/wx/service/WxOrderService.java | 8 ++++---- .../litemall/wx/web/WxBrandController.java | 8 ++++---- .../litemall/wx/web/WxCollectController.java | 8 ++++---- .../litemall/wx/web/WxCommentController.java | 6 +++--- .../litemall/wx/web/WxCouponController.java | 12 ++++++------ .../litemall/wx/web/WxFootprintController.java | 8 ++++---- .../litemall/wx/web/WxGoodsController.java | 6 +++--- .../litemall/wx/web/WxGrouponController.java | 6 +++--- .../litemall/wx/web/WxOrderController.java | 6 +++--- .../litemall/wx/web/WxSearchController.java | 4 ++-- .../litemall/wx/web/WxTopicController.java | 6 +++--- litemall-wx/pages/comment/comment.js | 2 +- litemall-wx/pages/coupon/coupon.js | 6 +++--- litemall-wx/pages/coupon/coupon.wxml | 2 +- litemall-wx/pages/newGoods/newGoods.js | 2 +- litemall-wx/pages/search/search.js | 4 ++-- litemall-wx/pages/topic/topic.js | 6 +++--- renard-wx/pages/category/category.js | 4 ++-- renard-wx/pages/hotGoods/hotGoods.js | 4 ++-- 24 files changed, 66 insertions(+), 66 deletions(-) diff --git a/doc/platform.md b/doc/platform.md index dc1adbde..f27e72be 100644 --- a/doc/platform.md +++ b/doc/platform.md @@ -1090,7 +1090,7 @@ public interface Storage { public class WxTopicController { @GetMapping("list") public Object list(@RequestParam(defaultValue = "1") Integer page, - @RequestParam(defaultValue = "10") Integer size, + @RequestParam(defaultValue = "10") Integer limit, @Sort @RequestParam(defaultValue = "add_time") String sort, @Order @RequestParam(defaultValue = "desc") String order) { ... @@ -1144,7 +1144,7 @@ public interface Storage { public class WxTopicController { @GetMapping("list") public Object list(@RequestParam(defaultValue = "1") Integer page, - @RequestParam(defaultValue = "10") Integer size, + @RequestParam(defaultValue = "10") Integer limit, @Sort @RequestParam(defaultValue = "add_time") String sort, @Order @RequestParam(defaultValue = "desc") String order) { ... diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallIssueService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallIssueService.java index 440e06f3..10cd6856 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallIssueService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallIssueService.java @@ -26,7 +26,7 @@ public class LitemallIssueService { issueMapper.insertSelective(issue); } - public List querySelective(String question, Integer page, Integer size, String sort, String order) { + public List querySelective(String question, Integer page, Integer limit, String sort, String order) { LitemallIssueExample example = new LitemallIssueExample(); LitemallIssueExample.Criteria criteria = example.createCriteria(); @@ -39,7 +39,7 @@ public class LitemallIssueService { example.setOrderByClause(sort + " " + order); } - PageHelper.startPage(page, size); + PageHelper.startPage(page, limit); return issueMapper.selectByExample(example); } diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallKeywordService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallKeywordService.java index 696e3d40..d91437dd 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallKeywordService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallKeywordService.java @@ -28,11 +28,11 @@ public class LitemallKeywordService { return keywordsMapper.selectByExample(example); } - public List queryByKeyword(String keyword, Integer page, Integer size) { + public List queryByKeyword(String keyword, Integer page, Integer limit) { LitemallKeywordExample example = new LitemallKeywordExample(); example.setDistinct(true); example.or().andKeywordLike("%" + keyword + "%").andDeletedEqualTo(false); - PageHelper.startPage(page, size); + PageHelper.startPage(page, limit); return keywordsMapper.selectByExampleSelective(example, LitemallKeyword.Column.keyword); } diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallOrderService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallOrderService.java index 466de49f..44059941 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallOrderService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallOrderService.java @@ -69,7 +69,7 @@ public class LitemallOrderService { return orderSn; } - public List queryByOrderStatus(Integer userId, List orderStatus, Integer page, Integer size) { + public List queryByOrderStatus(Integer userId, List orderStatus, Integer page, Integer limit) { LitemallOrderExample example = new LitemallOrderExample(); example.setOrderByClause(LitemallOrder.Column.addTime.desc()); LitemallOrderExample.Criteria criteria = example.or(); @@ -78,11 +78,11 @@ public class LitemallOrderService { criteria.andOrderStatusIn(orderStatus); } criteria.andDeletedEqualTo(false); - PageHelper.startPage(page, size); + PageHelper.startPage(page, limit); return litemallOrderMapper.selectByExample(example); } - public List querySelective(Integer userId, String orderSn, List orderStatusArray, Integer page, Integer size, String sort, String order) { + public List querySelective(Integer userId, String orderSn, List orderStatusArray, Integer page, Integer limit, String sort, String order) { LitemallOrderExample example = new LitemallOrderExample(); LitemallOrderExample.Criteria criteria = example.createCriteria(); @@ -101,7 +101,7 @@ public class LitemallOrderService { example.setOrderByClause(sort + " " + order); } - PageHelper.startPage(page, size); + PageHelper.startPage(page, limit); return litemallOrderMapper.selectByExample(example); } diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallRoleService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallRoleService.java index ede69ade..4eebfefc 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallRoleService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallRoleService.java @@ -37,7 +37,7 @@ public class LitemallRoleService { } - public List querySelective(String name, Integer page, Integer size, String sort, String order) { + public List querySelective(String name, Integer page, Integer limit, String sort, String order) { LitemallRoleExample example = new LitemallRoleExample(); LitemallRoleExample.Criteria criteria = example.createCriteria(); @@ -50,7 +50,7 @@ public class LitemallRoleService { example.setOrderByClause(sort + " " + order); } - PageHelper.startPage(page, size); + PageHelper.startPage(page, limit); return roleMapper.selectByExample(example); } diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java index a8dafd51..748c2282 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java @@ -127,18 +127,18 @@ public class WxOrderService { * 3,待收货; * 4,待评价。 * @param page 分页页数 - * @param size 分页大小 + * @param limit 分页大小 * @return 订单列表 */ - public Object list(Integer userId, Integer showType, Integer page, Integer size) { + public Object list(Integer userId, Integer showType, Integer page, Integer limit) { if (userId == null) { return ResponseUtil.unlogin(); } List orderStatus = OrderUtil.orderStatus(showType); - List orderList = orderService.queryByOrderStatus(userId, orderStatus, page, size); + List orderList = orderService.queryByOrderStatus(userId, orderStatus, page, limit); long count = PageInfo.of(orderList).getTotal(); - int totalPages = (int) Math.ceil((double) count / size); + int totalPages = (int) Math.ceil((double) count / limit); List> orderVoList = new ArrayList<>(orderList.size()); for (LitemallOrder order : orderList) { diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxBrandController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxBrandController.java index b6f9c8b9..e86a1496 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxBrandController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxBrandController.java @@ -33,16 +33,16 @@ public class WxBrandController { * 品牌列表 * * @param page 分页页数 - * @param size 分页大小 + * @param limit 分页大小 * @return 品牌列表 */ @GetMapping("list") public Object list(@RequestParam(defaultValue = "1") Integer page, - @RequestParam(defaultValue = "10") Integer size) { + @RequestParam(defaultValue = "10") Integer limit) { - List brandList = brandService.queryVO(page, size); + List brandList = brandService.queryVO(page, limit); int total = brandService.queryTotalCount(); - int totalPages = (int) Math.ceil((double) total / size); + int totalPages = (int) Math.ceil((double) total / limit); Map data = new HashMap(); data.put("brandList", brandList); diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCollectController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCollectController.java index ae711c3e..71826abd 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCollectController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCollectController.java @@ -40,21 +40,21 @@ public class WxCollectController { * @param userId 用户ID * @param type 类型,如果是0则是商品收藏,如果是1则是专题收藏 * @param page 分页页数 - * @param size 分页大小 + * @param limit 分页大小 * @return 用户收藏列表 */ @GetMapping("list") public Object list(@LoginUser Integer userId, @NotNull Byte type, @RequestParam(defaultValue = "1") Integer page, - @RequestParam(defaultValue = "10") Integer size) { + @RequestParam(defaultValue = "10") Integer limit) { if (userId == null) { return ResponseUtil.unlogin(); } - List collectList = collectService.queryByType(userId, type, page, size); + List collectList = collectService.queryByType(userId, type, page, limit); int count = collectService.countByType(userId, type); - int totalPages = (int) Math.ceil((double) count / size); + int totalPages = (int) Math.ceil((double) count / limit); List collects = new ArrayList<>(collectList.size()); for (LitemallCollect collect : collectList) { diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCommentController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCommentController.java index b371e469..3857f277 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCommentController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCommentController.java @@ -126,7 +126,7 @@ public class WxCommentController { * @param valueId 商品或专题ID。如果type是0,则是商品ID;如果type是1,则是专题ID。 * @param showType 显示类型。如果是0,则查询全部;如果是1,则查询有图片的评论。 * @param page 分页页数 - * @param size 分页大小 + * @param limit 分页大小 * @return 评论列表 */ @GetMapping("list") @@ -134,8 +134,8 @@ public class WxCommentController { @NotNull Integer valueId, @NotNull Integer showType, @RequestParam(defaultValue = "1") Integer page, - @RequestParam(defaultValue = "10") Integer size) { - List commentList = commentService.query(type, valueId, showType, page, size); + @RequestParam(defaultValue = "10") Integer limit) { + List commentList = commentService.query(type, valueId, showType, page, limit); long count = PageInfo.of(commentList).getTotal(); List> commentVoList = new ArrayList<>(commentList.size()); diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCouponController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCouponController.java index 1963e904..2644f330 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCouponController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCouponController.java @@ -51,18 +51,18 @@ public class WxCouponController { * 优惠券列表 * * @param page - * @param size + * @param limit * @param sort * @param order * @return */ @GetMapping("list") public Object list(@RequestParam(defaultValue = "1") Integer page, - @RequestParam(defaultValue = "10") Integer size, + @RequestParam(defaultValue = "10") Integer limit, @Sort @RequestParam(defaultValue = "add_time") String sort, @Order @RequestParam(defaultValue = "desc") String order) { - List couponList = couponService.queryList(page, size, sort, order); + List couponList = couponService.queryList(page, limit, sort, order); int total = couponService.queryTotal(); Map data = new HashMap(); data.put("data", couponList); @@ -76,7 +76,7 @@ public class WxCouponController { * @param userId * @param status * @param page - * @param size + * @param limit * @param sort * @param order * @return @@ -85,14 +85,14 @@ public class WxCouponController { public Object mylist(@LoginUser Integer userId, @NotNull Short status, @RequestParam(defaultValue = "1") Integer page, - @RequestParam(defaultValue = "10") Integer size, + @RequestParam(defaultValue = "10") Integer limit, @Sort @RequestParam(defaultValue = "add_time") String sort, @Order @RequestParam(defaultValue = "desc") String order) { if (userId == null) { return ResponseUtil.unlogin(); } - List couponUserList = couponUserService.queryList(userId, null, status, page, size, sort, order); + List couponUserList = couponUserService.queryList(userId, null, status, page, limit, sort, order); List couponVoList = change(couponUserList); int total = couponService.queryTotal(); Map data = new HashMap(); diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxFootprintController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxFootprintController.java index cc17b98d..22408574 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxFootprintController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxFootprintController.java @@ -70,20 +70,20 @@ public class WxFootprintController { * 用户足迹列表 * * @param page 分页页数 - * @param size 分页大小 + * @param limit 分页大小 * @return 用户足迹列表 */ @GetMapping("list") public Object list(@LoginUser Integer userId, @RequestParam(defaultValue = "1") Integer page, - @RequestParam(defaultValue = "10") Integer size) { + @RequestParam(defaultValue = "10") Integer limit) { if (userId == null) { return ResponseUtil.unlogin(); } - List footprintList = footprintService.queryByAddTime(userId, page, size); + List footprintList = footprintService.queryByAddTime(userId, page, limit); long count = PageInfo.of(footprintList).getTotal(); - int totalPages = (int) Math.ceil((double) count / size); + int totalPages = (int) Math.ceil((double) count / limit); List footprintVoList = new ArrayList<>(footprintList.size()); for (LitemallFootprint footprint : footprintList) { diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGoodsController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGoodsController.java index a595c2e3..f2fcbed7 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGoodsController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGoodsController.java @@ -237,7 +237,7 @@ public class WxGoodsController { * @param isHot 是否热买,可选 * @param userId 用户ID * @param page 分页页数 - * @param size 分页大小 + * @param limit 分页大小 * @param sort 排序方式,支持"add_time", "retail_price"或"name" * @param order 排序类型,顺序或者降序 * @return 根据条件搜素的商品详情 @@ -251,7 +251,7 @@ public class WxGoodsController { Boolean isHot, @LoginUser Integer userId, @RequestParam(defaultValue = "1") Integer page, - @RequestParam(defaultValue = "10") Integer size, + @RequestParam(defaultValue = "10") Integer limit, @Sort(accepts = {"add_time", "retail_price", "name"}) @RequestParam(defaultValue = "add_time") String sort, @Order @RequestParam(defaultValue = "desc") String order) { @@ -265,7 +265,7 @@ public class WxGoodsController { } //查询列表数据 - List goodsList = goodsService.querySelective(categoryId, brandId, keyword, isHot, isNew, page, size, sort, order); + List goodsList = goodsService.querySelective(categoryId, brandId, keyword, isHot, isNew, page, limit, sort, order); // 查询商品所属类目列表。 List goodsCatIds = goodsService.getCatIds(brandId, keyword, isHot, isNew); diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGrouponController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGrouponController.java index 351ce2f9..9f4524b0 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGrouponController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGrouponController.java @@ -59,15 +59,15 @@ public class WxGrouponController { * 团购规则列表 * * @param page 分页页数 - * @param size 分页大小 + * @param limit 分页大小 * @return 团购规则列表 */ @GetMapping("list") public Object list(@RequestParam(defaultValue = "1") Integer page, - @RequestParam(defaultValue = "10") Integer size, + @RequestParam(defaultValue = "10") Integer limit, @Sort @RequestParam(defaultValue = "add_time") String sort, @Order @RequestParam(defaultValue = "desc") String order) { - List> topicList = grouponRulesService.queryList(page, size, sort, order); + List> topicList = grouponRulesService.queryList(page, limit, sort, order); long total = PageInfo.of(topicList).getTotal(); Map data = new HashMap(); data.put("data", topicList); diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxOrderController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxOrderController.java index 98c46101..356b1c6a 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxOrderController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxOrderController.java @@ -27,15 +27,15 @@ public class WxOrderController { * @param userId 用户ID * @param showType 订单信息 * @param page 分页页数 - * @param size 分页大小 + * @param limit 分页大小 * @return 订单列表 */ @GetMapping("list") public Object list(@LoginUser Integer userId, @RequestParam(defaultValue = "0") Integer showType, @RequestParam(defaultValue = "1") Integer page, - @RequestParam(defaultValue = "10") Integer size) { - return wxOrderService.list(userId, showType, page, size); + @RequestParam(defaultValue = "10") Integer limit) { + return wxOrderService.list(userId, showType, page, limit); } /** diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxSearchController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxSearchController.java index 89f54ff6..92be3734 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxSearchController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxSearchController.java @@ -76,8 +76,8 @@ public class WxSearchController { @GetMapping("helper") public Object helper(@NotEmpty String keyword, @RequestParam(defaultValue = "1") Integer page, - @RequestParam(defaultValue = "10") Integer size) { - List keywordsList = keywordsService.queryByKeyword(keyword, page, size); + @RequestParam(defaultValue = "10") Integer limit) { + List keywordsList = keywordsService.queryByKeyword(keyword, page, limit); String[] keys = new String[keywordsList.size()]; int index = 0; for (LitemallKeyword key : keywordsList) { diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxTopicController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxTopicController.java index 5ee02b5a..2b4e2b70 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxTopicController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxTopicController.java @@ -40,15 +40,15 @@ public class WxTopicController { * 专题列表 * * @param page 分页页数 - * @param size 分页大小 + * @param limit 分页大小 * @return 专题列表 */ @GetMapping("list") public Object list(@RequestParam(defaultValue = "1") Integer page, - @RequestParam(defaultValue = "10") Integer size, + @RequestParam(defaultValue = "10") Integer limit, @Sort @RequestParam(defaultValue = "add_time") String sort, @Order @RequestParam(defaultValue = "desc") String order) { - List topicList = topicService.queryList(page, size, sort, order); + List topicList = topicService.queryList(page, limit, sort, order); int total = topicService.queryTotal(); Map data = new HashMap(); data.put("data", topicList); diff --git a/litemall-wx/pages/comment/comment.js b/litemall-wx/pages/comment/comment.js index 688eb4f2..4ab06a70 100644 --- a/litemall-wx/pages/comment/comment.js +++ b/litemall-wx/pages/comment/comment.js @@ -14,7 +14,7 @@ Page({ hasPicCount: 0, allPage: 1, picPage: 1, - size: 20 + limit: 20 }, getCommentCount: function() { let that = this; diff --git a/litemall-wx/pages/coupon/coupon.js b/litemall-wx/pages/coupon/coupon.js index 03dcff23..3cce7f20 100644 --- a/litemall-wx/pages/coupon/coupon.js +++ b/litemall-wx/pages/coupon/coupon.js @@ -7,7 +7,7 @@ Page({ data: { couponList: [], page: 1, - size: 10, + limit: 10, count: 0, scrollTop: 0, showPage: false @@ -86,7 +86,7 @@ Page({ util.request(api.CouponList, { page: that.data.page, - size: that.data.size + limit: that.data.limit }).then(function (res) { if (res.errno === 0) { @@ -124,7 +124,7 @@ Page({ }, nextPage: function (event) { var that = this; - if (this.data.page > that.data.count / that.data.size) { + if (this.data.page > that.data.count / that.data.limit) { return true; } diff --git a/litemall-wx/pages/coupon/coupon.wxml b/litemall-wx/pages/coupon/coupon.wxml index 58738b29..3bb12961 100644 --- a/litemall-wx/pages/coupon/coupon.wxml +++ b/litemall-wx/pages/coupon/coupon.wxml @@ -22,7 +22,7 @@ 上一页 - 下一页 + 下一页 \ No newline at end of file diff --git a/litemall-wx/pages/newGoods/newGoods.js b/litemall-wx/pages/newGoods/newGoods.js index 315d4dc4..9fb7d774 100644 --- a/litemall-wx/pages/newGoods/newGoods.js +++ b/litemall-wx/pages/newGoods/newGoods.js @@ -16,7 +16,7 @@ Page({ currentSort: 'add_time', currentSortOrder: 'desc', page: 1, - size: 100 + limit: 100 }, getGoodsList: function() { var that = this; diff --git a/litemall-wx/pages/search/search.js b/litemall-wx/pages/search/search.js index 88a4c61a..22fb863d 100644 --- a/litemall-wx/pages/search/search.js +++ b/litemall-wx/pages/search/search.js @@ -17,7 +17,7 @@ Page({ defaultKeyword: {}, hotKeyword: [], page: 1, - size: 20, + limit: 20, categoryId: 0 }, //事件处理函数 @@ -95,7 +95,7 @@ Page({ util.request(api.GoodsList, { keyword: that.data.keyword, page: that.data.page, - size: that.data.size, + limit: that.data.limit, sort: that.data.currentSort, order: that.data.currentSortOrder, categoryId: that.data.categoryId diff --git a/litemall-wx/pages/topic/topic.js b/litemall-wx/pages/topic/topic.js index d4797017..ed9c9872 100644 --- a/litemall-wx/pages/topic/topic.js +++ b/litemall-wx/pages/topic/topic.js @@ -5,7 +5,7 @@ Page({ data: { topicList: [], page: 1, - size: 10, + limit: 10, count: 0, scrollTop: 0, showPage: false @@ -28,7 +28,7 @@ Page({ }, nextPage: function(event) { var that = this; - if (this.data.page > that.data.count / that.data.size) { + if (this.data.page > that.data.count / that.data.limit) { return true; } @@ -57,7 +57,7 @@ Page({ util.request(api.TopicList, { page: that.data.page, - size: that.data.size + limit: that.data.limit }).then(function(res) { if (res.errno === 0) { diff --git a/renard-wx/pages/category/category.js b/renard-wx/pages/category/category.js index bf26877a..de2568b1 100644 --- a/renard-wx/pages/category/category.js +++ b/renard-wx/pages/category/category.js @@ -11,7 +11,7 @@ Page({ scrollTop: 0, scrollHeight: 0, page: 1, - size: 100 + limit: 100 }, onLoad: function(options) { @@ -103,7 +103,7 @@ Page({ util.request(api.GoodsList, { categoryId: that.data.currentCategory.id, page: that.data.page, - size: that.data.size + limit: that.data.limit }) .then(function(res) { that.setData({ diff --git a/renard-wx/pages/hotGoods/hotGoods.js b/renard-wx/pages/hotGoods/hotGoods.js index 1b10ce6a..80e02eec 100644 --- a/renard-wx/pages/hotGoods/hotGoods.js +++ b/renard-wx/pages/hotGoods/hotGoods.js @@ -16,7 +16,7 @@ Page({ currentSort: 'add_time', currentSortOrder: 'desc', page: 1, - size: 100 + limit: 100 }, getCategoryList: function() { var that = this; @@ -38,7 +38,7 @@ Page({ util.request(api.GoodsList, { isHot: true, page: that.data.page, - size: that.data.size, + limit: that.data.size, order: that.data.currentSortOrder, sort: that.data.currentSort, categoryId: that.data.categoryId -- Gitee From edd0353694f41cef41e2665dae2b848494e2a41d Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Thu, 18 Apr 2019 21:53:19 +0800 Subject: [PATCH 084/391] =?UTF-8?q?fix[litemall-wx=EF=BC=8Crenard-wx]:=20?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=80=BB=E8=BE=91=EF=BC=8C=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=94=B6=E8=B4=A7=E5=9C=B0=E5=9D=80=E5=88=A0=E9=99=A4=E4=BB=8D?= =?UTF-8?q?=E7=84=B6=E5=8F=AF=E4=BB=A5=E8=AE=BF=E9=97=AE=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-wx/pages/checkout/checkout.js | 43 ++++++++----------- renard-wx/pages/shopping/checkout/checkout.js | 43 ++++++++----------- 2 files changed, 38 insertions(+), 48 deletions(-) diff --git a/litemall-wx/pages/checkout/checkout.js b/litemall-wx/pages/checkout/checkout.js index 79c3e82e..5444d163 100644 --- a/litemall-wx/pages/checkout/checkout.js +++ b/litemall-wx/pages/checkout/checkout.js @@ -79,39 +79,34 @@ Page({ }); try { var cartId = wx.getStorageSync('cartId'); - if (cartId) { - this.setData({ - 'cartId': cartId - }); + if (cartId === "") { + cartId = 0; } - var addressId = wx.getStorageSync('addressId'); - if (addressId) { - this.setData({ - 'addressId': addressId - }); + if (addressId === "") { + addressId = 0; } - var couponId = wx.getStorageSync('couponId'); - if (couponId) { - this.setData({ - 'couponId': couponId - }); + if (couponId === "") { + couponId = 0; } - var grouponRulesId = wx.getStorageSync('grouponRulesId'); - if (grouponRulesId) { - this.setData({ - 'grouponRulesId': grouponRulesId - }); + if (grouponRulesId === "") { + grouponRulesId = 0; } - var grouponLinkId = wx.getStorageSync('grouponLinkId'); - if (grouponLinkId) { - this.setData({ - 'grouponLinkId': grouponLinkId - }); + if (grouponLinkId === "") { + grouponLinkId = 0; } + + this.setData({ + cartId: cartId, + addressId: addressId, + couponId: couponId, + grouponRulesId: grouponRulesId, + grouponLinkId: grouponLinkId + }); + } catch (e) { // Do something when catch error console.log(e); diff --git a/renard-wx/pages/shopping/checkout/checkout.js b/renard-wx/pages/shopping/checkout/checkout.js index 9f4cb071..65a149aa 100644 --- a/renard-wx/pages/shopping/checkout/checkout.js +++ b/renard-wx/pages/shopping/checkout/checkout.js @@ -68,39 +68,34 @@ Page({ }); try { var cartId = wx.getStorageSync('cartId'); - if (cartId) { - this.setData({ - 'cartId': cartId - }); + if (cartId === "") { + cartId = 0; } - var addressId = wx.getStorageSync('addressId'); - if (addressId) { - this.setData({ - 'addressId': addressId - }); + if (addressId === "") { + addressId = 0; } - var couponId = wx.getStorageSync('couponId'); - if (couponId) { - this.setData({ - 'couponId': couponId - }); + if (couponId === "") { + couponId = 0; } - var grouponRulesId = wx.getStorageSync('grouponRulesId'); - if (grouponRulesId) { - this.setData({ - 'grouponRulesId': grouponRulesId - }); + if (grouponRulesId === "") { + grouponRulesId = 0; } - var grouponLinkId = wx.getStorageSync('grouponLinkId'); - if (grouponLinkId) { - this.setData({ - 'grouponLinkId': grouponLinkId - }); + if (grouponLinkId === "") { + grouponLinkId = 0; } + + this.setData({ + cartId: cartId, + addressId: addressId, + couponId: couponId, + grouponRulesId: grouponRulesId, + grouponLinkId: grouponLinkId + }); + } catch (e) { // Do something when catch error console.log(e); -- Gitee From 8da0b5ec1c37e6c38719bc481de666fb08757da6 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Thu, 18 Apr 2019 22:36:39 +0800 Subject: [PATCH 085/391] =?UTF-8?q?fix[litemall-db=EF=BC=8Clitemall-wx-api?= =?UTF-8?q?]:=20=E5=90=8E=E7=AB=AF=E5=8F=96=E6=B6=88=E6=94=B6=E8=B4=A7?= =?UTF-8?q?=E5=9C=B0=E5=9D=80id=E6=9F=A5=E8=AF=A2=EF=BC=8C=E8=80=8C?= =?UTF-8?q?=E6=98=AFuserId=E5=92=8Cid=E8=81=94=E5=90=88=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../litemall/db/service/LitemallAddressService.java | 6 ++++-- .../org/linlinjava/litemall/wx/service/WxOrderService.java | 2 +- .../org/linlinjava/litemall/wx/web/WxAddressController.java | 2 +- .../org/linlinjava/litemall/wx/web/WxCartController.java | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallAddressService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallAddressService.java index 33e33662..87c6147e 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallAddressService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallAddressService.java @@ -22,8 +22,10 @@ public class LitemallAddressService { return addressMapper.selectByExample(example); } - public LitemallAddress findById(Integer id) { - return addressMapper.selectByPrimaryKey(id); + public LitemallAddress query(Integer userId, Integer id) { + LitemallAddressExample example = new LitemallAddressExample(); + example.or().andIdEqualTo(id).andUserIdEqualTo(userId).andDeletedEqualTo(false); + return addressMapper.selectOneByExample(example); } public int add(LitemallAddress address) { diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java index 748c2282..4c8fef42 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java @@ -278,7 +278,7 @@ public class WxOrderService { } // 收货地址 - LitemallAddress checkedAddress = addressService.findById(addressId); + LitemallAddress checkedAddress = addressService.query(userId, addressId); if (checkedAddress == null) { return ResponseUtil.badArgument(); } diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAddressController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAddressController.java index 8b5a98e3..31592e90 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAddressController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAddressController.java @@ -103,7 +103,7 @@ public class WxAddressController extends GetRegionService { return ResponseUtil.unlogin(); } - LitemallAddress address = addressService.findById(id); + LitemallAddress address = addressService.query(userId, id); if (address == null) { return ResponseUtil.badArgumentValue(); } diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCartController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCartController.java index 7d01f3a8..dd482d3d 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCartController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCartController.java @@ -397,7 +397,7 @@ public class WxCartController { } } else { - checkedAddress = addressService.findById(addressId); + checkedAddress = addressService.query(userId, addressId); // 如果null, 则报错 if (checkedAddress == null) { return ResponseUtil.badArgumentValue(); -- Gitee From 880cdd0c5021937e65aea82d8874cd63044278b8 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Fri, 19 Apr 2019 10:31:11 +0800 Subject: [PATCH 086/391] =?UTF-8?q?fix[litemall-wx-api]:=20=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E6=94=AF=E4=BB=98=E5=9B=9E=E8=B0=83=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E9=80=9A=E7=9F=A5=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../linlinjava/litemall/wx/service/WxOrderService.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java index 4c8fef42..9d2c56bc 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java @@ -5,6 +5,7 @@ import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult; import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; import com.github.binarywang.wxpay.bean.result.BaseWxPayResult; +import com.github.binarywang.wxpay.constant.WxPayConstants; import com.github.binarywang.wxpay.exception.WxPayException; import com.github.binarywang.wxpay.service.WxPayService; import com.github.pagehelper.PageInfo; @@ -601,6 +602,15 @@ public class WxOrderService { WxPayOrderNotifyResult result = null; try { result = wxPayService.parseOrderNotifyResult(xmlResult); + + if(!WxPayConstants.ResultCode.SUCCESS.equals(result.getResultCode())){ + logger.error(xmlResult); + throw new WxPayException("微信通知支付失败!"); + } + if(!WxPayConstants.ResultCode.SUCCESS.equals(result.getReturnCode())){ + logger.error(xmlResult); + throw new WxPayException("微信通知支付失败!"); + } } catch (WxPayException e) { e.printStackTrace(); return WxPayNotifyResponse.fail(e.getMessage()); -- Gitee From 0a1a3d9e341710fa7447aea4d66a4768c5ecde44 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Fri, 19 Apr 2019 13:09:29 +0800 Subject: [PATCH 087/391] =?UTF-8?q?chore[litemall-admin-api]:=20shiro?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=85=81=E8=AE=B8admin/index/index=E5=8C=BF?= =?UTF-8?q?=E5=90=8D=E8=AE=BF=E9=97=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/linlinjava/litemall/admin/config/ShiroConfig.java | 1 + 1 file changed, 1 insertion(+) diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/config/ShiroConfig.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/config/ShiroConfig.java index 3b7d1bc9..188f458e 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/config/ShiroConfig.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/config/ShiroConfig.java @@ -33,6 +33,7 @@ public class ShiroConfig { filterChainDefinitionMap.put("/admin/auth/401", "anon"); filterChainDefinitionMap.put("/admin/auth/index", "anon"); filterChainDefinitionMap.put("/admin/auth/403", "anon"); + filterChainDefinitionMap.put("/admin/index/index", "anon"); filterChainDefinitionMap.put("/admin/**", "authc"); shiroFilterFactoryBean.setLoginUrl("/admin/auth/401"); -- Gitee From 70c31ee4dd0db97e65620f96ff1c241bd6fa4937 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Fri, 19 Apr 2019 13:38:02 +0800 Subject: [PATCH 088/391] =?UTF-8?q?chore[litemall-wx=EF=BC=8Crenard-wx]:?= =?UTF-8?q?=20=E5=BE=AE=E4=BF=A1=E5=BC=80=E5=8F=91=E8=80=85=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E6=9B=B4=E6=96=B0=EF=BC=8C=E5=AF=BC=E8=87=B4=E5=B0=8F?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E9=85=8D=E7=BD=AE=E8=87=AA=E5=8A=A8=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-wx/app.json | 3 +- litemall-wx/project.config.json | 2 + litemall-wx/sitemap.json | 7 + renard-wx/app.json | 3 +- renard-wx/project.config.json | 372 ++++++++++++++++---------------- renard-wx/sitemap.json | 7 + 6 files changed, 207 insertions(+), 187 deletions(-) create mode 100644 litemall-wx/sitemap.json create mode 100644 renard-wx/sitemap.json diff --git a/litemall-wx/app.json b/litemall-wx/app.json index c014aab1..affff8f0 100644 --- a/litemall-wx/app.json +++ b/litemall-wx/app.json @@ -85,5 +85,6 @@ "uploadFile": 10000, "downloadFile": 10000 }, - "debug": true + "debug": true, + "sitemapLocation": "sitemap.json" } \ No newline at end of file diff --git a/litemall-wx/project.config.json b/litemall-wx/project.config.json index 053d33e7..9383d66e 100644 --- a/litemall-wx/project.config.json +++ b/litemall-wx/project.config.json @@ -12,6 +12,8 @@ "libVersion": "2.4.0", "appid": "wxa5b486c6b918ecfb", "projectname": "litemall-wx", + "simulatorType": "wechat", + "simulatorPluginLibVersion": {}, "condition": { "search": { "current": -1, diff --git a/litemall-wx/sitemap.json b/litemall-wx/sitemap.json new file mode 100644 index 00000000..ca02add2 --- /dev/null +++ b/litemall-wx/sitemap.json @@ -0,0 +1,7 @@ +{ + "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html", + "rules": [{ + "action": "allow", + "page": "*" + }] +} \ No newline at end of file diff --git a/renard-wx/app.json b/renard-wx/app.json index 8135730e..e50e2aaf 100644 --- a/renard-wx/app.json +++ b/renard-wx/app.json @@ -70,5 +70,6 @@ "uploadFile": 10000, "downloadFile": 10000 }, - "debug": true + "debug": true, + "sitemapLocation": "sitemap.json" } \ No newline at end of file diff --git a/renard-wx/project.config.json b/renard-wx/project.config.json index 4d450f08..b5825e8b 100644 --- a/renard-wx/project.config.json +++ b/renard-wx/project.config.json @@ -1,187 +1,189 @@ { - "description": "项目配置文件。", - "setting": { - "urlCheck": false, - "es6": true, - "postcss": true, - "minified": true, - "newFeature": true, - "uglifyFileName": true - }, - "compileType": "miniprogram", - "libVersion": "2.4.0", - "appid": "wxa5b486c6b918ecfb", - "projectname": "Renard", - "condition": { - "search": { - "current": -1, - "list": [] - }, - "conversation": { - "current": -1, - "list": [] - }, - "plugin": { - "current": -1, - "list": [] - }, - "game": { - "list": [] - }, - "miniprogram": { - "current": 34, - "list": [ - { - "id": -1, - "name": "首页", - "pathName": "pages/index/index", - "query": "" - }, - { - "id": -1, - "name": "专题", - "pathName": "pages/topic/topic", - "query": "" - }, - { - "id": -1, - "name": "专题详情", - "pathName": "pages/topicDetail/topicDetail", - "query": "id=314" - }, - { - "id": -1, - "name": "品牌", - "pathName": "pages/brand/brand", - "query": "" - }, - { - "id": -1, - "name": "品牌详情", - "pathName": "pages/brandDetail/brandDetail", - "query": "id=1001000" - }, - { - "id": -1, - "name": "人气推荐", - "pathName": "pages/hotGoods/hotGoods", - "query": "" - }, - { - "id": -1, - "name": "新品首发", - "pathName": "pages/newGoods/newGoods", - "query": "" - }, - { - "id": -1, - "name": "分类", - "pathName": "pages/catalog/catalog", - "query": "" - }, - { - "id": -1, - "name": "分类详情", - "pathName": "pages/category/category", - "query": "id=1008002" - }, - { - "id": -1, - "name": "查找", - "pathName": "pages/search/search", - "query": "" - }, - { - "id": -1, - "name": "商品", - "pathName": "pages/goods/goods", - "query": "id=1181000" - }, - { - "id": -1, - "name": "商品评论列表", - "pathName": "pages/comment/comment", - "query": "valueId=1181000&type=0" - }, - { - "id": -1, - "name": "购物车", - "pathName": "pages/cart/cart", - "query": "" - }, - { - "id": -1, - "name": "下单", - "pathName": "pages/shopping/checkout/checkout", - "query": "" - }, - { - "id": -1, - "name": "支付结果", - "pathName": "pages/payResult/payResult", - "query": "" - }, - { - "id": -1, - "name": "我的", - "pathName": "pages/ucenter/index/index", - "query": "" - }, - { - "id": -1, - "name": "我的订单列表", - "pathName": "pages/ucenter/order/order", - "query": "" - }, - { - "id": -1, - "name": "我的订单详情", - "pathName": "pages/ucenter/orderDetail/orderDetail", - "query": "id=1" - }, - { - "id": 22, - "name": "待评价的订单详情", - "pathName": "pages/ucenter/orderDetail/orderDetail", - "query": "id=1" - }, - { - "id": -1, - "name": "购买商品评价", - "pathName": "pages/commentPost/commentPost", - "query": "orderId=2&type=0&valueId=1116011" - }, - { - "id": -1, - "name": "我的优惠券", - "pathName": "pages/ucenter/coupon/coupon", - "query": "" - }, - { - "id": -1, - "name": "我的收藏", - "pathName": "pages/ucenter/collect/collect", - "query": "" - }, - { - "id": -1, - "name": "我的地址", - "pathName": "pages/ucenter/address/address", - "query": "" - }, - { - "id": -1, - "name": "我的地址添加", - "pathName": "pages/ucenter/addressAdd/addressAdd", - "query": "" - }, - { - "id": -1, - "name": "登录", - "pathName": "pages/auth/login/login", - "query": "" - } - ] - } - } + "description": "项目配置文件。", + "setting": { + "urlCheck": false, + "es6": true, + "postcss": true, + "minified": true, + "newFeature": true, + "uglifyFileName": true + }, + "compileType": "miniprogram", + "libVersion": "2.4.0", + "appid": "wxa5b486c6b918ecfb", + "projectname": "Renard", + "simulatorType": "wechat", + "simulatorPluginLibVersion": {}, + "condition": { + "search": { + "current": -1, + "list": [] + }, + "conversation": { + "current": -1, + "list": [] + }, + "plugin": { + "current": -1, + "list": [] + }, + "game": { + "list": [] + }, + "miniprogram": { + "current": 34, + "list": [ + { + "id": -1, + "name": "首页", + "pathName": "pages/index/index", + "query": "" + }, + { + "id": -1, + "name": "专题", + "pathName": "pages/topic/topic", + "query": "" + }, + { + "id": -1, + "name": "专题详情", + "pathName": "pages/topicDetail/topicDetail", + "query": "id=314" + }, + { + "id": -1, + "name": "品牌", + "pathName": "pages/brand/brand", + "query": "" + }, + { + "id": -1, + "name": "品牌详情", + "pathName": "pages/brandDetail/brandDetail", + "query": "id=1001000" + }, + { + "id": -1, + "name": "人气推荐", + "pathName": "pages/hotGoods/hotGoods", + "query": "" + }, + { + "id": -1, + "name": "新品首发", + "pathName": "pages/newGoods/newGoods", + "query": "" + }, + { + "id": -1, + "name": "分类", + "pathName": "pages/catalog/catalog", + "query": "" + }, + { + "id": -1, + "name": "分类详情", + "pathName": "pages/category/category", + "query": "id=1008002" + }, + { + "id": -1, + "name": "查找", + "pathName": "pages/search/search", + "query": "" + }, + { + "id": -1, + "name": "商品", + "pathName": "pages/goods/goods", + "query": "id=1181000" + }, + { + "id": -1, + "name": "商品评论列表", + "pathName": "pages/comment/comment", + "query": "valueId=1181000&type=0" + }, + { + "id": -1, + "name": "购物车", + "pathName": "pages/cart/cart", + "query": "" + }, + { + "id": -1, + "name": "下单", + "pathName": "pages/shopping/checkout/checkout", + "query": "" + }, + { + "id": -1, + "name": "支付结果", + "pathName": "pages/payResult/payResult", + "query": "" + }, + { + "id": -1, + "name": "我的", + "pathName": "pages/ucenter/index/index", + "query": "" + }, + { + "id": -1, + "name": "我的订单列表", + "pathName": "pages/ucenter/order/order", + "query": "" + }, + { + "id": -1, + "name": "我的订单详情", + "pathName": "pages/ucenter/orderDetail/orderDetail", + "query": "id=1" + }, + { + "id": 22, + "name": "待评价的订单详情", + "pathName": "pages/ucenter/orderDetail/orderDetail", + "query": "id=1" + }, + { + "id": -1, + "name": "购买商品评价", + "pathName": "pages/commentPost/commentPost", + "query": "orderId=2&type=0&valueId=1116011" + }, + { + "id": -1, + "name": "我的优惠券", + "pathName": "pages/ucenter/coupon/coupon", + "query": "" + }, + { + "id": -1, + "name": "我的收藏", + "pathName": "pages/ucenter/collect/collect", + "query": "" + }, + { + "id": -1, + "name": "我的地址", + "pathName": "pages/ucenter/address/address", + "query": "" + }, + { + "id": -1, + "name": "我的地址添加", + "pathName": "pages/ucenter/addressAdd/addressAdd", + "query": "" + }, + { + "id": -1, + "name": "登录", + "pathName": "pages/auth/login/login", + "query": "" + } + ] + } + } } \ No newline at end of file diff --git a/renard-wx/sitemap.json b/renard-wx/sitemap.json new file mode 100644 index 00000000..ca02add2 --- /dev/null +++ b/renard-wx/sitemap.json @@ -0,0 +1,7 @@ +{ + "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html", + "rules": [{ + "action": "allow", + "page": "*" + }] +} \ No newline at end of file -- Gitee From 1b1a894573321f57b192fe1874689d31552ca128 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Fri, 19 Apr 2019 17:47:13 +0800 Subject: [PATCH 089/391] =?UTF-8?q?chore[litemall-vue]:=20=E8=BF=9B?= =?UTF-8?q?=E4=B8=80=E6=AD=A5=E7=AE=80=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-admin/favicon.ico | Bin 67646 -> 0 bytes litemall-vue/.eslintrc.js | 2 +- litemall-vue/mock/db.json | 1336 -- litemall-vue/mock/route.json | 0 litemall-vue/package-lock.json | 13570 ---------------- litemall-vue/package.json | 13 +- litemall-vue/public/favicon.ico | Bin 4286 -> 67646 bytes litemall-vue/public/index.html | 6 +- litemall-vue/public/vconsole.min.js | 7 - litemall-vue/src/api/goods.js | 12 +- litemall-vue/src/core/utils/auth.js | 42 - litemall-vue/src/core/utils/cookies.js | 60 - litemall-vue/src/core/utils/psm.js | 447 - litemall-vue/src/main.js | 9 - litemall-vue/src/views/login/login-footer.vue | 36 +- litemall-vue/src/views/login/login-header.vue | 58 +- 16 files changed, 66 insertions(+), 15532 deletions(-) delete mode 100644 litemall-admin/favicon.ico delete mode 100644 litemall-vue/mock/db.json delete mode 100644 litemall-vue/mock/route.json delete mode 100644 litemall-vue/package-lock.json delete mode 100644 litemall-vue/public/vconsole.min.js delete mode 100644 litemall-vue/src/core/utils/auth.js delete mode 100644 litemall-vue/src/core/utils/cookies.js delete mode 100644 litemall-vue/src/core/utils/psm.js diff --git a/litemall-admin/favicon.ico b/litemall-admin/favicon.ico deleted file mode 100644 index 7fc0eab364ce36daac2ca8e29addea2d3841df24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67646 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\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"", - "skus": [], - "prop_imgs": [], - "item_imgs": [ - { - "url": "//img.yzcdn.cn/upload_files/2017/07/02/af5b9f44deaeb68000d7e4a711160c53.jpg" - } - ], - "video_url": "" - }, - "code": 200, - "message": "OK", - "success": true - }, - "address": { - "data": [ - { - "id": "119", - "user_id": "448907", - "consignee": "2222", - "id_card": "", - "province": "130000", - "city": "130400", - "district": "130406", - "town": "", - "area_name": "河北省 邯郸市 峰峰矿区", - "address": "dsdsadsad", - "zip_code": "12323", - "mobile": "13454193338", - "telphone": "", - "created_at": "1506315000", - "updated_at": "1506315000" - }, - { - "id": "127", - "user_id": "448907", - "consignee": "薛大大下单", - "id_card": "", - "province": "110000", - "city": "110100", - "district": "110101", - "town": "", - "area_name": "北京市 北京市 东城区", - "address": "警察局就拒绝感觉", - "zip_code": "000000", - "mobile": "18758871254", - "telphone": "", - "created_at": "1506395556", - "updated_at": "1506395556" - }, - { - "id": "123", - "user_id": "448907", - "consignee": "测试", - "id_card": "", - "province": "130000", - "city": "130100", - "district": "130102", - "town": "", - "area_name": "河北省 石家庄市 长安区", - "address": "水电费缴纳可劲儿放暑假", - "zip_code": "1111", - "mobile": "13323456789", - "telphone": "", - "created_at": "1506320538", - "updated_at": "1506320538" - }, - { - "id": "121", - "user_id": "448907", - "consignee": "sdsds", - "id_card": "", - "province": "140000", - "city": "140200", - "district": "140211", - "town": "", - "area_name": "山西省 大同市 南郊区", - "address": "22222", - "zip_code": "1233", - "mobile": "13454193338", - "telphone": "", - "created_at": "1506315889", - "updated_at": "1506315889" - }, - { - "id": "93", - "user_id": "448907", - "consignee": "大屏", - "id_card": "", - "province": "330000", - "city": "330100", - "district": "330106", - "town": "", - "area_name": "浙江省 杭州市 西湖区", - "address": "测试收啊啊啊啊啊啊", - "zip_code": "", - "mobile": "13312341234", - "telphone": "", - "created_at": "1505875313", - "updated_at": "1505875313" - }, - { - "id": "91", - "user_id": "448907", - "consignee": "萨达是", - "id_card": "", - "province": "120000", - "city": "120100", - "district": "120102", - "town": "", - "area_name": "天津 天津市 河东区", - "address": "实打实的撒的", - "zip_code": "123456", - "mobile": "13454193338", - "telphone": "", - "created_at": "1505820391", - "updated_at": "1505820391" - } - ], - "code": 200, - "message": "OK", - "success": true - }, - "address-default": { - "data": { - "id": "119", - "user_id": "448907", - "consignee": "2222", - "id_card": "", - "province": "130000", - "city": "130400", - "district": "130406", - "town": "", - "area_name": "河北省 邯郸市 峰峰矿区", - "address": "dsdsadsad", - "zip_code": "12323", - "mobile": "13454193338", - "telphone": "", - "created_at": "1506315000", - "updated_at": "1506315000" - }, - "code": 200, - "message": "OK", - "success": true - }, - "user-login": { - "data": { - "user_id": 448907, - "access_token": "hA-QA97BBuPFgDv9Eht8z2JFxDq-6cLQ", - "mobile": "13454193330", - "madian_token": "3Uu9q0RRx56IQlFTKBIYIzVjYTUyNWY5MDU4YzE2YjgyYTE1Y2ZhYmM3MWY2N2MwNzM1ZTJjOTFjNTYxODllZWQ4NWEwMGVkZTNkNzE3ZTfV\/eHskiAmLo1oMBrx1nmfN6RylF3VjMe+nrFt38WcmiGcyyZZK1tsq4OaNWiisbQpIuk5h9JhVOgO0aPffBwR\/VBNpwkTDPpzA6xECv4LAQ==" - }, - "code": 200, - "message": "OK", - "success": true - }, - "user-profile": { - "data": { - "user_id": "448907", - "nick_name": "11", - "gender": "1", - "birthday": "1508198400", - "avatar": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1528870575654&di=be72a93643dfff4162c32d70166ddfe4&imgtype=0&src=http%3A%2F%2Fg.hiphotos.baidu.com%2Fzhidao%2Fwh%253D450%252C600%2Fsign%3D67a7d1f0b551f819f1700b4eef8466db%2Ff9dcd100baa1cd112c3e25fbbc12c8fcc2ce2d64.jpg", - "province": "430000", - "city": "431200", - "district": "", - "area_name": "", - "default_address_id": "259", - "level": "1", - "background_image": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1528870451130&di=053a495c9c4a83c5f669d49032666acb&imgtype=0&src=http%3A%2F%2Fi1.hdslb.com%2Fbfs%2Farchive%2Fd7cf587340b13c7b17a22d478fcd68a998fbbefa.png", - "exp": "50", - "login_time": "1516765163", - "login_ip": "2130706433", - "created_at": "1501763730", - "updated_at": "1516765163", - "mobile": "123456789" - }, - "code": 200, - "message": "OK", - "success": true - }, - "shop-info": { - "data": { - "id": "1", - "user_id": "758", - "shop_id": "1", - "shop_name": "\u6b27\u4e09\u4e0d\u6c5f\u4e8c\u8def\u5e971", - "branch_name": "\u6c5f\u4e8c\u8def\u5e97", - "shop_qrcode": "http:\/\/moresing-v3.img-cn-shanghai.aliyuncs.com\/201612\/L32tMbF1PUiy40A9.png", - "avatar": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/20171201\/ZcawdYtnn3.jpg", - "banner": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/android\/201711\/6ebfc6b423caa4db6e3c8a91997210b7.JPEG", - "notice": "1212412", - "contact": "13370140905", - "wechat_id": "99999", - "qr_code": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/android\/201711\/607bde41c4c2e540d7f57b47f65c3748.JPEG", - "hash_code": "85f3952d8af25eec1fc533d77b6bdb29", - "item_limit": "2", - "status": "1", - "created_at": "1481964080", - "updated_at": "1516673113", - "province": "110000", - "city": "110100", - "district": "110101", - "area_name": "\u5317\u4eac,\u5317\u4eac\u5e02,\u4e1c\u57ce\u533a", - "address": "\u897f\u5b89\u8def100\u53f7", - "lng": "38.911251220094", - "lat": "121.60083184468", - "is_partner": 0, - "shop_status": 10, - "city_name": "\u5317\u4eac\u5e02" - }, - "code": 200, - "message": "OK", - "success": true - }, - "order-list": { - "data": { - "items": [{ - "id": "MD2018012300001228", - "status": 20, - "post_fee": 0, - "total_fee": 5, - "is_can_reminder": true, - "orderItems": [{ - "id": "MD2018012300001291", - "order_id": "MD2018012300001228", - "item_id": 1849, - "sku_id": "", - "price": 5, - "quantity": 1, - "item_name": "\u4fdd\u7a0e\u533a\uff01Merries\u82b1\u738b\u7eb8\u5c3f\u88e4NB90", - "pic_url": "http:\/\/moresing-v3.img-cn-shanghai.aliyuncs.com\/201611\/JDzsAMR8736tpgfe.jpg", - "sku_props_str": "", - "tax_fee": 0, - "discount_fee": 0, - "total_fee": 5, - "start_time": 0, - "end_time": 0, - "status": 20, - "refund_id": 0, - "refund_status": 0 - }] - }, { - "id": "MD2018012200001216", - "status": 30, - "post_fee": 0, - "total_fee": 1, - "is_can_reminder": false, - "orderItems": [{ - "id": "MD2018012200001279", - "order_id": "MD2018012200001216", - "item_id": 3566, - "sku_id": "", - "price": 1, - "quantity": 1, - "item_name": "\u89e3\u653e\u519b", - "pic_url": "http:\/\/moresing-v3.img-cn-shanghai.aliyuncs.com\/201711\/15100451141371822.jpg", - "sku_props_str": "", - "tax_fee": 0, - "discount_fee": 0, - "total_fee": 1, - "start_time": 0, - "end_time": 0, - "status": 30, - "refund_id": 191, - "refund_status": 10 - }] - }, { - "id": "MD2018012200001207", - "status": 20, - "post_fee": 1, - "total_fee": 6, - "is_can_reminder": true, - "orderItems": [{ - "id": "MD2018012200001269", - "order_id": "MD2018012200001207", - "item_id": 3631, - "sku_id": "", - "price": 5, - "quantity": 1, - "item_name": "ujbfgh", - "pic_url": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/android\/201711\/ff9e85124638b593212148aad47c893b.JPEG", - "sku_props_str": "", - "tax_fee": 0, - "discount_fee": 0, - "total_fee": 5, - "start_time": 0, - "end_time": 0, - "status": 20, - "refund_id": 175, - "refund_status": 10 - }] - }, { - "id": "MD2018012200001205", - "status": 20, - "post_fee": 1, - "total_fee": 6, - "is_can_reminder": true, - "orderItems": [{ - "id": "MD2018012200001267", - "order_id": "MD2018012200001205", - "item_id": 3631, - "sku_id": "", - "price": 5, - "quantity": 1, - "item_name": "ujbfgh", - "pic_url": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/android\/201711\/ff9e85124638b593212148aad47c893b.JPEG", - "sku_props_str": "", - "tax_fee": 0, - "discount_fee": 0, - "total_fee": 5, - "start_time": 0, - "end_time": 0, - "status": 20, - "refund_id": 173, - "refund_status": 10 - }] - }, { - "id": "MD2018012200001204", - "status": 20, - "post_fee": 1, - "total_fee": 6, - "is_can_reminder": true, - "orderItems": [{ - "id": "MD2018012200001266", - "order_id": "MD2018012200001204", - "item_id": 3631, - "sku_id": "", - "price": 5, - "quantity": 1, - "item_name": "ujbfgh", - "pic_url": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/android\/201711\/ff9e85124638b593212148aad47c893b.JPEG", - "sku_props_str": "", - "tax_fee": 0, - "discount_fee": 0, - "total_fee": 5, - "start_time": 0, - "end_time": 0, - "status": 20, - "refund_id": 171, - "refund_status": 10 - }] - }, { - "id": "MD2018012200001203", - "status": 20, - "post_fee": 1, - "total_fee": 6, - "is_can_reminder": true, - "orderItems": [{ - "id": "MD2018012200001265", - "order_id": "MD2018012200001203", - "item_id": 3631, - "sku_id": "", - "price": 5, - "quantity": 1, - "item_name": "ujbfgh", - "pic_url": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/android\/201711\/ff9e85124638b593212148aad47c893b.JPEG", - "sku_props_str": "", - "tax_fee": 0, - "discount_fee": 0, - "total_fee": 5, - "start_time": 0, - "end_time": 0, - "status": 20, - "refund_id": 169, - "refund_status": 10 - }] - }, { - "id": "MD2018012200001202", - "status": 20, - "post_fee": 1, - "total_fee": 6, - "is_can_reminder": true, - "orderItems": [{ - "id": "MD2018012200001264", - "order_id": "MD2018012200001202", - "item_id": 3631, - "sku_id": "", - "price": 5, - "quantity": 1, - "item_name": "ujbfgh", - "pic_url": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/android\/201711\/ff9e85124638b593212148aad47c893b.JPEG", - "sku_props_str": "", - "tax_fee": 0, - "discount_fee": 0, - "total_fee": 5, - "start_time": 0, - "end_time": 0, - "status": 20, - "refund_id": 167, - "refund_status": 10 - }] - }, { - "id": "MD2018012200001201", - "status": 20, - "post_fee": 1, - "total_fee": 6, - "is_can_reminder": true, - "orderItems": [{ - "id": "MD2018012200001263", - "order_id": "MD2018012200001201", - "item_id": 3631, - "sku_id": "", - "price": 5, - "quantity": 1, - "item_name": "ujbfgh", - "pic_url": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/android\/201711\/ff9e85124638b593212148aad47c893b.JPEG", - "sku_props_str": "", - "tax_fee": 0, - "discount_fee": 0, - "total_fee": 5, - "start_time": 0, - "end_time": 0, - "status": 20, - "refund_id": 165, - "refund_status": 10 - }] - }], - "page": { - "totalCount": 65, - "pageCount": 9, - "currentPage": 1, - "perPage": 8 - } - }, - "code": 200, - "message": "OK", - "success": true - }, - "electronic-list": { - "data": { - "items": [{ - "id": "MD2018022600001480", - "status": 10, - "total_fee": 1, - "serviceItems": [{ - "id": "MD2018022600001589", - "order_id": "MD2018022600001480", - "item_id": 3689, - "sku_id": "", - "price": 1, - "quantity": 1, - "item_name": "\u9897\u7c92\u5242\u963f\u8428\u5fb7\u8def\u53e3\u9644\u8fd1\u963f\u5580\u7409\u65af\u4f4e\u4ef7\u623f", - "pic_url": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/user\/1000597\/m5k6GmMZKT.jpg", - "sku_props_str": "", - "total_fee": 1, - "start_time": 1513069200, - "end_time": 1525845401, - "status": 10 - }] - }], - "page": { - "totalCount": 1, - "pageCount": 1, - "currentPage": 1, - "perPage": 8 - } - }, - "code": 200, - "message": "OK", - "success": true - }, - "refund-list": { - "data": { - "items": [{ - "id": 205, - "order_id": "MD2018011600001107", - "apply_refund_fee": 12, - "status": 60, - "orderItem": { - "id": "MD2018011600001131", - "price": 7, - "quantity": 2, - "item_id": 1849, - "item_name": "\u4fdd\u7a0e\u533a\uff01Merries\u82b1\u738b\u7eb8\u5c3f\u88e4NB90", - "pic_url": "http:\/\/moresing-v3.img-cn-shanghai.aliyuncs.com\/201611\/JDzsAMR8736tpgfe.jpg", - "sku_props_str": "", - "total_fee": 14, - "payment": 12 - } - }, { - "id": 201, - "order_id": "MD2018011500001084", - "apply_refund_fee": 1, - "status": 60, - "orderItem": { - "id": "MD2018011500001108", - "price": 1, - "quantity": 1, - "item_id": 3631, - "item_name": "ujbfgh", - "pic_url": "http:\/\/mamaqunaer.oss-cn-shanghai.aliyuncs.com\/android\/201711\/ff9e85124638b593212148aad47c893b.JPEG", - "sku_props_str": "", - "total_fee": 1, - "payment": 1 - } - }, { - "id": 191, - "order_id": "MD2018012200001216", - "apply_refund_fee": 1, - "status": 60, - "orderItem": { - "id": "MD2018012200001279", - "price": 1, - "quantity": 1, - "item_id": 3566, - "item_name": "\u89e3\u653e\u519b", - "pic_url": "http:\/\/moresing-v3.img-cn-shanghai.aliyuncs.com\/201711\/15100451141371822.jpg", - "sku_props_str": "", - "total_fee": 1, - "payment": 1 - } - }, { - "id": 101, - "order_id": "MD2018012200001216", - "apply_refund_fee": 1, - "status": 60, - "orderItem": { - "id": "MD2018012200001279", - "price": 1, - "quantity": 1, - "item_id": 3566, - "item_name": "\u89e3\u653e\u519b", - "pic_url": "http:\/\/moresing-v3.img-cn-shanghai.aliyuncs.com\/201711\/15100451141371822.jpg", - "sku_props_str": "", - "total_fee": 1, - "payment": 1 - } - }, { - "id": 105, - "order_id": "MD2018012200001216", - "apply_refund_fee": 1, - "status": 60, - "orderItem": { - "id": "MD2018012200001279", - "price": 1, - "quantity": 1, - "item_id": 3566, - "item_name": "\u89e3\u653e\u519b", - "pic_url": "http:\/\/moresing-v3.img-cn-shanghai.aliyuncs.com\/201711\/15100451141371822.jpg", - "sku_props_str": "", - "total_fee": 1, - "payment": 1 - } - }, { - "id": 112, - "order_id": "MD2018012200001216", - "apply_refund_fee": 1, - "status": 60, - "orderItem": { - "id": "MD2018012200001279", - "price": 1, - "quantity": 1, - "item_id": 3566, - "item_name": "\u89e3\u653e\u519b", - "pic_url": "http:\/\/moresing-v3.img-cn-shanghai.aliyuncs.com\/201711\/15100451141371822.jpg", - "sku_props_str": "", - "total_fee": 1, - "payment": 1 - } - }], - "page": { - "totalCount": 10, - "pageCount": 2, - "currentPage": 1, - "perPage": 8 - } - }, - "code": 200, - "message": "OK", - "success": true - } - -} diff --git a/litemall-vue/mock/route.json b/litemall-vue/mock/route.json deleted file mode 100644 index e69de29b..00000000 diff --git a/litemall-vue/package-lock.json b/litemall-vue/package-lock.json deleted file mode 100644 index 7935d332..00000000 --- a/litemall-vue/package-lock.json +++ /dev/null @@ -1,13570 +0,0 @@ -{ - "name": "vant--mobile-mall", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.0.0-beta.47.tgz", - "integrity": "sha1-0YwvTEuo0JOivPq1YWWTv+JEGic=", - "dev": true, - "requires": { - "@babel/highlight": "7.0.0-beta.47" - } - }, - "@babel/core": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/core/download/@babel/core-7.0.0-beta.47.tgz", - "integrity": "sha1-ucFk+5oeEIPwZ8I2qdoden11knE=", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.47", - "@babel/generator": "7.0.0-beta.47", - "@babel/helpers": "7.0.0-beta.47", - "@babel/template": "7.0.0-beta.47", - "@babel/traverse": "7.0.0-beta.47", - "@babel/types": "7.0.0-beta.47", - "babylon": "7.0.0-beta.47", - "convert-source-map": "1.6.0", - "debug": "3.2.6", - "json5": "0.5.1", - "lodash": "4.17.11", - "micromatch": "2.3.11", - "resolve": "1.8.1", - "semver": "5.6.0", - "source-map": "0.5.7" - } - }, - "@babel/generator": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.0.0-beta.47.tgz", - "integrity": "sha1-GDVwnzd8xNKkr/7m2SWKELvzudE=", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.47", - "jsesc": "2.5.1", - "lodash": "4.17.11", - "source-map": "0.5.7", - "trim-right": "1.0.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.0.0-beta.47.tgz", - "integrity": "sha1-NU+1lgVdnbNpIRvwdfDV6TkE1vY=", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.47" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.0.0-beta.47.tgz", - "integrity": "sha1-1ZF8Ke49aKvCxy9gS8BD9uBW6Qc=", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "7.0.0-beta.47", - "@babel/types": "7.0.0-beta.47" - } - }, - "@babel/helper-call-delegate": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/helper-call-delegate/download/@babel/helper-call-delegate-7.0.0-beta.47.tgz", - "integrity": "sha1-lreAQ5cHX3IqQDDTh29R7BnYgps=", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "7.0.0-beta.47", - "@babel/traverse": "7.0.0-beta.47", - "@babel/types": "7.0.0-beta.47" - } - }, - "@babel/helper-define-map": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/helper-define-map/download/@babel/helper-define-map-7.0.0-beta.47.tgz", - "integrity": "sha1-Q6ne+HxRZtwpYw1Rs9qcxDIMExw=", - "dev": true, - "requires": { - "@babel/helper-function-name": "7.0.0-beta.47", - "@babel/types": "7.0.0-beta.47", - "lodash": "4.17.11" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.0.0-beta.47.tgz", - "integrity": "sha1-VraI4oKmmPTRzxNUU6Ea6K+HChk=", - "dev": true, - "requires": { - "@babel/traverse": "7.0.0-beta.47", - "@babel/types": "7.0.0-beta.47" - } - }, - "@babel/helper-function-name": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.0.0-beta.47.tgz", - "integrity": "sha1-gFfWPpUehcV8As3+Va12CNc/+30=", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "7.0.0-beta.47", - "@babel/template": "7.0.0-beta.47", - "@babel/types": "7.0.0-beta.47" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.0.0-beta.47.tgz", - "integrity": "sha1-LeBPl8FLCUtViZ0/qDFEoW0gdRA=", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.47" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.0.0-beta.47.tgz", - "integrity": "sha1-zildHXI/4isoIOrsdI7XAapa49A=", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.47" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.0.0-beta.47.tgz", - "integrity": "sha1-Nb/PHRbc5IHvPexm1aGuan2Au0U=", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.47" - } - }, - "@babel/helper-module-imports": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.0.0-beta.47.tgz", - "integrity": "sha1-WvByAp/8++zm/7r12ZhMdVgPPwQ=", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.47", - "lodash": "4.17.11" - } - }, - "@babel/helper-module-transforms": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.0.0-beta.47.tgz", - "integrity": "sha1-fv+R/JaHO9e42BZpjxppu8AfPDg=", - "dev": true, - "requires": { - "@babel/helper-module-imports": "7.0.0-beta.47", - "@babel/helper-simple-access": "7.0.0-beta.47", - "@babel/helper-split-export-declaration": "7.0.0-beta.47", - "@babel/template": "7.0.0-beta.47", - "@babel/types": "7.0.0-beta.47", - "lodash": "4.17.11" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.0.0-beta.47.tgz", - "integrity": "sha1-CF2GTQYTxYE8G3xxthvqNvGVkp4=", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.47" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.0.0-beta.47.tgz", - "integrity": "sha1-T1ZBF+w5+Wz2D6/N41yd3ODgCP0=", - "dev": true - }, - "@babel/helper-regex": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/helper-regex/download/@babel/helper-regex-7.0.0-beta.47.tgz", - "integrity": "sha1-uOO1MTLE7bsEgEJCwC/+TWAxaXE=", - "dev": true, - "requires": { - "lodash": "4.17.11" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.0.0-beta.47.tgz", - "integrity": "sha1-RE3DYvYUcL1hp0Xrs2RDHZyhhsI=", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "7.0.0-beta.47", - "@babel/helper-wrap-function": "7.0.0-beta.47", - "@babel/template": "7.0.0-beta.47", - "@babel/traverse": "7.0.0-beta.47", - "@babel/types": "7.0.0-beta.47" - } - }, - "@babel/helper-replace-supers": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.0.0-beta.47.tgz", - "integrity": "sha1-MQsgajAoaKeStllFXOuifbaGy7c=", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "7.0.0-beta.47", - "@babel/helper-optimise-call-expression": "7.0.0-beta.47", - "@babel/traverse": "7.0.0-beta.47", - "@babel/types": "7.0.0-beta.47" - } - }, - "@babel/helper-simple-access": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.0.0-beta.47.tgz", - "integrity": "sha1-I011SsvaklGhDbaX71AYHqsSUEI=", - "dev": true, - "requires": { - "@babel/template": "7.0.0-beta.47", - "@babel/types": "7.0.0-beta.47", - "lodash": "4.17.11" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.0.0-beta.47.tgz", - "integrity": "sha1-4RJ3hVRy2Ng7ryLy0BhsSiBZsJo=", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.47" - } - }, - "@babel/helper-wrap-function": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.0.0-beta.47.tgz", - "integrity": "sha1-ZSi0SjzLTzrut5rdCogZL364EWE=", - "dev": true, - "requires": { - "@babel/helper-function-name": "7.0.0-beta.47", - "@babel/template": "7.0.0-beta.47", - "@babel/traverse": "7.0.0-beta.47", - "@babel/types": "7.0.0-beta.47" - } - }, - "@babel/helpers": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.0.0-beta.47.tgz", - "integrity": "sha1-+bQu0uTV917A+y55LBc+RR6NQP0=", - "dev": true, - "requires": { - "@babel/template": "7.0.0-beta.47", - "@babel/traverse": "7.0.0-beta.47", - "@babel/types": "7.0.0-beta.47" - } - }, - "@babel/highlight": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.0.0-beta.47.tgz", - "integrity": "sha1-j7yD+yoh8L0rlc2+sjjPlonK1JQ=", - "dev": true, - "requires": { - "chalk": "2.4.1", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.0.0-beta.47.tgz", - "integrity": "sha1-VxFCKEcIxa1OyQTZqnBUYaAQvlM=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47", - "@babel/helper-remap-async-to-generator": "7.0.0-beta.47", - "@babel/plugin-syntax-async-generators": "7.0.0-beta.47" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.0.0-beta.47.tgz", - "integrity": "sha1-CMGh38ktD1w3s5CWxvuIPhyksPU=", - "dev": true, - "requires": { - "@babel/helper-function-name": "7.0.0-beta.47", - "@babel/helper-plugin-utils": "7.0.0-beta.47", - "@babel/helper-replace-supers": "7.0.0-beta.47", - "@babel/plugin-syntax-class-properties": "7.0.0-beta.47" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-decorators/download/@babel/plugin-proposal-decorators-7.0.0-beta.47.tgz", - "integrity": "sha1-XolDyPjrMwH5Ee8NzT7WTPKMcj4=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47", - "@babel/plugin-syntax-decorators": "7.0.0-beta.47" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.0.0-beta.47.tgz", - "integrity": "sha1-4VKf3ciOlIho7h0O2qJ+vZUCMi0=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47", - "@babel/plugin-syntax-object-rest-spread": "7.0.0-beta.47" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.0.0-beta.47.tgz", - "integrity": "sha1-jGRTkZU3UX6nc7uPP87aQlB5Xvo=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47", - "@babel/plugin-syntax-optional-catch-binding": "7.0.0-beta.47" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.0.0-beta.47.tgz", - "integrity": "sha1-NNfkgRvcT1EkALsp0BBRhCUoyNU=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47", - "@babel/helper-regex": "7.0.0-beta.47", - "regexpu-core": "4.2.0" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.0.0-beta.47.tgz", - "integrity": "sha1-irlIUr80i63IZq+FvYUiIfCWElY=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.0.0-beta.47.tgz", - "integrity": "sha1-3lK+0S/UcshI4VYvV91KIC/ifxE=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-decorators/download/@babel/plugin-syntax-decorators-7.0.0-beta.47.tgz", - "integrity": "sha1-pC8Q/NZRlAvEddk7OsI0MrSoopM=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.0.0-beta.47.tgz", - "integrity": "sha1-7pZJFQFKaHcB7o4VwonjGnyJnmA=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.0.0-beta.47.tgz", - "integrity": "sha1-84SdlCiGldckvSBbT2w8meTsJKQ=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.0.0-beta.47.tgz", - "integrity": "sha1-IdpRTZTBOLImHKCfDeyautzhYYU=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.0.0-beta.47.tgz", - "integrity": "sha1-CxxSsGaqNok8QUUHc6WtuQTNQCQ=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.0.0-beta.47.tgz", - "integrity": "sha1-1u7NpMZSuQnjCI8Jg+uvjsKSmEs=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.0.0-beta.47.tgz", - "integrity": "sha1-VyOBbqHpH6MTqE5u6cwS/zHUZhA=", - "dev": true, - "requires": { - "@babel/helper-module-imports": "7.0.0-beta.47", - "@babel/helper-plugin-utils": "7.0.0-beta.47", - "@babel/helper-remap-async-to-generator": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.0.0-beta.47.tgz", - "integrity": "sha1-5CInjgbHl7Q8RfRZ2Dx6+dYjcAI=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.0.0-beta.47.tgz", - "integrity": "sha1-tzfMWKgb6lfv1b2guu+aQ6JYWa0=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47", - "lodash": "4.17.11" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.0.0-beta.47.tgz", - "integrity": "sha1-ev+cvnsm/ZTXqfl/qQE17yDJP7Y=", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "7.0.0-beta.47", - "@babel/helper-define-map": "7.0.0-beta.47", - "@babel/helper-function-name": "7.0.0-beta.47", - "@babel/helper-optimise-call-expression": "7.0.0-beta.47", - "@babel/helper-plugin-utils": "7.0.0-beta.47", - "@babel/helper-replace-supers": "7.0.0-beta.47", - "@babel/helper-split-export-declaration": "7.0.0-beta.47", - "globals": "11.8.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.0.0-beta.47.tgz", - "integrity": "sha1-Vu8qAhdporZekKPhL9ELeR2p8+A=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.0.0-beta.47.tgz", - "integrity": "sha1-RStgd3X9HE0QYhmXg3GJ78Cm1Cg=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.0.0-beta.47.tgz", - "integrity": "sha1-2NqbcG1L/GjeydVlZh+D5ugDZjY=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47", - "@babel/helper-regex": "7.0.0-beta.47", - "regexpu-core": "4.2.0" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.0.0-beta.47.tgz", - "integrity": "sha1-SqvtoFHKMAfjOiB9sI8aDPm9JTs=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.0.0-beta.47.tgz", - "integrity": "sha1-kw4av1259NtbY9v5fzWBrQvh6Qc=", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "7.0.0-beta.47", - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.0.0-beta.47.tgz", - "integrity": "sha1-Un1dwk5KStD8HQo5kNKZaMuYTnY=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.0.0-beta.47.tgz", - "integrity": "sha1-+0Q8gcx38yBqhjtzCzXIxVPOUEE=", - "dev": true, - "requires": { - "@babel/helper-function-name": "7.0.0-beta.47", - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.0.0-beta.47.tgz", - "integrity": "sha1-RI+tGW8GIWNoSjjxDxToMxWJLpw=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.0.0-beta.47.tgz", - "integrity": "sha1-hFZEGbEcG+a5/NTHs6ZzfyM1qsQ=", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "7.0.0-beta.47", - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.0.0-beta.47.tgz", - "integrity": "sha1-3+XG2GeqlhTlX3YWc2Bz7bOquIc=", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "7.0.0-beta.47", - "@babel/helper-plugin-utils": "7.0.0-beta.47", - "@babel/helper-simple-access": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.0.0-beta.47.tgz", - "integrity": "sha1-hRTbzfyjNFq9aQBZ5+hUThbsvwU=", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "7.0.0-beta.47", - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.0.0-beta.47.tgz", - "integrity": "sha1-bc+5Zh/dExsgtyEER0anowmIKRg=", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "7.0.0-beta.47", - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.0.0-beta.47.tgz", - "integrity": "sha1-S1y3zjDXv/oQWh9D7QfWriBqQVU=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.0.0-beta.47.tgz", - "integrity": "sha1-yo5fMmxQEch586btdJ5YvRD/8F0=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47", - "@babel/helper-replace-supers": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.0.0-beta.47.tgz", - "integrity": "sha1-RqQjYECmVSpfFl+z3dYDaJVLDd0=", - "dev": true, - "requires": { - "@babel/helper-call-delegate": "7.0.0-beta.47", - "@babel/helper-get-function-arity": "7.0.0-beta.47", - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.0.0-beta.47.tgz", - "integrity": "sha1-hlAOHEBAVfuY/IK3Owm9BTystRY=", - "dev": true, - "requires": { - "regenerator-transform": "0.12.4" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.0.0-beta.47.tgz", - "integrity": "sha1-FwCTj6hxCQnL8o9905+bQGiLCf0=", - "dev": true, - "requires": { - "@babel/helper-module-imports": "7.0.0-beta.47", - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.0.0-beta.47.tgz", - "integrity": "sha1-AL5ExPrY/iwA7RjqFeo8iN1Rnbs=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.0.0-beta.47.tgz", - "integrity": "sha1-P+rbAiku0em3UJDWUbnfiKerXFA=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.0.0-beta.47.tgz", - "integrity": "sha1-wKo0fXa13IfTs3rAFq2j+VBgUTE=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47", - "@babel/helper-regex": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.0.0-beta.47.tgz", - "integrity": "sha1-X3tbrfZMTF2nkCauqwMAHmKm7l8=", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "7.0.0-beta.47", - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.0.0-beta.47.tgz", - "integrity": "sha1-A8YS7AkhPrOGqB1fpnwjTuSyA0w=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.0.0-beta.47.tgz", - "integrity": "sha1-7+0LLx378oKDUCI0qVtL6I9/3LY=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.47", - "@babel/helper-regex": "7.0.0-beta.47", - "regexpu-core": "4.2.0" - } - }, - "@babel/preset-env": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.0.0-beta.47.tgz", - "integrity": "sha1-o9qztfrE3lbjUQvby1KPHL3tvi0=", - "dev": true, - "requires": { - "@babel/helper-module-imports": "7.0.0-beta.47", - "@babel/helper-plugin-utils": "7.0.0-beta.47", - "@babel/plugin-proposal-async-generator-functions": "7.0.0-beta.47", - "@babel/plugin-proposal-object-rest-spread": "7.0.0-beta.47", - "@babel/plugin-proposal-optional-catch-binding": "7.0.0-beta.47", - "@babel/plugin-proposal-unicode-property-regex": "7.0.0-beta.47", - "@babel/plugin-syntax-async-generators": "7.0.0-beta.47", - "@babel/plugin-syntax-object-rest-spread": "7.0.0-beta.47", - "@babel/plugin-syntax-optional-catch-binding": "7.0.0-beta.47", - "@babel/plugin-transform-arrow-functions": "7.0.0-beta.47", - "@babel/plugin-transform-async-to-generator": "7.0.0-beta.47", - "@babel/plugin-transform-block-scoped-functions": "7.0.0-beta.47", - "@babel/plugin-transform-block-scoping": "7.0.0-beta.47", - "@babel/plugin-transform-classes": "7.0.0-beta.47", - "@babel/plugin-transform-computed-properties": "7.0.0-beta.47", - "@babel/plugin-transform-destructuring": "7.0.0-beta.47", - "@babel/plugin-transform-dotall-regex": "7.0.0-beta.47", - "@babel/plugin-transform-duplicate-keys": "7.0.0-beta.47", - "@babel/plugin-transform-exponentiation-operator": "7.0.0-beta.47", - "@babel/plugin-transform-for-of": "7.0.0-beta.47", - "@babel/plugin-transform-function-name": "7.0.0-beta.47", - "@babel/plugin-transform-literals": "7.0.0-beta.47", - "@babel/plugin-transform-modules-amd": "7.0.0-beta.47", - "@babel/plugin-transform-modules-commonjs": "7.0.0-beta.47", - "@babel/plugin-transform-modules-systemjs": "7.0.0-beta.47", - "@babel/plugin-transform-modules-umd": "7.0.0-beta.47", - "@babel/plugin-transform-new-target": "7.0.0-beta.47", - "@babel/plugin-transform-object-super": "7.0.0-beta.47", - "@babel/plugin-transform-parameters": "7.0.0-beta.47", - "@babel/plugin-transform-regenerator": "7.0.0-beta.47", - "@babel/plugin-transform-shorthand-properties": "7.0.0-beta.47", - "@babel/plugin-transform-spread": "7.0.0-beta.47", - "@babel/plugin-transform-sticky-regex": "7.0.0-beta.47", - "@babel/plugin-transform-template-literals": "7.0.0-beta.47", - "@babel/plugin-transform-typeof-symbol": "7.0.0-beta.47", - "@babel/plugin-transform-unicode-regex": "7.0.0-beta.47", - "browserslist": "3.2.8", - "invariant": "2.2.4", - "semver": "5.6.0" - } - }, - "@babel/runtime": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.0.0-beta.47.tgz", - "integrity": "sha1-Jz9ecWKegPbLzXUHUDhIYV5Z9+A=", - "dev": true, - "requires": { - "core-js": "2.5.7", - "regenerator-runtime": "0.11.1" - } - }, - "@babel/template": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/template/download/@babel/template-7.0.0-beta.47.tgz", - "integrity": "sha1-BHOXCnwL7noaGMHKmZ07peW62D0=", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.47", - "@babel/types": "7.0.0-beta.47", - "babylon": "7.0.0-beta.47", - "lodash": "4.17.11" - } - }, - "@babel/traverse": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.0.0-beta.47.tgz", - "integrity": "sha1-Dlf9u5/zqQkYi26/HlKcZB5sgqQ=", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.47", - "@babel/generator": "7.0.0-beta.47", - "@babel/helper-function-name": "7.0.0-beta.47", - "@babel/helper-split-export-declaration": "7.0.0-beta.47", - "@babel/types": "7.0.0-beta.47", - "babylon": "7.0.0-beta.47", - "debug": "3.2.6", - "globals": "11.8.0", - "invariant": "2.2.4", - "lodash": "4.17.11" - } - }, - "@babel/types": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/@babel/types/download/@babel/types-7.0.0-beta.47.tgz", - "integrity": "sha1-5vzBppFFkALCZx1VilhnBt3a7vg=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "lodash": "4.17.11", - "to-fast-properties": "2.0.0" - } - }, - "@intervolga/optimize-cssnano-plugin": { - "version": "1.0.6", - "resolved": "http://registry.npm.taobao.org/@intervolga/optimize-cssnano-plugin/download/@intervolga/optimize-cssnano-plugin-1.0.6.tgz", - "integrity": "sha1-vnx4RhKLiPapsdEmGgrQbrXA/fg=", - "dev": true, - "requires": { - "cssnano": "4.1.4", - "cssnano-preset-default": "4.0.2", - "postcss": "7.0.5" - } - }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "http://registry.npm.taobao.org/@mrmlnc/readdir-enhanced/download/@mrmlnc/readdir-enhanced-2.2.1.tgz", - "integrity": "sha1-UkryQNGjYFJ7cwR17PoTRKpUDd4=", - "dev": true, - "requires": { - "call-me-maybe": "1.0.1", - "glob-to-regexp": "0.3.0" - } - }, - "@nodelib/fs.stat": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.2.tgz", - "integrity": "sha1-VMWpZEYr49TXivYxNjwY1vqRrCY=", - "dev": true - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/@protobufjs/aspromise/download/@protobufjs/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/@protobufjs/base64/download/@protobufjs/base64-1.1.2.tgz", - "integrity": "sha1-TIVzDlm5ofHzSQR9vyQpYDS7JzU=" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "http://registry.npm.taobao.org/@protobufjs/codegen/download/@protobufjs/codegen-2.0.4.tgz", - "integrity": "sha1-fvN/DQEPsCitGtWXIuUG2SYoFcs=" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/@protobufjs/eventemitter/download/@protobufjs/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/@protobufjs/fetch/download/@protobufjs/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "requires": { - "@protobufjs/aspromise": "1.1.2", - "@protobufjs/inquire": "1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/@protobufjs/float/download/@protobufjs/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/@protobufjs/inquire/download/@protobufjs/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/@protobufjs/path/download/@protobufjs/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/@protobufjs/pool/download/@protobufjs/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/@protobufjs/utf8/download/@protobufjs/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, - "@types/long": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/@types/long/download/@types/long-4.0.0.tgz", - "integrity": "sha1-cZVR0jUtMBrIuB23Mqy2vcKNve8=" - }, - "@types/node": { - "version": "10.12.30", - "resolved": "http://registry.npm.taobao.org/@types/node/download/@types/node-10.12.30.tgz", - "integrity": "sha1-TCtPABXyFPgVijRzUEgTIrOymy8=" - }, - "@vue/babel-preset-app": { - "version": "3.0.5", - "resolved": "http://registry.npm.taobao.org/@vue/babel-preset-app/download/@vue/babel-preset-app-3.0.5.tgz", - "integrity": "sha1-eqSmpZLd8EoGo88gkSUjlaz0wDM=", - "dev": true, - "requires": { - "@babel/plugin-proposal-class-properties": "7.0.0-beta.47", - "@babel/plugin-proposal-decorators": "7.0.0-beta.47", - "@babel/plugin-syntax-dynamic-import": "7.0.0-beta.47", - "@babel/plugin-syntax-jsx": "7.0.0-beta.47", - "@babel/plugin-transform-runtime": "7.0.0-beta.47", - "@babel/preset-env": "7.0.0-beta.47", - "@babel/runtime": "7.0.0-beta.47", - "babel-helper-vue-jsx-merge-props": "2.0.3", - "babel-plugin-dynamic-import-node": "2.2.0", - "babel-plugin-transform-vue-jsx": "4.0.1" - } - }, - "@vue/cli-overlay": { - "version": "3.0.5", - "resolved": "http://registry.npm.taobao.org/@vue/cli-overlay/download/@vue/cli-overlay-3.0.5.tgz", - "integrity": "sha1-QDvRtPWAdsqPhaZc8w4GzaPOazk=", - "dev": true - }, - "@vue/cli-plugin-babel": { - "version": "3.0.5", - "resolved": "http://registry.npm.taobao.org/@vue/cli-plugin-babel/download/@vue/cli-plugin-babel-3.0.5.tgz", - "integrity": "sha1-Y5bm9Sdx2KnPv+DZNpaZo5BSjEo=", - "dev": true, - "requires": { - "@babel/core": "7.0.0-beta.47", - "@vue/babel-preset-app": "3.0.5", - "babel-loader": "8.0.4" - } - }, - "@vue/cli-plugin-eslint": { - "version": "3.0.5", - "resolved": "http://registry.npm.taobao.org/@vue/cli-plugin-eslint/download/@vue/cli-plugin-eslint-3.0.5.tgz", - "integrity": "sha1-1nN3Xq9hJlj4wvveNWEN0FDJwRo=", - "dev": true, - "requires": { - "@vue/cli-shared-utils": "3.0.5", - "babel-eslint": "8.2.6", - "eslint": "4.19.1", - "eslint-loader": "2.1.1", - "eslint-plugin-vue": "4.7.1" - } - }, - "@vue/cli-service": { - "version": "3.0.5", - "resolved": "http://registry.npm.taobao.org/@vue/cli-service/download/@vue/cli-service-3.0.5.tgz", - "integrity": "sha1-bp/sEPTu7dCqj9diBv2jCJFCGEw=", - "dev": true, - "requires": { - "@intervolga/optimize-cssnano-plugin": "1.0.6", - "@vue/cli-overlay": "3.0.5", - "@vue/cli-shared-utils": "3.0.5", - "@vue/preload-webpack-plugin": "1.1.0", - "@vue/web-component-wrapper": "1.2.0", - "acorn": "5.7.3", - "address": "1.0.3", - "autoprefixer": "8.6.5", - "cache-loader": "1.2.2", - "case-sensitive-paths-webpack-plugin": "2.1.2", - "chalk": "2.4.1", - "clipboardy": "1.2.3", - "cliui": "4.1.0", - "copy-webpack-plugin": "4.5.3", - "css-loader": "1.0.0", - "cssnano": "4.1.4", - "debug": "3.2.6", - "escape-string-regexp": "1.0.5", - "file-loader": "1.1.11", - "friendly-errors-webpack-plugin": "1.7.0", - "fs-extra": "6.0.1", - "globby": "8.0.1", - "hash-sum": "1.0.2", - "html-webpack-plugin": "3.2.0", - "launch-editor-middleware": "2.2.1", - "lodash.defaultsdeep": "4.6.0", - "lodash.mapvalues": "4.6.0", - "lodash.transform": "4.6.0", - "mini-css-extract-plugin": "0.4.4", - "minimist": "1.2.0", - "ora": "2.1.0", - "portfinder": "1.0.17", - "postcss-loader": "2.1.6", - "read-pkg": "4.0.1", - "semver": "5.6.0", - "slash": "2.0.0", - "source-map-url": "0.4.0", - "ssri": "6.0.1", - "string.prototype.padend": "3.0.0", - "thread-loader": "1.2.0", - "uglifyjs-webpack-plugin": "1.3.0", - "url-loader": "1.1.2", - "vue-loader": "15.4.2", - "webpack": "4.20.2", - "webpack-bundle-analyzer": "2.13.1", - "webpack-chain": "4.12.1", - "webpack-dev-server": "3.1.9", - "webpack-merge": "4.1.4", - "yorkie": "2.0.0" - }, - "dependencies": { - "globby": { - "version": "8.0.1", - "resolved": "http://registry.npm.taobao.org/globby/download/globby-8.0.1.tgz", - "integrity": "sha1-ta1IuKqAs1uBT8EoHsyFHx0rW1A=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "dir-glob": "2.0.0", - "fast-glob": "2.2.3", - "glob": "7.1.3", - "ignore": "3.3.10", - "pify": "3.0.0", - "slash": "1.0.0" - }, - "dependencies": { - "slash": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - } - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "@vue/cli-shared-utils": { - "version": "3.0.5", - "resolved": "http://registry.npm.taobao.org/@vue/cli-shared-utils/download/@vue/cli-shared-utils-3.0.5.tgz", - "integrity": "sha1-b9R3LA7Kn1KcS5QbO3IaOq4de44=", - "dev": true, - "requires": { - "chalk": "2.4.1", - "execa": "0.10.0", - "joi": "13.7.0", - "launch-editor": "2.2.1", - "lru-cache": "4.1.3", - "node-ipc": "9.1.1", - "opn": "5.4.0", - "ora": "2.1.0", - "request": "2.88.0", - "request-promise-native": "1.0.5", - "semver": "5.6.0", - "string.prototype.padstart": "3.0.0" - } - }, - "@vue/component-compiler-utils": { - "version": "2.2.0", - "resolved": "http://registry.npm.taobao.org/@vue/component-compiler-utils/download/@vue/component-compiler-utils-2.2.0.tgz", - "integrity": "sha1-u7t+04qainyTq+fvLlSpCgS2MbQ=", - "dev": true, - "requires": { - "consolidate": "0.15.1", - "hash-sum": "1.0.2", - "lru-cache": "4.1.3", - "merge-source-map": "1.1.0", - "postcss": "6.0.23", - "postcss-selector-parser": "3.1.1", - "prettier": "1.13.7", - "source-map": "0.5.7", - "vue-template-es2015-compiler": "1.6.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz", - "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", - "dev": true, - "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - } - } - }, - "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "http://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", - "dev": true, - "requires": { - "dot-prop": "4.2.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } - } - } - }, - "@vue/eslint-config-prettier": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-3.0.5.tgz", - "integrity": "sha512-TxUqk3WO2Q/B1g2K7TYOy7crCwiCIeMJajiUy7ESYI4tt9oKa7iN7x7G1qBSxWoJ2pUvLGWR1tNkKkWNX/zrfA==", - "dev": true, - "requires": { - "eslint-config-prettier": "2.10.0", - "eslint-plugin-prettier": "2.7.0", - "prettier": "1.13.7" - } - }, - "@vue/preload-webpack-plugin": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/@vue/preload-webpack-plugin/download/@vue/preload-webpack-plugin-1.1.0.tgz", - "integrity": "sha1-12jboAQmHAKbU6d8XqLV+e5PPM4=", - "dev": true - }, - "@vue/web-component-wrapper": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/@vue/web-component-wrapper/download/@vue/web-component-wrapper-1.2.0.tgz", - "integrity": "sha1-uw5G8VhafiibTuYGfcxaauYvHdE=", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.7.8", - "resolved": "http://registry.npm.taobao.org/@webassemblyjs/ast/download/@webassemblyjs/ast-1.7.8.tgz", - "integrity": "sha1-8x9IDevu+VfwG2I/J+q8aV+k/o8=", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.7.8", - "@webassemblyjs/helper-wasm-bytecode": "1.7.8", - "@webassemblyjs/wast-parser": "1.7.8" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.7.8", - "resolved": "http://registry.npm.taobao.org/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.7.8.tgz", - "integrity": "sha1-Gz7Q4n44QDIlTpMi/GRt0+cO8bk=", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.7.8", - "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.7.8.tgz", - "integrity": "sha1-orScEfYV5zb4FeySfwNdz6aQ1XI=", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.7.8", - "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.7.8.tgz", - "integrity": "sha1-P8Zr+gnBxg6CTPPViHgm+sBih30=", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.7.8", - "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.7.8.tgz", - "integrity": "sha1-zFp+lSK3DnWA3wVt/TQCDPKWRbA=", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.7.8" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.7.8", - "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.7.8.tgz", - "integrity": "sha1-/kYHQwr0ZpEnl8Iayv0wRggBguo=", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.7.8", - "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.7.8.tgz", - "integrity": "sha1-PC5+6T0U/0doumb7G+Qv3J3HFgo=", - "dev": true - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.7.8", - "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.7.8.tgz", - "integrity": "sha1-ib23jNbdUgmuLtKSXeeNDw4AtvA=", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.7.8", - "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.7.8.tgz", - "integrity": "sha1-xo730mpvwSQhsublb5vIEN+zPoc=", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.8", - "@webassemblyjs/helper-buffer": "1.7.8", - "@webassemblyjs/helper-wasm-bytecode": "1.7.8", - "@webassemblyjs/wasm-gen": "1.7.8" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.7.8", - "resolved": "http://registry.npm.taobao.org/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.7.8.tgz", - "integrity": "sha1-HzeXSxPLSGqSN+c84Eysei8SZe0=", - "dev": true, - "requires": { - "@xtuc/ieee754": "1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.7.8", - "resolved": "http://registry.npm.taobao.org/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.7.8.tgz", - "integrity": "sha1-G+6DQmgZGS2y6hojS4TH68bTTB8=", - "dev": true, - "requires": { - "@xtuc/long": "4.2.1" - } - }, - "@webassemblyjs/utf8": { - "version": "1.7.8", - "resolved": "http://registry.npm.taobao.org/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.7.8.tgz", - "integrity": "sha1-K0idXPQ+Cuu5PY4teSr/mHnGHwU=", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.7.8", - "resolved": "http://registry.npm.taobao.org/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.7.8.tgz", - "integrity": "sha1-+L2+cIhxjsonscNJu3wGuKRXlQw=", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.8", - "@webassemblyjs/helper-buffer": "1.7.8", - "@webassemblyjs/helper-wasm-bytecode": "1.7.8", - "@webassemblyjs/helper-wasm-section": "1.7.8", - "@webassemblyjs/wasm-gen": "1.7.8", - "@webassemblyjs/wasm-opt": "1.7.8", - "@webassemblyjs/wasm-parser": "1.7.8", - "@webassemblyjs/wast-printer": "1.7.8" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.7.8", - "resolved": "http://registry.npm.taobao.org/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.7.8.tgz", - "integrity": "sha1-foq/FUXq50rGeB1UXANK88/Qx9U=", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.8", - "@webassemblyjs/helper-wasm-bytecode": "1.7.8", - "@webassemblyjs/ieee754": "1.7.8", - "@webassemblyjs/leb128": "1.7.8", - "@webassemblyjs/utf8": "1.7.8" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.7.8", - "resolved": "http://registry.npm.taobao.org/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.7.8.tgz", - "integrity": "sha1-etpuIRkUco/OAv8P+cNE7cbUHyY=", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.8", - "@webassemblyjs/helper-buffer": "1.7.8", - "@webassemblyjs/wasm-gen": "1.7.8", - "@webassemblyjs/wasm-parser": "1.7.8" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.7.8", - "resolved": "http://registry.npm.taobao.org/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.7.8.tgz", - "integrity": "sha1-2sR8KR+2o+Y1Ka7NZHWSzTSvv5Q=", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.8", - "@webassemblyjs/helper-api-error": "1.7.8", - "@webassemblyjs/helper-wasm-bytecode": "1.7.8", - "@webassemblyjs/ieee754": "1.7.8", - "@webassemblyjs/leb128": "1.7.8", - "@webassemblyjs/utf8": "1.7.8" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.7.8", - "resolved": "http://registry.npm.taobao.org/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.7.8.tgz", - "integrity": "sha1-+Kq5pFDASMH5U3aVyJ+uuS+r+6U=", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.8", - "@webassemblyjs/floating-point-hex-parser": "1.7.8", - "@webassemblyjs/helper-api-error": "1.7.8", - "@webassemblyjs/helper-code-frame": "1.7.8", - "@webassemblyjs/helper-fsm": "1.7.8", - "@xtuc/long": "4.2.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.7.8", - "resolved": "http://registry.npm.taobao.org/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.7.8.tgz", - "integrity": "sha1-5+lleCwZEvapZfFKU/9D2K0EA6U=", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.8", - "@webassemblyjs/wast-parser": "1.7.8", - "@xtuc/long": "4.2.1" - } - }, - "@xkeshi/vue-countdown": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@xkeshi/vue-countdown/-/vue-countdown-1.0.1.tgz", - "integrity": "sha512-Mqhx52N+5pD9TZCo/uKVshS1xxKZK7mh0niOlKfT5VzWMOUEQ8KXIGOiG8PtnpbwQ8FUtEe22g0E3yKZY5E1zA==" - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz", - "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.1", - "resolved": "http://registry.npm.taobao.org/@xtuc/long/download/@xtuc/long-4.2.1.tgz", - "integrity": "sha1-XIXWYvdvodNFdXZsXc1mFavNMNg=", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.5", - "resolved": "http://registry.npm.taobao.org/accepts/download/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "dev": true, - "requires": { - "mime-types": "2.1.20", - "negotiator": "0.6.1" - } - }, - "acorn": { - "version": "5.7.3", - "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-5.7.3.tgz", - "integrity": "sha1-Z6ojG/iBKXS4UjWpZ3Hra9B+onk=", - "dev": true - }, - "acorn-dynamic-import": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/acorn-dynamic-import/download/acorn-dynamic-import-3.0.0.tgz", - "integrity": "sha1-kBzu5Mf6rvfgetKkfokGddpQong=", - "dev": true, - "requires": { - "acorn": "5.7.3" - } - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "3.3.0" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, - "address": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/address/download/address-1.0.3.tgz", - "integrity": "sha1-tfUGMfjWzsi9IMljljr7VeBsvOk=", - "dev": true - }, - "ajv": { - "version": "5.5.2", - "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" - } - }, - "ajv-errors": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.0.tgz", - "integrity": "sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=", - "dev": true - }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/alphanum-sort/download/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-colors": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.1.0.tgz", - "integrity": "sha1-3PqsyQ75GH3kE+w++NXrmBqYgI8=", - "dev": true - }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.1.0.tgz", - "integrity": "sha1-9zIHu4EgfXX9bIPxJa8m7qN4yjA=", - "dev": true - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "http://registry.npm.taobao.org/ansi-html/download/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "1.9.3" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz", - "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", - "dev": true, - "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", - "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", - "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", - "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz", - "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", - "dev": true, - "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz", - "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz", - "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=", - "dev": true - }, - "arch": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/arch/download/arch-2.1.1.tgz", - "integrity": "sha1-j1wnMao1owkpIhuwZA7tZRdeyE4=", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "http://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz", - "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz", - "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-filter": { - "version": "0.0.1", - "resolved": "http://registry.npm.taobao.org/array-filter/download/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "array-map": { - "version": "0.0.0", - "resolved": "http://registry.npm.taobao.org/array-map/download/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "http://registry.npm.taobao.org/array-reduce/download/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "http://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz", - "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", - "dev": true, - "requires": { - "safer-buffer": "2.1.2" - } - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "http://registry.npm.taobao.org/asn1.js/download/asn1.js-4.10.1.tgz", - "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" - } - }, - "assert": { - "version": "1.4.1", - "resolved": "http://registry.npm.taobao.org/assert/download/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "requires": { - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "http://registry.npm.taobao.org/util/download/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "1.5.2", - "resolved": "http://registry.npm.taobao.org/async/download/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "async-each": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/async-each/download/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.0.tgz", - "integrity": "sha1-ePrtjD0HSrgfIrTphdeehzj3IPg=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "http://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz", - "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=", - "dev": true - }, - "autoprefixer": { - "version": "8.6.5", - "resolved": "http://registry.npm.taobao.org/autoprefixer/download/autoprefixer-8.6.5.tgz", - "integrity": "sha1-ND89GT7VaLMgjgARehuW62kdTuk=", - "dev": true, - "requires": { - "browserslist": "3.2.8", - "caniuse-lite": "1.0.30000890", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "6.0.23", - "postcss-value-parser": "3.3.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz", - "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", - "dev": true, - "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.5.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - } - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "http://registry.npm.taobao.org/aws4/download/aws4-1.8.0.tgz", - "integrity": "sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8=", - "dev": true - }, - "axios": { - "version": "0.18.0", - "resolved": "http://registry.npmjs.org/axios/-/axios-0.18.0.tgz", - "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", - "requires": { - "follow-redirects": "1.5.9", - "is-buffer": "1.1.6" - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "babel-eslint": { - "version": "8.2.6", - "resolved": "http://registry.npm.taobao.org/babel-eslint/download/babel-eslint-8.2.6.tgz", - "integrity": "sha1-YnDQxzIFYoBnwPeuFpOp55es79k=", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/traverse": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "1.0.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.0.0-beta.44", - "resolved": "http://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.0.0-beta.44.tgz", - "integrity": "sha1-KgJkM2jegJFhYr5whlyXd08629k=", - "dev": true, - "requires": { - "@babel/highlight": "7.0.0-beta.44" - } - }, - "@babel/generator": { - "version": "7.0.0-beta.44", - "resolved": "http://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.0.0-beta.44.tgz", - "integrity": "sha1-x+Z7m1KEr89pswm1DX038+UDPUI=", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.44", - "jsesc": "2.5.1", - "lodash": "4.17.11", - "source-map": "0.5.7", - "trim-right": "1.0.1" - } - }, - "@babel/helper-function-name": { - "version": "7.0.0-beta.44", - "resolved": "http://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.0.0-beta.44.tgz", - "integrity": "sha1-4YVSqq4iMRAKbkheA4VLw1MtRN0=", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "7.0.0-beta.44", - "@babel/template": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0-beta.44", - "resolved": "http://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.0.0-beta.44.tgz", - "integrity": "sha1-0Dym3SufewseazLFbHKDYUDbOhU=", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.44" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.0.0-beta.44", - "resolved": "http://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.0.0-beta.44.tgz", - "integrity": "sha1-wLNRc14PvLOCLIrY205YOwXr2dw=", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.44" - } - }, - "@babel/highlight": { - "version": "7.0.0-beta.44", - "resolved": "http://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.0.0-beta.44.tgz", - "integrity": "sha1-GMlM5UORaoBVPtzc9oGJCyAHR9U=", - "dev": true, - "requires": { - "chalk": "2.4.1", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "@babel/template": { - "version": "7.0.0-beta.44", - "resolved": "http://registry.npm.taobao.org/@babel/template/download/@babel/template-7.0.0-beta.44.tgz", - "integrity": "sha1-+IMvT9zuXVm/UV5ZX8UQbFKbOU8=", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", - "lodash": "4.17.11" - } - }, - "@babel/traverse": { - "version": "7.0.0-beta.44", - "resolved": "http://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.0.0-beta.44.tgz", - "integrity": "sha1-qXCixFR3rRgBfi5GWgYG/u4NKWY=", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/generator": "7.0.0-beta.44", - "@babel/helper-function-name": "7.0.0-beta.44", - "@babel/helper-split-export-declaration": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", - "debug": "3.2.6", - "globals": "11.8.0", - "invariant": "2.2.4", - "lodash": "4.17.11" - } - }, - "@babel/types": { - "version": "7.0.0-beta.44", - "resolved": "http://registry.npm.taobao.org/@babel/types/download/@babel/types-7.0.0-beta.44.tgz", - "integrity": "sha1-axsWRZH3fewKA0KsqZXy0Eazp1c=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "lodash": "4.17.11", - "to-fast-properties": "2.0.0" - } - }, - "babylon": { - "version": "7.0.0-beta.44", - "resolved": "http://registry.npm.taobao.org/babylon/download/babylon-7.0.0-beta.44.tgz", - "integrity": "sha1-iRWeFebjDFCW4i1zjYwK+KDoyh0=", - "dev": true - } - } - }, - "babel-helper-vue-jsx-merge-props": { - "version": "2.0.3", - "resolved": "http://registry.npm.taobao.org/babel-helper-vue-jsx-merge-props/download/babel-helper-vue-jsx-merge-props-2.0.3.tgz", - "integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY=", - "dev": true - }, - "babel-loader": { - "version": "8.0.4", - "resolved": "http://registry.npm.taobao.org/babel-loader/download/babel-loader-8.0.4.tgz", - "integrity": "sha1-e78gy+RWBini5BU0FHaS0/7L3OY=", - "dev": true, - "requires": { - "find-cache-dir": "1.0.0", - "loader-utils": "1.1.0", - "mkdirp": "0.5.1", - "util.promisify": "1.0.0" - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.2.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.2.0.tgz", - "integrity": "sha1-wK37B9lfSkSV6aqsbsOGxNfCUk4=", - "dev": true, - "requires": { - "object.assign": "4.1.0" - } - }, - "babel-plugin-import": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/babel-plugin-import/-/babel-plugin-import-1.9.1.tgz", - "integrity": "sha512-1IRnjAhCC9SxD9y9iqOfMf4U7b88mWZJHWfA2DSKq0FjYM63tYzWrTp81X6yZuCV7iDVSH9jMqxfwBxLJRXV7Q==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "7.0.0", - "@babel/runtime": "7.1.2" - }, - "dependencies": { - "@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", - "dev": true, - "requires": { - "@babel/types": "7.1.3" - } - }, - "@babel/runtime": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.1.2.tgz", - "integrity": "sha512-Y3SCjmhSupzFB6wcv1KmmFucH6gDVnI30WjOcicV10ju0cZjak3Jcs67YLIXBrmZYw1xCrVeJPbycFwrqNyxpg==", - "dev": true, - "requires": { - "regenerator-runtime": "0.12.1" - } - }, - "@babel/types": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.3.tgz", - "integrity": "sha512-RpPOVfK+yatXyn8n4PB1NW6k9qjinrXrRR8ugBN8fD6hCy5RXI6PSbVqpOJBO9oSaY7Nom4ohj35feb0UR9hSA==", - "dev": true, - "requires": { - "esutils": "2.0.2", - "lodash": "4.17.11", - "to-fast-properties": "2.0.0" - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", - "dev": true - } - } - }, - "babel-plugin-lodash": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz", - "integrity": "sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "7.0.0", - "@babel/types": "7.1.3", - "glob": "7.1.3", - "lodash": "4.17.11", - "require-package-name": "2.0.1" - }, - "dependencies": { - "@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", - "dev": true, - "requires": { - "@babel/types": "7.1.3" - } - }, - "@babel/types": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.3.tgz", - "integrity": "sha512-RpPOVfK+yatXyn8n4PB1NW6k9qjinrXrRR8ugBN8fD6hCy5RXI6PSbVqpOJBO9oSaY7Nom4ohj35feb0UR9hSA==", - "dev": true, - "requires": { - "esutils": "2.0.2", - "lodash": "4.17.11", - "to-fast-properties": "2.0.0" - } - } - } - }, - "babel-plugin-transform-vue-jsx": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-vue-jsx/download/babel-plugin-transform-vue-jsx-4.0.1.tgz", - "integrity": "sha1-LIvdzoem7wnqpZhp/xv77q/F+I0=", - "dev": true, - "requires": { - "esutils": "2.0.2" - } - }, - "babylon": { - "version": "7.0.0-beta.47", - "resolved": "http://registry.npm.taobao.org/babylon/download/babylon-7.0.0-beta.47.tgz", - "integrity": "sha1-bR+kTwq+xBq3x4BIHmL9mq+96oA=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "http://registry.npm.taobao.org/base/download/base-0.11.2.tgz", - "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", - "dev": true, - "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", - "dev": true - } - } - }, - "base64-js": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/base64-js/download/base64-js-1.3.0.tgz", - "integrity": "sha1-yrHmEY8FEJXli1KBrqjBzSK/wOM=", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "bfj-node4": { - "version": "5.3.1", - "resolved": "http://registry.npm.taobao.org/bfj-node4/download/bfj-node4-5.3.1.tgz", - "integrity": "sha1-4j2LJwV/HQIU/FYRQq2duZjyaDA=", - "dev": true, - "requires": { - "bluebird": "3.5.2", - "check-types": "7.4.0", - "tryer": "1.0.1" - } - }, - "big.js": { - "version": "3.2.0", - "resolved": "http://registry.npm.taobao.org/big.js/download/big.js-3.2.0.tgz", - "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=", - "dev": true - }, - "binary-extensions": { - "version": "1.12.0", - "resolved": "http://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.12.0.tgz", - "integrity": "sha1-wteA9T1Fu6gxeokC1M7q86Y4WxQ=", - "dev": true - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "bluebird": { - "version": "3.5.2", - "resolved": "http://registry.npm.taobao.org/bluebird/download/bluebird-3.5.2.tgz", - "integrity": "sha1-G+CQjgVKdRdUVJwnBInBUF1KsVo=", - "dev": true - }, - "bn.js": { - "version": "4.11.8", - "resolved": "http://registry.npm.taobao.org/bn.js/download/bn.js-4.11.8.tgz", - "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=", - "dev": true - }, - "body-parser": { - "version": "1.18.3", - "resolved": "http://registry.npm.taobao.org/body-parser/download/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "1.6.16" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.23.tgz", - "integrity": "sha1-KXhx9jvlB63Pv8pxXQzQ7thOmmM=", - "dev": true, - "requires": { - "safer-buffer": "2.1.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "http://registry.npm.taobao.org/bonjour/download/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "2.1.1", - "deep-equal": "1.0.1", - "dns-equal": "1.0.0", - "dns-txt": "2.0.2", - "multicast-dns": "6.2.3", - "multicast-dns-service-types": "1.1.0" - }, - "dependencies": { - "array-flatten": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/array-flatten/download/array-flatten-2.1.1.tgz", - "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", - "dev": true - } - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz", - "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "http://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.3" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz", - "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=", - "dev": true, - "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz", - "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", - "dev": true, - "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.2", - "evp_bytestokey": "1.0.3" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.2.tgz", - "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=", - "dev": true, - "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "http://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.1", - "inherits": "2.0.3", - "parse-asn1": "5.1.1" - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz", - "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", - "dev": true, - "requires": { - "pako": "1.0.6" - } - }, - "browserslist": { - "version": "3.2.8", - "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-3.2.8.tgz", - "integrity": "sha1-sABTYdZHHw9ZUnl6dvyYXx+Xj8Y=", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000890", - "electron-to-chromium": "1.3.78" - } - }, - "buffer": { - "version": "4.9.1", - "resolved": "http://registry.npm.taobao.org/buffer/download/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, - "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.12", - "isarray": "1.0.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz", - "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/buffer-indexof/download/buffer-indexof-1.1.1.tgz", - "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "cacache": { - "version": "10.0.4", - "resolved": "http://registry.npm.taobao.org/cacache/download/cacache-10.0.4.tgz", - "integrity": "sha1-ZFI2eZnv+dQYiu/ZoU6dfGomNGA=", - "dev": true, - "requires": { - "bluebird": "3.5.2", - "chownr": "1.1.1", - "glob": "7.1.3", - "graceful-fs": "4.1.11", - "lru-cache": "4.1.3", - "mississippi": "2.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "5.3.0", - "unique-filename": "1.1.1", - "y18n": "4.0.0" - }, - "dependencies": { - "ssri": { - "version": "5.3.0", - "resolved": "http://registry.npm.taobao.org/ssri/download/ssri-5.3.0.tgz", - "integrity": "sha1-ujhyycbTOgcEp9cf8EXl7EiZnQY=", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz", - "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", - "dev": true, - "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "cache-loader": { - "version": "1.2.2", - "resolved": "http://registry.npm.taobao.org/cache-loader/download/cache-loader-1.2.2.tgz", - "integrity": "sha1-bVw43tlZoJzF1YGQq1r29zvTU/U=", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "mkdirp": "0.5.1", - "neo-async": "2.5.2", - "schema-utils": "0.4.7" - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/call-me-maybe/download/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "caller-path": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/caller-path/download/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/callsites/download/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "camel-case": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, - "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - } - } - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/caniuse-api/download/caniuse-api-3.0.0.tgz", - "integrity": "sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA=", - "dev": true, - "requires": { - "browserslist": "4.2.0", - "caniuse-lite": "1.0.30000890", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" - }, - "dependencies": { - "browserslist": { - "version": "4.2.0", - "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-4.2.0.tgz", - "integrity": "sha1-Pl5e33+pdY3tCIXPiMHkvnU6WRw=", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000890", - "electron-to-chromium": "1.3.78", - "node-releases": "1.0.0-alpha.12" - } - } - } - }, - "caniuse-lite": { - "version": "1.0.30000890", - "resolved": "http://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30000890.tgz", - "integrity": "sha1-hqGP/MZdeexqQ36YV2G4vxxO/q8=", - "dev": true - }, - "case-sensitive-paths-webpack-plugin": { - "version": "2.1.2", - "resolved": "http://registry.npm.taobao.org/case-sensitive-paths-webpack-plugin/download/case-sensitive-paths-webpack-plugin-2.1.2.tgz", - "integrity": "sha1-yJm1IXV2NokiRXHa13h0LhM/AZI=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "2.4.1", - "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-2.4.1.tgz", - "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "chardet": { - "version": "0.4.2", - "resolved": "http://registry.npm.taobao.org/chardet/download/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, - "check-types": { - "version": "7.4.0", - "resolved": "http://registry.npm.taobao.org/check-types/download/check-types-7.4.0.tgz", - "integrity": "sha1-A3jsG5YW7HH3dJMaPGUW+tjBUvQ=", - "dev": true - }, - "chokidar": { - "version": "2.0.4", - "resolved": "http://registry.npm.taobao.org/chokidar/download/chokidar-2.0.4.tgz", - "integrity": "sha1-NW/04rDo5D4yLRijckYLvPOszSY=", - "dev": true, - "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "fsevents": "1.2.7", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "lodash.debounce": "4.0.8", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1", - "upath": "1.1.0" - }, - "dependencies": { - "array-unique": { - "version": "0.3.2", - "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", - "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - } - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "chownr": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/chownr/download/chownr-1.1.1.tgz", - "integrity": "sha1-VHJri4//TfBTxCGH6AH7RBLfFJQ=", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/chrome-trace-event/download/chrome-trace-event-1.0.0.tgz", - "integrity": "sha1-Rakb0sIMlBHwljtarrmhuV4JzEg=", - "dev": true, - "requires": { - "tslib": "1.9.3" - } - }, - "ci-info": { - "version": "1.6.0", - "resolved": "http://registry.npm.taobao.org/ci-info/download/ci-info-1.6.0.tgz", - "integrity": "sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc=", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz", - "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "circular-json": { - "version": "0.3.3", - "resolved": "http://registry.npm.taobao.org/circular-json/download/circular-json-0.3.3.tgz", - "integrity": "sha1-gVyZ6oT2gJUp0vRXkb34JxE1LWY=", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "http://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz", - "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", - "dev": true, - "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "clean-css": { - "version": "4.2.1", - "resolved": "http://registry.npm.taobao.org/clean-css/download/clean-css-4.2.1.tgz", - "integrity": "sha1-LUEe92uFabbQyEBo2r6FsKpeXBc=", - "dev": true, - "requires": { - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - } - } - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "2.0.0" - } - }, - "cli-spinners": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/cli-spinners/download/cli-spinners-1.3.1.tgz", - "integrity": "sha1-ACwZkJEtDVlYDJO9NsBW3pnkJZo=", - "dev": true - }, - "cli-width": { - "version": "2.2.0", - "resolved": "http://registry.npm.taobao.org/cli-width/download/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "clipboardy": { - "version": "1.2.3", - "resolved": "http://registry.npm.taobao.org/clipboardy/download/clipboardy-1.2.3.tgz", - "integrity": "sha1-BSY2G/eHJMHyC+JI1CjjZUM8B+8=", - "dev": true, - "requires": { - "arch": "2.1.1", - "execa": "0.8.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.3", - "shebang-command": "1.2.0", - "which": "1.3.1" - } - }, - "execa": { - "version": "0.8.0", - "resolved": "http://registry.npm.taobao.org/execa/download/execa-0.8.0.tgz", - "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", - "dev": true, - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } - } - } - }, - "cliui": { - "version": "4.1.0", - "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-4.1.0.tgz", - "integrity": "sha1-NIQi2+gtgAswIu709qwQvy5NG0k=", - "dev": true, - "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "clone-deep": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", - "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", - "dev": true, - "requires": { - "for-own": "1.0.0", - "is-plain-object": "2.0.4", - "kind-of": "6.0.2", - "shallow-clone": "1.0.0" - }, - "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "coa": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/coa/download/coa-2.0.1.tgz", - "integrity": "sha1-8/iwsVBz411wJj+xBCyywCPbOK8=", - "dev": true, - "requires": { - "q": "1.5.1" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" - } - }, - "color": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/color/download/color-3.1.0.tgz", - "integrity": "sha1-2On7CWcyh1d0yEv5IoFd8DCND/w=", - "dev": true, - "requires": { - "color-convert": "1.9.3", - "color-string": "1.5.3" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz", - "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-string": { - "version": "1.5.3", - "resolved": "http://registry.npm.taobao.org/color-string/download/color-string-1.5.3.tgz", - "integrity": "sha1-ybvF8BtYtUkvPWhXRZy2WQziBMw=", - "dev": true, - "requires": { - "color-name": "1.1.3", - "simple-swizzle": "0.2.2" - } - }, - "colors": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/colors/download/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, - "combined-stream": { - "version": "1.0.7", - "resolved": "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.7.tgz", - "integrity": "sha1-LR0kMXr7ir6V1tLAsHtXgTU52Cg=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.17.1", - "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz", - "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "compressible": { - "version": "2.0.15", - "resolved": "http://registry.npm.taobao.org/compressible/download/compressible-2.0.15.tgz", - "integrity": "sha1-hXqasKfloH2Ng37UP+Le//ZP4hI=", - "dev": true, - "requires": { - "mime-db": "1.36.0" - } - }, - "compression": { - "version": "1.7.3", - "resolved": "http://registry.npm.taobao.org/compression/download/compression-1.7.3.tgz", - "integrity": "sha1-J+DhdqryYPfywoE8PkQK258Zk9s=", - "dev": true, - "requires": { - "accepts": "1.3.5", - "bytes": "3.0.0", - "compressible": "2.0.15", - "debug": "2.6.9", - "on-headers": "1.0.1", - "safe-buffer": "5.1.2", - "vary": "1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "http://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz", - "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", - "dev": true, - "requires": { - "buffer-from": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" - } - }, - "connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "http://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", - "dev": true - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/console-browserify/download/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "0.1.4" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "consolidate": { - "version": "0.15.1", - "resolved": "http://registry.npm.taobao.org/consolidate/download/consolidate-0.15.1.tgz", - "integrity": "sha1-IasEMjXHGgfUXZqtmFk7DbpWurc=", - "dev": true, - "requires": { - "bluebird": "3.5.2" - } - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true - }, - "content-type": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", - "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=", - "dev": true - }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "http://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.6.0.tgz", - "integrity": "sha1-UbU3qMQ+DwTewZk7/83VBOdYrCA=", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "cookie": { - "version": "0.3.1", - "resolved": "http://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "http://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "http://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz", - "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=", - "dev": true, - "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copy-webpack-plugin": { - "version": "4.5.3", - "resolved": "http://registry.npm.taobao.org/copy-webpack-plugin/download/copy-webpack-plugin-4.5.3.tgz", - "integrity": "sha1-FKIk0gXkb3p595VgKOHabfIiX/I=", - "dev": true, - "requires": { - "cacache": "10.0.4", - "find-cache-dir": "1.0.0", - "globby": "7.1.1", - "is-glob": "4.0.0", - "loader-utils": "1.1.0", - "minimatch": "3.0.4", - "p-limit": "1.3.0", - "serialize-javascript": "1.5.0" - }, - "dependencies": { - "globby": { - "version": "7.1.1", - "resolved": "http://registry.npm.taobao.org/globby/download/globby-7.1.1.tgz", - "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "dir-glob": "2.0.0", - "glob": "7.1.3", - "ignore": "3.3.10", - "pify": "3.0.0", - "slash": "1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - }, - "slash": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - } - } - }, - "core-js": { - "version": "2.5.7", - "resolved": "http://registry.npm.taobao.org/core-js/download/core-js-2.5.7.tgz", - "integrity": "sha1-+XJgj/DOrWi4QaFqky0LGDeRgU4=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cosmiconfig": { - "version": "5.0.6", - "resolved": "http://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.0.6.tgz", - "integrity": "sha1-3KbPaAoL0DWJr/aEcAhYyBq+6zk=", - "dev": true, - "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.12.0", - "parse-json": "4.0.0" - } - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "http://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.3.tgz", - "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/create-hash/download/create-hash-1.2.0.tgz", - "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=", - "dev": true, - "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "md5.js": "1.3.5", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "http://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz", - "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=", - "dev": true, - "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.3", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz", - "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=", - "dev": true, - "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.6.0", - "shebang-command": "1.2.0", - "which": "1.3.1" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "http://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz", - "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", - "dev": true, - "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.17", - "public-encrypt": "4.0.3", - "randombytes": "2.0.6", - "randomfill": "1.0.4" - } - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "http://registry.npm.taobao.org/css-color-names/download/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/css-declaration-sorter/download/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha1-wZiUD2OnbX42wecQGLABchBUyyI=", - "dev": true, - "requires": { - "postcss": "7.0.5", - "timsort": "0.3.0" - } - }, - "css-loader": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/css-loader/download/css-loader-1.0.0.tgz", - "integrity": "sha1-n0aqpcpB2+MYYOO2K44jxCkWv1Y=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "css-selector-tokenizer": "0.7.0", - "icss-utils": "2.1.0", - "loader-utils": "1.1.0", - "lodash.camelcase": "4.3.0", - "postcss": "6.0.23", - "postcss-modules-extract-imports": "1.2.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0", - "postcss-value-parser": "3.3.0", - "source-list-map": "2.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz", - "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", - "dev": true, - "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.5.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - } - } - }, - "css-select": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/css-select/download/css-select-2.0.0.tgz", - "integrity": "sha1-eqKSE5IRSDH2jbF1wLalVd90u9U=", - "dev": true, - "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.0", - "domutils": "1.7.0", - "nth-check": "1.0.1" - } - }, - "css-select-base-adapter": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/css-select-base-adapter/download/css-select-base-adapter-0.1.0.tgz", - "integrity": "sha1-AQKz0UYw34bD65+p9UVicBBs+ZA=", - "dev": true - }, - "css-selector-tokenizer": { - "version": "0.7.0", - "resolved": "http://registry.npm.taobao.org/css-selector-tokenizer/download/css-selector-tokenizer-0.7.0.tgz", - "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", - "dev": true, - "requires": { - "cssesc": "0.1.0", - "fastparse": "1.1.1", - "regexpu-core": "1.0.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, - "regexpu-core": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/regexpu-core/download/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true, - "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/regjsgen/download/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "http://registry.npm.taobao.org/regjsparser/download/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "0.5.0" - } - } - } - }, - "css-tree": { - "version": "1.0.0-alpha.28", - "resolved": "http://registry.npm.taobao.org/css-tree/download/css-tree-1.0.0-alpha.28.tgz", - "integrity": "sha1-joloGQ2IbJR3vI1h6W9hrz9/+n8=", - "dev": true, - "requires": { - "mdn-data": "1.1.4", - "source-map": "0.5.7" - } - }, - "css-unit-converter": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/css-unit-converter/download/css-unit-converter-1.1.1.tgz", - "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", - "dev": true - }, - "css-url-regex": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/css-url-regex/download/css-url-regex-1.1.0.tgz", - "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=", - "dev": true - }, - "css-what": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/css-what/download/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", - "dev": true - }, - "cssesc": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/cssesc/download/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", - "dev": true - }, - "cssnano": { - "version": "4.1.4", - "resolved": "http://registry.npm.taobao.org/cssnano/download/cssnano-4.1.4.tgz", - "integrity": "sha1-VbcePY9UUd0+3HlVZzQVyYeVeI8=", - "dev": true, - "requires": { - "cosmiconfig": "5.0.6", - "cssnano-preset-default": "4.0.2", - "is-resolvable": "1.1.0", - "postcss": "7.0.5" - } - }, - "cssnano-preset-default": { - "version": "4.0.2", - "resolved": "http://registry.npm.taobao.org/cssnano-preset-default/download/cssnano-preset-default-4.0.2.tgz", - "integrity": "sha1-HePyfnO38Pv4fB1/16Y66YCsN3Q=", - "dev": true, - "requires": { - "css-declaration-sorter": "4.0.1", - "cssnano-util-raw-cache": "4.0.1", - "postcss": "7.0.5", - "postcss-calc": "6.0.2", - "postcss-colormin": "4.0.2", - "postcss-convert-values": "4.0.1", - "postcss-discard-comments": "4.0.1", - "postcss-discard-duplicates": "4.0.2", - "postcss-discard-empty": "4.0.1", - "postcss-discard-overridden": "4.0.1", - "postcss-merge-longhand": "4.0.6", - "postcss-merge-rules": "4.0.2", - "postcss-minify-font-values": "4.0.2", - "postcss-minify-gradients": "4.0.1", - "postcss-minify-params": "4.0.1", - "postcss-minify-selectors": "4.0.1", - "postcss-normalize-charset": "4.0.1", - "postcss-normalize-display-values": "4.0.1", - "postcss-normalize-positions": "4.0.1", - "postcss-normalize-repeat-style": "4.0.1", - "postcss-normalize-string": "4.0.1", - "postcss-normalize-timing-functions": "4.0.1", - "postcss-normalize-unicode": "4.0.1", - "postcss-normalize-url": "4.0.1", - "postcss-normalize-whitespace": "4.0.1", - "postcss-ordered-values": "4.1.1", - "postcss-reduce-initial": "4.0.2", - "postcss-reduce-transforms": "4.0.1", - "postcss-svgo": "4.0.1", - "postcss-unique-selectors": "4.0.1" - } - }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/cssnano-util-get-arguments/download/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", - "dev": true - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/cssnano-util-get-match/download/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", - "dev": true - }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/cssnano-util-raw-cache/download/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha1-sm1f1fcqEd/np4RvtMZyYPlr8oI=", - "dev": true, - "requires": { - "postcss": "7.0.5" - } - }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/cssnano-util-same-parent/download/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha1-V0CC+yhZ0ttDOFWDXZqEVuoYu/M=", - "dev": true - }, - "csso": { - "version": "3.5.1", - "resolved": "http://registry.npm.taobao.org/csso/download/csso-3.5.1.tgz", - "integrity": "sha1-e564vmFiiXPBsmHhadLwJACOdYs=", - "dev": true, - "requires": { - "css-tree": "1.0.0-alpha.29" - }, - "dependencies": { - "css-tree": { - "version": "1.0.0-alpha.29", - "resolved": "http://registry.npm.taobao.org/css-tree/download/css-tree-1.0.0-alpha.29.tgz", - "integrity": "sha1-P6nU7zFCy9HDAedmTB81K9gvWjk=", - "dev": true, - "requires": { - "mdn-data": "1.1.4", - "source-map": "0.5.7" - } - } - } - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "1.0.2" - } - }, - "cyclist": { - "version": "0.2.2", - "resolved": "http://registry.npm.taobao.org/cyclist/download/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - } - }, - "date-now": { - "version": "0.1.4", - "resolved": "http://registry.npm.taobao.org/date-now/download/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "dayjs": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.7.7.tgz", - "integrity": "sha512-Qlkiu0NNDpYwhk0syK4ImvAl/5YnsEMkvC2O123INviGeOA3Q8s5VyVkZzmN5SC7Wv9bb1+rfwO+uSqtHB4UWw==" - }, - "de-indent": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz", - "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", - "dev": true - }, - "debug": { - "version": "3.2.6", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz", - "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", - "dev": true, - "requires": { - "ms": "2.1.1" - } - }, - "decamelize": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/decamelize/download/decamelize-2.0.0.tgz", - "integrity": "sha1-ZW17vICUxMeI6lPFhAkIycfQY8c=", - "dev": true, - "requires": { - "xregexp": "4.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-equal": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/deep-equal/download/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "http://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "deepmerge": { - "version": "1.5.2", - "resolved": "http://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz", - "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=", - "dev": true - }, - "default-gateway": { - "version": "2.7.2", - "resolved": "http://registry.npm.taobao.org/default-gateway/download/default-gateway-2.7.2.tgz", - "integrity": "sha1-t+8znl4CSwRUZ69APVA0jbRkLQ8=", - "dev": true, - "requires": { - "execa": "0.10.0", - "ip-regex": "2.1.0" - } - }, - "defaults": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "1.0.4" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz", - "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", - "dev": true, - "requires": { - "object-keys": "1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz", - "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", - "dev": true - } - } - }, - "del": { - "version": "2.2.2", - "resolved": "http://registry.npm.taobao.org/del/download/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "des.js": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/des.js/download/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-node": { - "version": "2.0.4", - "resolved": "http://registry.npm.taobao.org/detect-node/download/detect-node-2.0.4.tgz", - "integrity": "sha1-AU7o+PZpxcWAI9pkuBecCDooxGw=", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "http://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz", - "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" - } - }, - "dir-glob": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/dir-glob/download/dir-glob-2.0.0.tgz", - "integrity": "sha1-CyBdK2rvmCOMooZZioIE0p0KADQ=", - "dev": true, - "requires": { - "arrify": "1.0.1", - "path-type": "3.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/dns-equal/download/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/dns-packet/download/dns-packet-1.3.1.tgz", - "integrity": "sha1-EqpCaYEHW+UAuRDu3NC0fdfe2lo=", - "dev": true, - "requires": { - "ip": "1.1.5", - "safe-buffer": "5.1.2" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "http://registry.npm.taobao.org/dns-txt/download/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "1.1.1" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/doctrine/download/doctrine-2.1.0.tgz", - "integrity": "sha1-XNAfwQFiG0LEzX9dGmYkNxbT850=", - "dev": true, - "requires": { - "esutils": "2.0.2" - } - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/dom-converter/download/dom-converter-0.2.0.tgz", - "integrity": "sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g=", - "dev": true, - "requires": { - "utila": "0.4.0" - } - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz", - "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=", - "dev": true - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "domhandler": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/domhandler/download/domhandler-2.1.0.tgz", - "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", - "dev": true, - "requires": { - "domelementtype": "1.3.0" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "http://registry.npm.taobao.org/domutils/download/domutils-1.7.0.tgz", - "integrity": "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=", - "dev": true, - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "http://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.0.tgz", - "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=", - "dev": true, - "requires": { - "is-obj": "1.0.1" - } - }, - "duplexer": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/duplexer/download/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexify": { - "version": "3.6.0", - "resolved": "http://registry.npm.taobao.org/duplexify/download/duplexify-3.6.0.tgz", - "integrity": "sha1-WSkD9dgLONA3IgVBJk1poZj7NBA=", - "dev": true, - "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "stream-shift": "1.0.0" - } - }, - "easy-stack": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/easy-stack/download/easy-stack-1.0.0.tgz", - "integrity": "sha1-EskbMIWjfwuqM26UhurEv5Tj54g=", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "0.1.1", - "safer-buffer": "2.1.2" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "ejs": { - "version": "2.6.1", - "resolved": "http://registry.npm.taobao.org/ejs/download/ejs-2.6.1.tgz", - "integrity": "sha1-SY7A1JVlWrxvI81hho2SZGQHGqA=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.78", - "resolved": "http://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.78.tgz", - "integrity": "sha1-7LcrWxZrplmO+zhEYdY8rXRnjr8=", - "dev": true - }, - "elliptic": { - "version": "6.4.1", - "resolved": "http://registry.npm.taobao.org/elliptic/download/elliptic-6.4.1.tgz", - "integrity": "sha1-wtC3d2kRuGcixjLDwGxg8vgZk5o=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.5", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "http://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.1.tgz", - "integrity": "sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=", - "dev": true, - "requires": { - "once": "1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.1.0", - "resolved": "http://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-4.1.0.tgz", - "integrity": "sha1-Qcfgv9/nSsH/4eV61qXGyfN0Kn8=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "tapable": "1.1.0" - } - }, - "entities": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/entities/download/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - }, - "errno": { - "version": "0.1.7", - "resolved": "http://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz", - "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", - "dev": true, - "requires": { - "prr": "1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "http://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz", - "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", - "dev": true, - "requires": { - "is-arrayish": "0.2.1" - } - }, - "error-stack-parser": { - "version": "2.0.2", - "resolved": "http://registry.npm.taobao.org/error-stack-parser/download/error-stack-parser-2.0.2.tgz", - "integrity": "sha1-Sujbqiv5CotFBwe5FJ3KvKE1Ug0=", - "dev": true, - "requires": { - "stackframe": "1.0.4" - } - }, - "es-abstract": { - "version": "1.12.0", - "resolved": "http://registry.npm.taobao.org/es-abstract/download/es-abstract-1.12.0.tgz", - "integrity": "sha1-nbvdJ8aFbwABQhyhh4LXhr+KYWU=", - "dev": true, - "requires": { - "es-to-primitive": "1.2.0", - "function-bind": "1.1.1", - "has": "1.0.3", - "is-callable": "1.1.4", - "is-regex": "1.0.4" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.0.tgz", - "integrity": "sha1-7fckeAM0VujdqO8J4ArZZQcH83c=", - "dev": true, - "requires": { - "is-callable": "1.1.4", - "is-date-object": "1.0.1", - "is-symbol": "1.0.2" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "4.19.1", - "resolved": "http://registry.npm.taobao.org/eslint/download/eslint-4.19.1.tgz", - "integrity": "sha1-MtHWU+HZBAiFS/spbwdux+GGowA=", - "dev": true, - "requires": { - "ajv": "5.5.2", - "babel-code-frame": "6.26.0", - "chalk": "2.4.1", - "concat-stream": "1.6.2", - "cross-spawn": "5.1.0", - "debug": "3.2.6", - "doctrine": "2.1.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "1.0.0", - "espree": "3.5.4", - "esquery": "1.0.1", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.3", - "globals": "11.8.0", - "ignore": "3.3.10", - "imurmurhash": "0.1.4", - "inquirer": "3.3.0", - "is-resolvable": "1.1.0", - "js-yaml": "3.12.0", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.11", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "7.0.0", - "progress": "2.0.0", - "regexpp": "1.1.0", - "require-uncached": "1.0.3", - "semver": "5.6.0", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", - "table": "4.0.2", - "text-table": "0.2.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.3", - "shebang-command": "1.2.0", - "which": "1.3.1" - } - } - } - }, - "eslint-config-prettier": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-2.10.0.tgz", - "integrity": "sha512-Mhl90VLucfBuhmcWBgbUNtgBiK955iCDK1+aHAz7QfDQF6wuzWZ6JjihZ3ejJoGlJWIuko7xLqNm8BA5uenKhA==", - "dev": true, - "requires": { - "get-stdin": "5.0.1" - }, - "dependencies": { - "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", - "dev": true - } - } - }, - "eslint-loader": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/eslint-loader/download/eslint-loader-2.1.1.tgz", - "integrity": "sha1-KpJRUjZSQwv91kPv2wr8GiqJVGo=", - "dev": true, - "requires": { - "loader-fs-cache": "1.0.1", - "loader-utils": "1.1.0", - "object-assign": "4.1.1", - "object-hash": "1.3.0", - "rimraf": "2.6.2" - } - }, - "eslint-plugin-prettier": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz", - "integrity": "sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA==", - "dev": true, - "requires": { - "fast-diff": "1.2.0", - "jest-docblock": "21.2.0" - } - }, - "eslint-plugin-vue": { - "version": "4.7.1", - "resolved": "http://registry.npm.taobao.org/eslint-plugin-vue/download/eslint-plugin-vue-4.7.1.tgz", - "integrity": "sha1-yCm5/GJYLBiXtaC5Sv1E7MpRHmM=", - "dev": true, - "requires": { - "vue-eslint-parser": "2.0.3" - } - }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "http://registry.npm.taobao.org/eslint-scope/download/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", - "dev": true, - "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" - } - }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha1-PzGA+y4pEBdxastMnW1bXDSmqB0=", - "dev": true - }, - "espree": { - "version": "3.5.4", - "resolved": "http://registry.npm.taobao.org/espree/download/espree-3.5.4.tgz", - "integrity": "sha1-sPRHGHyKi+2US4FaZgvd9d610ac=", - "dev": true, - "requires": { - "acorn": "5.7.3", - "acorn-jsx": "3.0.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz", - "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", - "dev": true - }, - "esquery": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/esquery/download/esquery-1.0.1.tgz", - "integrity": "sha1-QGxRZYsfWZGl+bYrHcJbAOPlxwg=", - "dev": true, - "requires": { - "estraverse": "4.2.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "http://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.1.tgz", - "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", - "dev": true, - "requires": { - "estraverse": "4.2.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "http://registry.npm.taobao.org/estraverse/download/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "http://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "event-pubsub": { - "version": "4.3.0", - "resolved": "http://registry.npm.taobao.org/event-pubsub/download/event-pubsub-4.3.0.tgz", - "integrity": "sha1-9o2Ba8KfHsAsU53FjI3UDOcss24=", - "dev": true - }, - "eventemitter3": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/eventemitter3/download/eventemitter3-3.1.0.tgz", - "integrity": "sha1-CQtNbNvWRe0Qv3UNS1QHlC17oWM=", - "dev": true - }, - "events": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/events/download/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true - }, - "eventsource": { - "version": "0.1.6", - "resolved": "http://registry.npm.taobao.org/eventsource/download/eventsource-0.1.6.tgz", - "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", - "dev": true, - "requires": { - "original": "1.0.2" - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz", - "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", - "dev": true, - "requires": { - "md5.js": "1.3.5", - "safe-buffer": "5.1.2" - } - }, - "execa": { - "version": "0.10.0", - "resolved": "http://registry.npm.taobao.org/execa/download/execa-0.10.0.tgz", - "integrity": "sha1-/0Vqj1P5D47MxxqW0Rvfx/CCy1A=", - "dev": true, - "requires": { - "cross-spawn": "6.0.5", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "http://registry.npm.taobao.org/expand-range/download/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "2.2.4" - } - }, - "express": { - "version": "4.16.4", - "resolved": "http://registry.npm.taobao.org/express/download/express-4.16.4.tgz", - "integrity": "sha1-/d72GSYQniTFFeqX/S8b2/Yt8S4=", - "dev": true, - "requires": { - "accepts": "1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.4", - "qs": "6.5.2", - "range-parser": "1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", - "utils-merge": "1.0.1", - "vary": "1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "http://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz", - "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz", - "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", - "dev": true, - "requires": { - "is-plain-object": "2.0.4" - } - } - } - }, - "external-editor": { - "version": "2.2.0", - "resolved": "http://registry.npm.taobao.org/external-editor/download/external-editor-2.2.0.tgz", - "integrity": "sha1-BFURz9jRM/OEZnPRBHwVTiFK09U=", - "dev": true, - "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.24", - "tmp": "0.0.33" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "2.2.3", - "resolved": "http://registry.npm.taobao.org/fast-glob/download/fast-glob-2.2.3.tgz", - "integrity": "sha1-0J03jp72sAdqD6G6dRnZ1NlpnCg=", - "dev": true, - "requires": { - "@mrmlnc/readdir-enhanced": "2.2.1", - "@nodelib/fs.stat": "1.1.2", - "glob-parent": "3.1.0", - "is-glob": "4.0.0", - "merge2": "1.2.2", - "micromatch": "3.1.10" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", - "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", - "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", - "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz", - "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", - "dev": true, - "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz", - "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "http://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastparse": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/fastparse/download/fastparse-1.1.1.tgz", - "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", - "dev": true - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "http://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": "0.7.0" - } - }, - "figgy-pudding": { - "version": "3.5.1", - "resolved": "http://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.1.tgz", - "integrity": "sha1-hiRwESkBxyeg5JWoB0S9W6odZ5A=", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/figures/download/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" - } - }, - "file-loader": { - "version": "1.1.11", - "resolved": "http://registry.npm.taobao.org/file-loader/download/file-loader-1.1.11.tgz", - "integrity": "sha1-b+iGRJsPKpNuQ8q6rAzb+zaVBvg=", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.4.7" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "filesize": { - "version": "3.6.1", - "resolved": "http://registry.npm.taobao.org/filesize/download/filesize-3.6.1.tgz", - "integrity": "sha1-CQuz7gG2+AGoqL6Z0xcQs0Irsxc=", - "dev": true - }, - "fill-range": { - "version": "2.2.4", - "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-2.2.4.tgz", - "integrity": "sha1-6x53OrsFbc2N8r/favWbizqTZWU=", - "dev": true, - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "3.1.0", - "repeat-element": "1.1.3", - "repeat-string": "1.6.1" - } - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.1.tgz", - "integrity": "sha1-7r9O2EAHnIP0JJA4ydcDAIMBsQU=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", - "dev": true, - "requires": { - "commondir": "1.0.1", - "make-dir": "1.3.0", - "pkg-dir": "2.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - }, - "flat-cache": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/flat-cache/download/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", - "dev": true, - "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" - } - }, - "flatten": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/flatten/download/flatten-1.0.2.tgz", - "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", - "dev": true - }, - "flush-write-stream": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.0.3.tgz", - "integrity": "sha1-xdWG7zivYJdlC0m8QbVfq7GfNb0=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" - } - }, - "follow-redirects": { - "version": "1.5.9", - "resolved": "http://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.5.9.tgz", - "integrity": "sha1-ye2ddIuBSjlTVxblMbkZaoRdicY=", - "requires": { - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", - "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "http://registry.npm.taobao.org/for-own/download/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.2", - "resolved": "http://registry.npm.taobao.org/form-data/download/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "dev": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.20" - }, - "dependencies": { - "combined-stream": { - "version": "1.0.6", - "resolved": "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - } - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "http://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "friendly-errors-webpack-plugin": { - "version": "1.7.0", - "resolved": "http://registry.npm.taobao.org/friendly-errors-webpack-plugin/download/friendly-errors-webpack-plugin-1.7.0.tgz", - "integrity": "sha1-78hsu4FiJFZYYaG+ep2E0Kr+oTY=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "error-stack-parser": "2.0.2", - "string-width": "2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "from2": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" - } - }, - "fs-extra": { - "version": "6.0.1", - "resolved": "http://registry.npm.taobao.org/fs-extra/download/fs-extra-6.0.1.tgz", - "integrity": "sha1-irwSj3lG4xATXdyTuYvdtBDno0s=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "4.0.0", - "universalify": "0.1.2" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "http://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.6" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.7", - "resolved": "http://registry.npm.taobao.org/fsevents/download/fsevents-1.2.7.tgz", - "integrity": "sha1-SFG2ZKN4PlIAOzxm6w7uEHSTOqQ=", - "dev": true, - "optional": true, - "requires": { - "nan": "2.11.1", - "node-pre-gyp": "0.10.3" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "2.3.5" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.3" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": "2.1.2" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "1.1.11" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "5.1.2", - "yallist": "3.0.3" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "2.3.5" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.24", - "sax": "1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.4", - "nopt": "4.0.1", - "npm-packlist": "1.2.0", - "npmlog": "4.1.2", - "rc": "1.2.8", - "rimraf": "2.6.3", - "semver": "5.6.0", - "tar": "4.4.8" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" - } - }, - "npm-bundled": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.5" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.5", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "0.6.0", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "1.1.1", - "fs-minipass": "1.2.5", - "minipass": "2.3.5", - "minizlib": "1.2.1", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.2", - "yallist": "3.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true - } - } - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", - "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.3" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "requires": { - "globule": "1.2.1" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz", - "integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "http://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "http://registry.npm.taobao.org/glob/download/glob-7.1.3.tgz", - "integrity": "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "http://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/glob-parent/download/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "http://registry.npm.taobao.org/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - }, - "globals": { - "version": "11.8.0", - "resolved": "http://registry.npm.taobao.org/globals/download/globals-11.8.0.tgz", - "integrity": "sha1-we9F7pvta63wZjxcuQ6NGt7BMh0=", - "dev": true - }, - "globby": { - "version": "5.0.0", - "resolved": "http://registry.npm.taobao.org/globby/download/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.3", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", - "dev": true, - "requires": { - "glob": "7.1.3", - "lodash": "4.17.11", - "minimatch": "3.0.4" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "gzip-size": { - "version": "4.1.0", - "resolved": "http://registry.npm.taobao.org/gzip-size/download/gzip-size-4.1.0.tgz", - "integrity": "sha1-iuCWJX6r59acRb4rZ8RIEk/7UXw=", - "dev": true, - "requires": { - "duplexer": "0.1.1", - "pify": "3.0.0" - } - }, - "handle-thing": { - "version": "1.2.5", - "resolved": "http://registry.npm.taobao.org/handle-thing/download/handle-thing-1.2.5.tgz", - "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.0", - "resolved": "http://registry.npm.taobao.org/har-validator/download/har-validator-5.1.0.tgz", - "integrity": "sha1-RGV/VoiiLP1LckhugbOj+xF0LCk=", - "dev": true, - "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/has/download/has-1.0.3.tgz", - "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", - "dev": true, - "requires": { - "function-bind": "1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "http://registry.npm.taobao.org/hash-base/download/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "hash-sum": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz", - "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", - "dev": true - }, - "hash.js": { - "version": "1.1.5", - "resolved": "http://registry.npm.taobao.org/hash.js/download/hash.js-1.1.5.tgz", - "integrity": "sha1-44q0uF37HgxA/pJlwOm1SFTCOBI=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" - } - }, - "he": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/he/download/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/hex-color-regex/download/hex-color-regex-1.1.0.tgz", - "integrity": "sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4=", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "1.1.5", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "hoek": { - "version": "5.0.4", - "resolved": "http://registry.npm.taobao.org/hoek/download/hoek-5.0.4.tgz", - "integrity": "sha1-D3+icKHK/rNkpLLd+qM/hk5BV9o=", - "dev": true - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "http://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.7.1.tgz", - "integrity": "sha1-l/I2l3vW4SVAiTD/bePuxigewEc=", - "dev": true - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "http://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "wbuf": "1.7.3" - } - }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/hsl-regex/download/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/hsla-regex/download/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/html-comment-regex/download/html-comment-regex-1.1.2.tgz", - "integrity": "sha1-l9RoiutcgYhqNk+qDK0d2hTUM6c=", - "dev": true - }, - "html-entities": { - "version": "1.2.1", - "resolved": "http://registry.npm.taobao.org/html-entities/download/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", - "dev": true - }, - "html-minifier": { - "version": "3.5.20", - "resolved": "http://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.20.tgz", - "integrity": "sha1-exn9PKoMt5983l7lw6vfjsqmuxQ=", - "dev": true, - "requires": { - "camel-case": "3.0.0", - "clean-css": "4.2.1", - "commander": "2.17.1", - "he": "1.1.1", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.4.9" - } - }, - "html-webpack-plugin": { - "version": "3.2.0", - "resolved": "http://registry.npm.taobao.org/html-webpack-plugin/download/html-webpack-plugin-3.2.0.tgz", - "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", - "dev": true, - "requires": { - "html-minifier": "3.5.20", - "loader-utils": "0.2.17", - "lodash": "4.17.11", - "pretty-error": "2.1.1", - "tapable": "1.1.0", - "toposort": "1.0.7", - "util.promisify": "1.0.0" - }, - "dependencies": { - "loader-utils": { - "version": "0.2.17", - "resolved": "http://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" - } - } - } - }, - "htmlparser2": { - "version": "3.3.0", - "resolved": "http://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.3.0.tgz", - "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", - "dev": true, - "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.1.0", - "domutils": "1.1.6", - "readable-stream": "1.0.34" - }, - "dependencies": { - "domutils": { - "version": "1.1.6", - "resolved": "http://registry.npm.taobao.org/domutils/download/domutils-1.1.6.tgz", - "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", - "dev": true, - "requires": { - "domelementtype": "1.3.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "http://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": "1.4.0" - } - }, - "http-parser-js": { - "version": "0.4.13", - "resolved": "http://registry.npm.taobao.org/http-parser-js/download/http-parser-js-0.4.13.tgz", - "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=", - "dev": true - }, - "http-proxy": { - "version": "1.17.0", - "resolved": "http://registry.npm.taobao.org/http-proxy/download/http-proxy-1.17.0.tgz", - "integrity": "sha1-etOElGWPhGBeL220Q230EPTlvpo=", - "dev": true, - "requires": { - "eventemitter3": "3.1.0", - "follow-redirects": "1.5.9", - "requires-port": "1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.18.0", - "resolved": "http://registry.npm.taobao.org/http-proxy-middleware/download/http-proxy-middleware-0.18.0.tgz", - "integrity": "sha1-CYfmu1pWBuWmkWjY+WeofxXdiqs=", - "dev": true, - "requires": { - "http-proxy": "1.17.0", - "is-glob": "4.0.0", - "lodash": "4.17.11", - "micromatch": "3.1.10" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", - "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", - "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", - "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz", - "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", - "dev": true, - "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz", - "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.15.1" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz", - "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", - "dev": true, - "requires": { - "safer-buffer": "2.1.2" - } - }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/icss-replace-symbols/download/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", - "dev": true - }, - "icss-utils": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/icss-utils/download/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", - "dev": true, - "requires": { - "postcss": "6.0.23" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz", - "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", - "dev": true, - "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.5.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - } - } - }, - "ieee754": { - "version": "1.1.12", - "resolved": "http://registry.npm.taobao.org/ieee754/download/ieee754-1.1.12.tgz", - "integrity": "sha1-UL8k5bnIu5ivSWTJQc2wkY2ntgs=", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "http://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "3.3.10", - "resolved": "http://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz", - "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=", - "dev": true - }, - "import-cwd": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", - "dev": true, - "requires": { - "import-from": "2.1.0" - } - }, - "import-from": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/import-from/download/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", - "dev": true, - "requires": { - "resolve-from": "3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/import-local/download/import-local-2.0.0.tgz", - "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=", - "dev": true, - "requires": { - "pkg-dir": "3.0.0", - "resolve-cwd": "2.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz", - "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", - "dev": true, - "requires": { - "locate-path": "3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz", - "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", - "dev": true, - "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" - } - }, - "p-limit": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/p-limit/download/p-limit-2.0.0.tgz", - "integrity": "sha1-5iTtVO6MRgp3izyfNnBJb/ileuw=", - "dev": true, - "requires": { - "p-try": "2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz", - "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", - "dev": true, - "requires": { - "p-limit": "2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/p-try/download/p-try-2.0.0.tgz", - "integrity": "sha1-hQgLuHxkaI+keZb+j3376CEXYLE=", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz", - "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=", - "dev": true, - "requires": { - "find-up": "3.0.0" - } - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "http://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "indexof": { - "version": "0.0.1", - "resolved": "http://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "inquirer": { - "version": "3.3.0", - "resolved": "http://registry.npm.taobao.org/inquirer/download/inquirer-3.3.0.tgz", - "integrity": "sha1-ndLyrXZdyrH/BEO0kUQqILoifck=", - "dev": true, - "requires": { - "ansi-escapes": "3.1.0", - "chalk": "2.4.1", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.2.0", - "figures": "2.0.0", - "lodash": "4.17.11", - "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" - } - }, - "internal-ip": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/internal-ip/download/internal-ip-3.0.1.tgz", - "integrity": "sha1-31yZh24dLrLqLXT1IOP2aaAOzic=", - "dev": true, - "requires": { - "default-gateway": "2.7.2", - "ipaddr.js": "1.8.0" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "http://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz", - "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", - "dev": true, - "requires": { - "loose-envify": "1.4.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/invert-kv/download/invert-kv-2.0.0.tgz", - "integrity": "sha1-c5P1r6Weyf9fZ6J2INEcIm4+7AI=", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "http://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "ipaddr.js": { - "version": "1.8.0", - "resolved": "http://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", - "dev": true - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "http://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "1.12.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-builtin-module/download/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "1.1.1" - } - }, - "is-callable": { - "version": "1.1.4", - "resolved": "http://registry.npm.taobao.org/is-callable/download/is-callable-1.1.4.tgz", - "integrity": "sha1-HhrfIZ4e62hNaR+dagX/DTCiTXU=", - "dev": true - }, - "is-ci": { - "version": "1.2.1", - "resolved": "http://registry.npm.taobao.org/is-ci/download/is-ci-1.2.1.tgz", - "integrity": "sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw=", - "dev": true, - "requires": { - "ci-info": "1.6.0" - } - }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/is-color-stop/download/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dev": true, - "requires": { - "css-color-names": "0.0.4", - "hex-color-regex": "1.1.0", - "hsl-regex": "1.0.0", - "hsla-regex": "1.0.0", - "rgb-regex": "1.0.1", - "rgba-regex": "1.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", - "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", - "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "http://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/is-dotfile/download/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "http://registry.npm.taobao.org/is-equal-shallow/download/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha1-WsSLNF72dTOb1sekipEhELJBz1I=", - "dev": true, - "requires": { - "is-path-inside": "1.0.1" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "http://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz", - "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", - "dev": true, - "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/is-posix-bracket/download/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/is-primitive/download/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-promise": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/is-regex/download/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "1.0.3" - } - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.1.0.tgz", - "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-svg": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/is-svg/download/is-svg-3.0.0.tgz", - "integrity": "sha1-kyHb0pwhLlypnE+peUxxS8r6L3U=", - "dev": true, - "requires": { - "html-comment-regex": "1.1.2" - } - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.2.tgz", - "integrity": "sha1-oFX2rlcZLK7jKeeoYBGLSXqVDzg=", - "dev": true, - "requires": { - "has-symbols": "1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz", - "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isemail": { - "version": "3.1.3", - "resolved": "http://registry.npm.taobao.org/isemail/download/isemail-3.1.3.tgz", - "integrity": "sha1-ZPN/wRNXnqElIxZcPr46caVs5XE=", - "dev": true, - "requires": { - "punycode": "2.1.1" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "javascript-stringify": { - "version": "1.6.0", - "resolved": "http://registry.npm.taobao.org/javascript-stringify/download/javascript-stringify-1.6.0.tgz", - "integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=", - "dev": true - }, - "jest-docblock": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", - "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==", - "dev": true - }, - "joi": { - "version": "13.7.0", - "resolved": "http://registry.npm.taobao.org/joi/download/joi-13.7.0.tgz", - "integrity": "sha1-z9hev+Z+ihkAQyQAtNA7vZP7h58=", - "dev": true, - "requires": { - "hoek": "5.0.4", - "isemail": "3.1.3", - "topo": "3.0.0" - } - }, - "js-base64": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz", - "integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==", - "dev": true - }, - "js-message": { - "version": "1.0.5", - "resolved": "http://registry.npm.taobao.org/js-message/download/js-message-1.0.5.tgz", - "integrity": "sha1-IwDSSxrwjondCVvBpMnJz8uJLRU=", - "dev": true - }, - "js-queue": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/js-queue/download/js-queue-2.0.0.tgz", - "integrity": "sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug=", - "dev": true, - "requires": { - "easy-stack": "1.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "http://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.12.0", - "resolved": "http://registry.npm.taobao.org/js-yaml/download/js-yaml-3.12.0.tgz", - "integrity": "sha1-6u1lbsg0TxD1J8a/obbiJE3hZ9E=", - "dev": true, - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.1" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsesc": { - "version": "2.5.1", - "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-2.5.1.tgz", - "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json3": { - "version": "3.3.2", - "resolved": "http://registry.npm.taobao.org/json3/download/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "http://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "http://registry.npm.taobao.org/jsonify/download/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "killable": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/killable/download/killable-1.0.1.tgz", - "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - }, - "launch-editor": { - "version": "2.2.1", - "resolved": "http://registry.npm.taobao.org/launch-editor/download/launch-editor-2.2.1.tgz", - "integrity": "sha1-hxtaPuOdZoD8wm03kwtu7aidsMo=", - "dev": true, - "requires": { - "chalk": "2.4.1", - "shell-quote": "1.6.1" - } - }, - "launch-editor-middleware": { - "version": "2.2.1", - "resolved": "http://registry.npm.taobao.org/launch-editor-middleware/download/launch-editor-middleware-2.2.1.tgz", - "integrity": "sha1-4UsH5scVSwpLhqD9NFeE5FgEwVc=", - "dev": true, - "requires": { - "launch-editor": "2.2.1" - } - }, - "lcid": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/lcid/download/lcid-2.0.0.tgz", - "integrity": "sha1-bvXS32DlL4LrIopMNz6NHzlyU88=", - "dev": true, - "requires": { - "invert-kv": "2.0.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "http://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "loader-fs-cache": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/loader-fs-cache/download/loader-fs-cache-1.0.1.tgz", - "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=", - "dev": true, - "requires": { - "find-cache-dir": "0.1.1", - "mkdirp": "0.5.1" - }, - "dependencies": { - "find-cache-dir": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-0.1.1.tgz", - "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", - "dev": true, - "requires": { - "commondir": "1.0.1", - "mkdirp": "0.5.1", - "pkg-dir": "1.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/pkg-dir/download/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "1.1.2" - } - } - } - }, - "loader-runner": { - "version": "2.3.1", - "resolved": "http://registry.npm.taobao.org/loader-runner/download/loader-runner-2.3.1.tgz", - "integrity": "sha1-Am8S/nwxFZkolqwCugIrqSlxuXk=", - "dev": true - }, - "loader-utils": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/loader-utils/download/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "http://registry.npm.taobao.org/lodash.camelcase/download/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "http://registry.npm.taobao.org/lodash.debounce/download/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "lodash.defaultsdeep": { - "version": "4.6.0", - "resolved": "http://registry.npm.taobao.org/lodash.defaultsdeep/download/lodash.defaultsdeep-4.6.0.tgz", - "integrity": "sha1-vsECT4WxvZbL6kBbI8FK1kQ6b4E=", - "dev": true - }, - "lodash.mapvalues": { - "version": "4.6.0", - "resolved": "http://registry.npm.taobao.org/lodash.mapvalues/download/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "http://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.mergewith": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", - "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", - "dev": true - }, - "lodash.tail": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", - "dev": true - }, - "lodash.transform": { - "version": "4.6.0", - "resolved": "http://registry.npm.taobao.org/lodash.transform/download/lodash.transform-4.6.0.tgz", - "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "http://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "http://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz", - "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=", - "dev": true, - "requires": { - "chalk": "2.4.1" - } - }, - "loglevel": { - "version": "1.6.1", - "resolved": "http://registry.npm.taobao.org/loglevel/download/loglevel-1.6.1.tgz", - "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", - "dev": true - }, - "long": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/long/download/long-4.0.0.tgz", - "integrity": "sha1-mntxz7fTYaGU6lVSQckvdGjVvyg=" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "http://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz", - "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=", - "dev": true, - "requires": { - "js-tokens": "3.0.2" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" - } - }, - "lower-case": { - "version": "1.1.4", - "resolved": "http://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "lru-cache": { - "version": "4.1.3", - "resolved": "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.3.tgz", - "integrity": "sha1-oRdc80lt/IQ2wVbDNLSVWZK85pw=", - "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/make-dir/download/make-dir-1.3.0.tgz", - "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=", - "dev": true, - "requires": { - "pify": "3.0.0" - } - }, - "map-age-cleaner": { - "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/map-age-cleaner/download/map-age-cleaner-0.1.2.tgz", - "integrity": "sha1-CY+xVTj9Pb5GHxJ0WwyoVo1OP3Q=", - "dev": true, - "requires": { - "p-defer": "1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "http://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "1.0.1" - } - }, - "math-random": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/math-random/download/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "http://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz", - "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=", - "dev": true, - "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "mdn-data": { - "version": "1.1.4", - "resolved": "http://registry.npm.taobao.org/mdn-data/download/mdn-data-1.1.4.tgz", - "integrity": "sha1-ULXU/8RXUnZXPE7tuHgIEqhBnwE=", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "mem": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/mem/download/mem-4.0.0.tgz", - "integrity": "sha1-ZDdpDZRxZ49syDZZwAy6/Nawza8=", - "dev": true, - "requires": { - "map-age-cleaner": "0.1.2", - "mimic-fn": "1.2.0", - "p-is-promise": "1.1.0" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "http://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.6" - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" - }, - "dependencies": { - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "1.3.2" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - } - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/merge-source-map/download/merge-source-map-1.1.0.tgz", - "integrity": "sha1-L93n5gIJOfcJBqaPLXrmheTIxkY=", - "dev": true, - "requires": { - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - } - } - }, - "merge2": { - "version": "1.2.2", - "resolved": "http://registry.npm.taobao.org/merge2/download/merge2-1.2.2.tgz", - "integrity": "sha1-AyEuPajYbE2FI869YxgZNBT5TjQ=", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "2.3.11", - "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz", - "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" - } - }, - "mime": { - "version": "2.3.1", - "resolved": "http://registry.npm.taobao.org/mime/download/mime-2.3.1.tgz", - "integrity": "sha1-sWIcVNY7l8R9PP5/chX31kUXw2k=", - "dev": true - }, - "mime-db": { - "version": "1.36.0", - "resolved": "http://registry.npm.taobao.org/mime-db/download/mime-db-1.36.0.tgz", - "integrity": "sha1-UCBHjbPH/pOq17vMTc+GnEM2M5c=", - "dev": true - }, - "mime-types": { - "version": "2.1.20", - "resolved": "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.20.tgz", - "integrity": "sha1-kwy3GdVx6QNzhSD4RwkRVIyizBk=", - "dev": true, - "requires": { - "mime-db": "1.36.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz", - "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=", - "dev": true - }, - "mini-css-extract-plugin": { - "version": "0.4.4", - "resolved": "http://registry.npm.taobao.org/mini-css-extract-plugin/download/mini-css-extract-plugin-0.4.4.tgz", - "integrity": "sha1-wQQQoASVG9PO2sHaaQU5QPzLYl0=", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "schema-utils": "1.0.0", - "webpack-sources": "1.3.0" - }, - "dependencies": { - "ajv": { - "version": "6.5.4", - "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-6.5.4.tgz", - "integrity": "sha1-JH1SdBENtlNwa1UPzCt5fKKM/Fk=", - "dev": true, - "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" - } - }, - "ajv-keywords": { - "version": "3.2.0", - "resolved": "http://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", - "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz", - "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", - "dev": true, - "requires": { - "ajv": "6.5.4", - "ajv-errors": "1.0.0", - "ajv-keywords": "3.2.0" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz", - "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", - "dev": true, - "requires": { - "brace-expansion": "1.1.11" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mississippi": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/mississippi/download/mississippi-2.0.0.tgz", - "integrity": "sha1-NEKlCPr8KFAEhv7qmUCWduTuWm8=", - "dev": true, - "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.6.0", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.3", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "2.0.1", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.3" - } - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.1.tgz", - "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=", - "dev": true, - "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz", - "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", - "dev": true, - "requires": { - "is-plain-object": "2.0.4" - } - } - } - }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "dev": true, - "requires": { - "for-in": "0.1.8", - "is-extendable": "0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", - "dev": true - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz", - "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", - "dev": true - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "http://registry.npm.taobao.org/multicast-dns/download/multicast-dns-6.2.3.tgz", - "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=", - "dev": true, - "requires": { - "dns-packet": "1.3.1", - "thunky": "1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "http://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "nan": { - "version": "2.11.1", - "resolved": "http://registry.npm.taobao.org/nan/download/nan-2.11.1.tgz", - "integrity": "sha1-kOIrzLjKV+pM03zIPTgZtS7qZ2Y=", - "dev": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "http://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz", - "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", - "dev": true - } - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "http://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/negotiator/download/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "neo-async": { - "version": "2.5.2", - "resolved": "http://registry.npm.taobao.org/neo-async/download/neo-async-2.5.2.tgz", - "integrity": "sha1-SJEFznvFTnCdc2sZX4ITUEjFD8w=", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "http://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz", - "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=", - "dev": true - }, - "no-case": { - "version": "2.3.2", - "resolved": "http://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz", - "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=", - "dev": true, - "requires": { - "lower-case": "1.1.4" - } - }, - "node-forge": { - "version": "0.7.5", - "resolved": "http://registry.npm.taobao.org/node-forge/download/node-forge-0.7.5.tgz", - "integrity": "sha1-bBUsNFzhHFL0ZcKr2VfoY5zWdN8=", - "dev": true - }, - "node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", - "dev": true, - "requires": { - "fstream": "1.0.11", - "glob": "7.1.3", - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "npmlog": "4.1.2", - "osenv": "0.1.5", - "request": "2.88.0", - "rimraf": "2.6.2", - "semver": "5.3.0", - "tar": "2.2.1", - "which": "1.3.1" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - } - } - }, - "node-ipc": { - "version": "9.1.1", - "resolved": "http://registry.npm.taobao.org/node-ipc/download/node-ipc-9.1.1.tgz", - "integrity": "sha1-TiRe1pOOZRAOWV68XcNLFujdXWk=", - "dev": true, - "requires": { - "event-pubsub": "4.3.0", - "js-message": "1.0.5", - "js-queue": "2.0.0" - } - }, - "node-libs-browser": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.1.0.tgz", - "integrity": "sha1-X5QmPUBPbkR2fXJpAf/wVHjWAN8=", - "dev": true, - "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", - "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.6", - "stream-browserify": "2.0.1", - "stream-http": "2.8.3", - "string_decoder": "1.1.1", - "timers-browserify": "2.0.10", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.4", - "vm-browserify": "0.0.4" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "node-releases": { - "version": "1.0.0-alpha.12", - "resolved": "http://registry.npm.taobao.org/node-releases/download/node-releases-1.0.0-alpha.12.tgz", - "integrity": "sha1-MuRhuHnqdqxnTlEdmDLPKdo0Umg=", - "dev": true, - "requires": { - "semver": "5.6.0" - } - }, - "node-sass": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.3.tgz", - "integrity": "sha512-XzXyGjO+84wxyH7fV6IwBOTrEBe2f0a6SBze9QWWYR/cL74AcQUks2AsqcCZenl/Fp/JVbuEaLpgrLtocwBUww==", - "dev": true, - "requires": { - "async-foreach": "0.1.3", - "chalk": "1.1.3", - "cross-spawn": "3.0.1", - "gaze": "1.1.3", - "get-stdin": "4.0.1", - "glob": "7.1.3", - "in-publish": "2.0.0", - "lodash.assign": "4.2.0", - "lodash.clonedeep": "4.5.0", - "lodash.mergewith": "4.6.1", - "meow": "3.7.0", - "mkdirp": "0.5.1", - "nan": "2.11.1", - "node-gyp": "3.8.0", - "npmlog": "4.1.2", - "request": "2.87.0", - "sass-graph": "2.2.4", - "stdout-stream": "1.4.1", - "true-case-path": "1.0.3" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true, - "requires": { - "lru-cache": "4.1.3", - "which": "1.3.1" - } - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "dev": true, - "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" - } - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "request": { - "version": "2.87.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", - "dev": true, - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.8.0", - "caseless": "0.12.0", - "combined-stream": "1.0.7", - "extend": "3.0.2", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.0.3", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.20", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.2", - "safe-buffer": "5.1.2", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.3.2" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "dev": true, - "requires": { - "punycode": "1.4.1" - } - } - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1.1.1" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "http://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.4.0.tgz", - "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", - "dev": true, - "requires": { - "hosted-git-info": "2.7.1", - "is-builtin-module": "1.0.0", - "semver": "5.6.0", - "validate-npm-package-license": "3.0.4" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "1.1.0" - } - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/normalize-range/download/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "normalize-url": { - "version": "3.3.0", - "resolved": "http://registry.npm.taobao.org/normalize-url/download/normalize-url-3.3.0.tgz", - "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=", - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "http://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "2.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "1.1.5", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "nth-check": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/nth-check/download/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", - "dev": true, - "requires": { - "boolbase": "1.0.0" - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "http://registry.npm.taobao.org/num2fraction/download/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz", - "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - } - } - }, - "object-hash": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/object-hash/download/object-hash-1.3.0.tgz", - "integrity": "sha1-dtm6b/ETz478DZlhAoUf5nI5Y+I=", - "dev": true - }, - "object-keys": { - "version": "1.0.12", - "resolved": "http://registry.npm.taobao.org/object-keys/download/object-keys-1.0.12.tgz", - "integrity": "sha1-CcU4VTd1dTEMymL1W7M0q/97PtI=", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "http://registry.npm.taobao.org/object.assign/download/object.assign-4.1.0.tgz", - "integrity": "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo=", - "dev": true, - "requires": { - "define-properties": "1.1.3", - "function-bind": "1.1.1", - "has-symbols": "1.0.0", - "object-keys": "1.0.12" - } - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "http://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "dev": true, - "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.12.0" - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/object.omit/download/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "object.values": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/object.values/download/object.values-1.0.4.tgz", - "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", - "dev": true, - "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.12.0", - "function-bind": "1.1.1", - "has": "1.0.3" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/obuf/download/obuf-1.1.2.tgz", - "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/on-headers/download/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "1.2.0" - } - }, - "opener": { - "version": "1.5.1", - "resolved": "http://registry.npm.taobao.org/opener/download/opener-1.5.1.tgz", - "integrity": "sha1-bS8Od/GgrwAyrKcWwsH7uOfoq+0=", - "dev": true - }, - "opn": { - "version": "5.4.0", - "resolved": "http://registry.npm.taobao.org/opn/download/opn-5.4.0.tgz", - "integrity": "sha1-y1Reeqt4VivrEao7+rxwQuF2EDU=", - "dev": true, - "requires": { - "is-wsl": "1.1.0" - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "http://registry.npm.taobao.org/optionator/download/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - } - }, - "ora": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/ora/download/ora-2.1.0.tgz", - "integrity": "sha1-bK8oMOuSSUGGHsU6FzeZ4Ai1Hls=", - "dev": true, - "requires": { - "chalk": "2.4.1", - "cli-cursor": "2.1.0", - "cli-spinners": "1.3.1", - "log-symbols": "2.2.0", - "strip-ansi": "4.0.0", - "wcwidth": "1.0.1" - } - }, - "original": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/original/download/original-1.0.2.tgz", - "integrity": "sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8=", - "dev": true, - "requires": { - "url-parse": "1.4.3" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "http://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/os-locale/download/os-locale-3.0.1.tgz", - "integrity": "sha1-OwFPvwHYf2Ch5TSNgP6HDcgsRiA=", - "dev": true, - "requires": { - "execa": "0.10.0", - "lcid": "2.0.0", - "mem": "4.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/p-defer/download/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/p-is-promise/download/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz", - "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", - "dev": true, - "requires": { - "p-try": "1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "1.3.0" - } - }, - "p-map": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/p-map/download/p-map-1.2.0.tgz", - "integrity": "sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s=", - "dev": true - }, - "p-try": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "pako": { - "version": "1.0.6", - "resolved": "http://registry.npm.taobao.org/pako/download/pako-1.0.6.tgz", - "integrity": "sha1-AQEhG6pwxLykoPY/Igbpe3368lg=", - "dev": true - }, - "parallel-transform": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", - "dev": true, - "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.6" - } - }, - "param-case": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/param-case/download/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "requires": { - "no-case": "2.3.2" - } - }, - "parse-asn1": { - "version": "5.1.1", - "resolved": "http://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.1.tgz", - "integrity": "sha1-9r8pOBgzK9DatU77Fgh3JHRebKg=", - "dev": true, - "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.17" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "http://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "1.3.2", - "json-parse-better-errors": "1.0.2" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "http://registry.npm.taobao.org/parseurl/download/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.0", - "resolved": "http://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz", - "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "http://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/path-type/download/path-type-3.0.0.tgz", - "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=", - "dev": true, - "requires": { - "pify": "3.0.0" - } - }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "http://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.0.17.tgz", - "integrity": "sha1-l2wgZTBhexTrsyEUI597CTNuk6Y=", - "dev": true, - "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "http://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/pkg-dir/download/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "2.1.0" - } - }, - "pluralize": { - "version": "7.0.0", - "resolved": "http://registry.npm.taobao.org/pluralize/download/pluralize-7.0.0.tgz", - "integrity": "sha1-KYuJ34uTsCIdv0Ia0rGx6iP8Z3c=", - "dev": true - }, - "portfinder": { - "version": "1.0.17", - "resolved": "http://registry.npm.taobao.org/portfinder/download/portfinder-1.0.17.tgz", - "integrity": "sha1-qKFpEUPkbEc17e/PT7zM7a0mRWo=", - "dev": true, - "requires": { - "async": "1.5.2", - "debug": "2.6.9", - "mkdirp": "0.5.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "7.0.5", - "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-7.0.5.tgz", - "integrity": "sha1-cOZEPjam1SCw/U51k/zKNjXun1U=", - "dev": true, - "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - } - } - }, - "postcss-calc": { - "version": "6.0.2", - "resolved": "http://registry.npm.taobao.org/postcss-calc/download/postcss-calc-6.0.2.tgz", - "integrity": "sha1-TZpD4n278n0JX+ywIaxoluIxgzc=", - "dev": true, - "requires": { - "css-unit-converter": "1.1.1", - "postcss": "7.0.5", - "postcss-selector-parser": "2.2.3", - "reduce-css-calc": "2.1.5" - } - }, - "postcss-colormin": { - "version": "4.0.2", - "resolved": "http://registry.npm.taobao.org/postcss-colormin/download/postcss-colormin-4.0.2.tgz", - "integrity": "sha1-k80foRKAAIaWiH2xpSgEixjn7Zk=", - "dev": true, - "requires": { - "browserslist": "4.2.0", - "color": "3.1.0", - "has": "1.0.3", - "postcss": "7.0.5", - "postcss-value-parser": "3.3.0" - }, - "dependencies": { - "browserslist": { - "version": "4.2.0", - "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-4.2.0.tgz", - "integrity": "sha1-Pl5e33+pdY3tCIXPiMHkvnU6WRw=", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000890", - "electron-to-chromium": "1.3.78", - "node-releases": "1.0.0-alpha.12" - } - } - } - }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/postcss-convert-values/download/postcss-convert-values-4.0.1.tgz", - "integrity": "sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8=", - "dev": true, - "requires": { - "postcss": "7.0.5", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-discard-comments": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/postcss-discard-comments/download/postcss-discard-comments-4.0.1.tgz", - "integrity": "sha1-MGl3NbDEdoUqehEFDrhDh6Z+9V0=", - "dev": true, - "requires": { - "postcss": "7.0.5" - } - }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "http://registry.npm.taobao.org/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha1-P+EzzTyCKC5VD8myORdqkge3hOs=", - "dev": true, - "requires": { - "postcss": "7.0.5" - } - }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/postcss-discard-empty/download/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha1-yMlR6fc+2UKAGUWERKAq2Qu592U=", - "dev": true, - "requires": { - "postcss": "7.0.5" - } - }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/postcss-discard-overridden/download/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha1-ZSrvipZybwKfXj4AFG7npOdV/1c=", - "dev": true, - "requires": { - "postcss": "7.0.5" - } - }, - "postcss-load-config": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/postcss-load-config/download/postcss-load-config-2.0.0.tgz", - "integrity": "sha1-8TEt2/WRLNdHF3CDxe96GdYu5IQ=", - "dev": true, - "requires": { - "cosmiconfig": "4.0.0", - "import-cwd": "2.1.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-4.0.0.tgz", - "integrity": "sha1-dgORVJWAu9LfHlYrwXexPCkJctw=", - "dev": true, - "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.12.0", - "parse-json": "4.0.0", - "require-from-string": "2.0.2" - } - } - } - }, - "postcss-loader": { - "version": "2.1.6", - "resolved": "http://registry.npm.taobao.org/postcss-loader/download/postcss-loader-2.1.6.tgz", - "integrity": "sha1-HX3XsXxrojS5vtWvE+C+pApC10A=", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "postcss": "6.0.23", - "postcss-load-config": "2.0.0", - "schema-utils": "0.4.7" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz", - "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", - "dev": true, - "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.5.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - } - } - }, - "postcss-merge-longhand": { - "version": "4.0.6", - "resolved": "http://registry.npm.taobao.org/postcss-merge-longhand/download/postcss-merge-longhand-4.0.6.tgz", - "integrity": "sha1-K5OPo1KcPRZX5T3H/w/WBNvIX/E=", - "dev": true, - "requires": { - "css-color-names": "0.0.4", - "postcss": "7.0.5", - "postcss-value-parser": "3.3.0", - "stylehacks": "4.0.1" - } - }, - "postcss-merge-rules": { - "version": "4.0.2", - "resolved": "http://registry.npm.taobao.org/postcss-merge-rules/download/postcss-merge-rules-4.0.2.tgz", - "integrity": "sha1-K+REAb8ZhW8n8yuLEsDfWvG4jnQ=", - "dev": true, - "requires": { - "browserslist": "4.2.0", - "caniuse-api": "3.0.0", - "cssnano-util-same-parent": "4.0.1", - "postcss": "7.0.5", - "postcss-selector-parser": "3.1.1", - "vendors": "1.0.2" - }, - "dependencies": { - "browserslist": { - "version": "4.2.0", - "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-4.2.0.tgz", - "integrity": "sha1-Pl5e33+pdY3tCIXPiMHkvnU6WRw=", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000890", - "electron-to-chromium": "1.3.78", - "node-releases": "1.0.0-alpha.12" - } - }, - "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "http://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", - "dev": true, - "requires": { - "dot-prop": "4.2.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } - } - } - }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "http://registry.npm.taobao.org/postcss-minify-font-values/download/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY=", - "dev": true, - "requires": { - "postcss": "7.0.5", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-minify-gradients": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/postcss-minify-gradients/download/postcss-minify-gradients-4.0.1.tgz", - "integrity": "sha1-balcbpKoCflWu3a/DARJSVPhp90=", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "4.0.0", - "is-color-stop": "1.1.0", - "postcss": "7.0.5", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-minify-params": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/postcss-minify-params/download/postcss-minify-params-4.0.1.tgz", - "integrity": "sha1-Wy4tAmTdZF711o+P7A1MOMHPk9I=", - "dev": true, - "requires": { - "alphanum-sort": "1.0.2", - "browserslist": "4.2.0", - "cssnano-util-get-arguments": "4.0.0", - "postcss": "7.0.5", - "postcss-value-parser": "3.3.0", - "uniqs": "2.0.0" - }, - "dependencies": { - "browserslist": { - "version": "4.2.0", - "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-4.2.0.tgz", - "integrity": "sha1-Pl5e33+pdY3tCIXPiMHkvnU6WRw=", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000890", - "electron-to-chromium": "1.3.78", - "node-releases": "1.0.0-alpha.12" - } - } - } - }, - "postcss-minify-selectors": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/postcss-minify-selectors/download/postcss-minify-selectors-4.0.1.tgz", - "integrity": "sha1-qJHBl5d8w3q/YLPqBrhCSLHB6c0=", - "dev": true, - "requires": { - "alphanum-sort": "1.0.2", - "has": "1.0.3", - "postcss": "7.0.5", - "postcss-selector-parser": "3.1.1" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "http://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", - "dev": true, - "requires": { - "dot-prop": "4.2.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } - } - } - }, - "postcss-modules-extract-imports": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-1.2.0.tgz", - "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", - "dev": true, - "requires": { - "postcss": "6.0.23" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz", - "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", - "dev": true, - "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.5.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - } - } - }, - "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", - "dev": true, - "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.23" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz", - "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", - "dev": true, - "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.5.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - } - } - }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", - "dev": true, - "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.23" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz", - "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", - "dev": true, - "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.5.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - } - } - }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", - "dev": true, - "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.23" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz", - "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", - "dev": true, - "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.5.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - } - } - }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/postcss-normalize-charset/download/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha1-izWt067oOhNrBHHg1ZvlilAoXdQ=", - "dev": true, - "requires": { - "postcss": "7.0.5" - } - }, - "postcss-normalize-display-values": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/postcss-normalize-display-values/download/postcss-normalize-display-values-4.0.1.tgz", - "integrity": "sha1-2ag9R8cW6KmA8i9jLIsEWM+0ikw=", - "dev": true, - "requires": { - "cssnano-util-get-match": "4.0.0", - "postcss": "7.0.5", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-normalize-positions": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/postcss-normalize-positions/download/postcss-normalize-positions-4.0.1.tgz", - "integrity": "sha1-7i1LZ4GMlhlkxr4J0XmJS5T9a6E=", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "4.0.0", - "has": "1.0.3", - "postcss": "7.0.5", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-normalize-repeat-style": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/postcss-normalize-repeat-style/download/postcss-normalize-repeat-style-4.0.1.tgz", - "integrity": "sha1-UpPyNLlNdmmp+AVJXTW4KlgcUOU=", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "4.0.0", - "cssnano-util-get-match": "4.0.0", - "postcss": "7.0.5", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-normalize-string": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/postcss-normalize-string/download/postcss-normalize-string-4.0.1.tgz", - "integrity": "sha1-I8UDDCzCQXX2bJFPpRmeLjwQ/vM=", - "dev": true, - "requires": { - "has": "1.0.3", - "postcss": "7.0.5", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-normalize-timing-functions": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/postcss-normalize-timing-functions/download/postcss-normalize-timing-functions-4.0.1.tgz", - "integrity": "sha1-i+g+C5yz/y0avd7gMqSRCPBfldc=", - "dev": true, - "requires": { - "cssnano-util-get-match": "4.0.0", - "postcss": "7.0.5", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/postcss-normalize-unicode/download/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha1-hBvUj9zzAZrUuqdJOj02O1KuHPs=", - "dev": true, - "requires": { - "browserslist": "4.2.0", - "postcss": "7.0.5", - "postcss-value-parser": "3.3.0" - }, - "dependencies": { - "browserslist": { - "version": "4.2.0", - "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-4.2.0.tgz", - "integrity": "sha1-Pl5e33+pdY3tCIXPiMHkvnU6WRw=", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000890", - "electron-to-chromium": "1.3.78", - "node-releases": "1.0.0-alpha.12" - } - } - } - }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/postcss-normalize-url/download/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE=", - "dev": true, - "requires": { - "is-absolute-url": "2.1.0", - "normalize-url": "3.3.0", - "postcss": "7.0.5", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-normalize-whitespace": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/postcss-normalize-whitespace/download/postcss-normalize-whitespace-4.0.1.tgz", - "integrity": "sha1-0Uy2ObYSOEGKyLyNO3vdZfyGV14=", - "dev": true, - "requires": { - "postcss": "7.0.5", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-ordered-values": { - "version": "4.1.1", - "resolved": "http://registry.npm.taobao.org/postcss-ordered-values/download/postcss-ordered-values-4.1.1.tgz", - "integrity": "sha1-LjtDLvPkibGDM67KHxKV64m+n8I=", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "4.0.0", - "postcss": "7.0.5", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-reduce-initial": { - "version": "4.0.2", - "resolved": "http://registry.npm.taobao.org/postcss-reduce-initial/download/postcss-reduce-initial-4.0.2.tgz", - "integrity": "sha1-usjjJdZ1EO4B+kYGdtyOqeO0DxU=", - "dev": true, - "requires": { - "browserslist": "4.2.0", - "caniuse-api": "3.0.0", - "has": "1.0.3", - "postcss": "7.0.5" - }, - "dependencies": { - "browserslist": { - "version": "4.2.0", - "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-4.2.0.tgz", - "integrity": "sha1-Pl5e33+pdY3tCIXPiMHkvnU6WRw=", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000890", - "electron-to-chromium": "1.3.78", - "node-releases": "1.0.0-alpha.12" - } - } - } - }, - "postcss-reduce-transforms": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/postcss-reduce-transforms/download/postcss-reduce-transforms-4.0.1.tgz", - "integrity": "sha1-hgDVVTvdOtZA9Dv/getS+HYNRWE=", - "dev": true, - "requires": { - "cssnano-util-get-match": "4.0.0", - "has": "1.0.3", - "postcss": "7.0.5", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-selector-parser": { - "version": "2.2.3", - "resolved": "http://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-2.2.3.tgz", - "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", - "dev": true, - "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } - }, - "postcss-svgo": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/postcss-svgo/download/postcss-svgo-4.0.1.tgz", - "integrity": "sha1-VijNs48BXea1iM5tC/ByS0krWB0=", - "dev": true, - "requires": { - "is-svg": "3.0.0", - "postcss": "7.0.5", - "postcss-value-parser": "3.3.0", - "svgo": "1.1.1" - } - }, - "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/postcss-unique-selectors/download/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w=", - "dev": true, - "requires": { - "alphanum-sort": "1.0.2", - "postcss": "7.0.5", - "uniqs": "2.0.0" - } - }, - "postcss-value-parser": { - "version": "3.3.0", - "resolved": "http://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.0.tgz", - "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "prettier": { - "version": "1.13.7", - "resolved": "http://registry.npm.taobao.org/prettier/download/prettier-1.13.7.tgz", - "integrity": "sha1-hQ87iveEpJpuotLqp+0UKKNLcoE=", - "dev": true - }, - "pretty-error": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/pretty-error/download/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "dev": true, - "requires": { - "renderkid": "2.0.2", - "utila": "0.4.0" - } - }, - "private": { - "version": "0.1.8", - "resolved": "http://registry.npm.taobao.org/private/download/private-0.1.8.tgz", - "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "http://registry.npm.taobao.org/process/download/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.0.tgz", - "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=", - "dev": true - }, - "progress": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/progress/download/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "protobufjs": { - "version": "6.8.8", - "resolved": "http://registry.npm.taobao.org/protobufjs/download/protobufjs-6.8.8.tgz", - "integrity": "sha1-yLTxKC/XqQ5vWxCe0RyEr4KQjnw=", - "requires": { - "@protobufjs/aspromise": "1.1.2", - "@protobufjs/base64": "1.1.2", - "@protobufjs/codegen": "2.0.4", - "@protobufjs/eventemitter": "1.1.0", - "@protobufjs/fetch": "1.1.0", - "@protobufjs/float": "1.0.2", - "@protobufjs/inquire": "1.1.0", - "@protobufjs/path": "1.1.2", - "@protobufjs/pool": "1.1.0", - "@protobufjs/utf8": "1.1.0", - "@types/long": "4.0.0", - "@types/node": "10.12.30", - "long": "4.0.0" - } - }, - "proxy-addr": { - "version": "2.0.4", - "resolved": "http://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.4.tgz", - "integrity": "sha1-7PxzO/Iv+Mb0B/onUye5q2fki5M=", - "dev": true, - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.8.0" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.1.29", - "resolved": "http://registry.npm.taobao.org/psl/download/psl-1.1.29.tgz", - "integrity": "sha1-YPWA02AXC7cip5fMcEQR5tqFDGc=", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "http://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz", - "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" - } - }, - "pump": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz", - "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=", - "dev": true, - "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "http://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz", - "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=", - "dev": true, - "requires": { - "duplexify": "3.6.0", - "inherits": "2.0.3", - "pump": "2.0.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz", - "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "http://registry.npm.taobao.org/q/download/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "http://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "querystringify": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/querystringify/download/querystringify-2.1.0.tgz", - "integrity": "sha1-fe2N+/eHncxg0KZErGdUsoOtF+8=", - "dev": true - }, - "randomatic": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/randomatic/download/randomatic-3.1.0.tgz", - "integrity": "sha1-NvLKcI6eVn9e0uwBlJAm1QqhARY=", - "dev": true, - "requires": { - "is-number": "4.0.0", - "kind-of": "6.0.2", - "math-random": "1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-4.0.0.tgz", - "integrity": "sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", - "dev": true - } - } - }, - "randombytes": { - "version": "2.0.6", - "resolved": "http://registry.npm.taobao.org/randombytes/download/randombytes-2.0.6.tgz", - "integrity": "sha1-0wLFIpSFiISKjTAMkytEwkIx2oA=", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz", - "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", - "dev": true, - "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/range-parser/download/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true - }, - "raw-body": { - "version": "2.3.3", - "resolved": "http://registry.npm.taobao.org/raw-body/download/raw-body-2.3.3.tgz", - "integrity": "sha1-GzJOzmtXBuFThVvBFIxlu39uoMM=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.23", - "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.23.tgz", - "integrity": "sha1-KXhx9jvlB63Pv8pxXQzQ7thOmmM=", - "dev": true, - "requires": { - "safer-buffer": "2.1.2" - } - } - } - }, - "read-pkg": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/read-pkg/download/read-pkg-4.0.1.tgz", - "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", - "dev": true, - "requires": { - "normalize-package-data": "2.4.0", - "parse-json": "4.0.0", - "pify": "3.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz", - "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "http://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz", - "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "micromatch": "3.1.10", - "readable-stream": "2.3.6" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", - "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", - "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", - "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz", - "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", - "dev": true, - "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz", - "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" - }, - "dependencies": { - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "4.0.1" - } - } - } - }, - "reduce-css-calc": { - "version": "2.1.5", - "resolved": "http://registry.npm.taobao.org/reduce-css-calc/download/reduce-css-calc-2.1.5.tgz", - "integrity": "sha1-8oNxLwyXCO+VLTKPSxYRLVewNxQ=", - "dev": true, - "requires": { - "css-unit-converter": "1.1.1", - "postcss-value-parser": "3.3.0" - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "http://registry.npm.taobao.org/regenerate/download/regenerate-1.4.0.tgz", - "integrity": "sha1-SoVuxLVuQHfFV1icroXnpMiGmhE=", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "7.0.0", - "resolved": "http://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-7.0.0.tgz", - "integrity": "sha1-EHQFr8xKGQ7F7UUOyqAO0Mr6ekw=", - "dev": true, - "requires": { - "regenerate": "1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz", - "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=", - "dev": true - }, - "regenerator-transform": { - "version": "0.12.4", - "resolved": "http://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.12.4.tgz", - "integrity": "sha1-qptsWfS5e+CA6XJQbFYLO8y/z/A=", - "dev": true, - "requires": { - "private": "0.1.8" - } - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "http://registry.npm.taobao.org/regex-cache/download/regex-cache-0.4.4.tgz", - "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=", - "dev": true, - "requires": { - "is-equal-shallow": "0.1.3" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz", - "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", - "dev": true, - "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" - } - }, - "regexpp": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/regexpp/download/regexpp-1.1.0.tgz", - "integrity": "sha1-DjUW3Qt5BPQT0tQZPc5GGMOmias=", - "dev": true - }, - "regexpu-core": { - "version": "4.2.0", - "resolved": "http://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.2.0.tgz", - "integrity": "sha1-o3RPoDgGz/4UbepEIaPnO9zEex0=", - "dev": true, - "requires": { - "regenerate": "1.4.0", - "regenerate-unicode-properties": "7.0.0", - "regjsgen": "0.4.0", - "regjsparser": "0.3.0", - "unicode-match-property-ecmascript": "1.0.4", - "unicode-match-property-value-ecmascript": "1.0.2" - } - }, - "regjsgen": { - "version": "0.4.0", - "resolved": "http://registry.npm.taobao.org/regjsgen/download/regjsgen-0.4.0.tgz", - "integrity": "sha1-wetMiaIJJj+HF8eCWRUjkT7eJWE=", - "dev": true - }, - "regjsparser": { - "version": "0.3.0", - "resolved": "http://registry.npm.taobao.org/regjsparser/download/regjsparser-0.3.0.tgz", - "integrity": "sha1-PDJtp/z9afoNMyV1pByMDN9YjJY=", - "dev": true, - "requires": { - "jsesc": "0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "http://registry.npm.taobao.org/relateurl/download/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "renderkid": { - "version": "2.0.2", - "resolved": "http://registry.npm.taobao.org/renderkid/download/renderkid-2.0.2.tgz", - "integrity": "sha1-EtMQ8lU2DAetj94lP2yeneNy0qo=", - "dev": true, - "requires": { - "css-select": "1.2.0", - "dom-converter": "0.2.0", - "htmlparser2": "3.3.0", - "strip-ansi": "3.0.1", - "utila": "0.4.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "css-select": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/css-select/download/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.0", - "domutils": "1.5.1", - "nth-check": "1.0.1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "http://registry.npm.taobao.org/domutils/download/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz", - "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "request": { - "version": "2.88.0", - "resolved": "http://registry.npm.taobao.org/request/download/request-2.88.0.tgz", - "integrity": "sha1-nC/KT301tZLv5Xx/ClXoEFIST+8=", - "dev": true, - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.8.0", - "caseless": "0.12.0", - "combined-stream": "1.0.7", - "extend": "3.0.2", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.1.0", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.20", - "oauth-sign": "0.9.0", - "performance-now": "2.1.0", - "qs": "6.5.2", - "safe-buffer": "5.1.2", - "tough-cookie": "2.4.3", - "tunnel-agent": "0.6.0", - "uuid": "3.3.2" - } - }, - "request-promise-core": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/request-promise-core/download/request-promise-core-1.1.1.tgz", - "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", - "dev": true, - "requires": { - "lodash": "4.17.11" - } - }, - "request-promise-native": { - "version": "1.0.5", - "resolved": "http://registry.npm.taobao.org/request-promise-native/download/request-promise-native-1.0.5.tgz", - "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", - "dev": true, - "requires": { - "request-promise-core": "1.1.1", - "stealthy-require": "1.1.1", - "tough-cookie": "2.4.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "http://registry.npm.taobao.org/require-from-string/download/require-from-string-2.0.2.tgz", - "integrity": "sha1-iaf92TgmEmcxjq/hT5wy5ZjDaQk=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "require-package-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz", - "integrity": "sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk=", - "dev": true - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/require-uncached/download/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" - } - }, - "requires-port": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.8.1", - "resolved": "http://registry.npm.taobao.org/resolve/download/resolve-1.8.1.tgz", - "integrity": "sha1-gvHsGaQjrB+9CAsLqwa6NuhKeiY=", - "dev": true, - "requires": { - "path-parse": "1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/resolve-from/download/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "http://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "http://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz", - "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", - "dev": true - }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/rgb-regex/download/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", - "dev": true - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/rgba-regex/download/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", - "dev": true - }, - "rimraf": { - "version": "2.6.2", - "resolved": "http://registry.npm.taobao.org/rimraf/download/rimraf-2.6.2.tgz", - "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=", - "dev": true, - "requires": { - "glob": "7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "http://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz", - "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", - "dev": true, - "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/run-async/download/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "2.1.0" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "1.2.0" - } - }, - "rx-lite": { - "version": "4.0.8", - "resolved": "http://registry.npm.taobao.org/rx-lite/download/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "http://registry.npm.taobao.org/rx-lite-aggregates/download/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "requires": { - "rx-lite": "4.0.8" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", - "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "0.1.15" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "http://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz", - "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", - "dev": true - }, - "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", - "dev": true, - "requires": { - "glob": "7.1.3", - "lodash": "4.17.11", - "scss-tokenizer": "0.2.3", - "yargs": "7.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "1.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "1.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "1.3.2" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.3", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "5.0.0" - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "3.0.0" - } - } - } - }, - "sass-loader": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz", - "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", - "dev": true, - "requires": { - "clone-deep": "2.0.2", - "loader-utils": "1.1.0", - "lodash.tail": "4.1.1", - "neo-async": "2.5.2", - "pify": "3.0.0", - "semver": "5.6.0" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "http://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz", - "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", - "dev": true - }, - "schema-utils": { - "version": "0.4.7", - "resolved": "http://registry.npm.taobao.org/schema-utils/download/schema-utils-0.4.7.tgz", - "integrity": "sha1-unT1l9K+LqiAExdG7hfQoJPGgYc=", - "dev": true, - "requires": { - "ajv": "6.5.4", - "ajv-keywords": "3.2.0" - }, - "dependencies": { - "ajv": { - "version": "6.5.4", - "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-6.5.4.tgz", - "integrity": "sha1-JH1SdBENtlNwa1UPzCt5fKKM/Fk=", - "dev": true, - "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" - } - }, - "ajv-keywords": { - "version": "3.2.0", - "resolved": "http://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", - "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", - "dev": true - } - } - }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", - "dev": true, - "requires": { - "js-base64": "2.4.9", - "source-map": "0.4.4" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selfsigned": { - "version": "1.10.4", - "resolved": "http://registry.npm.taobao.org/selfsigned/download/selfsigned-1.10.4.tgz", - "integrity": "sha1-zdfsz8pO12NdR6CL8tXTB0CS4s0=", - "dev": true, - "requires": { - "node-forge": "0.7.5" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.6.0.tgz", - "integrity": "sha1-fnQlb7qknHWqfHogXMInmcrIAAQ=", - "dev": true - }, - "send": { - "version": "0.16.2", - "resolved": "http://registry.npm.taobao.org/send/download/send-0.16.2.tgz", - "integrity": "sha1-bsyh4PjBVtFBWXVZhI32RzCmu8E=", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.3", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.4.1.tgz", - "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "1.5.0", - "resolved": "http://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-1.5.0.tgz", - "integrity": "sha1-GqM2FiyIqJDdrVOEuuvJOmVRYf4=", - "dev": true - }, - "serve-index": { - "version": "1.9.1", - "resolved": "http://registry.npm.taobao.org/serve-index/download/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "requires": { - "accepts": "1.3.5", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.3", - "mime-types": "2.1.20", - "parseurl": "1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "http://registry.npm.taobao.org/serve-static/download/serve-static-1.13.2.tgz", - "integrity": "sha1-CV6Ecv1bRiN9tQzkhqQ/S4bGzsE=", - "dev": true, - "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.2" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/set-value/download/set-value-2.0.0.tgz", - "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "http://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz", - "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "http://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz", - "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "shallow-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", - "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", - "dev": true, - "requires": { - "is-extendable": "0.1.1", - "kind-of": "5.1.0", - "mixin-object": "2.0.1" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shell-quote": { - "version": "1.6.1", - "resolved": "http://registry.npm.taobao.org/shell-quote/download/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "0.0.1", - "array-map": "0.0.0", - "array-reduce": "0.0.0", - "jsonify": "0.0.0" - } - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "http://registry.npm.taobao.org/simple-swizzle/download/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, - "requires": { - "is-arrayish": "0.3.2" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "http://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.3.2.tgz", - "integrity": "sha1-RXSirlb3qyBolvtDHq7tBm/fjwM=", - "dev": true - } - } - }, - "slash": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz", - "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=", - "dev": true - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/slice-ansi/download/slice-ansi-1.0.0.tgz", - "integrity": "sha1-BE8aSdiEL/MHqta1Be0Xi9lQE00=", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "http://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz", - "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", - "dev": true, - "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz", - "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", - "dev": true, - "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz", - "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "sockjs": { - "version": "0.3.19", - "resolved": "http://registry.npm.taobao.org/sockjs/download/sockjs-0.3.19.tgz", - "integrity": "sha1-2Xa76ACve9IK4IWY1YI5NQiZPA0=", - "dev": true, - "requires": { - "faye-websocket": "0.10.0", - "uuid": "3.3.2" - } - }, - "sockjs-client": { - "version": "1.1.5", - "resolved": "http://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.1.5.tgz", - "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=", - "dev": true, - "requires": { - "debug": "2.6.9", - "eventsource": "0.1.6", - "faye-websocket": "0.11.1", - "inherits": "2.0.3", - "json3": "3.3.2", - "url-parse": "1.4.3" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "faye-websocket": { - "version": "0.11.1", - "resolved": "http://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.11.1.tgz", - "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", - "dev": true, - "requires": { - "websocket-driver": "0.7.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz", - "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "http://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.2.tgz", - "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", - "dev": true, - "requires": { - "atob": "2.1.2", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "http://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "3.0.2", - "resolved": "http://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.0.2.tgz", - "integrity": "sha1-GbtAnpG0exrVQVkkP3MSqFjbPC4=", - "dev": true, - "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.1" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "http://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.2.0.tgz", - "integrity": "sha1-LqRQrudPKom/uUUZwH/Nb0EyKXc=", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=", - "dev": true, - "requires": { - "spdx-exceptions": "2.2.0", - "spdx-license-ids": "3.0.1" - } - }, - "spdx-license-ids": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.1.tgz", - "integrity": "sha1-4qMDI2ysVLBAMfp6WnnH5wHfhS8=", - "dev": true - }, - "spdy": { - "version": "3.4.7", - "resolved": "http://registry.npm.taobao.org/spdy/download/spdy-3.4.7.tgz", - "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", - "dev": true, - "requires": { - "debug": "2.6.9", - "handle-thing": "1.2.5", - "http-deceiver": "1.2.7", - "safe-buffer": "5.1.2", - "select-hose": "2.0.0", - "spdy-transport": "2.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "spdy-transport": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/spdy-transport/download/spdy-transport-2.1.0.tgz", - "integrity": "sha1-S7sVqv/tC+791WrWHb3Iuj4st6E=", - "dev": true, - "requires": { - "debug": "2.6.9", - "detect-node": "2.0.4", - "hpack.js": "2.1.6", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2", - "wbuf": "1.7.3" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz", - "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", - "dev": true, - "requires": { - "extend-shallow": "3.0.2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.15.1", - "resolved": "http://registry.npm.taobao.org/sshpk/download/sshpk-1.15.1.tgz", - "integrity": "sha1-t5oImnMuNGxuBxSDDzYoXNOBkaI=", - "dev": true, - "requires": { - "asn1": "0.2.4", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.2", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.2", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "safer-buffer": "2.1.2", - "tweetnacl": "0.14.5" - } - }, - "ssri": { - "version": "6.0.1", - "resolved": "http://registry.npm.taobao.org/ssri/download/ssri-6.0.1.tgz", - "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=", - "dev": true, - "requires": { - "figgy-pudding": "3.5.1" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "http://registry.npm.taobao.org/stable/download/stable-0.1.8.tgz", - "integrity": "sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88=", - "dev": true - }, - "stackframe": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/stackframe/download/stackframe-1.0.4.tgz", - "integrity": "sha1-NXskqZL5Qny6a1RdlqFO0svKGHs=", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - } - } - }, - "statuses": { - "version": "1.4.0", - "resolved": "http://registry.npm.taobao.org/statuses/download/statuses-1.4.0.tgz", - "integrity": "sha1-u3PURtonlhBu/MG2AaJT1sRr0Ic=", - "dev": true - }, - "stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", - "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", - "dev": true, - "requires": { - "readable-stream": "2.3.6" - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/stealthy-require/download/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "stream-browserify": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "http://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz", - "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=", - "dev": true, - "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "http://registry.npm.taobao.org/stream-http/download/stream-http-2.8.3.tgz", - "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", - "dev": true, - "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", - "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "string.prototype.padend": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/string.prototype.padend/download/string.prototype.padend-3.0.0.tgz", - "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", - "dev": true, - "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.12.0", - "function-bind": "1.1.1" - } - }, - "string.prototype.padstart": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/string.prototype.padstart/download/string.prototype.padstart-3.0.0.tgz", - "integrity": "sha1-W8+tOfRkm7LQMSkuGbzwtRDUskI=", - "dev": true, - "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.12.0", - "function-bind": "1.1.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz", - "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/strip-indent/download/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "stylehacks": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/stylehacks/download/stylehacks-4.0.1.tgz", - "integrity": "sha1-MYZZXQR6sN+BPSE+Uci5TguQEPI=", - "dev": true, - "requires": { - "browserslist": "4.2.0", - "postcss": "7.0.5", - "postcss-selector-parser": "3.1.1" - }, - "dependencies": { - "browserslist": { - "version": "4.2.0", - "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-4.2.0.tgz", - "integrity": "sha1-Pl5e33+pdY3tCIXPiMHkvnU6WRw=", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000890", - "electron-to-chromium": "1.3.78", - "node-releases": "1.0.0-alpha.12" - } - }, - "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "http://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", - "dev": true, - "requires": { - "dot-prop": "4.2.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - }, - "svgo": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/svgo/download/svgo-1.1.1.tgz", - "integrity": "sha1-EjhLAzNbzs2Fz6X04zdf7WccuYU=", - "dev": true, - "requires": { - "coa": "2.0.1", - "colors": "1.1.2", - "css-select": "2.0.0", - "css-select-base-adapter": "0.1.0", - "css-tree": "1.0.0-alpha.28", - "css-url-regex": "1.1.0", - "csso": "3.5.1", - "js-yaml": "3.12.0", - "mkdirp": "0.5.1", - "object.values": "1.0.4", - "sax": "1.2.4", - "stable": "0.1.8", - "unquote": "1.1.1", - "util.promisify": "1.0.0" - } - }, - "table": { - "version": "4.0.2", - "resolved": "http://registry.npm.taobao.org/table/download/table-4.0.2.tgz", - "integrity": "sha1-ozRHN1OR52atNNNIbm4q7chNLjY=", - "dev": true, - "requires": { - "ajv": "5.5.2", - "ajv-keywords": "2.1.1", - "chalk": "2.4.1", - "lodash": "4.17.11", - "slice-ansi": "1.0.0", - "string-width": "2.1.1" - } - }, - "tapable": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/tapable/download/tapable-1.1.0.tgz", - "integrity": "sha1-DQdqFy49m6CI/SJysmaPuNGUt4w=", - "dev": true - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "thread-loader": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/thread-loader/download/thread-loader-1.2.0.tgz", - "integrity": "sha1-Nd7bI88pSvu85sRcEzm5UO0X56Q=", - "dev": true, - "requires": { - "async": "2.6.1", - "loader-runner": "2.3.1", - "loader-utils": "1.1.0" - }, - "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "http://registry.npm.taobao.org/async/download/async-2.6.1.tgz", - "integrity": "sha1-skWiPKcZMAROxT+kaqAKPofGphA=", - "dev": true, - "requires": { - "lodash": "4.17.11" - } - } - } - }, - "through": { - "version": "2.3.8", - "resolved": "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "http://registry.npm.taobao.org/through2/download/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" - } - }, - "thunky": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/thunky/download/thunky-1.0.2.tgz", - "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=", - "dev": true - }, - "timers-browserify": { - "version": "2.0.10", - "resolved": "http://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.10.tgz", - "integrity": "sha1-HSjj0qrfHVpZlsTp+VYBzQU0gK4=", - "dev": true, - "requires": { - "setimmediate": "1.0.5" - } - }, - "timsort": { - "version": "0.3.0", - "resolved": "http://registry.npm.taobao.org/timsort/download/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "http://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz", - "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "http://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "http://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz", - "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", - "dev": true, - "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - } - } - }, - "topo": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/topo/download/topo-3.0.0.tgz", - "integrity": "sha1-N+SMMw7+rHhFOOCs0+YspeIx/no=", - "dev": true, - "requires": { - "hoek": "5.0.4" - } - }, - "toposort": { - "version": "1.0.7", - "resolved": "http://registry.npm.taobao.org/toposort/download/toposort-1.0.7.tgz", - "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.4.3.tgz", - "integrity": "sha1-U/Nto/R3g7CSWvoG/587FlKA94E=", - "dev": true, - "requires": { - "psl": "1.1.29", - "punycode": "1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "true-case-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", - "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", - "dev": true, - "requires": { - "glob": "7.1.3" - } - }, - "tryer": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/tryer/download/tryer-1.0.1.tgz", - "integrity": "sha1-8shUBoALmw90yfdGW4HqrSQSUvg=", - "dev": true - }, - "tslib": { - "version": "1.9.3", - "resolved": "http://registry.npm.taobao.org/tslib/download/tslib-1.9.3.tgz", - "integrity": "sha1-1+TdeSRdhUKMTX5IIqeZF5VMooY=", - "dev": true - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "http://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "http://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2" - } - }, - "type-is": { - "version": "1.6.16", - "resolved": "http://registry.npm.taobao.org/type-is/download/type-is-1.6.16.tgz", - "integrity": "sha1-+JzjQVQcZysl7nrjxz3uOyvlAZQ=", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.20" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "uglify-js": { - "version": "3.4.9", - "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.9.tgz", - "integrity": "sha1-rwLxgMEgfXZDLkc+0koo9KeCuuM=", - "dev": true, - "requires": { - "commander": "2.17.1", - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - } - } - }, - "uglifyjs-webpack-plugin": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/uglifyjs-webpack-plugin/download/uglifyjs-webpack-plugin-1.3.0.tgz", - "integrity": "sha1-dfVIFghYFjoIZD4IbV/v4YpdZ94=", - "dev": true, - "requires": { - "cacache": "10.0.4", - "find-cache-dir": "1.0.0", - "schema-utils": "0.4.7", - "serialize-javascript": "1.5.0", - "source-map": "0.6.1", - "uglify-es": "3.3.9", - "webpack-sources": "1.3.0", - "worker-farm": "1.6.0" - }, - "dependencies": { - "commander": { - "version": "2.13.0", - "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.13.0.tgz", - "integrity": "sha1-aWS8pnaF33wfFDDFhPB9dZeIW5w=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - }, - "uglify-es": { - "version": "3.3.9", - "resolved": "http://registry.npm.taobao.org/uglify-es/download/uglify-es-3.3.9.tgz", - "integrity": "sha1-DBxPBwC+2NvBJM2zBNJZLKID5nc=", - "dev": true, - "requires": { - "commander": "2.13.0", - "source-map": "0.6.1" - } - } - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg=", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw=", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "1.0.4", - "unicode-property-aliases-ecmascript": "1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.0.2.tgz", - "integrity": "sha1-nx3HaSbWzPRSMQVk/YNKzgWWY9Q=", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.0.4.tgz", - "integrity": "sha1-WlM/MbQxfqdvF9gH+g0RZUYRHdA=", - "dev": true - }, - "union-value": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/union-value/download/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "http://registry.npm.taobao.org/set-value/download/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" - } - } - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/uniq/download/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "uniqs": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/uniqs/download/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz", - "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=", - "dev": true, - "requires": { - "unique-slug": "2.0.1" - } - }, - "unique-slug": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.1.tgz", - "integrity": "sha1-Xp7cbRzo+yZNsYpQfvm9hURFHKY=", - "dev": true, - "requires": { - "imurmurhash": "0.1.4" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz", - "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unquote": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/unquote/download/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "http://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "http://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "upath": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/upath/download/upath-1.1.0.tgz", - "integrity": "sha1-NSVll+RqWB20eT0M5H+prr/J+r0=", - "dev": true - }, - "upper-case": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, - "uri-js": { - "version": "4.2.2", - "resolved": "http://registry.npm.taobao.org/uri-js/download/uri-js-4.2.2.tgz", - "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", - "dev": true, - "requires": { - "punycode": "2.1.1" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "http://registry.npm.taobao.org/url/download/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-loader": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/url-loader/download/url-loader-1.1.2.tgz", - "integrity": "sha1-uXHRkbg69pPF4/6kBkvp4fLX+Ng=", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "mime": "2.3.1", - "schema-utils": "1.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.5.4", - "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-6.5.4.tgz", - "integrity": "sha1-JH1SdBENtlNwa1UPzCt5fKKM/Fk=", - "dev": true, - "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" - } - }, - "ajv-keywords": { - "version": "3.2.0", - "resolved": "http://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", - "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz", - "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", - "dev": true, - "requires": { - "ajv": "6.5.4", - "ajv-errors": "1.0.0", - "ajv-keywords": "3.2.0" - } - } - } - }, - "url-parse": { - "version": "1.4.3", - "resolved": "http://registry.npm.taobao.org/url-parse/download/url-parse-1.4.3.tgz", - "integrity": "sha1-v67kVciJAjIZ11fgRfpqaE7DbBU=", - "dev": true, - "requires": { - "querystringify": "2.1.0", - "requires-port": "1.0.0" - } - }, - "use": { - "version": "3.1.1", - "resolved": "http://registry.npm.taobao.org/use/download/use-3.1.1.tgz", - "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=", - "dev": true - }, - "util": { - "version": "0.10.4", - "resolved": "http://registry.npm.taobao.org/util/download/util-0.10.4.tgz", - "integrity": "sha1-OqASW/5mikZy3liFfTrOJ+y3aQE=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz", - "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=", - "dev": true, - "requires": { - "define-properties": "1.1.3", - "object.getownpropertydescriptors": "2.0.3" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "http://registry.npm.taobao.org/utila/download/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "http://registry.npm.taobao.org/uuid/download/uuid-3.3.2.tgz", - "integrity": "sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE=", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "http://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", - "dev": true, - "requires": { - "spdx-correct": "3.0.2", - "spdx-expression-parse": "3.0.0" - } - }, - "vant": { - "version": "1.4.4", - "resolved": "http://npm.leapcloud.cn:4873/vant/-/vant-1.4.4.tgz", - "integrity": "sha1-Xgy2ugBmX1ZhC9N2aYSztI5P81o=", - "requires": { - "@babel/runtime": "7.1.5", - "vue-lazyload": "1.2.3" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.5", - "resolved": "http://npm.leapcloud.cn:4873/@babel%2fruntime/-/runtime-7.1.5.tgz", - "integrity": "sha1-QXCQdkHPH2FQj1Y+zjclFQzG/jk=", - "requires": { - "regenerator-runtime": "0.12.1" - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "http://npm.leapcloud.cn:4873/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha1-+hpxVEdkwDb4xJsToIsllMn4oN4=" - } - } - }, - "vary": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "vee-validate": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/vee-validate/-/vee-validate-2.1.4.tgz", - "integrity": "sha512-71yu8floUnMEdkwswaF9WJc5Xubc5dhIG6MRc/H0egQnP34Y14WwNweK9z31Nf2Zi6JB2H/36EKt0Mqco8R/Nw==" - }, - "vendors": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/vendors/download/vendors-1.0.2.tgz", - "integrity": "sha1-f8te759WI7FWvOqJ7DfWNnbyGAE=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - } - }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "http://registry.npm.taobao.org/vm-browserify/download/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } - }, - "vue": { - "version": "2.5.17", - "resolved": "http://registry.npm.taobao.org/vue/download/vue-2.5.17.tgz", - "integrity": "sha1-D4eJrXGL5oyhhyYpgy7VM1icato=" - }, - "vue-eslint-parser": { - "version": "2.0.3", - "resolved": "http://registry.npm.taobao.org/vue-eslint-parser/download/vue-eslint-parser-2.0.3.tgz", - "integrity": "sha1-wmjJbG2Uz+PZOKX3WTlZsMozYNE=", - "dev": true, - "requires": { - "debug": "3.2.6", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "1.0.0", - "espree": "3.5.4", - "esquery": "1.0.1", - "lodash": "4.17.11" - } - }, - "vue-hot-reload-api": { - "version": "2.3.1", - "resolved": "http://registry.npm.taobao.org/vue-hot-reload-api/download/vue-hot-reload-api-2.3.1.tgz", - "integrity": "sha1-stPZVAKoEWAjgHg+pPVm64dVaaI=", - "dev": true - }, - "vue-lazyload": { - "version": "1.2.3", - "resolved": "http://npm.leapcloud.cn:4873/vue-lazyload/-/vue-lazyload-1.2.3.tgz", - "integrity": "sha1-kB+ewVx+bKeHgaK65KNDaGve2yw=" - }, - "vue-loader": { - "version": "15.4.2", - "resolved": "http://registry.npm.taobao.org/vue-loader/download/vue-loader-15.4.2.tgz", - "integrity": "sha1-gSuybkR907hMSF62NBkNkUzhJeI=", - "dev": true, - "requires": { - "@vue/component-compiler-utils": "2.2.0", - "hash-sum": "1.0.2", - "loader-utils": "1.1.0", - "vue-hot-reload-api": "2.3.1", - "vue-style-loader": "4.1.2" - } - }, - "vue-router": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/vue-router/download/vue-router-3.0.1.tgz", - "integrity": "sha1-2bBa2cdCC6D2JtZQDWk+YAkswek=" - }, - "vue-style-loader": { - "version": "4.1.2", - "resolved": "http://registry.npm.taobao.org/vue-style-loader/download/vue-style-loader-4.1.2.tgz", - "integrity": "sha1-3t80mAbyXOtOZPOtfApE+6c1/Pg=", - "dev": true, - "requires": { - "hash-sum": "1.0.2", - "loader-utils": "1.1.0" - } - }, - "vue-template-compiler": { - "version": "2.5.17", - "resolved": "http://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.5.17.tgz", - "integrity": "sha1-UqSgeMMn3rk3SCpQmuhcBvNGw8s=", - "dev": true, - "requires": { - "de-indent": "1.0.2", - "he": "1.1.1" - } - }, - "vue-template-es2015-compiler": { - "version": "1.6.0", - "resolved": "http://registry.npm.taobao.org/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.6.0.tgz", - "integrity": "sha1-3EJpcTMwLOMBdSQ1amxht7abShg=", - "dev": true - }, - "vuelidation": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vuelidation/-/vuelidation-1.1.0.tgz", - "integrity": "sha512-6cnc9G63Bo9t4dESZHILh9J8zMggWnMGOAWBaxvVYCjFol4FbBAGq/oBh74KHJBHXL9FmRd2hUvRnVK8Sb8WBg==" - }, - "watchpack": { - "version": "1.6.0", - "resolved": "http://registry.npm.taobao.org/watchpack/download/watchpack-1.6.0.tgz", - "integrity": "sha1-S8EsLr6KonenHx0/FNaFx7RGzQA=", - "dev": true, - "requires": { - "chokidar": "2.0.4", - "graceful-fs": "4.1.11", - "neo-async": "2.5.2" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "http://registry.npm.taobao.org/wbuf/download/wbuf-1.7.3.tgz", - "integrity": "sha1-wdjRSTFtPqhShIiVy2oL/oh7h98=", - "dev": true, - "requires": { - "minimalistic-assert": "1.0.1" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "1.0.3" - } - }, - "webpack": { - "version": "4.20.2", - "resolved": "http://registry.npm.taobao.org/webpack/download/webpack-4.20.2.tgz", - "integrity": "sha1-ifZIa2uydqkbCCNFPTd1AfxiW1o=", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.8", - "@webassemblyjs/helper-module-context": "1.7.8", - "@webassemblyjs/wasm-edit": "1.7.8", - "@webassemblyjs/wasm-parser": "1.7.8", - "acorn": "5.7.3", - "acorn-dynamic-import": "3.0.0", - "ajv": "6.5.4", - "ajv-keywords": "3.2.0", - "chrome-trace-event": "1.0.0", - "enhanced-resolve": "4.1.0", - "eslint-scope": "4.0.0", - "json-parse-better-errors": "1.0.2", - "loader-runner": "2.3.1", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "micromatch": "3.1.10", - "mkdirp": "0.5.1", - "neo-async": "2.5.2", - "node-libs-browser": "2.1.0", - "schema-utils": "0.4.7", - "tapable": "1.1.0", - "uglifyjs-webpack-plugin": "1.3.0", - "watchpack": "1.6.0", - "webpack-sources": "1.3.0" - }, - "dependencies": { - "ajv": { - "version": "6.5.4", - "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-6.5.4.tgz", - "integrity": "sha1-JH1SdBENtlNwa1UPzCt5fKKM/Fk=", - "dev": true, - "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" - } - }, - "ajv-keywords": { - "version": "3.2.0", - "resolved": "http://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", - "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "eslint-scope": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.0.tgz", - "integrity": "sha1-UL8wcekzi83EMzF5Sgy1M/ATYXI=", - "dev": true, - "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", - "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", - "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz", - "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", - "dev": true, - "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", - "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz", - "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "webpack-bundle-analyzer": { - "version": "2.13.1", - "resolved": "http://registry.npm.taobao.org/webpack-bundle-analyzer/download/webpack-bundle-analyzer-2.13.1.tgz", - "integrity": "sha1-B9IXbG6Gw83OTCPlb64qe2tK1SY=", - "dev": true, - "requires": { - "acorn": "5.7.3", - "bfj-node4": "5.3.1", - "chalk": "2.4.1", - "commander": "2.17.1", - "ejs": "2.6.1", - "express": "4.16.4", - "filesize": "3.6.1", - "gzip-size": "4.1.0", - "lodash": "4.17.11", - "mkdirp": "0.5.1", - "opener": "1.5.1", - "ws": "4.1.0" - } - }, - "webpack-chain": { - "version": "4.12.1", - "resolved": "http://registry.npm.taobao.org/webpack-chain/download/webpack-chain-4.12.1.tgz", - "integrity": "sha1-bIQ5u7KrVQlS1g4eqTGRQZBsAqY=", - "dev": true, - "requires": { - "deepmerge": "1.5.2", - "javascript-stringify": "1.6.0" - } - }, - "webpack-dev-middleware": { - "version": "3.4.0", - "resolved": "http://registry.npm.taobao.org/webpack-dev-middleware/download/webpack-dev-middleware-3.4.0.tgz", - "integrity": "sha1-ETL+zJAm/ZDw7O2sXL/3XR+0WJA=", - "dev": true, - "requires": { - "memory-fs": "0.4.1", - "mime": "2.3.1", - "range-parser": "1.2.0", - "webpack-log": "2.0.0" - } - }, - "webpack-dev-server": { - "version": "3.1.9", - "resolved": "http://registry.npm.taobao.org/webpack-dev-server/download/webpack-dev-server-3.1.9.tgz", - "integrity": "sha1-izIWdiTS+v9A3O3Cy84X7R800+A=", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "bonjour": "3.5.0", - "chokidar": "2.0.4", - "compression": "1.7.3", - "connect-history-api-fallback": "1.5.0", - "debug": "3.2.6", - "del": "3.0.0", - "express": "4.16.4", - "html-entities": "1.2.1", - "http-proxy-middleware": "0.18.0", - "import-local": "2.0.0", - "internal-ip": "3.0.1", - "ip": "1.1.5", - "killable": "1.0.1", - "loglevel": "1.6.1", - "opn": "5.4.0", - "portfinder": "1.0.17", - "schema-utils": "1.0.0", - "selfsigned": "1.10.4", - "serve-index": "1.9.1", - "sockjs": "0.3.19", - "sockjs-client": "1.1.5", - "spdy": "3.4.7", - "strip-ansi": "3.0.1", - "supports-color": "5.5.0", - "webpack-dev-middleware": "3.4.0", - "webpack-log": "2.0.0", - "yargs": "12.0.2" - }, - "dependencies": { - "ajv": { - "version": "6.5.4", - "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-6.5.4.tgz", - "integrity": "sha1-JH1SdBENtlNwa1UPzCt5fKKM/Fk=", - "dev": true, - "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" - } - }, - "ajv-keywords": { - "version": "3.2.0", - "resolved": "http://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "del": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/del/download/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "dev": true, - "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "p-map": "1.2.0", - "pify": "3.0.0", - "rimraf": "2.6.2" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "globby": { - "version": "6.1.0", - "resolved": "http://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "glob": "7.1.3", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", - "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz", - "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", - "dev": true, - "requires": { - "ajv": "6.5.4", - "ajv-errors": "1.0.0", - "ajv-keywords": "3.2.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/webpack-log/download/webpack-log-2.0.0.tgz", - "integrity": "sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8=", - "dev": true, - "requires": { - "ansi-colors": "3.1.0", - "uuid": "3.3.2" - } - }, - "webpack-merge": { - "version": "4.1.4", - "resolved": "http://registry.npm.taobao.org/webpack-merge/download/webpack-merge-4.1.4.tgz", - "integrity": "sha1-D9446r8tX9hSUcJKWoxI+KP063s=", - "dev": true, - "requires": { - "lodash": "4.17.11" - } - }, - "webpack-sources": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.3.0.tgz", - "integrity": "sha1-KijcufH0X+lg2PFJMlK17mUw+oU=", - "dev": true, - "requires": { - "source-list-map": "2.0.1", - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - } - } - }, - "websocket-driver": { - "version": "0.7.0", - "resolved": "http://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", - "dev": true, - "requires": { - "http-parser-js": "0.4.13", - "websocket-extensions": "0.1.3" - } - }, - "websocket-extensions": { - "version": "0.1.3", - "resolved": "http://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.3.tgz", - "integrity": "sha1-XS/yKXcAPsaHpLhwc9+7rBRszyk=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/which/download/which-1.3.1.tgz", - "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "2.1.1" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "worker-farm": { - "version": "1.6.0", - "resolved": "http://registry.npm.taobao.org/worker-farm/download/worker-farm-1.6.0.tgz", - "integrity": "sha1-rsxAWXb6talVJhgIRvDboojzpKA=", - "dev": true, - "requires": { - "errno": "0.1.7" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "0.2.1", - "resolved": "http://registry.npm.taobao.org/write/download/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "0.5.1" - } - }, - "ws": { - "version": "4.1.0", - "resolved": "http://registry.npm.taobao.org/ws/download/ws-4.1.0.tgz", - "integrity": "sha1-qXm119TaaL9U7+BAiWfDJIaacok=", - "dev": true, - "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.2" - } - }, - "xregexp": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/xregexp/download/xregexp-4.0.0.tgz", - "integrity": "sha1-5pgYneSd0qGMxWh7BeF8jkOUMCA=", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz", - "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "12.0.2", - "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-12.0.2.tgz", - "integrity": "sha1-/lgjQ2k5KvM+y+9TgZFx7/D1qtw=", - "dev": true, - "requires": { - "cliui": "4.1.0", - "decamelize": "2.0.0", - "find-up": "3.0.0", - "get-caller-file": "1.0.3", - "os-locale": "3.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "10.1.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz", - "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", - "dev": true, - "requires": { - "locate-path": "3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz", - "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", - "dev": true, - "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" - } - }, - "p-limit": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/p-limit/download/p-limit-2.0.0.tgz", - "integrity": "sha1-5iTtVO6MRgp3izyfNnBJb/ileuw=", - "dev": true, - "requires": { - "p-try": "2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz", - "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", - "dev": true, - "requires": { - "p-limit": "2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/p-try/download/p-try-2.0.0.tgz", - "integrity": "sha1-hQgLuHxkaI+keZb+j3376CEXYLE=", - "dev": true - } - } - }, - "yargs-parser": { - "version": "10.1.0", - "resolved": "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-10.1.0.tgz", - "integrity": "sha1-cgImW4n36eny5XZeD+c1qQXtuqg=", - "dev": true, - "requires": { - "camelcase": "4.1.0" - } - }, - "yorkie": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/yorkie/download/yorkie-2.0.0.tgz", - "integrity": "sha1-kkEZEtQ1IU4SxRwq4Qk+VLa7g9k=", - "dev": true, - "requires": { - "execa": "0.8.0", - "is-ci": "1.2.1", - "normalize-path": "1.0.0", - "strip-indent": "2.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.3", - "shebang-command": "1.2.0", - "which": "1.3.1" - } - }, - "execa": { - "version": "0.8.0", - "resolved": "http://registry.npm.taobao.org/execa/download/execa-0.8.0.tgz", - "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", - "dev": true, - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } - }, - "normalize-path": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/normalize-path/download/normalize-path-1.0.0.tgz", - "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", - "dev": true - } - } - } - } -} diff --git a/litemall-vue/package.json b/litemall-vue/package.json index 71a8f032..484356d5 100644 --- a/litemall-vue/package.json +++ b/litemall-vue/package.json @@ -1,13 +1,19 @@ { - "name": "lite-mall", + "name": "litemall-vue", "version": "0.1.0", + "description": "litemall-vue basing on vant--mobile-mall 0.1.0", + "author": "litemall ", + "license": "MIT", "private": true, "scripts": { + "dev": "vue-cli-service serve", "serve": "vue-cli-service serve", "build": "vue-cli-service build", - "lint": "vue-cli-service lint", - "mock": "json-server ./mock/db.json" + "build:dep": "vue-cli-service build", + "build:prod": "vue-cli-service build", + "lint": "vue-cli-service lint" }, + "dependencies": { "@xkeshi/vue-countdown": "^1.0.1", "axios": "^0.18.0", @@ -18,7 +24,6 @@ "vee-validate": "^2.1.4", "vue": "^2.5.17", "vue-router": "^3.0.1", - "protobufjs": "^6.8.6", "vuelidation": "^1.1.0" }, "devDependencies": { diff --git a/litemall-vue/public/favicon.ico b/litemall-vue/public/favicon.ico index 219c2e75ce96d27e00bbc09a49ee0f1c4cf83cff..7fc0eab364ce36daac2ca8e29addea2d3841df24 100644 GIT binary patch literal 67646 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 meFOab - - liteMall + litemall-vue
diff --git a/litemall-vue/public/vconsole.min.js b/litemall-vue/public/vconsole.min.js deleted file mode 100644 index 1515253f..00000000 --- a/litemall-vue/public/vconsole.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * vconsole v2.4.0 (https://github.com/WechatFE/vConsole) - * Copyright 2016, WechatFE Team - * MIT license - */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.vConsole=t():e.vConsole=t()}(this,function(){return function(e){function t(n){if(o[n])return o[n].exports;var l=o[n]={exports:{},id:n,loaded:!1};return e[n].call(l.exports,l,l.exports,t),l.loaded=!0,l.exports}var o={};return t.m=e,t.c=o,t.p="",t(0)}([function(e,t,o){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var l=o(1),i=n(l),r=o(15),a=n(r),c=o(16),s=n(c),d=o(23),u=n(d),v=o(25),f=n(v),p=new i["default"];p.addPlugin(s["default"]),p.addPlugin(u["default"]),p.addPlugin(f["default"]),p.VConsolePlugin=a["default"],t["default"]=p,e.exports=t["default"]},function(e,t,o){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function l(e){return e&&e.__esModule?e:{"default":e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var o=0;odocument.documentElement.offsetWidth&&(n=document.documentElement.offsetWidth-o.offsetWidth),l+o.offsetHeight>document.documentElement.offsetHeight&&(l=document.documentElement.offsetHeight-o.offsetHeight),0>n&&(n=0),0>l&&(l=0),this.switchPos.x=n,this.switchPos.y=l,v["default"].one(".vc-switch").style.right=n+"px",v["default"].one(".vc-switch").style.bottom=l+"px"),v["default"].one(".vc-mask",this.$dom).style.display="none"}},{key:"_mockTap",value:function(){var e=700,t=10,o=void 0,n=void 0,l=void 0,i=!1,r=null;this.$dom.addEventListener("touchstart",function(e){if(void 0===o){var t=e.targetTouches[0];n=t.pageX,l=t.pageY,o=e.timeStamp,r=e.target.nodeType===Node.TEXT_NODE?e.target.parentNode:e.target}},!1),this.$dom.addEventListener("touchmove",function(e){var o=e.changedTouches[0];(Math.abs(o.pageX-n)>t||Math.abs(o.pageY-l)>t)&&(i=!0)}),this.$dom.addEventListener("touchend",function(t){if(i===!1&&t.timeStamp-o0){var n=o.touches[0].pageX-e.switchPos.startX,l=o.touches[0].pageY-e.switchPos.startY,i=e.switchPos.x-n,r=e.switchPos.y-l;i+t.offsetWidth>document.documentElement.offsetWidth&&(i=document.documentElement.offsetWidth-t.offsetWidth),r+t.offsetHeight>document.documentElement.offsetHeight&&(r=document.documentElement.offsetHeight-t.offsetHeight),0>i&&(i=0),0>r&&(r=0),t.style.right=i+"px",t.style.bottom=r+"px",e.switchPos.endX=i,e.switchPos.endY=r,o.preventDefault()}}),v["default"].bind(v["default"].one(".vc-switch",e.$dom),"click",function(){e.show()}),v["default"].bind(v["default"].one(".vc-hide",e.$dom),"click",function(){e.hide()}),v["default"].bind(v["default"].one(".vc-mask",e.$dom),"click",function(t){return t.target!=v["default"].one(".vc-mask")?!1:void e.hide()}),v["default"].delegate(v["default"].one(".vc-tabbar",e.$dom),"click",".vc-tab",function(t){var o=this.dataset.tab;o!=e.activedTab&&e.showTab(o)}),v["default"].bind(v["default"].one(".vc-panel",e.$dom),"transitionend webkitTransitionEnd oTransitionEnd otransitionend",function(t){return t.target!=v["default"].one(".vc-panel")?!1:void(v["default"].hasClass(e.$dom,"vc-toggle")||(t.target.style.display="none"))})}},{key:"_autoRun",value:function(){this.isReady=!0;for(var e in this.pluginList)this._initPlugin(this.pluginList[e]);this.tabList.length>0&&this.showTab(this.tabList[0])}},{key:"_initPlugin",value:function(e){var t=this;e.trigger("init"),e.trigger("renderTab",function(o){t.tabList.push(e.id);var n=v["default"].render(b["default"],{id:e.id,name:e.name});v["default"].one(".vc-tabbar",t.$dom).appendChild(n);var l=v["default"].render(m["default"],{id:e.id});o&&(d.isString(o)?l.innerHTML+=o:d.isFunction(o.appendTo)?o.appendTo(l):d.isElement(o)&&l.appendChild(o)),v["default"].one(".vc-content",t.$dom).appendChild(l)}),e.trigger("addTopBar",function(o){if(o)for(var n=v["default"].one(".vc-topbar",t.$dom),l=function(t){var l=o[t],i=v["default"].render(_["default"],{name:l.name||"Undefined",className:l.className||"",pluginID:e.id});if(l.data)for(var r in l.data)i.dataset[r]=l.data[r];d.isFunction(l.onClick)&&v["default"].bind(i,"click",function(t){var o=l.onClick.call(i);o===!1||(v["default"].removeClass(v["default"].all(".vc-topbar-"+e.id),"vc-actived"),v["default"].addClass(i,"vc-actived"))}),n.appendChild(i)},i=0;i0?v["default"].addClass(v["default"].one(".vc-content",this.$dom),"vc-has-topbar"):v["default"].removeClass(v["default"].one(".vc-content",this.$dom),"vc-has-topbar"),v["default"].removeClass(v["default"].all(".vc-tool",this.$dom),"vc-toggle"),v["default"].addClass(v["default"].all(".vc-tool-"+e,this.$dom),"vc-toggle"),this._triggerPluginEvent(this.activedTab,"hide"),this.activedTab=e,this._triggerPluginEvent(this.activedTab,"show")}}]),e}();t["default"]=k,e.exports=t["default"]},function(e,t){e.exports={name:"vconsole",version:"2.4.0",description:"A lightweight, extendable front-end developer tool for mobile web page.",homepage:"https://github.com/WechatFE/vConsole",main:"dist/vconsole.min.js",scripts:{test:"mocha",dist:"webpack && npm test"},keywords:["console","debug","mobile"],repository:{type:"git",url:"git+https://github.com/WechatFE/vConsole.git"},dependencies:{},devDependencies:{"babel-core":"^6.7.7","babel-loader":"^6.2.4","babel-plugin-add-module-exports":"^0.1.4","babel-preset-es2015":"^6.6.0","babel-preset-stage-3":"^6.5.0",chai:"^3.5.0","css-loader":"^0.23.1","extract-text-webpack-plugin":"^1.0.1","html-loader":"^0.4.3",jsdom:"^9.2.1","json-loader":"^0.5.4",less:"^2.5.3","less-loader":"^2.2.3",mocha:"^2.5.3","style-loader":"^0.13.1",webpack:"~1.12.11"},author:"WechatFE Team",license:"MIT"}},function(e,t){"use strict";function o(e){var t=e>0?new Date(e):new Date,o=t.getDate()<10?"0"+t.getDate():t.getDate(),n=t.getMonth()<9?"0"+(t.getMonth()+1):t.getMonth()+1,l=t.getFullYear(),i=t.getHours()<10?"0"+t.getHours():t.getHours(),r=t.getMinutes()<10?"0"+t.getMinutes():t.getMinutes(),a=t.getSeconds()<10?"0"+t.getSeconds():t.getSeconds(),c=t.getMilliseconds()<10?"0"+t.getMilliseconds():t.getMilliseconds();return 100>c&&(c="0"+c),{time:+t,year:l,month:n,day:o,hour:i,minute:r,second:a,millisecond:c}}function n(e){return"[object Number]"==Object.prototype.toString.call(e)}function l(e){return"[object String]"==Object.prototype.toString.call(e)}function i(e){return"[object Array]"==Object.prototype.toString.call(e)}function r(e){return"[object Boolean]"==Object.prototype.toString.call(e)}function a(e){return"[object Undefined]"==Object.prototype.toString.call(e)}function c(e){return"[object Null]"==Object.prototype.toString.call(e)}function s(e){return"[object Symbol]"==Object.prototype.toString.call(e)}function d(e){return!("[object Object]"!=Object.prototype.toString.call(e)&&(n(e)||l(e)||r(e)||i(e)||c(e)||u(e)||a(e)||s(e)))}function u(e){return"[object Function]"==Object.prototype.toString.call(e)}function v(e){return"object"===("undefined"==typeof HTMLElement?"undefined":y(HTMLElement))?e instanceof HTMLElement:e&&"object"===("undefined"==typeof e?"undefined":y(e))&&null!==e&&1===e.nodeType&&"string"==typeof e.nodeName}function f(e){return document.createElement("a").appendChild(document.createTextNode(e)).parentNode.innerHTML}function p(e){function t(e){for(var t=p.length-1;t>=0;t--)if(p[t].child==e)return!0;return!1}function o(e){if(d(e)){if(t(e))return void(v+="CircularObject");p.push({parent:parent,child:e});var g=Object.keys(e);v+="{",f++;for(var b=0;b0&&(n=Array.prototype.slice.call(o)),n},a.addClass=function(e,t){if(e){(0,l.isArray)(e)||(e=[e]);for(var o=0;o-1||(i.push(t),e[o].className=i.join(" "))}}},a.removeClass=function(e,t){if(e){(0,l.isArray)(e)||(e=[e]);for(var o=0;o=0&&y.splice(t,1)}function a(e){var t=document.createElement("style");return t.type="text/css",i(e,t),t}function c(e){var t=document.createElement("link");return t.rel="stylesheet",i(e,t),t}function s(e,t){var o,n,l;if(t.singleton){var i=m++;o=h||(h=a(t)),n=d.bind(null,o,i,!1),l=d.bind(null,o,i,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(o=c(t),n=v.bind(null,o),l=function(){r(o),o.href&&URL.revokeObjectURL(o.href)}):(o=a(t),n=u.bind(null,o),l=function(){r(o)});return n(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;n(e=t)}else l()}}function d(e,t,o,n){var l=o?"":n.css;if(e.styleSheet)e.styleSheet.cssText=_(t,l);else{var i=document.createTextNode(l),r=e.childNodes;r[t]&&e.removeChild(r[t]),r.length?e.insertBefore(i,r[t]):e.appendChild(i)}}function u(e,t){var o=t.css,n=t.media;if(n&&e.setAttribute("media",n),e.styleSheet)e.styleSheet.cssText=o;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(o))}}function v(e,t){var o=t.css,n=t.sourceMap;n&&(o+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(n))))+" */");var l=new Blob([o],{type:"text/css"}),i=e.href;e.href=URL.createObjectURL(l),i&&URL.revokeObjectURL(i)}var f={},p=function(e){var t;return function(){return"undefined"==typeof t&&(t=e.apply(this,arguments)),t}},g=p(function(){return/msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase())}),b=p(function(){return document.head||document.getElementsByTagName("head")[0]}),h=null,m=0,y=[];e.exports=function(e,t){t=t||{},"undefined"==typeof t.singleton&&(t.singleton=g()),"undefined"==typeof t.insertAt&&(t.insertAt="bottom");var o=l(e);return n(o,t),function(e){for(var i=[],r=0;r
vConsole
'},function(e,t){e.exports="{{name}}"},function(e,t){e.exports="
"},function(e,t){e.exports='{{name}}'},function(e,t){e.exports='{{name}}'},function(e,t){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var o=0;on;n++)o[n]=arguments[n];var l=_possibleConstructorReturn(this,(e=Object.getPrototypeOf(VConsoleDefaultTab)).call.apply(e,[this].concat(o)));return l.tplTabbox=_tabbox_default2["default"],l.windowOnError=null,l}return _inherits(VConsoleDefaultTab,_VConsoleLogTab),_createClass(VConsoleDefaultTab,[{key:"onReady",value:function(){var e=this;_get(Object.getPrototypeOf(VConsoleDefaultTab.prototype),"onReady",this).call(this),_query2["default"].bind(_query2["default"].one(".vc-cmd",this.$tabbox),"submit",function(t){ -t.preventDefault();var o=_query2["default"].one(".vc-cmd-input",t.target),n=o.value;o.value="",""!==n&&e.evalCommand(n)})}},{key:"mockConsole",value:function(){_get(Object.getPrototypeOf(VConsoleDefaultTab.prototype),"mockConsole",this).call(this);var e=this;tool.isFunction(window.onerror)&&(this.windowOnError=window.onerror),window.onerror=function(t,o,n,l,i){var r=t;o&&(r+="\n"+o.replace(location.origin,"")),(n||l)&&(r+=":"+n+":"+l),e.printLog({logType:"error",logs:[r],noOrigin:!0}),tool.isFunction(e.windowOnError)&&e.windowOnError.apply(window,t,o,n,l,i)}}},{key:"evalCommand",value:function evalCommand(cmd){this.printLog({logType:"log",content:_query2["default"].render(_item_code2["default"],{content:cmd,type:"input"}),noMeta:!0,style:""});var result=eval(cmd),$content=void 0;tool.isArray(result)||tool.isObject(result)?$content=this.getFoldedLine(result):(tool.isNull(result)?result="null":tool.isUndefined(result)?result="undefined":tool.isFunction(result)?result="function()":tool.isString(result)&&(result='"'+result+'"'),$content=_query2["default"].render(_item_code2["default"],{content:result,type:"output"})),this.printLog({logType:"log",content:$content,noMeta:!0,style:""})}}]),VConsoleDefaultTab}(_log2["default"]),tab=new VConsoleDefaultTab("default","Log");exports["default"]=tab,module.exports=exports["default"]},function(e,t,o){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function l(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},s=function(){function e(e,t){for(var o=0;ol;l++)n[l]=arguments[l];var a=r(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(n)));return a.tplTabbox="",a.allowUnformattedLog=!0,a.isReady=!1,a.isShow=!1,a.$tabbox=null,a.console={},a.logList=[],a.isInBottom=!0,a.mockConsole(),a}return a(t,e),s(t,[{key:"onInit",value:function(){this.isReady=!0,this.$tabbox=f["default"].render(this.tplTabbox,{});for(var e=0;e=o.scrollHeight?e.isInBottom=!0:e.isInBottom=!1)})}},{key:"onShow",value:function(){this.isShow=!0,1==this.isInBottom&&this.scrollToBottom()}},{key:"onHide",value:function(){this.isShow=!1}},{key:"onShowConsole",value:function(){1==this.isInBottom&&this.scrollToBottom()}},{key:"showLogType",value:function(e){var t=f["default"].one(".vc-log",this.$tabbox);f["default"].removeClass(t,"vc-log-partly-log"),f["default"].removeClass(t,"vc-log-partly-info"),f["default"].removeClass(t,"vc-log-partly-warn"),f["default"].removeClass(t,"vc-log-partly-error"),"all"==e?f["default"].removeClass(t,"vc-log-partly"):(f["default"].addClass(t,"vc-log-partly"),f["default"].addClass(t,"vc-log-partly-"+e))}},{key:"scrollToBottom",value:function(){var e=f["default"].one(".vc-content");e.scrollTop=e.scrollHeight-e.offsetHeight}},{key:"mockConsole",value:function(){var e=this;window.console?(this.console.log=window.console.log,this.console.info=window.console.info,this.console.warn=window.console.warn,this.console.debug=window.console.debug,this.console.error=window.console.error):window.console={},window.console.log=function(){e.printLog({logType:"log",logs:arguments})},window.console.info=function(){e.printLog({logType:"info",logs:arguments})},window.console.warn=function(){e.printLog({logType:"warn",logs:arguments})},window.console.debug=function(){e.printLog({logType:"debug",logs:arguments})},window.console.error=function(){e.printLog({logType:"error",logs:arguments})}}},{key:"clearLog",value:function(){f["default"].one(".vc-log",this.$tabbox).innerHTML=""}},{key:"printOriginLog",value:function(e){"function"==typeof this.console[e.logType]&&this.console[e.logType].apply(window.console,e.logs)}},{key:"printLog",value:function(e){var t=e.logs||[];if(t.length||e.content){t=[].slice.call(t||[]);var o=!0,n=/^\[(\w+)\] ?/i,l="";if(u.isString(t[0])){var i=t[0].match(n);null!==i&&i.length>0&&(l=i[1].toLowerCase())}if(l?o=l==this.id:0==this.allowUnformattedLog&&(o=!1),!o)return void(e.noOrigin||this.printOriginLog(e));if(e.date||(e.date=+new Date),!this.isReady)return void this.logList.push(e);if(u.isString(t[0])&&(t[0]=t[0].replace(n,""),""===t[0]&&t.shift()),!e.meta){var r=u.getDate(e.date);e.meta=r.hour+":"+r.minute+":"+r.second}for(var a=f["default"].render(h["default"],{logType:e.logType,noMeta:!!e.noMeta,meta:e.meta,style:e.style||""}),s=f["default"].one(".vc-item-content",a),d=0;d")}catch(p){v.innerHTML=" ["+c(t[d])+"]"}v&&s.appendChild(v)}u.isObject(e.content)&&s.appendChild(e.content),f["default"].one(".vc-log",this.$tabbox).appendChild(a),this.isInBottom&&this.scrollToBottom(),e.noOrigin||this.printOriginLog(e)}}},{key:"getFoldedLine",value:function(e,t){var o=this;if(!t){var n=u.JSONStringify(e),l=n.substr(0,26);t=u.getObjName(e),n.length>26&&(l+="..."),t+=" "+l}var i=f["default"].render(y["default"],{outer:t,lineType:"obj"});return f["default"].bind(f["default"].one(".vc-fold-outer",i),"click",function(t){t.preventDefault(),t.stopPropagation(),f["default"].hasClass(i,"vc-toggle")?(f["default"].removeClass(i,"vc-toggle"),f["default"].removeClass(f["default"].one(".vc-fold-inner",i),"vc-toggle"),f["default"].removeClass(f["default"].one(".vc-fold-outer",i),"vc-toggle")):(f["default"].addClass(i,"vc-toggle"),f["default"].addClass(f["default"].one(".vc-fold-inner",i),"vc-toggle"),f["default"].addClass(f["default"].one(".vc-fold-outer",i),"vc-toggle"));var n=f["default"].one(".vc-fold-inner",i);if(0==n.children.length&&e){for(var l=u.getObjAllKeys(e),r=0;r {{if (!noMeta)}}{{meta}}{{/if}}
'},function(e,t){e.exports="
{{if (lineType == 'obj')}} {{outer}}
{{else if (lineType == 'value')}} {{value}} {{else if (lineType == 'kv')}} {{key}}: {{value}} {{/if}}
"},function(e,t){e.exports=' {{key}}: {{value}} '},function(e,t){e.exports="
"},function(e,t){e.exports='
{{content}}
'},function(e,t,o){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function l(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var c=function(){function e(e,t){for(var o=0;ol;l++)n[l]=arguments[l];var a=r(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(n)));return a.tplTabbox=p["default"],a.allowUnformattedLog=!1,a}return a(t,e),c(t,[{key:"onInit",value:function(){s(Object.getPrototypeOf(t.prototype),"onInit",this).call(this),this.printSystemInfo()}},{key:"printSystemInfo",value:function(){var e=navigator.userAgent,t="",o=e.match(/(ipod).*\s([\d_]+)/i),n=e.match(/(ipad).*\s([\d_]+)/i),l=e.match(/(iphone)\sos\s([\d_]+)/i),i=e.match(/(android)\s([\d\.]+)/i);t="Unknown",i?t="Android "+i[2]:l?t="iPhone, iOS "+l[2].replace(/_/g,"."):n?t="iPad, iOS "+n[2].replace(/_/g,"."):o&&(t="iPod, iOS "+o[2].replace(/_/g,"."));var r=t,a=e.match(/MicroMessenger\/([\d\.]+)/i);t="Unknown",a&&a[1]?(t=a[1],r+=", WeChat "+t,console.info("[system]","System:",r)):console.info("[system]","System:",r),t="Unknown",t="https:"==location.protocol?"HTTPS":"http:"==location.protocol?"HTTP":location.protocol.replace(":",""),r=t;var c=e.toLowerCase().match(/ nettype\/([^ ]+)/g);t="Unknown",c&&c[0]?(c=c[0].split("/"),t=c[1],r+=", "+t,console.info("[system]","Network:",r)):console.info("[system]","Protocol:",r),console.info("[system]","UA:",e),setTimeout(function(){var e=window.performance||window.msPerformance||window.webkitPerformance;if(e&&e.timing){var t=e.timing;t.navigationStart&&console.info("[system]","navigationStart:",t.navigationStart),t.navigationStart&&t.domainLookupStart&&console.info("[system]","navigation:",t.domainLookupStart-t.navigationStart+"ms"),t.domainLookupEnd&&t.domainLookupStart&&console.info("[system]","dns:",t.domainLookupEnd-t.domainLookupStart+"ms"),t.connectEnd&&t.connectStart&&(t.connectEnd&&t.secureConnectionStart?console.info("[system]","tcp (ssl):",t.connectEnd-t.connectStart+"ms ("+(t.connectEnd-t.secureConnectionStart)+"ms)"):console.info("[system]","tcp:",t.connectEnd-t.connectStart+"ms")),t.responseStart&&t.requestStart&&console.info("[system]","request:",t.responseStart-t.requestStart+"ms"),t.responseEnd&&t.responseStart&&console.info("[system]","response:",t.responseEnd-t.responseStart+"ms"),t.domComplete&&t.domLoading&&(t.domContentLoadedEventStart&&t.domLoading?console.info("[system]","domComplete (domLoaded):",t.domComplete-t.domLoading+"ms ("+(t.domContentLoadedEventStart-t.domLoading)+"ms)"):console.info("[system]","domComplete:",t.domComplete-t.domLoading+"ms")),t.loadEventEnd&&t.loadEventStart&&console.info("[system]","loadEvent:",t.loadEventEnd-t.loadEventStart+"ms"),t.navigationStart&&t.loadEventEnd&&console.info("[system]","total (DOM):",t.loadEventEnd-t.navigationStart+"ms ("+(t.domComplete-t.navigationStart)+"ms)")}},0)}}]),t}(v["default"]),b=new g("system","System");t["default"]=b,e.exports=t["default"]},function(e,t){e.exports="
"},function(e,t,o){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function l(e){return e&&e.__esModule?e:{"default":e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var c=function(){function e(e,t){for(var o=0;ol;l++)n[l]=arguments[l];var a=r(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(n)));return a.$tabbox=d["default"].render(b["default"],{}),a.$header=null,a.reqList={},a.domList={},a.isShow=!1,a.isInBottom=!0,a.mockAjax(),a}return a(t,e),c(t,[{key:"onRenderTab",value:function(e){e(this.$tabbox)}},{key:"onAddTool",value:function(e){var t=this,o=[{name:"Clear",global:!1,onClick:function(e){t.clearLog()}}];e(o)}},{key:"onReady",value:function(){var e=this;this.renderHeader(),d["default"].delegate(d["default"].one(".vc-log",this.$tabbox),"click",".vc-group-preview",function(e){var t=this.parentNode;d["default"].hasClass(t,"vc-actived")?d["default"].removeClass(t,"vc-actived"):d["default"].addClass(t,"vc-actived"),e.preventDefault()});var t=d["default"].one(".vc-content");d["default"].bind(t,"scroll",function(o){e.isShow&&(t.scrollTop+t.offsetHeight>=t.scrollHeight?e.isInBottom=!0:e.isInBottom=!1)})}},{key:"onShow",value:function(){this.isShow=!0,1==this.isInBottom&&this.scrollToBottom()}},{key:"onHide",value:function(){this.isShow=!1}},{key:"onShowConsole",value:function(){1==this.isInBottom&&this.scrollToBottom()}},{key:"scrollToBottom",value:function(){var e=d["default"].one(".vc-content");e.scrollTop=e.scrollHeight-e.offsetHeight}},{key:"clearLog",value:function(){this.reqList={};for(var e in this.domList)this.domList[e].remove(),this.domList[e]=void 0;this.domList={},this.renderHeader()}},{key:"renderHeader",value:function(){var e=Object.keys(this.reqList).length,t=d["default"].render(m["default"],{count:e}),o=d["default"].one(".vc-log",this.$tabbox);this.$header?this.$header.parentNode.replaceChild(t,this.$header):o.parentNode.insertBefore(t,o),this.$header=t}},{key:"updateRequest",value:function(e,t){var o=Object.keys(this.reqList).length,n=this.reqList[e]||{};for(var l in t)n[l]=t[l];this.reqList[e]=n;var i={url:n.url,status:n.status||"-",type:"-",costTime:n.costTime>0?n.costTime+"ms":"-",header:n.header,response:v.htmlEncode(n.response)};n.readyState<=1?i.status="Pending":n.readyState<4&&(i.status="Loading");var r=d["default"].render(_["default"],i),a=this.domList[e];n.status>=400&&d["default"].addClass(d["default"].one(".vc-group-preview",r),"vc-table-row-error"),a?a.parentNode.replaceChild(r,a):d["default"].one(".vc-log",this.$tabbox).appendChild(r),this.domList[e]=r;var c=Object.keys(this.reqList).length;c!=o&&this.renderHeader(),this.isInBottom&&this.scrollToBottom()}},{key:"mockAjax",value:function(){var e=window.XMLHttpRequest;if(e){var t=this,o=window.XMLHttpRequest.prototype.open;window.XMLHttpRequest.prototype.send;window.XMLHttpRequest.prototype.open=function(){var e=this,n=[].slice.call(arguments),l=n[1],i=t.getUniqueID();e._requestID=i;var r=e.onreadystatechange||function(){};return e.onreadystatechange=function(){var o=t.reqList[i]||{};if(o.url=l,o.readyState=e.readyState,0==e.readyState)o.startTime=+new Date;else if(1==e.readyState)o.startTime=+new Date;else if(2==e.readyState){o.header={};for(var n=e.getAllResponseHeaders()||"",a=n.split("\n"),c=0;c
"},function(e,t){e.exports='
Name {{if (count > 0)}}({{count}}){{/if}}
Status
Time
'},function(e,t){e.exports='
{{url}}
{{status}}
{{costTime}}
Headers
{{for (var key in header)}}
{{key}}
{{header[key]}}
{{/for}}
Response
{{response}}
'}])}); \ No newline at end of file diff --git a/litemall-vue/src/api/goods.js b/litemall-vue/src/api/goods.js index 37bf85a5..c5a78b2c 100755 --- a/litemall-vue/src/api/goods.js +++ b/litemall-vue/src/api/goods.js @@ -1,5 +1,7 @@ -// export const GOODS_CATEGORY = '/category'; -export const GOODS_CATEGORY = '/wx/catalog/index'; -export const GOODS_CHANNGE_CATEGORY = '/wx/catalog/current?id='; -export const GOODS_SEARCH = '/moreGoods'; -export const GOODS_DETAIL = '/details'; +import request from '@/core/utils/request' + +// export const GOODS_CATEGORY = '/category'; +export const GOODS_CATEGORY = '/wx/catalog/index'; +export const GOODS_CHANNGE_CATEGORY = '/wx/catalog/current?id='; +export const GOODS_SEARCH = '/moreGoods'; +export const GOODS_DETAIL = '/details'; diff --git a/litemall-vue/src/core/utils/auth.js b/litemall-vue/src/core/utils/auth.js deleted file mode 100644 index eaf138f2..00000000 --- a/litemall-vue/src/core/utils/auth.js +++ /dev/null @@ -1,42 +0,0 @@ -import docCookie from '@/core/utils/cookies' -import { setLocalStorage, getLocalStorage } from '@/core/utils/local-storage'; - -export function procJumpToken() { - if (docCookie.getItem('litetoken')) { - let litetoken = docCookie.getItem('litetoken') - if (!PSMU.isEmtVal(litetoken)) { - let jsonStr = PSMU.DU(litetoken) - console.log("jsonStr is : ", jsonStr); - if (!PSMU.isEmt(jsonStr) && PSMU.isString(jsonStr)) { - let tokenInfo = JSON.parse(jsonStr) - console.log("tokenInfo is : ", tokenInfo); - if (tokenInfo && tokenInfo.token) { - setLocalStorage({ - Authorization: tokenInfo.token - }); - } - const infoData = getLocalStorage( - 'Authorization' - ) - console.log("procJumpToken getLocalStorage ", infoData); - - if (tokenInfo && tokenInfo.userInfo) { - // debugger - setLocalStorage({ - avatar: tokenInfo.userInfo.avatarUrl, - // user_id: data.user_id, - // background_image: data.background_image, - nickName: tokenInfo.userInfo.nickName - }); - } - - const infoData2 = getLocalStorage( - 'avatarUrl', - 'nickName' - ) - console.log("procJumpToken getLocalStorage 2 ", infoData2); - } - } - docCookie.removeItem('litetoken') - } -} diff --git a/litemall-vue/src/core/utils/cookies.js b/litemall-vue/src/core/utils/cookies.js deleted file mode 100644 index 6fef2fd8..00000000 --- a/litemall-vue/src/core/utils/cookies.js +++ /dev/null @@ -1,60 +0,0 @@ - /*\ - |*| - |*| :: cookies.js :: - |*| - |*| A complete cookies reader/writer framework with full unicode support. - |*| - |*| https://developer.mozilla.org/en-US/docs/DOM/document.cookie - |*| - |*| This framework is released under the GNU Public License, version 3 or later. - |*| http://www.gnu.org/licenses/gpl-3.0-standalone.html - |*| - |*| Syntaxes: - |*| - |*| * docCookies.setItem(name, value[, end[, path[, domain[, secure]]]]) - |*| * docCookies.getItem(name) - |*| * docCookies.removeItem(name[, path], domain) - |*| * docCookies.hasItem(name) - |*| * docCookies.keys() - |*| - \*/ - -const docCookies = { - getItem: function (sKey) { - return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null; - }, - setItem: function (sKey, sValue, vEnd, sPath, sDomain, bSecure) { - if (!sKey || /^(?:expires|max\-age|path|domain|secure)$/i.test(sKey)) { return false; } - var sExpires = ""; - if (vEnd) { - switch (vEnd.constructor) { - case Number: - sExpires = vEnd === Infinity ? "; expires=Fri, 31 Dec 9999 23:59:59 GMT" : "; max-age=" + vEnd; - break; - case String: - sExpires = "; expires=" + vEnd; - break; - case Date: - sExpires = "; expires=" + vEnd.toUTCString(); - break; - } - } - document.cookie = encodeURIComponent(sKey) + "=" + encodeURIComponent(sValue) + sExpires + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : "") + (bSecure ? "; secure" : ""); - return true; - }, - removeItem: function (sKey, sPath, sDomain) { - if (!sKey || !this.hasItem(sKey)) { return false; } - document.cookie = encodeURIComponent(sKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT" + ( sDomain ? "; domain=" + sDomain : "") + ( sPath ? "; path=" + sPath : ""); - return true; - }, - hasItem: function (sKey) { - return (new RegExp("(?:^|;\\s*)" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(document.cookie); - }, - keys: /* optional method: you can safely remove it! */ function () { - var aKeys = document.cookie.replace(/((?:^|\s*;)[^\=]+)(?=;|$)|^\s*|\s*(?:\=[^;]*)?(?:\1|$)/g, "").split(/\s*(?:\=[^;]*)?;\s*/); - for (var nIdx = 0; nIdx < aKeys.length; nIdx++) { aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]); } - return aKeys; - } -}; - -export default docCookies diff --git a/litemall-vue/src/core/utils/psm.js b/litemall-vue/src/core/utils/psm.js deleted file mode 100644 index 280fd477..00000000 --- a/litemall-vue/src/core/utils/psm.js +++ /dev/null @@ -1,447 +0,0 @@ - -const protobuf = require("protobufjs"); - -/*尽量保持业务无关 业务相关放chatinfo.js中*/ -if (!window.PSMU) { - - var PSMU = { - - validChars: /^[\],:{}\s]*$/, - validEscape: /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, - validTokens: /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, - validBraces: /(?:^|:|,)(?:\s*\[)+/g, - htmlRegArr: [], - - - SERV_LOG_INTERVAL: 30 * 1000, - servLogId: false, - servLogMap: {}, - tokenName: 'Authorization', - tuid: 'false', - tuidCounter: 0, - isUptuid: false, - uptuidDefaultVal: 9960, - maxtuidval: 9999, - // Base64 encoding table - b64: new Array(64), - - // Base64 decoding table - s64: new Array(123), - - /*目前全局变量及状态保存到 psm中 组件数据通信频繁的可以放vuex中 - * 尽量不依赖vue 增加额外复杂性 */ - REV_MSG: 'REV_MSG', - /*接收消息*/ - REV_ROOM_MSG: 'REV_ROOM_MSG', - /*接收房态消息*/ - REV_HIS_MSG: 'REV_HIS_MSG', - /*接收历史消息*/ - LOAD_HIS_MSG_END: 'LOAD_HIS_MSG_END', - /*加载历史消息结束*/ - SELF_MSG: 'SELF_MSG', - /*发出消息*/ - RESEND_MSG: 'RESEND_MSG', - /*重发消息*/ - CHAT_NET_ERR_MSG: 'CHAT_NET_ERR_MSG', - /*网络异常消息发送失败*/ - OUT_CHAT_PAGE_MSG: 'OUT_CHAT_PAGE_MSG', - /*离开聊天页面*/ - IN_CHAT_PAGE_MSG: 'IN_CHAT_PAGE_MSG', - /*进入聊天页面*/ - LOGIN_SUCC: 'LOGIN_SUCC', - /*登录成功*/ - LOGIN_FAILED: 'LOGIN_FAILED', - /*登录失败*/ - - CODE_ZU: 'ZU', - CODE_ZP: 'ZP', - - codeType: false, - - setup: function () { - - PSMU.codeType = PSMU.CODE_ZP; - - // 65..90, 97..122, 48..57, 43, 47 - for (var i = 0; i < 64;) - PSMU.s64[PSMU.b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++; - - }, - - - isEmt: function (value, allowBlank) { - if (PSMU.isNotDef(value)) { - return true; - } - return value === null || value === undefined || /*((PSMU.isArr(value) && !value.length)) ||*/ (!allowBlank ? value === '' : false) || value === "undefined"; - }, - isEmtVal: function (value) { - if (PSMU.isNotDef(value)) { - return true; - } - return value === null || value === 'null' || (typeof (value) === 'string' && (value === "undefined" || value === '' || PSMU.trim(value) === '')) || (typeof (value) === 'boolean' && value === false); - }, - isNotDef: function (value) { - return typeof (value) === "undefined"; - }, - isArr: function (obj) { - return Object.prototype.toString.call(obj) === '[object Array]'; - }, - isString: function (obj) { - return Object.prototype.toString.call(obj) === '[object String]'; - }, - isDate: function (obj) { - return Object.prototype.toString.call(obj) === '[object Date]'; - }, - isNum: function (num) { - return (typeof (num) === "number") && (num !== Infinity) && !isNaN(num); - }, - isNotEmtArr: function (o) { - return PSMU.isArr(o) && typeof (o.length) && o.length > 0; - }, - trim: function (value) { - return value.replace(/^\s*/, "").replace(/\s*$/, ""); - }, - - setBuffer: function (ret, val) { - if (PSMU.isEmt(ret[ret.len])) { - ret[ret.len] = protobuf.util.newBuffer(100); - } - - if (ret.offset + 1 >= ret.len * 100 + 100) { - ret[++ret.len] = protobuf.util.newBuffer(100); - } - var len = parseInt(ret.offset / 100); - var pos = ret.offset % 100; - - ret[len][pos] = val; - return ++ret.offset; - }, - base64Decode: function (string, /*buffer,*/ offset) { - var ret = { - len: 0, - offset: offset - }; - - // var start = offset; - var j = 0, // goto index - t; // temporary - for (var i = 0; i < string.length;) { - var c = string.charCodeAt(i++); - if (c === 61 && j > 1) - break; - if ((c = PSMU.s64[c]) === undefined) - throw Error("invalid encoding"); - switch (j) { - case 0: - t = c; - j = 1; - break; - case 1: - PSMU.setBuffer(ret, t << 2 | (c & 48) >> 4); - // buffer[offset++] = t << 2 | (c & 48) >> 4; - t = c; - j = 2; - break; - case 2: - PSMU.setBuffer(ret, (t & 15) << 4 | (c & 60) >> 2); - // buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2; - t = c; - j = 3; - break; - case 3: - PSMU.setBuffer(ret, (t & 3) << 6 | c); - // buffer[offset++] = (t & 3) << 6 | c; - j = 0; - break; - } - } - if (j === 1) - throw Error("invalid encoding"); - - if (ret.offset > 0) { - var buf = protobuf.util.newBuffer(ret.offset); - for (var i = 0; i < ret.offset; i++) { - var len = parseInt(i / 100); - var pos = i % 100; - buf[i] = ret[len][pos]; - } - return buf; - } - return null; - // return offset - start; - }, - base64Encode: function (buffer, start, end) { - var parts = null, - chunk = []; - var i = 0, // output index - j = 0, // goto index - t; // temporary - while (start < end) { - var b = buffer[start++]; - switch (j) { - case 0: - chunk[i++] = PSMU.b64[b >> 2]; - t = (b & 3) << 4; - j = 1; - break; - case 1: - chunk[i++] = PSMU.b64[t | b >> 4]; - t = (b & 15) << 2; - j = 2; - break; - case 2: - chunk[i++] = PSMU.b64[t | b >> 6]; - chunk[i++] = PSMU.b64[b & 63]; - j = 0; - break; - } - if (i > 8191) { - (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk)); - i = 0; - } - } - if (j) { - chunk[i++] = PSMU.b64[t]; - chunk[i++] = 61; - if (j === 1) - chunk[i++] = 61; - } - if (parts) { - if (i) - parts.push(String.fromCharCode.apply(String, chunk.slice(0, i))); - return parts.join(""); - } - return String.fromCharCode.apply(String, chunk.slice(0, i)); - }, - /*TODO*/ - DU: function (str) { - - if (!PSMU.IS_DU(str)) { - return PSMU.DP(str) - } - - str = str.replace(/(2_3)(\w{4}|\w{2})/gi, function ($0, $1, $2) { - return String.fromCharCode(parseInt($2, 16)); - }); - return str; - }, - EU: function (str) { - return str.replace(/([\u0000-\uFFFF])/g, function ($0) { - try { - var char16tmp = parseInt($0.charCodeAt().toString(16), 16); - if (char16tmp >= 0x2002 && char16tmp <= 0x200d) { - return ""; - } - } catch (e) { - return ""; - } - - if ($0.charCodeAt() <= 16) { - return '2_3000' + $0.charCodeAt().toString(16); - } else if ($0.charCodeAt() < 256) { - return '2_300' + $0.charCodeAt().toString(16); - } else { - return '2_3' + $0.charCodeAt().toString(16); - } - }); - }, - - IS_DU: function (str) { - return str.indexOf('2_3') == 0 - }, - EP: function (json) { - if (PSMU.isEmtVal(json)) { - return ""; - } - var root = protobuf.Root.fromJSON(protobuf.common.get('google/protobuf/struct.proto')); - var StructMessage = root.lookupType("google.protobuf.Struct"); - var postDataConverted = PSMU.json2Struct(json); - var message = StructMessage.fromObject(postDataConverted); - var buf = StructMessage.encode(message).finish(); - // this.bufLen=buf.length; - return PSMU.base64Encode(buf, 0, buf.length); - }, - - DP: function (str) { - if (PSMU.isEmtVal(str)) { - return ""; - } - - if (PSMU.IS_DU(str)) { - return PSMU.DU(str); - } - - // var buf = protobuf.util.newBuffer(protobuf.util.base64.length(str)); - // var buf = protobuf.util.newBuffer(this.bufLen); - var buf = PSMU.base64Decode(str, /*buf,*/ 0); - var root = protobuf.Root.fromJSON(protobuf.common.get('google/protobuf/struct.proto')); - var StructMessage = root.lookupType("google.protobuf.Struct"); - var message2 = StructMessage.decode(buf); - var struct = StructMessage.toObject(message2, protobuf.util.toJSONOptions); - return PSMU.struct2Json(struct); - }, - struct2Json: function (structObj) { - var jsonObj = {}; - var jsonObjTmp = {}; - if (typeof structObj.fields === 'object') { - jsonObjTmp = structObj.fields; - } - Object.keys(jsonObjTmp).forEach(function (field) { - var fieldObj = jsonObjTmp[field]; - var fieldType = Object.keys(fieldObj)[0]; - switch (fieldType) { - case 'nullValue': - // do nothing - break; - case 'numberValue': - case 'stringValue': - case 'boolValue': - jsonObj[field] = fieldObj[fieldType]; - break; - case 'structValue': - jsonObj[field] = PSMU.struct2Json(fieldObj[fieldType]); - break; - case 'listValue': - jsonObj[field] = PSMU.list2Json(fieldObj[fieldType]); - break; - } - }); - return jsonObj; - }, - - list2Json: function (listObj) { - var jsonArray = []; - var jsonArrayTmp = []; - if (PSMU.isArr(listObj.values)) { - jsonArrayTmp = listObj.values; - } - - jsonArrayTmp.forEach(function (itemObj) { - var fieldType = Object.keys(itemObj)[0]; - switch (fieldType) { - case 'nullValue': - // do nothing - break; - case 'numberValue': - case 'stringValue': - case 'boolValue': - jsonArray.push(itemObj[fieldType]); - break; - case 'structValue': - jsonArray.push(PSMU.struct2Json(itemObj[fieldType])); - break; - case 'listValue': - jsonArray.push(PSMU.list2Json(itemObj[fieldType])); - break; - } - }); - return jsonArray; - }, - - json2Struct: function (jsonObj) { - var structObj = {}; - var structObjTmp = {}; - if (typeof jsonObj === 'object') { - structObjTmp = jsonObj; - } - - Object.keys(structObjTmp).forEach(function (field) { - var value = structObjTmp[field]; - switch (typeof (value)) { - case 'number': - structObj[field] = { - numberValue: value - }; - break; - case 'string': - structObj[field] = { - stringValue: value - }; - break; - case 'boolean': - structObj[field] = { - boolValue: value - }; - break; - case 'object': - // null - if (!value) break; - if (value.constructor === Object) { - structObj[field] = { - structValue: PSMU.json2Struct(value) - }; - } else if (value.constructor === Array) { - structObj[field] = { - listValue: PSMU.json2List(value) - }; - } - break; - } - }); - return { - fields: structObj - }; - }, - - json2List: function (jsonArray) { - var listObj = []; - var listObjTmp = []; - - if (PSMU.isArr(jsonArray)) { - listObjTmp = jsonArray; - } - - listObjTmp.forEach(function (jsonObj) { - switch (typeof (jsonObj)) { - case 'number': - listObj.push({ - numberValue: jsonObj - }); - break; - case 'string': - listObj.push({ - stringValue: jsonObj - }); - break; - case 'boolean': - listObj.push({ - boolValue: jsonObj - }); - break; - case 'object': - // null - if (!jsonObj) break; - if (jsonObj.constructor === Object) { - listObj.push({ - structValue: PSMU.json2Struct(jsonObj) - }); - } else if (jsonObj.constructor === Array) { - listObj.push({ - listValue: PSMU.json2List(jsonObj) - }); - } - break; - } - }); - return { - values: listObj - }; - }, - - escapeText: function (text) { - return (text) ? window.escape(text) : ''; - }, - - unescapeText: function (text) { - return (text) ? window.unescape(text) : ''; - } - } - window.PSMU = PSMU; -} - -var psmu = window.PSMU; -export default { - psmu -} - diff --git a/litemall-vue/src/main.js b/litemall-vue/src/main.js index e9e8823c..123f15d2 100644 --- a/litemall-vue/src/main.js +++ b/litemall-vue/src/main.js @@ -11,11 +11,6 @@ import zhCN from 'vee-validate/dist/locale/zh_CN'; import axios from '@/vue/plugins/axios'; import filters from '@/vue/filter'; -import psm from '@/core/utils/psm' -import { - procJumpToken -} from "@/core/utils/auth"; - Vue.use(VueCountdown); Vue.use(axios); Vue.use(filters); @@ -41,10 +36,6 @@ Vue.use(Lazyload, { lazyComponent: true }); -Vue.prototype.PSMU = psm.psmu -PSMU.setup() - -procJumpToken() Vue.config.productionTip = false; diff --git a/litemall-vue/src/views/login/login-footer.vue b/litemall-vue/src/views/login/login-footer.vue index 27fb8baa..4cb7e6a6 100755 --- a/litemall-vue/src/views/login/login-footer.vue +++ b/litemall-vue/src/views/login/login-footer.vue @@ -1,18 +1,18 @@ - - - - - - + + + + + + diff --git a/litemall-vue/src/views/login/login-header.vue b/litemall-vue/src/views/login/login-header.vue index f17ce54c..6afdfd53 100755 --- a/litemall-vue/src/views/login/login-header.vue +++ b/litemall-vue/src/views/login/login-header.vue @@ -1,29 +1,29 @@ - - - - - - + + + + + + -- Gitee From 4ee32ff6487e780a7855fd6526a13fe80be153b2 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Fri, 19 Apr 2019 18:29:46 +0800 Subject: [PATCH 090/391] =?UTF-8?q?doc:=20=E5=A2=9E=E5=8A=A0=E8=BD=BB?= =?UTF-8?q?=E5=95=86=E5=9F=8E=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 35 +++++++++++++++++++--- doc/README.md | 3 +- doc/mobmall.md | 30 +++++++++++++++++++ doc/pic/5.gif | Bin 0 -> 193357 bytes doc/project.md | 66 +++++++++++++++++++++++++++++++---------- litemall-vue/README.md | 61 ------------------------------------- 6 files changed, 114 insertions(+), 81 deletions(-) create mode 100644 doc/mobmall.md create mode 100644 doc/pic/5.gif delete mode 100644 litemall-vue/README.md diff --git a/README.md b/README.md index 79ad4527..adbf653c 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ 又一个小商场系统。 -litemall = Spring Boot后端 + Vue管理员前端 + 微信小程序用户前端 +litemall = Spring Boot后端 + Vue管理员前端 + 微信小程序用户前端 + Vue用户移动端 * [文档](https://linlinjava.gitbook.io/litemall) * [贡献](https://linlinjava.gitbook.io/litemall/contribute) @@ -20,6 +20,12 @@ litemall = Spring Boot后端 + Vue管理员前端 + 微信小程序用户前端 ![](./doc/pic/litemall_wx_demo.png) > 注意:此实例是测试小商场,开发者请不要尝试购买商品、付款、退款操作。 +### 轻商场实例 + +目前未部署 + +![](./doc/pic/5.gif) + ### 管理后台实例 ![](./doc/pic/4.png) @@ -122,6 +128,20 @@ litemall = Spring Boot后端 + Vue管理员前端 + 微信小程序用户前端 > 这里只是最简启动方式,而小商场的微信登录、微信支付等功能需开发者设置才能运行, > 更详细方案请参考[文档](https://linlinjava.gitbook.io/litemall/project)。 +6. 启动轻商城前端 + + 打开命令行,输入以下命令 + ```bash + npm install -g cnpm --registry=https://registry.npm.taobao.org + cd litemall/litemall-vue + cnpm install + cnpm run dev + ``` + 此时,浏览器(建议采用chrome 手机模式)打开,输入网址`http://localhost:6255`, 此时进入轻商场。 + + 注意: + > 现在功能很不稳定,处在开发阶段。 + ## 开发计划 当前版本[v1.3.0](https://linlinjava.gitbook.io/litemall/changelog) @@ -139,6 +159,7 @@ V 2.0.0 完成以下目标: 1. 小商城和管理后台完成所有基本业务; 2. 管理后台实现统计功能、日志功能、权限功能; 3. 业务代码和细节代码进行调整优化; +4. 轻商城的开发; V 3.0.0 完成以下目标: @@ -169,20 +190,26 @@ V 3.0.0 完成以下目标: 项目介绍: 一个基于Vue和Element的后台集成方案 - 项目参考:litemall项目的litemall-admin模块的前端框架基于该项目修改扩展。 + 项目参考:litemall项目的litemall-admin模块的前端框架基于vue-element-admin项目修改扩展。 3. [mall-admin-web](https://github.com/macrozheng/mall-admin-web) 项目介绍:mall-admin-web是一个电商后台管理系统的前端项目,基于Vue+Element实现。 - 项目参考:litemall项目的litemall-admin模块的一些页面布局样式参考了该项目。 + 项目参考:litemall项目的litemall-admin模块的一些页面布局样式参考了mall-admin-web项目。 4. [biu](https://github.com/CaiBaoHong/biu) 项目介绍:管理后台项目开发脚手架,基于vue-element-admin和springboot搭建,前后端分离方式开发和部署。 - 项目参考:litemall项目的权限管理功能参考了该项目。 + 项目参考:litemall项目的权限管理功能参考了biu项目。 +5. [vant--mobile-mall](https://github.com/qianzhaoy/vant--mobile-mall) + + 项目介绍:基于有赞 vant 组件库的移动商城。 + + 项目参考:litemall项目的litemall-vue模块基于vant--mobile-mall项目开发。 + ## 问题 ![](doc/pic/qq.png) diff --git a/doc/README.md b/doc/README.md index 63898eb1..5d7bfe1c 100644 --- a/doc/README.md +++ b/doc/README.md @@ -7,4 +7,5 @@ * [1. 系统架构](./project.md) * [2. 基础系统](./platform.md) * [3. 小商场](./wxmall.md) -* [4. 管理后台](./admin.md) \ No newline at end of file +* [4. 管理后台](./admin.md) +* [5. 轻商城](./mobmall.md) \ No newline at end of file diff --git a/doc/mobmall.md b/doc/mobmall.md new file mode 100644 index 00000000..f3f8462a --- /dev/null +++ b/doc/mobmall.md @@ -0,0 +1,30 @@ +# 5 litemall轻商城 + +litemall轻商城,是商城移动版本。 + +技术: + +* 轻商城前端,即litemall-vue模块 + * power by vue-cli3 + * Vue + Vue-router + Vant + Sass + * axios + * vee-validate + * fastclick + * babel-polyfill + * @xkeshi/vue-countdown + * Vant +* 轻商城前端,即litemall-wx-api模块,也就是和小商城后端是一样的。 + * Spring Boot 2.x + * Spring MVC + * [weixin-java-tools](https://gitee.com/binary/weixin-java-tools) + + +## 5.1 litemall-wx-api + +可以阅读3.1 + +## 3.2 litemall-vue + +这里的代码基于[vant--mobile-mall](https://github.com/qianzhaoy/vant--mobile-mall) + +文档未完成。 \ No newline at end of file diff --git a/doc/pic/5.gif b/doc/pic/5.gif new file mode 100644 index 0000000000000000000000000000000000000000..e4429646b929234d4f1546f99af2d204f5e23d08 GIT binary patch literal 193357 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 z

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�)G)@16vH$GQ?pDB??7#{T&+nf#A~bw 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 ba16 一部分快递公司(例如顺丰速运、申通快递等)的轨迹查询在开发环境下不支持, +> 具体支持情况或者使用限制请阅读[官方资料](http://www.kdniao.com/UserCenter/v2/UserHome.aspx) + #### 1.4.5.9 对象存储配置 对象存储,即存储和下载文件。 diff --git a/litemall-vue/README.md b/litemall-vue/README.md deleted file mode 100644 index d9b49d5b..00000000 --- a/litemall-vue/README.md +++ /dev/null @@ -1,61 +0,0 @@ -# liteMall 移动商城 - -- 本项目是小程序的 vue 版本,样式大体相同,欢迎有能力的人贡献更优秀的代码 - -> 使用有赞移动端 Vue 组件库 — [Vant](https://www.youzanyun.com/zanui/vant#/zh-CN/component/intro) - - -## Vue相关库与插件 - -- power by vue-cli3 -- Vue + Vue-router + Vant + Sass -- axios -- vee-validate -- fastclick -- babel-polyfill -- @xkeshi/vue-countdown - - -## Build Script - -``` bash -# install dependencies -npm install - -# serve with hot reload at localhost:6255 九键输入法的 「mall」= 「6255」 -npm run serve - -# build for production with minification : build result at /dist -npm run build - -# build for production and view the bundle analyzer report -npm run build -- --report -``` - -- 简单预览: - -[![AqVx1g.md.png](https://s2.ax1x.com/2019/04/12/AqVx1g.md.png)](https://imgchr.com/i/AqVx1g) - -[![AqZZ3F.md.gif](https://s2.ax1x.com/2019/04/12/AqZZ3F.md.gif)](https://imgchr.com/i/AqZZ3F) - - -### 一些 Tips - -- 手机浏览或 chrome 手机模式:开发/浏览 体验更佳 - -- 运行项目 - -```bash -npm i && npm run serve -``` - -- 打包项目 - -```bash -# /dist copy to you http server -npm run build -``` - - - - -- Gitee From 5153beebea0f990377212dc2e8468971b966bb1e Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Sat, 20 Apr 2019 13:33:21 +0800 Subject: [PATCH 091/391] =?UTF-8?q?fix[litemall-admin]:=20=E6=81=A2?= =?UTF-8?q?=E5=A4=8D=E8=AF=AF=E5=88=A0=E9=99=A4=E7=9A=84favicon.ico?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-admin/favicon.ico | Bin 0 -> 67646 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 litemall-admin/favicon.ico diff --git a/litemall-admin/favicon.ico b/litemall-admin/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..7fc0eab364ce36daac2ca8e29addea2d3841df24 GIT binary patch literal 67646 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 Date: Sat, 20 Apr 2019 22:31:21 +0800 Subject: [PATCH 092/391] =?UTF-8?q?feat[litemall-wx-api]:=20=E8=B4=A6?= =?UTF-8?q?=E5=8F=B7=E4=B8=8D=E5=AD=98=E5=9C=A8=EF=BC=8C=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=90=88=E9=80=82=E7=9A=84=E6=8A=A5=E9=94=99=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/linlinjava/litemall/wx/web/WxAuthController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAuthController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAuthController.java index 3e4a192f..fd2d5d7e 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAuthController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAuthController.java @@ -79,7 +79,7 @@ public class WxAuthController { if (userList.size() > 1) { return ResponseUtil.serious(); } else if (userList.size() == 0) { - return ResponseUtil.badArgumentValue(); + return ResponseUtil.fail(AUTH_INVALID_ACCOUNT, "账号不存在"); } else { user = userList.get(0); } -- Gitee From 76269132be1e21b4936cfcbb9bf4aacabafe368a Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Sat, 20 Apr 2019 22:37:21 +0800 Subject: [PATCH 093/391] =?UTF-8?q?SQL:=20=E7=94=A8=E6=88=B7=E8=A1=A8litem?= =?UTF-8?q?all=5Fuser=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=B8=AA=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E8=B4=A6=E5=8F=B7user123,=E5=AF=86=E7=A0=81user123?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-db/sql/litemall_data.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/litemall-db/sql/litemall_data.sql b/litemall-db/sql/litemall_data.sql index 6d117d80..d7cfcad5 100644 --- a/litemall-db/sql/litemall_data.sql +++ b/litemall-db/sql/litemall_data.sql @@ -309,6 +309,7 @@ UNLOCK TABLES; LOCK TABLES `litemall_user` WRITE; /*!40000 ALTER TABLE `litemall_user` DISABLE KEYS */; +INSERT INTO `litemall_user` VALUES (1,'user123','$2a$10$lTu9qi0hr19OC800Db.eludFr0AXuJUSrMHi/iPYhKRlPFeqJxlye',1,NULL,'2019-04-20 22:17:43','0:0:0:0:0:0:0:1',0,'user123','','','',0,'2019-04-20 22:17:43','2019-04-20 22:17:43',0); /*!40000 ALTER TABLE `litemall_user` ENABLE KEYS */; UNLOCK TABLES; -- Gitee From 8f2890f87a4ad1dd381b936b8b4fd2bb47b7cfd3 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Sat, 20 Apr 2019 23:04:43 +0800 Subject: [PATCH 094/391] =?UTF-8?q?chore[litemall-vue]:=20=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=AE=A2=E6=9C=8D=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-vue/src/assets/images/qc_code.png | Bin 44409 -> 0 bytes litemall-vue/src/views/items/detail/index.vue | 536 +++++++++--------- .../src/views/user/module-server/index.vue | 58 +- .../src/views/user/tabbar-user-module.vue | 50 +- .../src/vue/components/md-kefu/index.vue | 61 -- 5 files changed, 315 insertions(+), 390 deletions(-) delete mode 100755 litemall-vue/src/assets/images/qc_code.png delete mode 100755 litemall-vue/src/vue/components/md-kefu/index.vue diff --git a/litemall-vue/src/assets/images/qc_code.png b/litemall-vue/src/assets/images/qc_code.png deleted file mode 100755 index e093fb8873d7ea3a29a396e009f998508f24de90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44409 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 -

- - - - - + + + + + diff --git a/litemall-vue/src/views/user/module-server/index.vue b/litemall-vue/src/views/user/module-server/index.vue index 2cd55687..1fb2cbe4 100755 --- a/litemall-vue/src/views/user/module-server/index.vue +++ b/litemall-vue/src/views/user/module-server/index.vue @@ -1,30 +1,28 @@ - - - + + + diff --git a/litemall-vue/src/views/user/tabbar-user-module.vue b/litemall-vue/src/views/user/tabbar-user-module.vue index ba11a8b9..f8fe04b5 100755 --- a/litemall-vue/src/views/user/tabbar-user-module.vue +++ b/litemall-vue/src/views/user/tabbar-user-module.vue @@ -1,25 +1,25 @@ - - - - - - + + + + + + diff --git a/litemall-vue/src/vue/components/md-kefu/index.vue b/litemall-vue/src/vue/components/md-kefu/index.vue deleted file mode 100755 index a72af21a..00000000 --- a/litemall-vue/src/vue/components/md-kefu/index.vue +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - -- Gitee From 02148fd1a17fe86fcddc69a2bd451d1186dd4229 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Sat, 20 Apr 2019 23:10:29 +0800 Subject: [PATCH 095/391] =?UTF-8?q?chore[litemall-vue]:=20=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=AE=9E=E5=90=8D=E8=AE=A4=E8=AF=81=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module-autonym-edit/id-card-upload.vue | 115 -------- .../views/user/module-autonym-edit/index.vue | 112 -------- .../src/views/user/module-autonym/index.vue | 96 ------- .../src/views/user/tabbar-user-module.vue | 2 - litemall-vue/src/vue/router/user.js | 268 +++++++++--------- 5 files changed, 128 insertions(+), 465 deletions(-) delete mode 100755 litemall-vue/src/views/user/module-autonym-edit/id-card-upload.vue delete mode 100755 litemall-vue/src/views/user/module-autonym-edit/index.vue delete mode 100755 litemall-vue/src/views/user/module-autonym/index.vue diff --git a/litemall-vue/src/views/user/module-autonym-edit/id-card-upload.vue b/litemall-vue/src/views/user/module-autonym-edit/id-card-upload.vue deleted file mode 100755 index 9ff0cfe4..00000000 --- a/litemall-vue/src/views/user/module-autonym-edit/id-card-upload.vue +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - diff --git a/litemall-vue/src/views/user/module-autonym-edit/index.vue b/litemall-vue/src/views/user/module-autonym-edit/index.vue deleted file mode 100755 index f78badbb..00000000 --- a/litemall-vue/src/views/user/module-autonym-edit/index.vue +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - diff --git a/litemall-vue/src/views/user/module-autonym/index.vue b/litemall-vue/src/views/user/module-autonym/index.vue deleted file mode 100755 index 1e190256..00000000 --- a/litemall-vue/src/views/user/module-autonym/index.vue +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - diff --git a/litemall-vue/src/views/user/tabbar-user-module.vue b/litemall-vue/src/views/user/tabbar-user-module.vue index f8fe04b5..93c2fc47 100755 --- a/litemall-vue/src/views/user/tabbar-user-module.vue +++ b/litemall-vue/src/views/user/tabbar-user-module.vue @@ -3,9 +3,7 @@ - - diff --git a/litemall-vue/src/vue/router/user.js b/litemall-vue/src/vue/router/user.js index 2545774c..00a526b3 100755 --- a/litemall-vue/src/vue/router/user.js +++ b/litemall-vue/src/vue/router/user.js @@ -1,140 +1,128 @@ -import asyncLoader from 'core/async-loader'; - -const tab_user = asyncLoader('user/tabbar-user'); -const UserCollect = asyncLoader('user/module-collect'); -const UserTeam = asyncLoader('user/module-team'); -const UserInvitation = asyncLoader('user/module-invitation'); -const UserAddress = asyncLoader('user/module-address'); -const UserAddressEdit = asyncLoader('user/module-address-edit'); -const UserAutonym = asyncLoader('user/module-autonym'); -const UserAutonymEdit = asyncLoader('user/module-autonym-edit'); -const UserServer = asyncLoader('user/module-server'); - -const UserInformation = asyncLoader('user/user-information-set'); -const UserInfo_SetBg = asyncLoader('user/user-information-set/set-bg'); -const UserInfo_SetMobile = asyncLoader('user/user-information-set/set-mobile'); -const UserInfo_SetNickname = asyncLoader( - 'user/user-information-set/set-nickname' -); -const UserInfo_SetPassword = asyncLoader( - 'user/user-information-set/set-password' -); - -const UserOrderEntityList = asyncLoader('user/order-entity-list'); -const UserOrderEleList = asyncLoader('user/order-ele-list'); -const UserRefundList = asyncLoader('user/refund-list'); - -const Tabbar = () => - import(/* webpackChunkName: "Tabbar" */ '@/vue/components/Tabbar/'); - -export default [ - { - path: '/user', - name: 'user', - meta: { - keepAlive: true - }, - components: { default: tab_user, tabbar: Tabbar } - }, - { - path: '/user/collect', - name: 'collect', - meta: { - login: true - }, - component: UserCollect - }, - { - path: '/user/team', - name: 'team', - meta: { - login: true - }, - component: UserTeam - }, - { - path: '/user/invitation', - name: 'invitation', - meta: { - login: true - }, - component: UserInvitation - }, - { - path: '/user/address', - name: 'address', - meta: { - login: true - }, - component: UserAddress - }, - { - path: '/user/address/edit/:addressId', - name: 'address-edit', - props: true, - meta: { - login: true - }, - component: UserAddressEdit - }, - { - path: '/user/autonym', - name: 'autonym', - component: UserAutonym - }, - { - path: '/user/autonym/edit', - name: 'autonym-edit', - component: UserAutonymEdit - }, - { - path: '/user/server', - name: 'user-server', - component: UserServer - }, - { - path: '/user/information', - name: 'user-information', - meta: { - login: true - }, - component: UserInformation - }, - { - path: '/user/information/setbg', - name: 'user-info-setbg', - component: UserInfo_SetBg - }, - { - path: '/user/information/setMobile', - name: 'user-info-setMobile', - component: UserInfo_SetMobile - }, - { - path: '/user/information/setNickname', - name: 'user-info-setNickname', - component: UserInfo_SetNickname - }, - { - path: '/user/information/setPassword', - name: 'user-info-setPassword', - component: UserInfo_SetPassword - }, - { - path: '/user/order/list/:active', - name: 'user-order-list', - props: true, - component: UserOrderEntityList - }, - { - path: '/user/orderEle/list/:active', - name: 'user-order-ele-list', - props: true, - component: UserOrderEleList - }, - { - path: '/user/refund/list', - name: 'user-refund-list', - component: UserRefundList - } -]; +import asyncLoader from 'core/async-loader'; + +const tab_user = asyncLoader('user/tabbar-user'); +const UserCollect = asyncLoader('user/module-collect'); +const UserTeam = asyncLoader('user/module-team'); +const UserInvitation = asyncLoader('user/module-invitation'); +const UserAddress = asyncLoader('user/module-address'); +const UserAddressEdit = asyncLoader('user/module-address-edit'); +const UserServer = asyncLoader('user/module-server'); + +const UserInformation = asyncLoader('user/user-information-set'); +const UserInfo_SetBg = asyncLoader('user/user-information-set/set-bg'); +const UserInfo_SetMobile = asyncLoader('user/user-information-set/set-mobile'); +const UserInfo_SetNickname = asyncLoader( + 'user/user-information-set/set-nickname' +); +const UserInfo_SetPassword = asyncLoader( + 'user/user-information-set/set-password' +); + +const UserOrderEntityList = asyncLoader('user/order-entity-list'); +const UserOrderEleList = asyncLoader('user/order-ele-list'); +const UserRefundList = asyncLoader('user/refund-list'); + +const Tabbar = () => + import(/* webpackChunkName: "Tabbar" */ '@/vue/components/Tabbar/'); + +export default [ + { + path: '/user', + name: 'user', + meta: { + keepAlive: true + }, + components: { default: tab_user, tabbar: Tabbar } + }, + { + path: '/user/collect', + name: 'collect', + meta: { + login: true + }, + component: UserCollect + }, + { + path: '/user/team', + name: 'team', + meta: { + login: true + }, + component: UserTeam + }, + { + path: '/user/invitation', + name: 'invitation', + meta: { + login: true + }, + component: UserInvitation + }, + { + path: '/user/address', + name: 'address', + meta: { + login: true + }, + component: UserAddress + }, + { + path: '/user/address/edit/:addressId', + name: 'address-edit', + props: true, + meta: { + login: true + }, + component: UserAddressEdit + }, + { + path: '/user/server', + name: 'user-server', + component: UserServer + }, + { + path: '/user/information', + name: 'user-information', + meta: { + login: true + }, + component: UserInformation + }, + { + path: '/user/information/setbg', + name: 'user-info-setbg', + component: UserInfo_SetBg + }, + { + path: '/user/information/setMobile', + name: 'user-info-setMobile', + component: UserInfo_SetMobile + }, + { + path: '/user/information/setNickname', + name: 'user-info-setNickname', + component: UserInfo_SetNickname + }, + { + path: '/user/information/setPassword', + name: 'user-info-setPassword', + component: UserInfo_SetPassword + }, + { + path: '/user/order/list/:active', + name: 'user-order-list', + props: true, + component: UserOrderEntityList + }, + { + path: '/user/orderEle/list/:active', + name: 'user-order-ele-list', + props: true, + component: UserOrderEleList + }, + { + path: '/user/refund/list', + name: 'user-refund-list', + component: UserRefundList + } +]; -- Gitee From d1f82f2e1a1ee994031268d25e508c21d2271afa Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Sat, 20 Apr 2019 23:12:21 +0800 Subject: [PATCH 096/391] =?UTF-8?q?chore[litemall-vue]:=20=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=9B=A2=E9=98=9F=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/user/module-team/index.vue | 75 ------------------- .../src/views/user/tabbar-user-module.vue | 1 - litemall-vue/src/vue/router/user.js | 9 --- 3 files changed, 85 deletions(-) delete mode 100755 litemall-vue/src/views/user/module-team/index.vue diff --git a/litemall-vue/src/views/user/module-team/index.vue b/litemall-vue/src/views/user/module-team/index.vue deleted file mode 100755 index f77db8a9..00000000 --- a/litemall-vue/src/views/user/module-team/index.vue +++ /dev/null @@ -1,75 +0,0 @@ - - - - - diff --git a/litemall-vue/src/views/user/tabbar-user-module.vue b/litemall-vue/src/views/user/tabbar-user-module.vue index 93c2fc47..25c79602 100755 --- a/litemall-vue/src/views/user/tabbar-user-module.vue +++ b/litemall-vue/src/views/user/tabbar-user-module.vue @@ -2,7 +2,6 @@
- diff --git a/litemall-vue/src/vue/router/user.js b/litemall-vue/src/vue/router/user.js index 00a526b3..9295f682 100755 --- a/litemall-vue/src/vue/router/user.js +++ b/litemall-vue/src/vue/router/user.js @@ -2,7 +2,6 @@ import asyncLoader from 'core/async-loader'; const tab_user = asyncLoader('user/tabbar-user'); const UserCollect = asyncLoader('user/module-collect'); -const UserTeam = asyncLoader('user/module-team'); const UserInvitation = asyncLoader('user/module-invitation'); const UserAddress = asyncLoader('user/module-address'); const UserAddressEdit = asyncLoader('user/module-address-edit'); @@ -42,14 +41,6 @@ export default [ }, component: UserCollect }, - { - path: '/user/team', - name: 'team', - meta: { - login: true - }, - component: UserTeam - }, { path: '/user/invitation', name: 'invitation', -- Gitee From 8d262f8b45464d960053e1fa28631c7f81a9d784 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Sat, 20 Apr 2019 23:31:22 +0800 Subject: [PATCH 097/391] =?UTF-8?q?chore[litemall-vue]:=20=E7=AE=80?= =?UTF-8?q?=E5=8C=96=E7=99=BB=E5=BD=95=E7=BB=84=E4=BB=B6=EF=BC=8C=E5=90=8C?= =?UTF-8?q?=E6=97=B6=E6=B7=BB=E5=8A=A0=E6=B5=8B=E8=AF=95=E8=B4=A6=E5=8F=B7?= =?UTF-8?q?=E6=8F=90=E9=86=92=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-vue/src/views/login/login-footer.vue | 18 -- litemall-vue/src/views/login/login-header.vue | 29 --- .../src/views/login/login-request.vue | 182 -------------- litemall-vue/src/views/login/login.vue | 229 +++++++++++++++--- 4 files changed, 200 insertions(+), 258 deletions(-) delete mode 100755 litemall-vue/src/views/login/login-footer.vue delete mode 100755 litemall-vue/src/views/login/login-header.vue delete mode 100755 litemall-vue/src/views/login/login-request.vue diff --git a/litemall-vue/src/views/login/login-footer.vue b/litemall-vue/src/views/login/login-footer.vue deleted file mode 100755 index 4cb7e6a6..00000000 --- a/litemall-vue/src/views/login/login-footer.vue +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - diff --git a/litemall-vue/src/views/login/login-header.vue b/litemall-vue/src/views/login/login-header.vue deleted file mode 100755 index 6afdfd53..00000000 --- a/litemall-vue/src/views/login/login-header.vue +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - diff --git a/litemall-vue/src/views/login/login-request.vue b/litemall-vue/src/views/login/login-request.vue deleted file mode 100755 index c418bb45..00000000 --- a/litemall-vue/src/views/login/login-request.vue +++ /dev/null @@ -1,182 +0,0 @@ - - - - - diff --git a/litemall-vue/src/views/login/login.vue b/litemall-vue/src/views/login/login.vue index 2778bd2d..05a0e405 100755 --- a/litemall-vue/src/views/login/login.vue +++ b/litemall-vue/src/views/login/login.vue @@ -1,29 +1,200 @@ - - - - - - + + + + + + -- Gitee From aec557e9c4467e5a8753fd6d96d0c8ebb51bca17 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Sun, 21 Apr 2019 12:31:35 +0800 Subject: [PATCH 098/391] =?UTF-8?q?chore[litemall-vue]:=20=E5=8F=82?= =?UTF-8?q?=E8=80=83litemall-admin=E7=BB=93=E6=9E=84=EF=BC=8C=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E8=B0=83=E6=95=B4litemall-vue=E7=9A=84src=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/mobmall.md | 2 +- doc/project.md | 2 +- litemall-vue/package.json | 2 + litemall-vue/src/api/goods.js | 2 +- litemall-vue/src/api/user.js | 62 +- .../src/assets/images/id_card_front.png | Bin 43486 -> 0 bytes .../src/assets/images/id_card_reverse.png | Bin 42537 -> 0 bytes .../src/{vue => }/components/Tabbar/index.vue | 176 +-- .../components/_directive/scrollMore.js | 226 ++-- .../components/field-group/index.vue | 52 +- .../src/{vue => }/components/field/index.vue | 208 ++-- .../components/infinity-scroll/index.vue | 4 +- .../{vue => }/components/is-empty/index.vue | 2 +- .../components/item-card-hori/index.vue | 2 +- .../components/item-card-vert/index.vue | 2 +- .../{vue => }/components/item-group/index.vue | 0 .../src/{vue => }/components/spinner/index.js | 0 .../{vue => }/components/spinner/spinner.vue | 0 litemall-vue/src/core/async-loader.js | 32 - litemall-vue/src/core/utils/request.js | 90 -- litemall-vue/src/{vue => }/filter/index.js | 28 +- litemall-vue/src/main.js | 10 +- .../src/{vue => }/mixin/get-shop-info.js | 0 litemall-vue/src/{vue => }/mixin/item-card.js | 44 +- .../src/{vue => }/mixin/list-load-more.js | 0 litemall-vue/src/{vue => }/mixin/load-more.js | 132 +-- .../src/{vue => }/mixin/scroll-fixed.js | 0 litemall-vue/src/{vue => }/plugins/axios.js | 184 +-- .../src/{vue => }/plugins/vue-countdown.js | 14 +- litemall-vue/src/{vue => }/router/home.js | 44 +- litemall-vue/src/{vue => }/router/index.js | 62 +- litemall-vue/src/{vue => }/router/items.js | 96 +- litemall-vue/src/{vue => }/router/login.js | 87 +- litemall-vue/src/{vue => }/router/order.js | 88 +- litemall-vue/src/{vue => }/router/user.js | 37 +- litemall-vue/src/store/getters.js | 16 + litemall-vue/src/store/index.js | 17 + litemall-vue/src/store/modules/app.js | 59 + litemall-vue/src/store/modules/user.js | 147 +++ litemall-vue/src/utils/auth.js | 15 + .../src/{core => }/utils/local-storage.js | 0 .../src/{core => }/utils/location-param.js | 0 litemall-vue/src/utils/request.js | 52 + litemall-vue/src/{core => }/utils/scroll.js | 62 +- .../regexp/index.js => utils/validate.js} | 24 +- litemall-vue/src/views/home/tabbar-home.vue | 1039 +++++++++-------- litemall-vue/src/views/items/list/index.vue | 6 +- .../src/views/items/search-result/index.vue | 10 +- litemall-vue/src/views/items/tabbar-class.vue | 224 ++-- .../src/views/login/forget-reset/index.vue | 114 +- litemall-vue/src/views/login/forget/index.vue | 160 +-- litemall-vue/src/views/login/login.vue | 15 +- .../views/login/register-getCode/index.vue | 118 +- .../src/views/login/register-submit/index.vue | 156 +-- litemall-vue/src/views/order/tabbar-cart.vue | 622 +++++----- .../src/views/user/module-collect/index.vue | 10 +- .../src/views/user/order-ele-list/index.vue | 396 +++---- .../views/user/order-entity-list/index.vue | 486 ++++---- .../src/views/user/refund-list/index.vue | 312 ++--- .../src/views/user/tabbar-user-header.vue | 186 +-- litemall-vue/src/views/user/tabbar-user.vue | 136 +-- .../views/user/user-information-set/index.vue | 4 +- .../set-password/index.vue | 178 +-- litemall-vue/src/vue/event-bus/index.js | 21 - 64 files changed, 3231 insertions(+), 3044 deletions(-) delete mode 100755 litemall-vue/src/assets/images/id_card_front.png delete mode 100755 litemall-vue/src/assets/images/id_card_reverse.png rename litemall-vue/src/{vue => }/components/Tabbar/index.vue (94%) mode change 100755 => 100644 rename litemall-vue/src/{vue => }/components/_directive/scrollMore.js (94%) mode change 100755 => 100644 rename litemall-vue/src/{vue => }/components/field-group/index.vue (92%) mode change 100755 => 100644 rename litemall-vue/src/{vue => }/components/field/index.vue (94%) mode change 100755 => 100644 rename litemall-vue/src/{vue => }/components/infinity-scroll/index.vue (95%) rename litemall-vue/src/{vue => }/components/is-empty/index.vue (80%) rename litemall-vue/src/{vue => }/components/item-card-hori/index.vue (98%) rename litemall-vue/src/{vue => }/components/item-card-vert/index.vue (97%) rename litemall-vue/src/{vue => }/components/item-group/index.vue (100%) rename litemall-vue/src/{vue => }/components/spinner/index.js (100%) rename litemall-vue/src/{vue => }/components/spinner/spinner.vue (100%) delete mode 100644 litemall-vue/src/core/async-loader.js delete mode 100755 litemall-vue/src/core/utils/request.js rename litemall-vue/src/{vue => }/filter/index.js (96%) mode change 100755 => 100644 rename litemall-vue/src/{vue => }/mixin/get-shop-info.js (100%) rename litemall-vue/src/{vue => }/mixin/item-card.js (94%) mode change 100755 => 100644 rename litemall-vue/src/{vue => }/mixin/list-load-more.js (100%) rename litemall-vue/src/{vue => }/mixin/load-more.js (95%) mode change 100755 => 100644 rename litemall-vue/src/{vue => }/mixin/scroll-fixed.js (100%) rename litemall-vue/src/{vue => }/plugins/axios.js (95%) mode change 100755 => 100644 rename litemall-vue/src/{vue => }/plugins/vue-countdown.js (95%) mode change 100755 => 100644 rename litemall-vue/src/{vue => }/router/home.js (50%) mode change 100755 => 100644 rename litemall-vue/src/{vue => }/router/index.js (87%) mode change 100755 => 100644 rename litemall-vue/src/{vue => }/router/items.js (61%) mode change 100755 => 100644 rename litemall-vue/src/{vue => }/router/login.js (44%) mode change 100755 => 100644 rename litemall-vue/src/{vue => }/router/order.js (39%) mode change 100755 => 100644 rename litemall-vue/src/{vue => }/router/user.js (61%) mode change 100755 => 100644 create mode 100644 litemall-vue/src/store/getters.js create mode 100644 litemall-vue/src/store/index.js create mode 100644 litemall-vue/src/store/modules/app.js create mode 100644 litemall-vue/src/store/modules/user.js create mode 100644 litemall-vue/src/utils/auth.js rename litemall-vue/src/{core => }/utils/local-storage.js (100%) rename litemall-vue/src/{core => }/utils/location-param.js (100%) create mode 100644 litemall-vue/src/utils/request.js rename litemall-vue/src/{core => }/utils/scroll.js (95%) mode change 100755 => 100644 rename litemall-vue/src/{core/regexp/index.js => utils/validate.js} (96%) mode change 100755 => 100644 delete mode 100644 litemall-vue/src/vue/event-bus/index.js diff --git a/doc/mobmall.md b/doc/mobmall.md index f3f8462a..0f44e1e0 100644 --- a/doc/mobmall.md +++ b/doc/mobmall.md @@ -23,7 +23,7 @@ litemall轻商城,是商城移动版本。 可以阅读3.1 -## 3.2 litemall-vue +## 5.2 litemall-vue 这里的代码基于[vant--mobile-mall](https://github.com/qianzhaoy/vant--mobile-mall) diff --git a/doc/project.md b/doc/project.md index b350d60b..da480805 100644 --- a/doc/project.md +++ b/doc/project.md @@ -74,7 +74,7 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实 * 地址列表、地址添加、地址删除 * 收藏、足迹、关于 -### 1.2.1 轻商城功能 +### 1.2.2 轻商城功能 **目前还在开发中,不稳定** diff --git a/litemall-vue/package.json b/litemall-vue/package.json index 484356d5..372f0e39 100644 --- a/litemall-vue/package.json +++ b/litemall-vue/package.json @@ -23,6 +23,8 @@ "vant": "^1.4.4", "vee-validate": "^2.1.4", "vue": "^2.5.17", + "js-cookie": "2.2.0", + "vuex": "3.0.1", "vue-router": "^3.0.1", "vuelidation": "^1.1.0" }, diff --git a/litemall-vue/src/api/goods.js b/litemall-vue/src/api/goods.js index c5a78b2c..e8a7e02d 100755 --- a/litemall-vue/src/api/goods.js +++ b/litemall-vue/src/api/goods.js @@ -1,4 +1,4 @@ -import request from '@/core/utils/request' +import request from '@/utils/request' // export const GOODS_CATEGORY = '/category'; export const GOODS_CATEGORY = '/wx/catalog/index'; diff --git a/litemall-vue/src/api/user.js b/litemall-vue/src/api/user.js index e983956f..3e6bb073 100755 --- a/litemall-vue/src/api/user.js +++ b/litemall-vue/src/api/user.js @@ -1,18 +1,44 @@ -// 登录 -export const USER_LOGIN = '/wx/auth/login'; -export const USER_LOGOUT = ''; - -// 用户信息 -export const USER_PROFILE = '/user-profile'; -export const USER_MODIFY_PASSWORD = ''; -export const USER_CHANGE_MOBILE = ''; - -// 验证码 -export const USER_SENDCODE = ''; - -// 地址 -export const ADDRESS = '/address'; -export const ADDRESS_DEFAULT = '/address-default'; - -// 收藏 -export const GOODS_COLLECT_LIST = '/moreGoods'; +// 登录 +export const USER_LOGIN = '/wx/auth/login'; +export const USER_LOGOUT = ''; + +// 用户信息 +export const USER_PROFILE = '/user-profile'; +export const USER_MODIFY_PASSWORD = ''; +export const USER_CHANGE_MOBILE = ''; + +// 验证码 +export const USER_SENDCODE = ''; + +// 地址 +export const ADDRESS = '/address'; +export const ADDRESS_DEFAULT = '/address-default'; + +// 收藏 +export const GOODS_COLLECT_LIST = '/moreGoods'; + +import request from '@/utils/request' + +export function loginByUsername(data) { + return request({ + url: '/wx/auth/login', + method: 'post', + data + }) +} + + +export function logout() { + return request({ + url: '/auth/logout', + method: 'post' + }) +} + +export function getUserInfo(token) { + return request({ + url: '/auth/info', + method: 'get', + params: { token } + }) +} \ No newline at end of file diff --git a/litemall-vue/src/assets/images/id_card_front.png b/litemall-vue/src/assets/images/id_card_front.png deleted file mode 100755 index 29fb37a30463b281137149dc7159f214d9db68c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43486 zcmaI7byOWevoD(98f@bb95(J6++8;Ax`W%sJ;B}G-7UC7aCZq3++Bmi<2(1Bd*2`L zyje5TvZ{VnU0q$PWhP8nQ3@4_0O`}GPpC4|;-HVT_~S80fctod^YecHNbsE{w47D# zzdO4bL%^Rz%|LA%$UijwUrn%e_&>0APXF6X9|mJ~H+EoVWn%eHlm44fLE-1E!fWazj@96FR$eP$on5xuyy#5 zEDnZPx`NFlA@;VU|J7tZ%l}yyvHub8fAgCC&$@{JkG#wu$}s<@WB*?r{ohp|-t(XA z|8d)o!vAr6u-%8ZLq6P^RX3pMV~Bxd#6{HHR}wqnQ>ipPs9zSV+IU^Ek7UyEgH$G^ zfusO*e0fYfmLvF8m}eTifPwVAd(TeyE0ah@hIm%e{Ms-!HeP8Ud1BFwbb?n~iPHvA zh1JIWw}pVyfs+FgfvWQ^AA9vIr>+~{3)~pDgQ2$*o02)E`%Vs|p)CLFf9x|%`xqvn zJrQw=V01Kgyf5%TTqr;QgMVU-9Z%0E45*C&ZiKikYZWAfM=t`}LX)>hJcFJkkF414 z`)BB98^J6Qx=3_M)^wFX`Sc5TbSbj#q2c12CzjxV&)yp$7aj;6@4&As8*`so4&B@@ zIP#_4ZepjvGo=eXQlhaV`C3fZ1Y*wVE@teWhJiduqSb2RUekTC_v2RyZzfn}P=4DI zCs73DJEog^(-xOb+Fg@VM#Iac`*9bJL^lZv=zaC$5v&qzf zq*)WBNMbM|KT@Z1wx?ddW4-d!d4YL{91UykY@#6pP;f-1C38V3ljI2#076J){ng7jvm2BeD z7GOT0o0tN$EDChF4d*oeBj_G#RJ_rK5Y7EqI&}Q{6i-rx=w~-MWo+x344Dr=Fcq*!A#99SNp(L6mQt+2!ixw1mLT|kWOE$a5ACy0~q}tS~vjPL?cjlA& zyi4iC@ahV`CyO1&MSmde&%4>-+^%nT$&sUdK@71K==X*baI4l6j@Yqx)){ti+M}0n z)`4!|%|@b<6kV|3R4M7PTxai)Y+q&nJ#t0A?JxJkBq~j`(vK{NY2tqW#>1{Q8PO{p zOLtgfdb{{krR7!r2g_6|-ryk;%B}CDdCfQR3{Xmv5kx)s*M72piV_wjRCI~bR#Fds zBI(e{<#y8`>jvTRTP6vjY4DF8?i-KRW%u_VIZFhdT`+2po+$@GQ07h5H$~xUoxwP0 zr5=)7**E%}`*F9d`}ifWuCA-GanI*}njU$86`!1TE-*B<6(TWhPA0k_5lw!dRH;+! z3abE<-Z1>x)m@u%G&kzwr&noff&yHtP}-<~Ui#hby9cL?oD(NZPHDtIB^UtTk6v=e zQMJ|NEA{nmlD`zl{MIl&HAt|R2(khV=Nj@Q8$N?At z*MNu57geajBHMZ==|Lulk5F+rQ^gYd<;%qwb%>02S#u{au{)Cx2K*S)9mR_qZT`uE z!StP*;*M#qKrTxIg20V-qKnuK(`du=$p-yD+#Gke&e`^+1nAgj%h`d|f=g3M$TN>? zFH_3Nesg+Y7+Dn?r}3crUud+cP=Q|>jrGR!K-Kxpi`DQ$hEGKO3$){mRhZFpfcze& zL>W~MO7UN>R>RoWWZp5Nzm3sO;aIN$y~3kv&@+mA(1HFQObs|13DhlJb_7E zr+H&p@Pwu20bzGWZEP601huzi=rYjL>f}8A^6;(`(#Ru-6W_}eb!?+%roV08NZTsw zu!y?Qa~c@xvjXr*MjSqeae-U_(Y}9vW*gKTJ&pk^X5a-$-5diw+ZE@FjWkCOt2u3! zN+jh%HPS=FbOulpnjAgnsXb$qo2IN$TSef+nGr+P^pZEetp(w=r7H& z%m19Ix}*3s=#pS_%R4E3lZa>|(D!pLSwEV)7zIp84_Fg~h2S|x192_aYm{OO%0==x zqF>zM-@M+gO_y8?zP`(w zuz=*Ik}R6I|HG)kX45F$e%!%7Toj8*US~J3?_iZyTunigtxVN-0Px44`Rsujm#)eh zQ@v0lSO8MabQDM(DVmAcZ%?(GcP49#R5rywLw3sBNH?mydEf;|{IMjbV!JR>AFdWB zLS|o@xd(IquucZcsPr^b#Vw;yYVz1hy$m7 zGxrnR%P|%wNH3Boh_%mr2Ff~{oa_s1!IX8pY0r)*s=MLTIX0fqnQADM-69}ICX`ui zcK;4KYa8M$pfw?Ezo5q8(6GXIE+N8YN+mY0(ClV1&1WtbUeEYWkY*@Ybw+@;o z=_H|#_lTy@n#STl1r}ih4v+~&BRZVE6^+iO@)_&OZ20y;n1jnbDiS7;I|Yf$WxQL8 zDA3(v`0orw;qd`x&5kvcdsHkkLmZ<6TL7tj!WkCMZL2{@e##?0KoEBme=EaAK| zbQp@F0L z&W7S)QWFlK-`0B8VL{5CY8`fz&+<)iI?3={cnPy67>FC)G%reavCVTVSfE-7(fKS! zC5r)@oRPM3eBJi7CTv=Fb(HRp%asYynMzIUc{e5QYP+gZQxB`gY%a@?{PAS5%0GFQTQE%L%qYPD*t`B(5L4+=mR znJ-V*bTu=LS&R)tIjOmxXL7hkJ+QIARdTU2sZvfr78HVhAvMcTkukGI2*gS|DKAi% zq*o(XN3;!P`8=eAh7mO(Y_o;Ll$0VyrkF}&d$er;2wCW~l9hgN5>8DGDq{>Rw{ge| z>-L6OWKpXM<>|J=EXyU|Ay~9Q)L(M=o~zX=h*f^SFlAVlN8h+QRN+Ot>2ZB1dNalE zM#g5JBAc)2Cs4ukevYIM8cTO83&QW=Nq99fWcu8CprQ+-RV;5aeBG)dJYnNC!HqiN z8!;ZJ$2QS@v)!J-vXV$I|Px?V9eveJE7Z9ro2YA62 z8#$hD(e7m-6@7#@E_u_TE8VN3gLlDnFTbF( zg3R|$c%B;Zrv*+T{C(vT4HWl@cvML$!D#-BPk?!qkku0&JZ^0s>`QlyR_l>&~|4ONTN$n_D1B;b~e!>i$k*IcriJ zM1$^q?tADX6|_i)Z4hCJo-Ba|-)TdCDdf(||5 zEW4rBXm`}sdL%&gPs^-f!3t~fLi~IpF*}gsbRrFNSmhZTwMW(9U$m_-l8q?Dd=DQ7 zg!k+BS8T;oh#hdZ$``ujfsH}mL9p2V^|J?e*_ah{+Sh}~bV@^MQ*-9n9QZP#12Tib znQz?z=UFe$_uMAG1S8VAhc|!TOb(26KT`uH1#!PI@x$v+GD`(h3Et=!Fo{`y8-*$= z6N6b2weA9W`!2(=P43brir}e8KIM}o5?19r%I%3>6K#5Qr|OsOnW&Y6XgY+ghh_40 zQtp-cPc?lmM+s88DF8Ou^GO1a?)pR+#xfdgbqM#L(Sp%p$g ztXkZSZR*oU}be>>a?ZkO%W!q z4go5XLb^B0*g?dKKvfo^Z_gu8Q*v6XI&P_HB7`q7hJ$&Yl6#M(S8~Yq>jZX=;Y9*9 zCX#i)aNAo6?_6aRp&O7< z=l8gxoeHfw+$*9n9%Ea#G&CP8wUn(O=0edIe8yEIfUIbGgXwljAHOm*u_SzsG=A zIe_)<(x%h1SdM$zA1DgnO^)?UagKOL5yg1!a%7ANU8Gupaa`dsULr{)7#H95*e){z zb{gAYkhI3k%5daOObyF3E9-yHAI4EqiKxZJXB)Fh`9)PojHF*MJl_VRvZi_5A@_Oq z1dNn8Erxwp>Hi(WE`9MWtoRT2}m&_pVIL1*H zrL2L|6`AK*^_^&O3amgFIu=giwuiV$R6NRCuS_*u^|78uQlX?zTDr*KlFgW!D=9|< zQidnr4OHybbFOEy89Ej$?{>`nAX~EC&%m>dr$&)vF(lWl#^m|x0rlMd0w!vC4(sLYpKX0ztiDj`tIT69w04+W{=!3T-vd|e_M^sj(><^U~Vp-o}<*W>`&$b zSx#EMVno(O2|7K&in=r?v%J^v7=ugRzF)L6==uH0v(jgqgoUS#P?u)3&jX>rnp(Lu#EZiZ_Uztxx=G?Ojy~3z6Z^0dTO&;bOIr=LgWUoz)VQ{t{kv%mZz=3 zsKc&MkF^<8v7DbimA++)<56MzCKy7^0oBHV^UxNk>N{^R^!OBBNCA11J3~t+);ZT+ zElTq>Q^}3czCOL4 zt3{_^*?`p&H4B+CaU)I$w{#L&WKnQU#exC-I*eJ;f}TvcI^KDK;Z6`&8!nosKODtR z0@uIpY$C`Y3SrZjQrCG4sDgW4MHgpQ3F^hfbqY$}n(1TLtNrxNl{n@IRaGn1kVC0w zQGu{*amD>1FJ#>4Pm>3``V;zI91_lwMy;a>6#Mf(V~QD-t7jxwNfk6Lo`ep!s%Qg( z?|Ka>OVfocHmNJZUsuH1rO2jsCqB_ZC{k5Kf6K>FC)U9V|N19Mh};O4ze+>!+OM!) z&~V&6R1w=nk-2;s#gwETVij!qJds9W$6BVS8or|J0DgogT8%ADO~J|iQ5>-bMB;yqF@;ZkogG*Y~pefb3x%*%6w zVgJbdjphMAf6&giy0sqT$t}X}d$CBpTfq46#fo)$PUE-8X#D8ehFMBQ-`OU7I5;~N zP1BY86A>QeA41l4u{gX@b)v<{U`TXVEAJD&tn;G7P-Xeg8VA*Ay(+UA(lf|a-p@*n zAjHSqWkGu!$p+%-XJ|$z^%d@p~Kje{lJo-U%)_0lA5xv&Or3h#KYLw z+qd(FJ^hEx_XkpqWX($&zn8CTE(iLl8Ce5VN}YI0oe!cfF+#8Gk;*{6-TsJrr$5h^ z6fIlqIloTxPK53piFmy6)XT*m-`fDkFZ(hbSIvI#grTFakU?tNLU8)3R-=TK>Z^q} zK5r_v@5!y>>RGpVl>awA*68N)(oZ)T&dbwWk;Q5x`I2F^Y^bQ)$4bBm~1Abm14lo zpr=zn!l9(&mz{4lb+1izvU!u40%jmm_#y1tCmq+d@E$4b)&-K2U;ZffPCnt&J=y-J z6S@=~xwEXxZM3uH;eDXa+$VSLiH?=9CO_M9E#t*RE6%UGN%+hZ&BR=b$N;Nm0PkT3 z5V_fSI(IWXQLRZc&lc|*gQdmP!M+Dv9Lda1(9)7<2I_DR`ov6`Xl3>@f8`%0Cc&VR z4CUB$2JpxHU}I$qz7X&R7zRQi!ywrb3I)%4tyQ{EjD;| z-u9}f=dlcaICNPup2CXBa9wfR{Pd6ijpqxoVBmqCE0rW|YBGYz?dd`WFmV*&Au@bq zY=9jv7)NRZJG|u}rMo{bt?$8*g7xWk*2cb8v^G#h&C@HnwqS^1p=4LRG#7I~NJn;Y)r2cL<~Vm77RE(VLEU^BaUh3j{;Uo?CF^`8qo3>*5vF#A5rU0(K~ zEi3ZhuQ@q9|8>jf5d4YNL=v;==Nln#*ovDO(I@r&@{zFX2OoFONJ*Ce>@dRdUAo-G zwy4JAbG54C@8q4Poy_{lV!l%qWxM_&T*GkoDPCMnWh13;I~)-@*g+4ODKCSlEpGvS zQEnagF^)$`DW=f0{zTVLG#lHzDF%_Q-D0~P(1!0NHCu|l-TT-zJrYXoL`(0l8{5Sh z_JcQmCj;LP`5$`3{xle489cn;4x4P8c-Obo_|U)*056c zT@yEYGZU+6%NsIiFhmwaT`}<2rMDXE^6$lZ;4;mZ&FO5Pmfd){NWP9U{fi!Zfp=al ztIDm*ZT|g}3d(DYNuCS6OurckV63L#YZ-1Hzs3M_*w=(_O(v@&G}~P?t~=UG9SBKB zGB#_is9s-)dt^#-!Yi_G&zMFjaIG{11BI1WK~izZCX7xV;H zWmC}tXEeSB6Lwv~W;$HUxKGd<1T9cVIX)ek&jHJ~9;e*76b0>Q)?eDYBhX%sp064r zn14_1xNXA=J$&XX6equtMUV560WR;pG+Cjp{?OSrXt$OW4jQgp>yOQxtNR7V0cGJ_ zgaEhwfNA7Gf8KE}_ptjL{?drADfK~`8H@;!O-P_vN5M_WN!kU!e$&;(7ox?r)sX_0 z44b}eyj2;>VX#FgOT@J|na|+z{$trpiBD;45h6Pf0!`#QoxEC{`+lmbI~^Hjiy$!G zc*)2I{GRqOZs6r~r8?`MPo8B7|5S8a3u1>D!^pT#krRr_%6*wkHFH}`AD)Nj@!0wD zu#2sk?M*lNrxs&@u1dm@ItZSfR<6az=sSMMa5wh_PqrxbW`>Xtk)uKN=1;J$6e9EM zU~`uxKm?)L{=z`DTT|#+Tdmn+O+mey(zGna5M2U!50ko>n)erz@m5`lVRS{dBX)K7 zn`eYZ=d1oj|IcOoN{*A3y?=(A;F=b=_dV!~A$Xx%vKwZ*zfDoWQ~CIG5Tyod7mn!h z?Wy-;zwN^{hDpI4n_B|PV`H0NenoCBK>3`P2b$WX^5>%z0pf2>Uqk#J4mZeE%eE8s zX>|Y1SsOe-Ubbn3`uflWLkEIj`S0>eblg?1P6eZ=6<(&DTH|DIflk$CFJ@(<{9|ul zR17N|-#nReRDO^Gc1}h;L8VDez;peyJ`oyYyc3wi5>XBb#)L-dzcvdf4cD-+%A#{Z4ej~b?vgQ* zK|v>p5^qu_RePxKbiZOwd&W2ZYboF#Dx2|vmTR?qJoRT8QzAW|Y$&JH3$$@M9D7bF zcDF%W4hyb}wP+jKm>Tb^2ra?3A2EKr1uaKStF=BS8cz3mzDIKm^d*TC^t+-y*e21v z@0}Oxks;@;Xyzo{$lMzbE~h?+Dlf~=>-M75raO+;qf>rQ?06uaw^OAzM$S8hROB3*izq?J6kz$$96FNk_D0oAo$I;6 zt~$har~W>BbJ|#n16zcnWxG&O8j_3-4kz2bDZ=xrm<~o@M95wLRZY;|yLkJqJ?mT4 z^w(!zkJtAHz3th@?)QkOb_jJ;44uI_&9X)J_EhuDP~ZI<(&*;`PDu(L@KGS9xZ^># zJUgQAspwdf@viFd_sC|?`>BZ~wlo{CH1_P7bKF?C`*ZSqx!GsOSj>e3WkmKWL5(oJ zo!#%q6VpVU1!|0@pC1*I{IO72=nnYZdSkvcMaH5{a8CEb>V|Vb==QndbTSAsYKfok zmkdMBhKNJz6$MaZ*566b+s<71@4?K!>uXwwHl7BXKOzwg2COEl2Jrxt%v~yI*8Ojc z;XP}|wFL8T_Ue||Ku@8ljJYX(=qazao2#jfmo|JRO^m&2-_N`xuwF?}a==|`V7k4t zFe>SmT-+SW9!|7>!mnkW?cVgt)UL3BBMqHB+_%8NGwd@3rwxvqfASE_ zd}Q9k64VRjz&RCf@_Sq{E`hl`%YZHR->|Syj#S!I3A@UYYi5$C_U_-UewVJ}96_P7 zyN84&r$J0T`LVSP2~_qa-t0g2nkdX`yxb-k7xTAj*>r$uA%>5kmhtwF>{Op*-;u7h z+e70mu#o`F0!?$`g>(30iOE52Q=m2_ann4ESi=*ph(-y4M z6R`Lrv67d~Iwes9MPQrNx`Fvx$lao6LoU69`&~5R^ltLReyQD+Pk}hQ9VfC9)5N%m zw-rT)>=&Oh>+*kE#sjV-eL92#BNz{BNfnGi&$ELk03^W1j7tQ^_|pW}h$n$q(6+0M z5DwYVtmq_IPJFg$;Meb(#(@GHVmbgltX}A-*6F{?7SrMif_mf7+i?0>`Q=k(tq&9 zB6uU*y7sMK)Ao?NW|j>Uydzwe^&(sS_7OzPFCR2x6^WlMc${lUaLYfvO3q zu0}BdN$63-DxboO;;GEE^uw*p5(CGh7F6QpXw7Aa$kZiDR_h#0`xRIz>+Y-+`sb;A zK*R&f3If{F9JUs@`Z;^S^B31&oPj^Woe^k*kfP~|$L$%U>OZzWb7gr{Hh)j|ZNKZ^ zgdaXOk#rMBgy1?Zb-HOQ_OhPeQyTZ%KRgOG+PqO9)xI5=;yl}nP8h;-7x{Sm(mE2Ft8M}aGED;PZJkXdHtpMZUCesoMnV^GK zJi6g{GP67iF!)An53>AKdQDX_PKGBcn}t@D(`5CeHC$Rkn`h*yQ>U7o`g0k##)Nw9 z`C~H-f`J&F4bUzFG}sc;M1?hj19aw|<;tl+skiMA1Mpf%-ymOS)RSy&YDInJFwr;)aYdz(bRtTd~qmpgrGY zvh9wcyujfE54HY_deSv=(D;5c1?;R(k)^YJ(L5)Q+w~8N>Lf?|rDSAk=hke|311=C zGKXy)*~-1a%=H%hko&34%K9nsPJIf)iQk{U-;&7v@e52GQfqZPEjU5QkmZ`}=1%sl zhw{=D{qG0m;%c(_*zL2+lG&=V8)mZ+^Vz+llsNUOY@6FB$c~ zc!GA0DBhls>K+Eqc;yCN0h{G6M0#X;4g!1j3a-7PH!Slhzu?qv9C^zccj6$^5dWuy z901B!v27aNJsBfa=8+JA&G(JB;N~qiq01qFwDKHkm7aw5(RQ5%AwVMRvc1Ja2t#)4 zLP7Y)=IqT^o;tO$y=!d5WVMhY;vyepT~x~?*-l&wQmwS0k8goy>`17!1s=VPhRtDR z0m?zEiP}s#rLI44#FiQ{^&zZ`sq|$NbL6&ZC*ntmI;qp@R1`V1c#bnLWwR=+iGRD= z-2|_RNhr&$fACrdZw79xp>1n+6qEBvU~i#?6i0{bMs>-R)r~`_G7(ea zLV|Av@p3K?@owN-y^ znEmVjnB?eYKrHBaUfyY%HN=k7s*Lbef3?@S+uLY(jM8B@SV8CS4Wee$`t650-td0R zL1v!{jiEsz5;*F!SvI5MU_wz(8BhqApe%Lr=2%2(N;XL=b|78Jv{9fztuD^w>t5v8 z+R-DRM;>FZB{Y~xyl}(|T5aTj&nHQ}6gkK{F&xtam{NBLrbB3xdR&Ks8$fKp`J&8O zf?Cwp@m+qQEWhaM$aV3EB^DCnnzZmqYJh>30gHJ9kB;;@om3rLj+$IPza(M}gaf{u zk8+BBZZkCOWANAFVq%mb=>}jZg1#1Q5sXR*y4fX)Zl-Ni%~7F^iwFDC?^es+CVjD( zR#x4zRD?q{R88d+3n(>THqxVu=9U^$<&+KIoySfr1pq0**3r{>u{ah%Dc2G^ZD*dy z1HUk4)53QWe`#r1a0*<5>4@n0a{D(ky_2nYrtQ-=;qf)6&3Vg?{s8AE6I?eHYWye! z|CPnG%G*ype#R~fi(g3}c5)F@S$pI5rzXR%Qez$Tik>@6j6zS1Eo9Ihw17V-Qbc0! zZV=YC(2-$|r~3=w_D^~lWD1#2(kY1^SbN{N@62(6K2;a34OA4(fM8S)Upq)VvQ<0w zvXrGv?V@P)`dVPO9~D_d7yZAAbdK^Fo@6pzJi!s4Gb zKoX}Jh69slb6ROR2fO>fj3bX-|J1ge3h4z$f^#GeZBg9KCMjcOnPj zXlfot!qnI`$>uL95;0RSrzKhZFM?#%NuG(ifJJ?*;3A?^@#u08nDnJpel*YKU!&Sr zcx!#4EW_ZbgAE>m-~`zfC$lxs^;rmZ(s43HwW=x``6s zmCjyj7v}$W*NK^d(Kx!-vAVyvtS!xy+X=N8AH8uJmZJbRcdE4lfR?EHL|`A)2blT0bODg}uN^RyL(cw&eIH+ZfoTIq|HjP;3n+YeBt$_w{~=%5qC^!1KSYIxOx@*p$=Widi92Uy7`RNH8?1HCHLXU=tim(35wsZ2NZ-v?Xcd38 z1J+Y$=uH=O);?f_%y>7NeXR83t%4cY7)^r_3@FHl_VQJr$ij%uY^{*Uvf139=$Hzc zFj1#Fq|T;0pfP#M6vpgg=5xw~1L^`2ls1BJyAQz+$3lKHFg>17Y_;d`LakY-DfsWr=`ESiV;YwFjv@ih_yNus)g^g<&->#wpuf_m2v{vrP26;}eHEf6YM zYyK$HtlG?SIMLdqvT~!T1>%^cQ*lKbhi&7Gnkn6Kkr9qh`NIIVsXIie%%-KP7|E(I zmu^II%&KzEIQl}<6fs|l)%sj!Y)TEPsvMq|MgvKHMD-+9$bD#4fh9>I2lOvCQb=%) zq~l55{ja?M$y^2(+4O-`g=B>1+w_|CF(&!ECX7P3;fp%mn%on~h#)$RrUO|Lhr(e- z%<>Rn&K-)L^SbKgJ@*TiZ=*f4W}pT~*`y@WJE8Bz`|tAb6L-`r6Ki+UCx>xecAkIj zt@~zc-}T6|@rNBWS_iAHii3;UK!b!y$f=+*t6faZy?$F4?A78+^n9t|g~@f^D072a zX7M8 zGX>l9VkFy5AdT{QMnah@lA3WgW{k%MIf>S1SMbTLWh3*vCZhxcSo=~?-5idPTXD-> zrwYG223hfM@W>V2)1yiQuy*I=@$`tC8m=OhbmePW)_{>Msz|r>qu;2N4i8&MYbX4~ z!rWf3K+A#3c(qEY6OlS^h+3nxi*U7!;);4$2v@atinwfRmf0mo$|8%6Gl~p$X6(EA zZ}=cWEQ&5U&iyoZ@*Y+4WW*?+% zr-d7$iM(k##`A>t*8unTi!SVeRKhC+UQa)Z`}yLCFf+Q+F~?@yusq1eY7kc-bVNO`9QwrsOzZh#H_rhiA!h! z^SKdSlH!oC8adj5bu>0_+MATA$^-x$w!~Sw=53X!8 zbd0t4)K>z?N=#O*<}gbm zlgewV`K*za`-dg-W#QQCk$LQwaP*wExYk@Y#9I6=*k*)6WRTpDsZO=ejK-SiBxmV) zUR%ib_tA{)l86!xpMs_~e(3uBV~6aq>Peq-aS4X^-PB8Cvkfb1%+NdjRLiF8{yd|j zy*0X-vSaXt`iVh<3#pzcmqUK;yXOn02N$1Uq8!@|$;KQWbR#A#!^y4c$PYGj% zU)y_}l;eAW7t01E$Wvm{3pS0sQ8l}FNFifNJ(i+&ca$)WNr8f0aKeS)H$m&~I2`VS zIEk0T^^nUul6NA*_jM)5B?>gt`@E2_VEvBUaC)K`DqHuHi}$Z*=mbIgRiS=o1ssK^ z>Axs7v-Dz;e^b!3gN`Y!vkwcbJ*lf$61k<;IB*)uU$aH801Prdl!6r8DoplvnSxb% zC*ZyajSd_pUS9zHU%qUYe_zhw9-lvsDJU;;_Wi4jm)vp86_t$U`gu$UFugiH?d)|> z&Ok62Vd>A>YVP1|*PNFA;>^CZ$9N}VB@ba>o-52{Osjko7R-z-5f_g+-u2fj#AM`k ziPW`O!iagotNC)ZU*Q&qb?2yO4E489iS%1#UbCdiwpTJQZ;CBmAGU6JYC)XqOBimh zKyyrHQt)Iio2$*nPtC6Dq(4nA^x0S2xLZR)E%-uDS4u1jrXqAJ@r8Q@RK4X|vYl2C zt9Xg@ykLE?)-a$}E93{0x)Y0ZdoO=}#`U+G$I3e!&^JJ<8{j~34*QO9$B-T{-PsS>wVm!%Rj(3yAL$^~g?6g}&pOGGSXJ1sj zx14f@A`GuF^<2&$AO4^k)}C~Pc9Ud(Gw~JB-jwZEp3^E5x&l!pGBq7rJV8gs|A=u^ zzJo<#d))c6D07{eItfbCV%fOlIufyF;lxboF73h`aG6y&w#&ZF()$2n# zTnY*n4Gh>Kbm0;>r$Ii-po$#AHs734gDLtWN=u$AO8AB=f0_IXuaDDIqQ9?rf)D3z zd4f(_ff!B`*bLQ`vF3In8N=-tJ!I}t1uqVLk@cg)FiofYs6)1YgpccNpn#sgY8?O} zU(TfpCJ*+XV&)u(x7f@3HL1vNq`pkE6n?^yq9vqw7$SKATs&XnIu53p7bqfOKCr?8 ziaBU|SrDzXR?H6lsZV?&7Yp)E7{7p1)7UrYXvQ^l?tLLf#mV<`Nl-N7ZQXR)v`qPu z1;0-GfH`k$3l`ZvaJt1Gg>R65BoU-`%%`Xa%tYIADe@Hf_k=~~rM^v{_%-_`!r z6VMFbs?v*|6_P(LHI+q`&NzSscfOMsc{|;x9Uw{2;jAay$4eKEN`NaOO6jlTCdRA| za&?g{77sASXtYX=L~$%aG74B^qUU>^Wr!Wh2<9xsT)@xv3D?RpNzb?)s!~CGg+smBs{E#d473eP+?QRVi|*csi80`y5WcxC6?fwW{M0;T#G&cC!wK2@;*m ztn>{18ssK9c?*M`97>r@U|pmSlBxf@4ddt_{wtd+%w$g1Vbf)vjC?L{Q~V*96HdQC3KkKs7H0R1=2vY1D1^Rx2>LiMF6nm zP5c;G3E*|1DDFA((hb#R!b%GHZu^YWeJ?}xG$iWwv{V?I?Rt#wzFi{JH@Z#EB@aR_ zEIr=&jH8*NT#)?D`4C;@k_Cge)-!jaKpk+$3EI3-NR{XY9S~i2mhaR=%9|9k_fK`* zVDbCzvOtJV5Q03$-0{CP+ip_R#``AL>eQH?{J~Lc4fyV(8LUsvtuFZN87RNl6lt+X z#$yUpjLe(v9o)Pr{h2N*8&2l}$0WqA)OG&8K{ zn{_R4_~SBgjFev%*F!32mW#ei-1e{CQuB2%2sA1cz1_8_RbMV7=Ygaz8k!!L+=9H< zj1^MX#VIqcflMY40_2O^oWG8om!U|ML6( zh1lR=#qWjRQ$Zz_j#COwRqdt#D}!}Y@}!cHoYI__QRDIui(M;}y~TdR*ZU}W^|GTP z+n6kRWfsbns2P=N7PDxFc+C$zhToN>$>zYi$gz;e@GQ~VElaU9IP(p(rQ#oL#a{4_ z8{5_k%JL84-L1UCFdj%ydVvuJgeS+>=-&1Ws*P3u&wquh< zq1b2gp$L$77G_RL`5BkKFF7s~Nzu&qNt=dt6_2Vo%{c+1j!KZ^BH|=_bC|cK?5qU` zVfB^yFC*>Ma3qE!LR^WN)= zbPF7e8zyC;Ky#K>P`3ZfojRrcqom1&#}V69-?m{7E^e(H)MFi)jT z(7OWGWeYNIg=4a$t}9KcbPO_cF}1as@sEGnKx_NhllQ~!EC_MDQe~?3(g>%D?v94l zSvbh@W1Z~S6eZ$y{)C(3gF}4{s}{CCWGgW9l*e`aaWZKnwUt0Zw3r~r_MQl!ick20+;xz~OR z3RFfEa-202X;6uF-Xj>!qO?ke5H*k#d#;N~rC4{eR1T+A^p-U|c~?vzyL79?%#O~F zt1i}>%w1cTOUu2sKfmIb^jiL*@#K_&mwoZ3Z6Lf$2Z$>Q3sYK$Wt5WnAG~Pf!>BZGq_3AGF()-%}FI9V_IyC-jtG9J0hW4 z);QtZ){`kO1uTI|jz#dO1`aA&aBf_1!T)QOI*rKqTSq#NoZSTz!yd)iKe(_!vnNgxwoO9MY zpSRIbJwJs%ZesQ53^_e5^ob4RjAd)MJ8UdsX3wK$wB<%9d>glsBec=r=c}WmSe>7> z5N?=Ln;vd3(jRf?95?)qEz=m3H==aW)i^v{#g5I}IK8AXqFo*5)0FY!S!i-Sx!j?s zb+8Mg#K9iAauoQ)@b>MzsNyI3ORFy!|_;Hd!4` zlLnQz)%e)B3W3)SMjxqBkj!@zNKsV*%6&2;NeBv+Bp!VpH_ zpbU0tjK0gxvcnh@DKqVoK9)?YSho@$l()KbY6~XF4QJ~#NM$hUS_(W6Im_h{i>d{2 z3nglcGT#^Ei`JIMw=R7V)|M7s+F-tlu5yaXd2-*fMZ5C+IhB_qp7Tm{jwqOFN8VN9 zG~au|)z3tYXu8^3MU_UJx=;_4C1vS|DN9MzcQbYj8C?m5E5;xPz0#V5mRj>NVsA;pO7I++lsvq~RhPZd%0+z_q`|S+XZJ!IK zKIn1-WpS{c!JUV?_{k$j(BWsdPL5bdIMsXjN#iYLmv5TdfZY#1g3o{EGge2Va@dC- zco2X2-~QYLV8i$%KKQ}E#7}?pa~!wxIBN~_-EVvg2lpMoQ!jif`EAz(J;+t@rJp>4 z>u$W2e5!&Owc(qb#FWl1qP19|;Qzx7pT|f4=EGQCUbZ4KIqYS5dz|!ui+NzFkAHo5 z1z)~>j>LWqXPd@Bt>gVi zam(%*s?s91ZJ6emb^MBA;XUjBZoSflnpwxET{mUlp+|DEgM6F=Q5EH?s(4Sn(80j8 zN{|St{;9L^3bjjlnp}|xvhSW>@*Z7o`oIKFt!ae*g>2E1W5m^c&Qqo|flRSvoi&D5 zkmjSgx_~a}lql24_=KZ8w3PE|TxN|Ch-d<)zW8yQ&)2oegG^Aw#08h3yX81k3=0a|Veob7=8&$4T{>jPLhS$|{yuRu-_@4_ocA_^HhI z?!a}+)x;_*oeQ{J@8hOh?#JEx>-g#J72J6HZu9#4w91FUfa)*6&3Ep_-`#X4et4jV zn;)LX?R$<=t&xKf@uDQD*i<)F`U*+)4gdHLm^*xk_i5s9{^~PpZo+PG@O)tA%$(*P!-}oitwy%Emt1LNL>QpEYa*}IQy9ZY~*k6yaOvF6g$&gaS2*qRDuHQ~= z<`DkwW7pxXyY4n*(|J59g~$Y1JTbR|J!?d%>1}vub%00a)H^6JLr*pF;#M-gR3jq; zQ>_idLRxCY7DDJKic?evxlT9fLF)SWh!#l=N{w5le$s*1kTc7To*v@R?)!1%k$X{y z8WeyAUn9?~R#8wRFHr=GK9$VP6L8+taU}3E=Jb{aQ9Mss=$-Z|QL%|}s`-@4WZJxz z{KuT*d@51LqCiCS6Hho1)l3D;bIVXBLm|we;AO3Sw~W;FP@`|2l+gII<(9&2LOqjd zE-!VgO2Yira%ZVMdu%y*fi(b751k-MS5n6csUJ1f5|1*=O1YO*ZTZp|YCR7J8(pka zb0!>UD%k*7;Uv>g#2F{;Ai~mW?+=W_rBg2MtHS^k-`9dHP$*yjl9%DP-}riKD#oTFqd2?+&dwP53Kb{6ZX^U%-by^jGMTqbfl;(!ore__6YYYY)?%r)D@r z{#3>&QDP(@$K`buKK76otWnR9Qw_Cj-irzt3{7zLXLUiA0j6fOSz7XK(if>eYnl+cbC1Mt&5Wx7;#vbJ2MCh(g;9ZgI5)7=!lVtzv2%f3!CGvt zGf^1X7DG!E?k583TB%#oid_DA9g#vLQ&Uo(yGRvn!`Qb@6cz=MwdBJL1wS`}qjN`) z_B+_IV+7l_R4~eiY}LA)%rTV6uQm}yEKY?+=?MHmeSE)0zzG6xDnU=DR1cBJmI zUgFo%PCJfhGidd(W7BbX?Q36$Yv1=iJnd;u!_R;GW9tp{%HMt^W+{Yn0N?!eZ)5)G zEGEkvFfn~LC!m9!TYyQqtd@v4N9S;4-(#-)lw(lWxZiurAL85J{-#~)_SnaJ4&WY!%}&#I>94tB@zQ`OFg9E9X+xi z^NWXgpAe)Q9e_gd=x zY^dHgO5*5+mYM8ANiI~Ro|8KKsjoiEoT%B^Bjg-yTI+=8)iqpk^6}U*Ua=O>X+FrE z_dd!&wz07kV8>XV#!w%}O^u=;A7g)Lp-t85Y@m^&zCa)S@JEQ0vv}TfpND-LEJwwodJ&98k8GqZDe{qMX6uY1k!;LbblwCtVVdDW}9)A@Wt=%9tCKjnB#XFN<& z*k5$jx!7FHSXRDv)hH40^Pm2-b>%q!yz_9)i(l#{Cw67B4H^xau=CD79nGa#jOHSo zuzB3vQm&jdjTc|@GHjvMDQJ1#vz}wIdrQ(#+nhKct*9dtW-&qmIB)wnHjlbv4E;E3 zB_W|2X(j#CQ%S|CGTPVAU{r)e;YLM_x~c@=^XQNR`HZFJ){UQapQiPm7n1fvB7OxG z3QZtX=Y_%KK+g;pJacjwd zPW#Y7TRlFf9PopFi-KL}n5h}Yr%*oULX4h#rfnQ+b})2@j)m*hmFo$?N%oKoA>XWT zcmB_Mf6VnFIC(nk@T#=m^Y+d!*QmBDp*htZ8SUCxI%yLirBtQu2)#7VJqTWeSN;;w)h(=m1b1&{@pm_Fw)Avxg4b zK%P&*oSm7)KYjB?y!owf!Q#Rq{^`aW@vN(^#?@C`j*dFzKC;_(@b+!T*#V~cluN17 z8I#@a(C9>5P|>{vAi{FgM1{L`?(i%QEzIL-7hTL}gw>>*e~_EWGb2|0AAJfLCrgJB z5D^vCP?o#$!Bf1xInw2mZMwVx^(IordzS`AP^wsovktl%)_HAziGr%E>=A@S^2j$f z=MINT{z>3+S$Fz`kW;l(N(9#NGBP|xvFu1YktKywWrZg~s_Xc6qL|b^xt~?PW;bLehQ-_Q+V@hUWv$c_7&4+ zFL>??t;vP>Ymw_S;HGV_P{j{g1fv#OYm1mArQ3GlRXFvUS0gG_5py%h${(udr!}<= zOxUcVG;&Q7QpwNjT{kSw$jvI=xgJ+frQE@0*<7LS{o;w4S|$@zR7R`VxCnbcOxbR< zrcDZ+38u4o?izK(ZKI@iFY5oJG_5SHuV&vG8gSbpM>?PbHFG+-Os$>?%?%DDON-A{ z_PJwHTn+jVqqJVfc>ShYiX5E51W|O9Tybe_)rz%7X>hGITUcCOvDz3lp&BKrZ`K-? zKoXGyQL9iuOMF%xPD*~2rVy!yfs@ z#1*NxXIwxbr7WT~3x(>GT4h{`+DNS`xxzC8X<+_CMcATFod$?%ZYrqzHLFj`c%$f+ zw2k|AxN0^zmDkRSq#!Ex?bMiW>RUB88TG!Gkuh|xAw_?z(l9Z4tW}J{q)L|H21?~= zL=o}o58jLR6AyF4P~gjxw9G3M{Gvs{dP)~0XU%X9yA-0mYb%_`QKUKcBlG*LE?#BE zW1QPfo3_w!DjKLXmzGJfTGkND?>9(`j-Y(jMY!Zme}o1NKqaaa`3$Rrw)tBN9J5ti zCMfA0LrCW?lZuzhwiDYVv4J~da(!I(x!A78d}_CAl49#qp0@0w z)#TI$MSjHNnu|@#W7Oe9tEgLMkCnUX$Uq46bNC1G^qxG!tayEg`ypv73W1X z)^=^$g^Et7;YuQz)BM z>p6m0PyWi}DDZVBdYH7O(T2Aw&B#S}T>fCn5_w`fS|>iXITc)x5iI{|s-%+__(s*@ zq>^LWhL*wZI%cfbkz34GmaNQq>k1rOyJ_(Rp{uMvO_~}dXmASQ>2On7i&Z-y%4OOp z>${iqs#$le3Pp9VFv;j~u%mH zS+;niHh@d_Q>1QajavuY)N$U`U#T!6OjNN20}{h*y&+}h69igP0q$zd6^iRXUoNJe>L(c9PQ- zGD`diVW*&(s?>yPv4^1vwK=SndzcjLtNKq7AJwI=lV$7E?IqQF6f|`;Rt~4aqlIF@ z{He-@mjJ5X+{%36uB|NZTrOifQ>|I~I%;)fxwPlR81;((omTd?Dz^VW%F(Cb(Z0d%^DlAOt_6^`!cz=erP zeA0t!hEI_yN}!l*K?t0o9`$Z6Ut8~w=TF7{PvXPGYp3u6vr*NomBCLfuVsfEza zvd$YxXAjl>hyZ7kBa~f}C3no9kjB#FI9a2kqwXjdWg;aJ5H-xos^OP>b$*Z_QQy#C zg=I$hVoo_#y-+Zhdgcfh8K?-In3@6dL9 zI(@91I7$v^PbC6+OqC|R!?gi4iOQi=6Iy8qRV`YCM%0AVNUkz%^0Bco8Dg|bA!v^DEMTO9G5Go&7 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 diff --git a/litemall-vue/src/assets/images/id_card_reverse.png b/litemall-vue/src/assets/images/id_card_reverse.png deleted file mode 100755 index 99a763ae6e30152cdde4cc267e61449efc1afc5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42537 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≧58u)$FOrRTVdmUJ=p@ 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 diff --git a/litemall-vue/src/vue/components/Tabbar/index.vue b/litemall-vue/src/components/Tabbar/index.vue old mode 100755 new mode 100644 similarity index 94% rename from litemall-vue/src/vue/components/Tabbar/index.vue rename to litemall-vue/src/components/Tabbar/index.vue index 1b5fa45d..45c54343 --- a/litemall-vue/src/vue/components/Tabbar/index.vue +++ b/litemall-vue/src/components/Tabbar/index.vue @@ -1,88 +1,88 @@ - - - - + + + + diff --git a/litemall-vue/src/vue/components/_directive/scrollMore.js b/litemall-vue/src/components/_directive/scrollMore.js old mode 100755 new mode 100644 similarity index 94% rename from litemall-vue/src/vue/components/_directive/scrollMore.js rename to litemall-vue/src/components/_directive/scrollMore.js index 9571f9ca..a7ad5d63 --- a/litemall-vue/src/vue/components/_directive/scrollMore.js +++ b/litemall-vue/src/components/_directive/scrollMore.js @@ -1,113 +1,113 @@ -import { debounce } from 'lodash'; -import scroll from 'core/utils/scroll'; - -const CONTEXT = '$scrollArrow'; -const OFFSET = 30; - -// 绑定事件 -function startBind(el) { - const context = el[CONTEXT]; - - context.vm.$nextTick(() => { - if (scroll.isAttached(el)) { - doBindEvent.call(el[CONTEXT]); - } - }); -} - -// 绑定事件到元素上 -// 读取基本的控制变量 -function doBindEvent() { - if (this.el[CONTEXT].binded) { - return; - } - this.el[CONTEXT].binded = true; - - this.scrollEventListener = debounce(handleScrollEvent.bind(this), 100); - // this.scrollEventTarget = this.el; - - // var disabledExpr = this.el.getAttribute('waterfall-disabled'); - // var disabled = false; - // if (disabledExpr) { - // this.vm.$watch(disabledExpr, (value) => { - // this.disabled = value; - // this.scrollEventListener(); - // }); - // disabled = Boolean(this.vm[disabledExpr]); - // } - // this.disabled = disabled; - - const offset = this.el.getAttribute('scroll-offset'); - this.offset = Number(offset) || OFFSET; - this.el.addEventListener('scroll', this.scrollEventListener); - - // this.scrollEventListener(); -} - -// 处理滚动函数 -function handleScrollEvent() { - const element = this.el; - // 已被禁止的滚动处理 - // if (this.disabled) return; - - const targetScrollLeft = scroll.getScrollLeft(element); - const targetVisibleWidth = scroll.getVisibleWidth(element); - // 滚动元素可视区域下边沿到滚动元素元素最顶上 距离 - const targetRight = targetScrollLeft + targetVisibleWidth; - // 如果无元素高度,考虑为元素隐藏,直接返回 - if (!targetVisibleWidth) return; - - // 判断是否到了最右边 - const isRightOver = element.scrollWidth - targetRight < this.offset; - - // 判断是否到了最左边 - const isLeftOver = targetScrollLeft < this.offset; - - this.cb && - this.cb({ - target: element, - isRightOver, - isLeftOver - }); - - // // 判断是否到了顶 - // let needLoadMoreToUpper = targetScrollTop < this.offset; - // if (needLoadMoreToUpper) { - // this.cb.upper && this.cb.upper({ - // target: scrollEventTarget, - // top: targetScrollTop - // }); - // } -} - -// 确认何时绑事件监听函数 -function doCheckStartBind(el) { - const context = el[CONTEXT]; - - if (context.vm._isMounted) { - startBind(el); - } else { - context.vm.$on('hook:mounted', () => { - startBind(el); - }); - } -} - -export default { - bind(el, binding, vnode) { - if (!el[CONTEXT]) { - el[CONTEXT] = { - el, - vm: vnode.context, - cb: {} - }; - } - el[CONTEXT].cb = binding.value; - - doCheckStartBind(el); - }, - update(el) { - const context = el[CONTEXT]; - context.scrollEventListener && context.scrollEventListener(); - } -}; +import { debounce } from 'lodash'; +import scroll from '@/utils/scroll'; + +const CONTEXT = '$scrollArrow'; +const OFFSET = 30; + +// 绑定事件 +function startBind(el) { + const context = el[CONTEXT]; + + context.vm.$nextTick(() => { + if (scroll.isAttached(el)) { + doBindEvent.call(el[CONTEXT]); + } + }); +} + +// 绑定事件到元素上 +// 读取基本的控制变量 +function doBindEvent() { + if (this.el[CONTEXT].binded) { + return; + } + this.el[CONTEXT].binded = true; + + this.scrollEventListener = debounce(handleScrollEvent.bind(this), 100); + // this.scrollEventTarget = this.el; + + // var disabledExpr = this.el.getAttribute('waterfall-disabled'); + // var disabled = false; + // if (disabledExpr) { + // this.vm.$watch(disabledExpr, (value) => { + // this.disabled = value; + // this.scrollEventListener(); + // }); + // disabled = Boolean(this.vm[disabledExpr]); + // } + // this.disabled = disabled; + + const offset = this.el.getAttribute('scroll-offset'); + this.offset = Number(offset) || OFFSET; + this.el.addEventListener('scroll', this.scrollEventListener); + + // this.scrollEventListener(); +} + +// 处理滚动函数 +function handleScrollEvent() { + const element = this.el; + // 已被禁止的滚动处理 + // if (this.disabled) return; + + const targetScrollLeft = scroll.getScrollLeft(element); + const targetVisibleWidth = scroll.getVisibleWidth(element); + // 滚动元素可视区域下边沿到滚动元素元素最顶上 距离 + const targetRight = targetScrollLeft + targetVisibleWidth; + // 如果无元素高度,考虑为元素隐藏,直接返回 + if (!targetVisibleWidth) return; + + // 判断是否到了最右边 + const isRightOver = element.scrollWidth - targetRight < this.offset; + + // 判断是否到了最左边 + const isLeftOver = targetScrollLeft < this.offset; + + this.cb && + this.cb({ + target: element, + isRightOver, + isLeftOver + }); + + // // 判断是否到了顶 + // let needLoadMoreToUpper = targetScrollTop < this.offset; + // if (needLoadMoreToUpper) { + // this.cb.upper && this.cb.upper({ + // target: scrollEventTarget, + // top: targetScrollTop + // }); + // } +} + +// 确认何时绑事件监听函数 +function doCheckStartBind(el) { + const context = el[CONTEXT]; + + if (context.vm._isMounted) { + startBind(el); + } else { + context.vm.$on('hook:mounted', () => { + startBind(el); + }); + } +} + +export default { + bind(el, binding, vnode) { + if (!el[CONTEXT]) { + el[CONTEXT] = { + el, + vm: vnode.context, + cb: {} + }; + } + el[CONTEXT].cb = binding.value; + + doCheckStartBind(el); + }, + update(el) { + const context = el[CONTEXT]; + context.scrollEventListener && context.scrollEventListener(); + } +}; diff --git a/litemall-vue/src/vue/components/field-group/index.vue b/litemall-vue/src/components/field-group/index.vue old mode 100755 new mode 100644 similarity index 92% rename from litemall-vue/src/vue/components/field-group/index.vue rename to litemall-vue/src/components/field-group/index.vue index 0e8e8e1f..7cdad5b5 --- a/litemall-vue/src/vue/components/field-group/index.vue +++ b/litemall-vue/src/components/field-group/index.vue @@ -1,26 +1,26 @@ - - - - - - + + + + + + diff --git a/litemall-vue/src/vue/components/field/index.vue b/litemall-vue/src/components/field/index.vue old mode 100755 new mode 100644 similarity index 94% rename from litemall-vue/src/vue/components/field/index.vue rename to litemall-vue/src/components/field/index.vue index e7e9a114..8cb3de15 --- a/litemall-vue/src/vue/components/field/index.vue +++ b/litemall-vue/src/components/field/index.vue @@ -1,104 +1,104 @@ - - - - - - + + + + + + diff --git a/litemall-vue/src/vue/components/infinity-scroll/index.vue b/litemall-vue/src/components/infinity-scroll/index.vue similarity index 95% rename from litemall-vue/src/vue/components/infinity-scroll/index.vue rename to litemall-vue/src/components/infinity-scroll/index.vue index a1f1f6b2..7ad9beb7 100644 --- a/litemall-vue/src/vue/components/infinity-scroll/index.vue +++ b/litemall-vue/src/components/infinity-scroll/index.vue @@ -17,8 +17,8 @@ - - - + + + + + + diff --git a/litemall-vue/src/views/items/list/index.vue b/litemall-vue/src/views/items/list/index.vue index 5c06240f..5979431c 100755 --- a/litemall-vue/src/views/items/list/index.vue +++ b/litemall-vue/src/views/items/list/index.vue @@ -63,11 +63,11 @@ - - - + + + + + + diff --git a/litemall-vue/src/views/login/forget-reset/index.vue b/litemall-vue/src/views/login/forget-reset/index.vue index 77c9d457..b66cd4ba 100755 --- a/litemall-vue/src/views/login/forget-reset/index.vue +++ b/litemall-vue/src/views/login/forget-reset/index.vue @@ -1,57 +1,57 @@ - - - - - + + + + + diff --git a/litemall-vue/src/views/login/forget/index.vue b/litemall-vue/src/views/login/forget/index.vue index 6903d354..5c6acd0d 100755 --- a/litemall-vue/src/views/login/forget/index.vue +++ b/litemall-vue/src/views/login/forget/index.vue @@ -1,80 +1,80 @@ - - - - - + + + + + diff --git a/litemall-vue/src/views/login/login.vue b/litemall-vue/src/views/login/login.vue index 05a0e405..5ba0e8e6 100755 --- a/litemall-vue/src/views/login/login.vue +++ b/litemall-vue/src/views/login/login.vue @@ -50,12 +50,12 @@ - - + + + + + diff --git a/litemall-vue/src/views/login/register-submit/index.vue b/litemall-vue/src/views/login/register-submit/index.vue index 217ef971..f01cef57 100755 --- a/litemall-vue/src/views/login/register-submit/index.vue +++ b/litemall-vue/src/views/login/register-submit/index.vue @@ -1,78 +1,78 @@ - - - - - - + + + + + + diff --git a/litemall-vue/src/views/order/tabbar-cart.vue b/litemall-vue/src/views/order/tabbar-cart.vue index 4be7adca..bffb17d3 100755 --- a/litemall-vue/src/views/order/tabbar-cart.vue +++ b/litemall-vue/src/views/order/tabbar-cart.vue @@ -1,311 +1,311 @@ - - - - - - + + + + + + diff --git a/litemall-vue/src/views/user/module-collect/index.vue b/litemall-vue/src/views/user/module-collect/index.vue index 3a81eb57..e3093908 100644 --- a/litemall-vue/src/views/user/module-collect/index.vue +++ b/litemall-vue/src/views/user/module-collect/index.vue @@ -40,13 +40,13 @@ - - + + + + + diff --git a/litemall-vue/src/views/user/order-entity-list/index.vue b/litemall-vue/src/views/user/order-entity-list/index.vue index 209b5fca..02872b97 100644 --- a/litemall-vue/src/views/user/order-entity-list/index.vue +++ b/litemall-vue/src/views/user/order-entity-list/index.vue @@ -1,243 +1,243 @@ - - - - - + + + + + diff --git a/litemall-vue/src/views/user/refund-list/index.vue b/litemall-vue/src/views/user/refund-list/index.vue index f25dda45..95df86a2 100644 --- a/litemall-vue/src/views/user/refund-list/index.vue +++ b/litemall-vue/src/views/user/refund-list/index.vue @@ -1,156 +1,156 @@ - - - - - + + + + + diff --git a/litemall-vue/src/views/user/tabbar-user-header.vue b/litemall-vue/src/views/user/tabbar-user-header.vue index 53f5383f..fded15d7 100755 --- a/litemall-vue/src/views/user/tabbar-user-header.vue +++ b/litemall-vue/src/views/user/tabbar-user-header.vue @@ -1,93 +1,93 @@ - - - - - + + + + + diff --git a/litemall-vue/src/views/user/tabbar-user.vue b/litemall-vue/src/views/user/tabbar-user.vue index 4b52ad4b..b09521d7 100755 --- a/litemall-vue/src/views/user/tabbar-user.vue +++ b/litemall-vue/src/views/user/tabbar-user.vue @@ -1,68 +1,68 @@ - - - - - - + + + + + + diff --git a/litemall-vue/src/views/user/user-information-set/index.vue b/litemall-vue/src/views/user/user-information-set/index.vue index 051470d8..baf42485 100755 --- a/litemall-vue/src/views/user/user-information-set/index.vue +++ b/litemall-vue/src/views/user/user-information-set/index.vue @@ -41,8 +41,8 @@ - - + + + + + + diff --git a/litemall-vue/src/vue/event-bus/index.js b/litemall-vue/src/vue/event-bus/index.js deleted file mode 100644 index 45d98f06..00000000 --- a/litemall-vue/src/vue/event-bus/index.js +++ /dev/null @@ -1,21 +0,0 @@ -export default { - install(Vue) { - Vue.prototype.$bus = new Vue({ - data() { - return { - item_list: [] - }; - }, - created() { - this.$on('item_list', val => { - const isArr = Array.isArray(val); - if (isArr) { - this.item_list = val; - } else { - throw Error('item_list必须为数组'); - } - }); - } - }); - } -}; -- Gitee From 21cfee12bd4a2ee2e51a78938d3848e72054bfeb Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Sun, 21 Apr 2019 17:50:01 +0800 Subject: [PATCH 099/391] =?UTF-8?q?fix[litemall-admin-api]:=20=E4=B8=8D?= =?UTF-8?q?=E8=83=BD=E9=80=9A=E8=BF=87=E7=AE=A1=E7=90=86=E5=91=98=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E6=8E=A5=E5=8F=A3=E4=BF=AE=E6=94=B9=E5=AF=86=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../linlinjava/litemall/admin/web/AdminAdminController.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAdminController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAdminController.java index c4568162..f00cc6aa 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAdminController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAdminController.java @@ -116,10 +116,8 @@ public class AdminAdminController { return ResponseUtil.badArgument(); } - String rawPassword = admin.getPassword(); - BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); - String encodedPassword = encoder.encode(rawPassword); - admin.setPassword(encodedPassword); + // 不允许管理员通过编辑接口修改密码 + admin.setPassword(null); if (adminService.updateById(admin) == 0) { return ResponseUtil.updatedDataFailed(); -- Gitee From 20ea711a3f54a4777a6f3a5a8ee9053a1dd8c34b Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Mon, 22 Apr 2019 13:56:03 +0800 Subject: [PATCH 100/391] =?UTF-8?q?chore[litemall-vue]:=20=E7=BB=A7?= =?UTF-8?q?=E7=BB=AD=E7=AE=80=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-vue/.env.deployment | 5 + litemall-vue/.env.development | 14 + litemall-vue/.env.production | 5 + litemall-vue/package.json | 10 +- litemall-vue/src/api/api.js | 221 + litemall-vue/src/api/goods.js | 33 + litemall-vue/src/api/order.js | 2 + litemall-vue/src/api/promotion.js | 1 + litemall-vue/src/api/shop.js | 24 +- litemall-vue/src/api/user.js | 4 +- .../src/assets/scss/iconfont/iconfont.css | 2 +- .../src/components/infinity-scroll/index.vue | 5 +- litemall-vue/src/main.js | 9 +- litemall-vue/src/plugins/axios.js | 92 - litemall-vue/src/plugins/vue-countdown.js | 7 - litemall-vue/src/router/index.js | 7 +- litemall-vue/src/router/items.js | 3 +- litemall-vue/src/router/user.js | 9 - litemall-vue/src/utils/request.js | 10 +- litemall-vue/src/views/home/tabbar-home.vue | 188 +- .../views/items/detail/EntityGroup/area.json | 3607 ----------------- .../views/items/detail/EntityGroup/index.vue | 513 --- .../detail/EntityGroup/popup-address.vue | 168 - .../items/detail/EntityGroup/popup-area.vue | 50 - .../views/items/detail/VirtualGroup/index.vue | 121 - litemall-vue/src/views/items/detail/index.vue | 396 +- litemall-vue/src/views/items/detail/mix.js | 42 - .../detail/{EntityGroup => }/popup-props.vue | 158 +- litemall-vue/src/views/items/list/index.vue | 4 +- .../src/views/items/search-result/index.vue | 2 - litemall-vue/src/views/items/tabbar-class.vue | 7 +- litemall-vue/src/views/login/login.vue | 20 +- litemall-vue/src/views/order/tabbar-cart.vue | 40 +- .../views/user/module-invitation/index.vue | 65 - .../src/views/user/tabbar-user-ecoupon.vue | 172 +- .../src/views/user/tabbar-user-header.vue | 8 - .../src/views/user/tabbar-user-order.vue | 212 +- litemall-vue/src/views/user/tabbar-user.vue | 10 +- .../views/user/user-information-set/index.vue | 4 +- .../set-password/index.vue | 1 - litemall-vue/vue.config.js | 8 - 41 files changed, 930 insertions(+), 5329 deletions(-) create mode 100644 litemall-vue/.env.deployment create mode 100644 litemall-vue/.env.development create mode 100644 litemall-vue/.env.production create mode 100644 litemall-vue/src/api/api.js delete mode 100644 litemall-vue/src/plugins/axios.js delete mode 100644 litemall-vue/src/plugins/vue-countdown.js delete mode 100755 litemall-vue/src/views/items/detail/EntityGroup/area.json delete mode 100755 litemall-vue/src/views/items/detail/EntityGroup/index.vue delete mode 100755 litemall-vue/src/views/items/detail/EntityGroup/popup-address.vue delete mode 100755 litemall-vue/src/views/items/detail/EntityGroup/popup-area.vue delete mode 100755 litemall-vue/src/views/items/detail/VirtualGroup/index.vue delete mode 100755 litemall-vue/src/views/items/detail/mix.js rename litemall-vue/src/views/items/detail/{EntityGroup => }/popup-props.vue (95%) mode change 100755 => 100644 delete mode 100755 litemall-vue/src/views/user/module-invitation/index.vue diff --git a/litemall-vue/.env.deployment b/litemall-vue/.env.deployment new file mode 100644 index 00000000..d75b4c7e --- /dev/null +++ b/litemall-vue/.env.deployment @@ -0,0 +1,5 @@ +# just a flag +ENV = 'production' + +# base api +VUE_APP_BASE_API = 'http://192.168.0.101:8080/' \ No newline at end of file diff --git a/litemall-vue/.env.development b/litemall-vue/.env.development new file mode 100644 index 00000000..a3426fd8 --- /dev/null +++ b/litemall-vue/.env.development @@ -0,0 +1,14 @@ +# just a flag +ENV = 'development' + +# base api +VUE_APP_BASE_API = 'http://localhost:8080/' + +# vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable, +# to control whether the babel-plugin-dynamic-import-node plugin is enabled. +# It only does one thing by converting all import() to require(). +# This configuration can significantly increase the speed of hot updates, +# when you have a large number of pages. +# Detail: https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.js + +VUE_CLI_BABEL_TRANSPILE_MODULES = true \ No newline at end of file diff --git a/litemall-vue/.env.production b/litemall-vue/.env.production new file mode 100644 index 00000000..97821ab7 --- /dev/null +++ b/litemall-vue/.env.production @@ -0,0 +1,5 @@ +# just a flag +ENV = 'production' + +# base api +VUE_APP_BASE_API = 'https://www.example.com/' \ No newline at end of file diff --git a/litemall-vue/package.json b/litemall-vue/package.json index 372f0e39..d0e89ef3 100644 --- a/litemall-vue/package.json +++ b/litemall-vue/package.json @@ -8,19 +8,19 @@ "scripts": { "dev": "vue-cli-service serve", "serve": "vue-cli-service serve", - "build": "vue-cli-service build", - "build:dep": "vue-cli-service build", - "build:prod": "vue-cli-service build", + "build": "vue-cli-service build --mode production", + "build:dep": "vue-cli-service build --mode deployment", + "build:prod": "vue-cli-service build --mode production", "lint": "vue-cli-service lint" }, "dependencies": { - "@xkeshi/vue-countdown": "^1.0.1", + "@chenfengyuan/vue-countdown": "^1.1.2", "axios": "^0.18.0", "dayjs": "^1.7.7", "js-md5": "^0.7.3", "lodash": "^4.17.11", - "vant": "^1.4.4", + "vant": "^1.6.15", "vee-validate": "^2.1.4", "vue": "^2.5.17", "js-cookie": "2.2.0", diff --git a/litemall-vue/src/api/api.js b/litemall-vue/src/api/api.js new file mode 100644 index 00000000..9cb0ce23 --- /dev/null +++ b/litemall-vue/src/api/api.js @@ -0,0 +1,221 @@ +import request from '@/utils/request' + +const IndexUrl= 'wx/home/index'; //首页数据接口 +export function getHome() { + return request({ + url: IndexUrl, + method: 'get' + }) +} + +const CatalogList='wx/catalog/index'; //分类目录全部分类数据接口 +export function catalogList() { + return request({ + url: CatalogList, + method: 'get' + }) +} + +const CatalogCurrent='wx/catalog/current'; //分类目录当前分类数据接口 +export function catalogCurrent(query) { + return request({ + url: CatalogCurrent, + method: 'get', + params: query + }) +} + +const AuthLoginByWeixin='wx/auth/login_by_weixin'; //微信登录 + + +const AuthLoginByAccount='wx/auth/login'; //账号登录 +export function authLoginByAccount(data) { + return request({ + url: AuthLoginByAccount, + method: 'post', + data + }) +} +const AuthLogout='wx/auth/logout'; //账号登出 +export function authLogout() { + return request({ + url: AuthLogout, + method: 'post' + }) +} + +const AuthRegister='wx/auth/register'; //账号注册 +const AuthReset='wx/auth/reset'; //账号密码重置 +const AuthRegisterCaptcha='wx/auth/regCaptcha'; //验证码 +const AuthBindPhone='wx/auth/bindPhone'; //绑定微信手机号 + +const GoodsCount='wx/goods/count'; //统计商品总数 +export function goodsCount() { + return request({ + url: GoodsCount, + method: 'get' + }) +} +const GoodsList='wx/goods/list'; //获得商品列表 +export function goodsList(query) { + return request({ + url: GoodsList, + method: 'get', + params: query + }) +} +const GoodsCategory='wx/goods/category'; //获得分类数据 +export function goodsCategory(query) { + return request({ + url: GoodsCategory, + method: 'get', + params: query + }) +} +const GoodsDetail='wx/goods/detail'; //获得商品的详情 +export function goodsDetail(query) { + return request({ + url: GoodsDetail, + method: 'get', + params: query + }) +} +const GoodsRelated='wx/goods/related'; //商品详情页的关联商品(大家都在看) + +const BrandList='wx/brand/list'; //品牌列表 +const BrandDetail='wx/brand/detail'; //品牌详情 + +const CartList='wx/cart/index'; //获取购物车的数据 +export function cartList(query) { + return request({ + url: CartList, + method: 'get', + params: query + }) +} +const CartAdd='wx/cart/add'; // 添加商品到购物车 +export function cartAdd(data) { + return request({ + url: CartAdd, + method: 'post', + data + }) +} +const CartFastAdd='wx/cart/fastadd'; // 立即购买商品 +export function cartFastAdd(data) { + return request({ + url: CartFastAdd, + method: 'post', + data + }) +} +const CartUpdate='wx/cart/update'; // 更新购物车的商品 +export function cartUpdate(data) { + return request({ + url: cartUpdate, + method: 'post', + data + }) +} +const CartDelete='wx/cart/delete'; // 删除购物车的商品 +export function cartDelete(data) { + return request({ + url: CartDelete, + method: 'post', + data + }) +} +const CartChecked='wx/cart/checked'; // 选择或取消选择商品 +export function cartChecked(data) { + return request({ + url: CartChecked, + method: 'post', + data + }) +} +const CartGoodsCount='wx/cart/goodscount'; // 获取购物车商品件数 +export function cartGoodsCount() { + return request({ + url: CartGoodsCount, + method: 'get' + }) +} +const CartCheckout='wx/cart/checkout'; // 下单前信息确认 + +const CollectList='wx/collect/list'; //收藏列表 +const CollectAddOrDelete='wx/collect/addordelete'; //添加或取消收藏 +export function collectAddOrDelete(data) { + return request({ + url: CollectAddOrDelete, + method: 'post', + data + }) +} +const CommentList='wx/comment/list'; //评论列表 +const CommentCount='wx/comment/count'; //评论总数 +const CommentPost='wx/comment/post'; //发表评论 + +const TopicList='wx/topic/list'; //专题列表 +const TopicDetail='wx/topic/detail'; //专题详情 +const TopicRelated='wx/topic/related'; //相关专题 + +const SearchIndex='wx/search/index'; //搜索关键字 +const SearchResult='wx/search/result'; //搜索结果 +const SearchHelper='wx/search/helper'; //搜索帮助 +const SearchClearHistory='wx/search/clearhistory'; //搜索历史清楚 + +const AddressList='wx/address/list'; //收货地址列表 +const AddressDetail='wx/address/detail'; //收货地址详情 +const AddressSave='wx/address/save'; //保存收货地址 +const AddressDelete='wx/address/delete'; //保存收货地址 + +const ExpressQuery='wx/express/query'; //物流查询 + +const RegionList='wx/region/list'; //获取区域列表 + +const OrderSubmit='wx/order/submit'; // 提交订单 +const OrderPrepay='wx/order/prepay'; // 订单的预支付会话 +const OrderList='wx/order/list'; //订单列表 +const OrderDetail='wx/order/detail'; //订单详情 +const OrderCancel='wx/order/cancel'; //取消订单 +const OrderRefund='wx/order/refund'; //退款取消订单 +const OrderDelete='wx/order/delete'; //删除订单 +const OrderConfirm='wx/order/confirm'; //确认收货 +const OrderGoods='wx/order/goods'; // 代评价商品信息 +const OrderComment='wx/order/comment'; // 评价订单商品信息 + +const FeedbackAdd='wx/feedback/submit'; //添加反馈 +const FootprintList='wx/footprint/list'; //足迹列表 +const FootprintDelete='wx/footprint/delete'; //删除足迹 + +const UserFormIdCreate='wx/formid/create'; //用户FromId,用于发送模版消息 + +const GroupOnList='wx/groupon/list'; //团购列表 +const GroupOn='wx/groupon/query'; //团购API-查询 +const GroupOnMy='wx/groupon/my'; //团购API-我的团购 +const GroupOnDetail='wx/groupon/detail'; //团购API-详情 +const GroupOnJoin='wx/groupon/join'; //团购API-详情 + +const CouponList='wx/coupon/list'; //优惠券列表 +const CouponMyList='wx/coupon/mylist'; //我的优惠券列表 +const CouponSelectList='coupon/selectlist'; //当前订单可用优惠券列表 +const CouponReceive='wx/coupon/receive'; //优惠券领取 +export function couponReceive(data) { + return request({ + url: CouponReceive, + method: 'post', + data + }) +} +const CouponExchange='wx/coupon/exchange'; //优惠券兑换 + +const StorageUpload='wx/torage/upload'; //图片上传, + +const UserIndex='wx/user/index'; //个人页面用户相关信息 +export function userIndex() { + return request({ + url: UserIndex, + method: 'get' + }) +} +const IssueList='wx/issue/list'; //帮助信息 diff --git a/litemall-vue/src/api/goods.js b/litemall-vue/src/api/goods.js index e8a7e02d..a2b25faa 100755 --- a/litemall-vue/src/api/goods.js +++ b/litemall-vue/src/api/goods.js @@ -5,3 +5,36 @@ export const GOODS_CATEGORY = '/wx/catalog/index'; export const GOODS_CHANNGE_CATEGORY = '/wx/catalog/current?id='; export const GOODS_SEARCH = '/moreGoods'; export const GOODS_DETAIL = '/details'; + +export function goodsCategory(query) { + return request({ + url: '/wx/catalog/index', + method: 'get', + params: query + }) +} + +export function goodsChannelCategory(query) { + return request({ + url: '/wx/catalog/index', + method: 'get', + params: query + }) +} + +export function goodsSearch(query) { + return request({ + url: '/wx/catalog/current?id=', + method: 'get', + params: query + }) +} + +export function goodsDetail(query) { + return request({ + url: '/wx/catalog/index', + method: 'get', + params: query + }) +} + \ No newline at end of file diff --git a/litemall-vue/src/api/order.js b/litemall-vue/src/api/order.js index 5e56480b..885a6e93 100755 --- a/litemall-vue/src/api/order.js +++ b/litemall-vue/src/api/order.js @@ -1,3 +1,5 @@ +import request from '@/utils/request' + export const ORDER_LIST = '/order-list'; export const ELE_COUPON_LIST = '/electronic-list'; diff --git a/litemall-vue/src/api/promotion.js b/litemall-vue/src/api/promotion.js index e69de29b..543ea86b 100755 --- a/litemall-vue/src/api/promotion.js +++ b/litemall-vue/src/api/promotion.js @@ -0,0 +1 @@ +import request from '@/utils/request' diff --git a/litemall-vue/src/api/shop.js b/litemall-vue/src/api/shop.js index c0b484b0..2e193590 100755 --- a/litemall-vue/src/api/shop.js +++ b/litemall-vue/src/api/shop.js @@ -1,7 +1,17 @@ -export const HOME_module = '/home'; -export const ALL_GOODS = '/moreGoods'; - -export const SHOPINFO = '/shop-info'; - -// 运费模板 -export const POST_FEE = ''; +import request from '@/utils/request' + +export const HOME_module = '/home'; +export const ALL_GOODS = '/moreGoods'; + +export const SHOPINFO = '/shop-info'; + +// 运费模板 +export const POST_FEE = ''; + +export function getHome(query) { + return request({ + url: '/wx/home/index', + method: 'get', + params: query + }) +} diff --git a/litemall-vue/src/api/user.js b/litemall-vue/src/api/user.js index 3e6bb073..e4602fce 100755 --- a/litemall-vue/src/api/user.js +++ b/litemall-vue/src/api/user.js @@ -1,3 +1,5 @@ +import request from '@/utils/request' + // 登录 export const USER_LOGIN = '/wx/auth/login'; export const USER_LOGOUT = ''; @@ -17,8 +19,6 @@ export const ADDRESS_DEFAULT = '/address-default'; // 收藏 export const GOODS_COLLECT_LIST = '/moreGoods'; -import request from '@/utils/request' - export function loginByUsername(data) { return request({ url: '/wx/auth/login', diff --git a/litemall-vue/src/assets/scss/iconfont/iconfont.css b/litemall-vue/src/assets/scss/iconfont/iconfont.css index f1b6b319..c2816320 100755 --- a/litemall-vue/src/assets/scss/iconfont/iconfont.css +++ b/litemall-vue/src/assets/scss/iconfont/iconfont.css @@ -5,7 +5,7 @@ @font-face { font-family: "vanIcon"; - src: url(https://b.yzcdn.cn/zanui/icon/vant-icon-4c3245.ttf) format('truetype'); + src: url('https://img.yzcdn.cn/vant/vant-icon-66a14a.ttf') format('truetype'); } .van-icon { diff --git a/litemall-vue/src/components/infinity-scroll/index.vue b/litemall-vue/src/components/infinity-scroll/index.vue index 7ad9beb7..045461a6 100644 --- a/litemall-vue/src/components/infinity-scroll/index.vue +++ b/litemall-vue/src/components/infinity-scroll/index.vue @@ -19,6 +19,7 @@ import { List } from 'vant'; import { get } from 'lodash'; import IsEmpty from '@/components/is-empty'; import loadMore from '@/mixin/load-more'; +import { goodsList } from '@/api/api'; const DEFAULT_CONFIG = { params: {}, @@ -68,9 +69,7 @@ export default { const prePage = this.perPage || this.pages.perPage; console.log(params); console.log(headers); - const res = await this.$reqGet( - '/wx/goods/list', - { + goodsList({ // 'per-page': prePage, page: this.pages.currPage, size: 100, diff --git a/litemall-vue/src/main.js b/litemall-vue/src/main.js index c1dc3844..cbe25e73 100644 --- a/litemall-vue/src/main.js +++ b/litemall-vue/src/main.js @@ -2,18 +2,17 @@ import Vue from 'vue'; import App from './App.vue'; import router from './router'; import store from './store' -import './assets/scss/global.scss'; +import 'vant/lib/icon/local.css'; +import '@/assets/scss/global.scss'; import '@/assets/scss/iconfont/iconfont.css'; import VeeValidate, { Validator } from 'vee-validate'; -import VueCountdown from '@/plugins/vue-countdown'; +import VueCountdown from '@chenfengyuan/vue-countdown'; import zhCN from 'vee-validate/dist/locale/zh_CN'; -import axios from '@/plugins/axios'; import filters from '@/filter'; -Vue.use(VueCountdown); -Vue.use(axios); +Vue.component(VueCountdown.name, VueCountdown); Vue.use(filters); Validator.localize('zh-CN', zhCN); diff --git a/litemall-vue/src/plugins/axios.js b/litemall-vue/src/plugins/axios.js deleted file mode 100644 index 7b8d6b66..00000000 --- a/litemall-vue/src/plugins/axios.js +++ /dev/null @@ -1,92 +0,0 @@ -import axios from 'axios'; -import _ from 'lodash'; -import qs from 'qs'; -import { Dialog, Toast } from 'vant'; -import Vue from 'vue'; -Vue.use(Toast); -const instance = axios.create({ - timeout: 5000, - baseURL: '' -}); - -instance.interceptors.request.use( - config => { - if (!config.headers['X-Litemall-Token']) { - config.headers['X-Litemall-Token'] = `${window.localStorage.getItem( - 'Authorization' - ) || ''}`; - } - return config; - }, - err => Promise.reject(err) -); - -instance.interceptors.response.use( - res => { - let litemall = _.has(res.data, 'errno') && res.data.errno !== 0; - let oldmall = _.has(res.data, 'success') && !res.data.success; - if (litemall || oldmall) { - switch (res.data.code || res.data.errno) { - case 422: { - const flag = Array.isArray(res.data.data) && res.data.data.length; - Dialog.alert({ - message: flag ? res.data.data[0].message : res.data.message - }); - break; - } - case 401: - break; - case 404: - break; - case 740: { - Toast.fail('优惠券已经领取过'); - break; - } - case 501: { - Toast.fail('请登录'); - setTimeout(() => { - window.location = '#/login/' - }, 1500) - break; - } - default: - Toast.fail(res.data.errmsg) - } - return Promise.reject(res); - } - return res; - }, - error => { - Dialog.alert({ - title: '警告', - message: error.message - }); - return Promise.reject(error); - } -); - -const post = (url, data, config = {}) => instance.post(url, data, config); - -const put = (url, data, config = {}) => instance.put(url, data, config); - -const get = (url, params, config = {}) => - instance.get(url, { - params, - ...config - }); - -const deleteMethod = (url, config = {}) => - instance({ - url, - method: 'delete', - ...config - }); - -export default { - install(Vue) { - Vue.prototype.$reqGet = get; - Vue.prototype.$reqPost = post; - Vue.prototype.$reqPut = put; - Vue.prototype.$reqDel = deleteMethod; - } -}; diff --git a/litemall-vue/src/plugins/vue-countdown.js b/litemall-vue/src/plugins/vue-countdown.js deleted file mode 100644 index 65ec3d00..00000000 --- a/litemall-vue/src/plugins/vue-countdown.js +++ /dev/null @@ -1,7 +0,0 @@ -import VueCountdown from '@xkeshi/vue-countdown'; - -export default { - install(Vue) { - Vue.component('countdown', VueCountdown); - } -}; diff --git a/litemall-vue/src/router/index.js b/litemall-vue/src/router/index.js index d8abb6ba..e57f3466 100644 --- a/litemall-vue/src/router/index.js +++ b/litemall-vue/src/router/index.js @@ -15,11 +15,10 @@ const RouterModel = new Router({ }); RouterModel.beforeEach((to, from, next) => { - const { Authorization, user_id } = getLocalStorage( - 'Authorization', - 'user_id' + const { Authorization } = getLocalStorage( + 'Authorization' ); - if (!Authorization && !user_id) { + if (!Authorization) { if (to.meta.login) { next({ name: 'login', query: { redirect: to.name } }); return; diff --git a/litemall-vue/src/router/items.js b/litemall-vue/src/router/items.js index 0c494020..a4c9aba0 100644 --- a/litemall-vue/src/router/items.js +++ b/litemall-vue/src/router/items.js @@ -1,5 +1,4 @@ -const Tabbar = () => - import(/* webpackChunkName: "Tabbar" */ '@/components/Tabbar/'); +const Tabbar = () => import('@/components/Tabbar/'); export default [ { diff --git a/litemall-vue/src/router/user.js b/litemall-vue/src/router/user.js index 328bf4b2..c1d02e3d 100644 --- a/litemall-vue/src/router/user.js +++ b/litemall-vue/src/router/user.js @@ -1,6 +1,5 @@ const tab_user = () => import('@/views/user/tabbar-user'); const UserCollect = () => import('@/views/user/module-collect'); -const UserInvitation = () => import('@/views/user/module-invitation'); const UserAddress = () => import('@/views/user/module-address'); const UserAddressEdit = () => import('@/views/user/module-address-edit'); const UserServer = () => import('@/views/user/module-server'); @@ -34,14 +33,6 @@ export default [ }, component: UserCollect }, - { - path: '/user/invitation', - name: 'invitation', - meta: { - login: true - }, - component: UserInvitation - }, { path: '/user/address', name: 'address', diff --git a/litemall-vue/src/utils/request.js b/litemall-vue/src/utils/request.js index f3cf2763..0b0423f8 100644 --- a/litemall-vue/src/utils/request.js +++ b/litemall-vue/src/utils/request.js @@ -3,7 +3,7 @@ import { Dialog, Toast } from 'vant'; // create an axios instance const service = axios.create({ - baseURL: process.env.BASE_API, // api 的 base_url + baseURL: process.env.VUE_APP_BASE_API, // api 的 base_url timeout: 5000 // request timeout }) @@ -34,7 +34,13 @@ service.interceptors.response.use( } else if (res.errno === 502) { Toast.alert('网站内部错误,请联系网站维护人员') return Promise.reject('error') - } else if (res.errno !== 0) { + } if (res.errno === 401) { + Toast.fail('参数不对'); + return Promise.reject('error') + } if (res.errno === 402) { + Toast.fail('参数值不对'); + return Promise.reject('error') + } else if (res.errno !== 0) { // 非5xx的错误属于业务错误,留给具体页面处理 return Promise.reject(response) } else { diff --git a/litemall-vue/src/views/home/tabbar-home.vue b/litemall-vue/src/views/home/tabbar-home.vue index 59616de4..a7a6b52d 100755 --- a/litemall-vue/src/views/home/tabbar-home.vue +++ b/litemall-vue/src/views/home/tabbar-home.vue @@ -4,6 +4,7 @@
+ @@ -46,7 +47,6 @@ - - @@ -81,7 +80,6 @@ - 添加日期 {{item.addTime}} --> - + @@ -399,7 +248,6 @@ export default { line-height: 1; color: #333; } -van-tabbar-item .van-coupon-cell--selected { color: #323233; } diff --git a/litemall-vue/src/views/items/detail/EntityGroup/area.json b/litemall-vue/src/views/items/detail/EntityGroup/area.json deleted file mode 100755 index 68adc1cf..00000000 --- a/litemall-vue/src/views/items/detail/EntityGroup/area.json +++ /dev/null @@ -1,3607 +0,0 @@ -{ - "province_list": { - "110000": "北京市", - "120000": "天津市", - "130000": "河北省", - "140000": "山西省", - "150000": "内蒙古自治区", - "210000": "辽宁省", - "220000": "吉林省", - "230000": "黑龙江省", - "310000": "上海市", - "320000": "江苏省", - "330000": "浙江省", - "340000": "安徽省", - "350000": "福建省", - "360000": "江西省", - "370000": "山东省", - "410000": "河南省", - "420000": "湖北省", - "430000": "湖南省", - "440000": "广东省", - "450000": "广西壮族自治区", - "460000": "海南省", - "500000": "重庆市", - "510000": "四川省", - "520000": "贵州省", - "530000": "云南省", - "540000": "西藏自治区", - "610000": "陕西省", - "620000": "甘肃省", - "630000": "青海省", - "640000": "宁夏回族自治区", - "650000": "新疆维吾尔自治区", - "710000": "台湾省", - "810000": "香港特别行政区", - "820000": "澳门特别行政区" - }, - "city_list": { - "110100": "北京市", - "110200": "县", - "120100": "天津市", - "120200": "县", - "130100": "石家庄市", - "130200": "唐山市", - "130300": "秦皇岛市", - "130400": "邯郸市", - "130500": "邢台市", - "130600": "保定市", - "130700": "张家口市", - "130800": "承德市", - "130900": "沧州市", - "131000": "廊坊市", - "131100": "衡水市", - "139000": "省直辖县", - "140100": "太原市", - "140200": "大同市", - "140300": "阳泉市", - "140400": "长治市", - "140500": "晋城市", - "140600": "朔州市", - "140700": "晋中市", - "140800": "运城市", - "140900": "忻州市", - "141000": "临汾市", - "141100": "吕梁市", - "150100": "呼和浩特市", - "150200": "包头市", - "150300": "乌海市", - "150400": "赤峰市", - "150500": "通辽市", - "150600": "鄂尔多斯市", - "150700": "呼伦贝尔市", - "150800": "巴彦淖尔市", - "150900": "乌兰察布市", - "152200": "兴安盟", - "152500": "锡林郭勒盟", - "152900": "阿拉善盟", - "210100": "沈阳市", - "210200": "大连市", - "210300": "鞍山市", - "210400": "抚顺市", - "210500": "本溪市", - "210600": "丹东市", - "210700": "锦州市", - "210800": "营口市", - "210900": "阜新市", - "211000": "辽阳市", - "211100": "盘锦市", - "211200": "铁岭市", - "211300": "朝阳市", - "211400": "葫芦岛市", - "220100": "长春市", - "220200": "吉林市", - "220300": "四平市", - "220400": "辽源市", - "220500": "通化市", - "220600": "白山市", - "220700": "松原市", - "220800": "白城市", - "222400": "延边朝鲜族自治州", - "230100": "哈尔滨市", - "230200": "齐齐哈尔市", - "230300": "鸡西市", - "230400": "鹤岗市", - "230500": "双鸭山市", - "230600": "大庆市", - "230700": "伊春市", - "230800": "佳木斯市", - "230900": "七台河市", - "231000": "牡丹江市", - "231100": "黑河市", - "231200": "绥化市", - "232700": "大兴安岭地区", - "310100": "上海市", - "310200": "县", - "320100": "南京市", - "320200": "无锡市", - "320300": "徐州市", - "320400": "常州市", - "320500": "苏州市", - "320600": "南通市", - "320700": "连云港市", - "320800": "淮安市", - "320900": "盐城市", - "321000": "扬州市", - "321100": "镇江市", - "321200": "泰州市", - "321300": "宿迁市", - "330100": "杭州市", - "330200": "宁波市", - "330300": "温州市", - "330400": "嘉兴市", - "330500": "湖州市", - "330600": "绍兴市", - "330700": "金华市", - "330800": "衢州市", - "330900": "舟山市", - "331000": "台州市", - "331100": "丽水市", - "340100": "合肥市", - "340200": "芜湖市", - "340300": "蚌埠市", - "340400": "淮南市", - "340500": "马鞍山市", - "340600": "淮北市", - "340700": "铜陵市", - "340800": "安庆市", - "341000": "黄山市", - "341100": "滁州市", - "341200": "阜阳市", - "341300": "宿州市", - "341500": "六安市", - "341600": "亳州市", - "341700": "池州市", - "341800": "宣城市", - "350100": "福州市", - "350200": "厦门市", - "350300": "莆田市", - "350400": "三明市", - "350500": "泉州市", - "350600": "漳州市", - "350700": "南平市", - "350800": "龙岩市", - "350900": "宁德市", - "360100": "南昌市", - "360200": "景德镇市", - "360300": "萍乡市", - "360400": "九江市", - "360500": "新余市", - "360600": "鹰潭市", - "360700": "赣州市", - "360800": "吉安市", - "360900": "宜春市", - "361000": "抚州市", - "361100": "上饶市", - "370100": "济南市", - "370200": "青岛市", - "370300": "淄博市", - "370400": "枣庄市", - "370500": "东营市", - "370600": "烟台市", - "370700": "潍坊市", - "370800": "济宁市", - "370900": "泰安市", - "371000": "威海市", - "371100": "日照市", - "371200": "莱芜市", - "371300": "临沂市", - "371400": "德州市", - "371500": "聊城市", - "371600": "滨州市", - "371700": "菏泽市", - "410100": "郑州市", - "410200": "开封市", - "410300": "洛阳市", - "410400": "平顶山市", - "410500": "安阳市", - "410600": "鹤壁市", - "410700": "新乡市", - "410800": "焦作市", - "410900": "濮阳市", - "411000": "许昌市", - "411100": "漯河市", - "411200": "三门峡市", - "411300": "南阳市", - "411400": "商丘市", - "411500": "信阳市", - "411600": "周口市", - "411700": "驻马店市", - "419000": "省直辖县", - "420100": "武汉市", - "420200": "黄石市", - "420300": "十堰市", - "420500": "宜昌市", - "420600": "襄阳市", - "420700": "鄂州市", - "420800": "荆门市", - "420900": "孝感市", - "421000": "荆州市", - "421100": "黄冈市", - "421200": "咸宁市", - "421300": "随州市", - "422800": "恩施土家族苗族自治州", - "429000": "省直辖县", - "430100": "长沙市", - "430200": "株洲市", - "430300": "湘潭市", - "430400": "衡阳市", - "430500": "邵阳市", - "430600": "岳阳市", - "430700": "常德市", - "430800": "张家界市", - "430900": "益阳市", - "431000": "郴州市", - "431100": "永州市", - "431200": "怀化市", - "431300": "娄底市", - "433100": "湘西土家族苗族自治州", - "440100": "广州市", - "440200": "韶关市", - "440300": "深圳市", - "440400": "珠海市", - "440500": "汕头市", - "440600": "佛山市", - "440700": "江门市", - "440800": "湛江市", - "440900": "茂名市", - "441200": "肇庆市", - "441300": "惠州市", - "441400": "梅州市", - "441500": "汕尾市", - "441600": "河源市", - "441700": "阳江市", - "441800": "清远市", - "441900": "东莞市", - "442000": "中山市", - "445100": "潮州市", - "445200": "揭阳市", - "445300": "云浮市", - "450100": "南宁市", - "450200": "柳州市", - "450300": "桂林市", - "450400": "梧州市", - "450500": "北海市", - "450600": "防城港市", - "450700": "钦州市", - "450800": "贵港市", - "450900": "玉林市", - "451000": "百色市", - "451100": "贺州市", - "451200": "河池市", - "451300": "来宾市", - "451400": "崇左市", - "460100": "海口市", - "460200": "三亚市", - "460300": "三沙市", - "469000": "省直辖县", - "500100": "重庆市", - "500200": "县", - "510100": "成都市", - "510300": "自贡市", - "510400": "攀枝花市", - "510500": "泸州市", - "510600": "德阳市", - "510700": "绵阳市", - "510800": "广元市", - "510900": "遂宁市", - "511000": "内江市", - "511100": "乐山市", - "511300": "南充市", - "511400": "眉山市", - "511500": "宜宾市", - "511600": "广安市", - "511700": "达州市", - "511800": "雅安市", - "511900": "巴中市", - "512000": "资阳市", - "513200": "阿坝藏族羌族自治州", - "513300": "甘孜藏族自治州", - "513400": "凉山彝族自治州", - "520100": "贵阳市", - "520200": "六盘水市", - "520300": "遵义市", - "520400": "安顺市", - "520500": "毕节市", - "520600": "铜仁市", - "522300": "黔西南布依族苗族自治州", - "522600": "黔东南苗族侗族自治州", - "522700": "黔南布依族苗族自治州", - "530100": "昆明市", - "530300": "曲靖市", - "530400": "玉溪市", - "530500": "保山市", - "530600": "昭通市", - "530700": "丽江市", - "530800": "普洱市", - "530900": "临沧市", - "532300": "楚雄彝族自治州", - "532500": "红河哈尼族彝族自治州", - "532600": "文山壮族苗族自治州", - "532800": "西双版纳傣族自治州", - "532900": "大理白族自治州", - "533100": "德宏傣族景颇族自治州", - "533300": "怒江傈僳族自治州", - "533400": "迪庆藏族自治州", - "540100": "拉萨市", - "540200": "日喀则市", - "540300": "昌都市", - "540400": "林芝市", - "542200": "山南地区", - "542400": "那曲地区", - "542500": "阿里地区", - "610100": "西安市", - "610200": "铜川市", - "610300": "宝鸡市", - "610400": "咸阳市", - "610500": "渭南市", - "610600": "延安市", - "610700": "汉中市", - "610800": "榆林市", - "610900": "安康市", - "611000": "商洛市", - "620100": "兰州市", - "620200": "嘉峪关市", - "620300": "金昌市", - "620400": "白银市", - "620500": "天水市", - "620600": "武威市", - "620700": "张掖市", - "620800": "平凉市", - "620900": "酒泉市", - "621000": "庆阳市", - "621100": "定西市", - "621200": "陇南市", - "622900": "临夏回族自治州", - "623000": "甘南藏族自治州", - "630100": "西宁市", - "630200": "海东市", - "632200": "海北藏族自治州", - "632300": "黄南藏族自治州", - "632500": "海南藏族自治州", - "632600": "果洛藏族自治州", - "632700": "玉树藏族自治州", - "632800": "海西蒙古族藏族自治州", - "640100": "银川市", - "640200": "石嘴山市", - "640300": "吴忠市", - "640400": "固原市", - "640500": "中卫市", - "650100": "乌鲁木齐市", - "650200": "克拉玛依市", - "650400": "吐鲁番市", - "652200": "哈密地区", - "652300": "昌吉回族自治州", - "652700": "博尔塔拉蒙古自治州", - "652800": "巴音郭楞蒙古自治州", - "652900": "阿克苏地区", - "653000": "克孜勒苏柯尔克孜自治州", - "653100": "喀什地区", - "653200": "和田地区", - "654000": "伊犁哈萨克自治州", - "654200": "塔城地区", - "654300": "阿勒泰地区", - "659000": "自治区直辖县级行政区划", - "710100": "台北市", - "710200": "高雄市", - "710300": "台南市", - "710400": "台中市", - "710500": "金门县", - "710600": "南投县", - "710700": "基隆市", - "710800": "新竹市", - "710900": "嘉义市", - "711100": "新北市", - "711200": "宜兰县", - "711300": "新竹县", - "711400": "桃园县", - "711500": "苗栗县", - "711700": "彰化县", - "711900": "嘉义县", - "712100": "云林县", - "712400": "屏东县", - "712500": "台东县", - "712600": "花莲县", - "712700": "澎湖县", - "712800": "连江县", - "810100": "香港岛", - "810200": "九龙", - "810300": "新界", - "820100": "澳门半岛", - "820200": "离岛" - }, - "county_list": { - "110101": "东城区", - "110102": "西城区", - "110105": "朝阳区", - "110106": "丰台区", - "110107": "石景山区", - "110108": "海淀区", - "110109": "门头沟区", - "110111": "房山区", - "110112": "通州区", - "110113": "顺义区", - "110114": "昌平区", - "110115": "大兴区", - "110116": "怀柔区", - "110117": "平谷区", - "110228": "密云县", - "110229": "延庆县", - "120101": "和平区", - "120102": "河东区", - "120103": "河西区", - "120104": "南开区", - "120105": "河北区", - "120106": "红桥区", - "120110": "东丽区", - "120111": "西青区", - "120112": "津南区", - "120113": "北辰区", - "120114": "武清区", - "120115": "宝坻区", - "120116": "滨海新区", - "120117": "宁河区", - "120118": "静海区", - "120225": "蓟县", - "130102": "长安区", - "130104": "桥西区", - "130105": "新华区", - "130107": "井陉矿区", - "130108": "裕华区", - "130109": "藁城区", - "130110": "鹿泉区", - "130111": "栾城区", - "130121": "井陉县", - "130123": "正定县", - "130125": "行唐县", - "130126": "灵寿县", - "130127": "高邑县", - "130128": "深泽县", - "130129": "赞皇县", - "130130": "无极县", - "130131": "平山县", - "130132": "元氏县", - "130133": "赵县", - "130183": "晋州市", - "130184": "新乐市", - "130202": "路南区", - "130203": "路北区", - "130204": "古冶区", - "130205": "开平区", - "130207": "丰南区", - "130208": "丰润区", - "130209": "曹妃甸区", - "130223": "滦县", - "130224": "滦南县", - "130225": "乐亭县", - "130227": "迁西县", - "130229": "玉田县", - "130281": "遵化市", - "130283": "迁安市", - "130302": "海港区", - "130303": "山海关区", - "130304": "北戴河区", - "130306": "抚宁区", - "130321": "青龙满族自治县", - "130322": "昌黎县", - "130324": "卢龙县", - "130390": "经济技术开发区", - "130402": "邯山区", - "130403": "丛台区", - "130404": "复兴区", - "130406": "峰峰矿区", - "130421": "邯郸县", - "130423": "临漳县", - "130424": "成安县", - "130425": "大名县", - "130426": "涉县", - "130427": "磁县", - "130428": "肥乡县", - "130429": "永年县", - "130430": "邱县", - "130431": "鸡泽县", - "130432": "广平县", - "130433": "馆陶县", - "130434": "魏县", - "130435": "曲周县", - "130481": "武安市", - "130502": "桥东区", - "130503": "桥西区", - "130521": "邢台县", - "130522": "临城县", - "130523": "内丘县", - "130524": "柏乡县", - "130525": "隆尧县", - "130526": "任县", - "130527": "南和县", - "130528": "宁晋县", - "130529": "巨鹿县", - "130530": "新河县", - "130531": "广宗县", - "130532": "平乡县", - "130533": "威县", - "130534": "清河县", - "130535": "临西县", - "130581": "南宫市", - "130582": "沙河市", - "130602": "竞秀区", - "130606": "莲池区", - "130607": "满城区", - "130608": "清苑区", - "130609": "徐水区", - "130623": "涞水县", - "130624": "阜平县", - "130626": "定兴县", - "130627": "唐县", - "130628": "高阳县", - "130629": "容城县", - "130630": "涞源县", - "130631": "望都县", - "130632": "安新县", - "130633": "易县", - "130634": "曲阳县", - "130635": "蠡县", - "130636": "顺平县", - "130637": "博野县", - "130638": "雄县", - "130681": "涿州市", - "130683": "安国市", - "130684": "高碑店市", - "130702": "桥东区", - "130703": "桥西区", - "130705": "宣化区", - "130706": "下花园区", - "130721": "宣化县", - "130722": "张北县", - "130723": "康保县", - "130724": "沽源县", - "130725": "尚义县", - "130726": "蔚县", - "130727": "阳原县", - "130728": "怀安县", - "130729": "万全县", - "130730": "怀来县", - "130731": "涿鹿县", - "130732": "赤城县", - "130733": "崇礼县", - "130802": "双桥区", - "130803": "双滦区", - "130804": "鹰手营子矿区", - "130821": "承德县", - "130822": "兴隆县", - "130823": "平泉县", - "130824": "滦平县", - "130825": "隆化县", - "130826": "丰宁满族自治县", - "130827": "宽城满族自治县", - "130828": "围场满族蒙古族自治县", - "130902": "新华区", - "130903": "运河区", - "130921": "沧县", - "130922": "青县", - "130923": "东光县", - "130924": "海兴县", - "130925": "盐山县", - "130926": "肃宁县", - "130927": "南皮县", - "130928": "吴桥县", - "130929": "献县", - "130930": "孟村回族自治县", - "130981": "泊头市", - "130982": "任丘市", - "130983": "黄骅市", - "130984": "河间市", - "131002": "安次区", - "131003": "广阳区", - "131022": "固安县", - "131023": "永清县", - "131024": "香河县", - "131025": "大城县", - "131026": "文安县", - "131028": "大厂回族自治县", - "131081": "霸州市", - "131082": "三河市", - "131090": "开发区", - "131091": "燕郊经济技术开发区", - "131102": "桃城区", - "131121": "枣强县", - "131122": "武邑县", - "131123": "武强县", - "131124": "饶阳县", - "131125": "安平县", - "131126": "故城县", - "131127": "景县", - "131128": "阜城县", - "131181": "冀州市", - "131182": "深州市", - "139001": "定州市", - "139002": "辛集市", - "140105": "小店区", - "140106": "迎泽区", - "140107": "杏花岭区", - "140108": "尖草坪区", - "140109": "万柏林区", - "140110": "晋源区", - "140121": "清徐县", - "140122": "阳曲县", - "140123": "娄烦县", - "140181": "古交市", - "140202": "城区", - "140203": "矿区", - "140211": "南郊区", - "140212": "新荣区", - "140221": "阳高县", - "140222": "天镇县", - "140223": "广灵县", - "140224": "灵丘县", - "140225": "浑源县", - "140226": "左云县", - "140227": "大同县", - "140302": "城区", - "140303": "矿区", - "140311": "郊区", - "140321": "平定县", - "140322": "盂县", - "140402": "城区", - "140411": "郊区", - "140421": "长治县", - "140423": "襄垣县", - "140424": "屯留县", - "140425": "平顺县", - "140426": "黎城县", - "140427": "壶关县", - "140428": "长子县", - "140429": "武乡县", - "140430": "沁县", - "140431": "沁源县", - "140481": "潞城市", - "140502": "城区", - "140521": "沁水县", - "140522": "阳城县", - "140524": "陵川县", - "140525": "泽州县", - "140581": "高平市", - "140602": "朔城区", - "140603": "平鲁区", - "140621": "山阴县", - "140622": "应县", - "140623": "右玉县", - "140624": "怀仁县", - "140702": "榆次区", - "140721": "榆社县", - "140722": "左权县", - "140723": "和顺县", - "140724": "昔阳县", - "140725": "寿阳县", - "140726": "太谷县", - "140727": "祁县", - "140728": "平遥县", - "140729": "灵石县", - "140781": "介休市", - "140802": "盐湖区", - "140821": "临猗县", - "140822": "万荣县", - "140823": "闻喜县", - "140824": "稷山县", - "140825": "新绛县", - "140826": "绛县", - "140827": "垣曲县", - "140828": "夏县", - "140829": "平陆县", - "140830": "芮城县", - "140881": "永济市", - "140882": "河津市", - "140902": "忻府区", - "140921": "定襄县", - "140922": "五台县", - "140923": "代县", - "140924": "繁峙县", - "140925": "宁武县", - "140926": "静乐县", - "140927": "神池县", - "140928": "五寨县", - "140929": "岢岚县", - "140930": "河曲县", - "140931": "保德县", - "140932": "偏关县", - "140981": "原平市", - "141002": "尧都区", - "141021": "曲沃县", - "141022": "翼城县", - "141023": "襄汾县", - "141024": "洪洞县", - "141025": "古县", - "141026": "安泽县", - "141027": "浮山县", - "141028": "吉县", - "141029": "乡宁县", - "141030": "大宁县", - "141031": "隰县", - "141032": "永和县", - "141033": "蒲县", - "141034": "汾西县", - "141081": "侯马市", - "141082": "霍州市", - "141102": "离石区", - "141121": "文水县", - "141122": "交城县", - "141123": "兴县", - "141124": "临县", - "141125": "柳林县", - "141126": "石楼县", - "141127": "岚县", - "141128": "方山县", - "141129": "中阳县", - "141130": "交口县", - "141181": "孝义市", - "141182": "汾阳市", - "150102": "新城区", - "150103": "回民区", - "150104": "玉泉区", - "150105": "赛罕区", - "150121": "土默特左旗", - "150122": "托克托县", - "150123": "和林格尔县", - "150124": "清水河县", - "150125": "武川县", - "150202": "东河区", - "150203": "昆都仑区", - "150204": "青山区", - "150205": "石拐区", - "150206": "白云鄂博矿区", - "150207": "九原区", - "150221": "土默特右旗", - "150222": "固阳县", - "150223": "达尔罕茂明安联合旗", - "150302": "海勃湾区", - "150303": "海南区", - "150304": "乌达区", - "150402": "红山区", - "150403": "元宝山区", - "150404": "松山区", - "150421": "阿鲁科尔沁旗", - "150422": "巴林左旗", - "150423": "巴林右旗", - "150424": "林西县", - "150425": "克什克腾旗", - "150426": "翁牛特旗", - "150428": "喀喇沁旗", - "150429": "宁城县", - "150430": "敖汉旗", - "150502": "科尔沁区", - "150521": "科尔沁左翼中旗", - "150522": "科尔沁左翼后旗", - "150523": "开鲁县", - "150524": "库伦旗", - "150525": "奈曼旗", - "150526": "扎鲁特旗", - "150581": "霍林郭勒市", - "150602": "东胜区", - "150621": "达拉特旗", - "150622": "准格尔旗", - "150623": "鄂托克前旗", - "150624": "鄂托克旗", - "150625": "杭锦旗", - "150626": "乌审旗", - "150627": "伊金霍洛旗", - "150702": "海拉尔区", - "150703": "扎赉诺尔区", - "150721": "阿荣旗", - "150722": "莫力达瓦达斡尔族自治旗", - "150723": "鄂伦春自治旗", - "150724": "鄂温克族自治旗", - "150725": "陈巴尔虎旗", - "150726": "新巴尔虎左旗", - "150727": "新巴尔虎右旗", - "150781": "满洲里市", - "150782": "牙克石市", - "150783": "扎兰屯市", - "150784": "额尔古纳市", - "150785": "根河市", - "150802": "临河区", - "150821": "五原县", - "150822": "磴口县", - "150823": "乌拉特前旗", - "150824": "乌拉特中旗", - "150825": "乌拉特后旗", - "150826": "杭锦后旗", - "150902": "集宁区", - "150921": "卓资县", - "150922": "化德县", - "150923": "商都县", - "150924": "兴和县", - "150925": "凉城县", - "150926": "察哈尔右翼前旗", - "150927": "察哈尔右翼中旗", - "150928": "察哈尔右翼后旗", - "150929": "四子王旗", - "150981": "丰镇市", - "152201": "乌兰浩特市", - "152202": "阿尔山市", - "152221": "科尔沁右翼前旗", - "152222": "科尔沁右翼中旗", - "152223": "扎赉特旗", - "152224": "突泉县", - "152501": "二连浩特市", - "152502": "锡林浩特市", - "152522": "阿巴嘎旗", - "152523": "苏尼特左旗", - "152524": "苏尼特右旗", - "152525": "东乌珠穆沁旗", - "152526": "西乌珠穆沁旗", - "152527": "太仆寺旗", - "152528": "镶黄旗", - "152529": "正镶白旗", - "152530": "正蓝旗", - "152531": "多伦县", - "152921": "阿拉善左旗", - "152922": "阿拉善右旗", - "152923": "额济纳旗", - "210102": "和平区", - "210103": "沈河区", - "210104": "大东区", - "210105": "皇姑区", - "210106": "铁西区", - "210111": "苏家屯区", - "210112": "浑南区", - "210113": "沈北新区", - "210114": "于洪区", - "210122": "辽中县", - "210123": "康平县", - "210124": "法库县", - "210181": "新民市", - "210190": "经济技术开发区", - "210202": "中山区", - "210203": "西岗区", - "210204": "沙河口区", - "210211": "甘井子区", - "210212": "旅顺口区", - "210213": "金州区", - "210224": "长海县", - "210281": "瓦房店市", - "210282": "普兰店市", - "210283": "庄河市", - "210291": "大连经济技术开发区", - "210292": "大连高新区", - "210302": "铁东区", - "210303": "铁西区", - "210304": "立山区", - "210311": "千山区", - "210321": "台安县", - "210323": "岫岩满族自治县", - "210381": "海城市", - "210390": "高新区", - "210402": "新抚区", - "210403": "东洲区", - "210404": "望花区", - "210411": "顺城区", - "210421": "抚顺县", - "210422": "新宾满族自治县", - "210423": "清原满族自治县", - "210502": "平山区", - "210503": "溪湖区", - "210504": "明山区", - "210505": "南芬区", - "210521": "本溪满族自治县", - "210522": "桓仁满族自治县", - "210602": "元宝区", - "210603": "振兴区", - "210604": "振安区", - "210624": "宽甸满族自治县", - "210681": "东港市", - "210682": "凤城市", - "210702": "古塔区", - "210703": "凌河区", - "210711": "太和区", - "210726": "黑山县", - "210727": "义县", - "210781": "凌海市", - "210782": "北镇市", - "210793": "经济技术开发区", - "210802": "站前区", - "210803": "西市区", - "210804": "鲅鱼圈区", - "210811": "老边区", - "210881": "盖州市", - "210882": "大石桥市", - "210902": "海州区", - "210903": "新邱区", - "210904": "太平区", - "210905": "清河门区", - "210911": "细河区", - "210921": "阜新蒙古族自治县", - "210922": "彰武县", - "211002": "白塔区", - "211003": "文圣区", - "211004": "宏伟区", - "211005": "弓长岭区", - "211011": "太子河区", - "211021": "辽阳县", - "211081": "灯塔市", - "211102": "双台子区", - "211103": "兴隆台区", - "211121": "大洼县", - "211122": "盘山县", - "211202": "银州区", - "211204": "清河区", - "211221": "铁岭县", - "211223": "西丰县", - "211224": "昌图县", - "211281": "调兵山市", - "211282": "开原市", - "211302": "双塔区", - "211303": "龙城区", - "211321": "朝阳县", - "211322": "建平县", - "211324": "喀喇沁左翼蒙古族自治县", - "211381": "北票市", - "211382": "凌源市", - "211402": "连山区", - "211403": "龙港区", - "211404": "南票区", - "211421": "绥中县", - "211422": "建昌县", - "211481": "兴城市", - "215090": "工业园区", - "220102": "南关区", - "220103": "宽城区", - "220104": "朝阳区", - "220105": "二道区", - "220106": "绿园区", - "220112": "双阳区", - "220113": "九台区", - "220122": "农安县", - "220182": "榆树市", - "220183": "德惠市", - "220190": "高新技术产业开发区", - "220191": "汽车产业开发区", - "220192": "经济技术开发区", - "220202": "昌邑区", - "220203": "龙潭区", - "220204": "船营区", - "220211": "丰满区", - "220221": "永吉县", - "220281": "蛟河市", - "220282": "桦甸市", - "220283": "舒兰市", - "220284": "磐石市", - "220302": "铁西区", - "220303": "铁东区", - "220322": "梨树县", - "220323": "伊通满族自治县", - "220381": "公主岭市", - "220382": "双辽市", - "220402": "龙山区", - "220403": "西安区", - "220421": "东丰县", - "220422": "东辽县", - "220502": "东昌区", - "220503": "二道江区", - "220521": "通化县", - "220523": "辉南县", - "220524": "柳河县", - "220581": "梅河口市", - "220582": "集安市", - "220602": "浑江区", - "220605": "江源区", - "220621": "抚松县", - "220622": "靖宇县", - "220623": "长白朝鲜族自治县", - "220681": "临江市", - "220702": "宁江区", - "220721": "前郭尔罗斯蒙古族自治县", - "220722": "长岭县", - "220723": "乾安县", - "220781": "扶余市", - "220802": "洮北区", - "220821": "镇赉县", - "220822": "通榆县", - "220881": "洮南市", - "220882": "大安市", - "221090": "工业园区", - "222401": "延吉市", - "222402": "图们市", - "222403": "敦化市", - "222404": "珲春市", - "222405": "龙井市", - "222406": "和龙市", - "222424": "汪清县", - "222426": "安图县", - "230102": "道里区", - "230103": "南岗区", - "230104": "道外区", - "230108": "平房区", - "230109": "松北区", - "230110": "香坊区", - "230111": "呼兰区", - "230112": "阿城区", - "230113": "双城区", - "230123": "依兰县", - "230124": "方正县", - "230125": "宾县", - "230126": "巴彦县", - "230127": "木兰县", - "230128": "通河县", - "230129": "延寿县", - "230183": "尚志市", - "230184": "五常市", - "230202": "龙沙区", - "230203": "建华区", - "230204": "铁锋区", - "230205": "昂昂溪区", - "230206": "富拉尔基区", - "230207": "碾子山区", - "230208": "梅里斯达斡尔族区", - "230221": "龙江县", - "230223": "依安县", - "230224": "泰来县", - "230225": "甘南县", - "230227": "富裕县", - "230229": "克山县", - "230230": "克东县", - "230231": "拜泉县", - "230281": "讷河市", - "230302": "鸡冠区", - "230303": "恒山区", - "230304": "滴道区", - "230305": "梨树区", - "230306": "城子河区", - "230307": "麻山区", - "230321": "鸡东县", - "230381": "虎林市", - "230382": "密山市", - "230402": "向阳区", - "230403": "工农区", - "230404": "南山区", - "230405": "兴安区", - "230406": "东山区", - "230407": "兴山区", - "230421": "萝北县", - "230422": "绥滨县", - "230502": "尖山区", - "230503": "岭东区", - "230505": "四方台区", - "230506": "宝山区", - "230521": "集贤县", - "230522": "友谊县", - "230523": "宝清县", - "230524": "饶河县", - "230602": "萨尔图区", - "230603": "龙凤区", - "230604": "让胡路区", - "230605": "红岗区", - "230606": "大同区", - "230621": "肇州县", - "230622": "肇源县", - "230623": "林甸县", - "230624": "杜尔伯特蒙古族自治县", - "230702": "伊春区", - "230703": "南岔区", - "230704": "友好区", - "230705": "西林区", - "230706": "翠峦区", - "230707": "新青区", - "230708": "美溪区", - "230709": "金山屯区", - "230710": "五营区", - "230711": "乌马河区", - "230712": "汤旺河区", - "230713": "带岭区", - "230714": "乌伊岭区", - "230715": "红星区", - "230716": "上甘岭区", - "230722": "嘉荫县", - "230781": "铁力市", - "230803": "向阳区", - "230804": "前进区", - "230805": "东风区", - "230811": "郊区", - "230822": "桦南县", - "230826": "桦川县", - "230828": "汤原县", - "230833": "抚远县", - "230881": "同江市", - "230882": "富锦市", - "230902": "新兴区", - "230903": "桃山区", - "230904": "茄子河区", - "230921": "勃利县", - "231002": "东安区", - "231003": "阳明区", - "231004": "爱民区", - "231005": "西安区", - "231024": "东宁县", - "231025": "林口县", - "231081": "绥芬河市", - "231083": "海林市", - "231084": "宁安市", - "231085": "穆棱市", - "231102": "爱辉区", - "231121": "嫩江县", - "231123": "逊克县", - "231124": "孙吴县", - "231181": "北安市", - "231182": "五大连池市", - "231202": "北林区", - "231221": "望奎县", - "231222": "兰西县", - "231223": "青冈县", - "231224": "庆安县", - "231225": "明水县", - "231226": "绥棱县", - "231281": "安达市", - "231282": "肇东市", - "231283": "海伦市", - "232721": "呼玛县", - "232722": "塔河县", - "232723": "漠河县", - "232790": "松岭区", - "232791": "呼中区", - "232792": "加格达奇区", - "232793": "新林区", - "264290": "威海临港经济技术开发区", - "310101": "黄浦区", - "310104": "徐汇区", - "310105": "长宁区", - "310106": "静安区", - "310107": "普陀区", - "310108": "闸北区", - "310109": "虹口区", - "310110": "杨浦区", - "310112": "闵行区", - "310113": "宝山区", - "310114": "嘉定区", - "310115": "浦东新区", - "310116": "金山区", - "310117": "松江区", - "310118": "青浦区", - "310120": "奉贤区", - "310230": "崇明县", - "320102": "玄武区", - "320104": "秦淮区", - "320105": "建邺区", - "320106": "鼓楼区", - "320111": "浦口区", - "320113": "栖霞区", - "320114": "雨花台区", - "320115": "江宁区", - "320116": "六合区", - "320117": "溧水区", - "320118": "高淳区", - "320202": "崇安区", - "320203": "南长区", - "320204": "北塘区", - "320205": "锡山区", - "320206": "惠山区", - "320211": "滨湖区", - "320281": "江阴市", - "320282": "宜兴市", - "320290": "新区", - "320302": "鼓楼区", - "320303": "云龙区", - "320305": "贾汪区", - "320311": "泉山区", - "320312": "铜山区", - "320321": "丰县", - "320322": "沛县", - "320324": "睢宁县", - "320381": "新沂市", - "320382": "邳州市", - "320390": "金山桥开发区", - "320391": "工业园区", - "320402": "天宁区", - "320404": "钟楼区", - "320411": "新北区", - "320412": "武进区", - "320413": "金坛区", - "320481": "溧阳市", - "320505": "虎丘区", - "320506": "吴中区", - "320507": "相城区", - "320508": "姑苏区", - "320509": "吴江区", - "320581": "常熟市", - "320582": "张家港市", - "320583": "昆山市", - "320585": "太仓市", - "320590": "工业园区", - "320591": "高新区", - "320602": "崇川区", - "320611": "港闸区", - "320612": "通州区", - "320621": "海安县", - "320623": "如东县", - "320681": "启东市", - "320682": "如皋市", - "320684": "海门市", - "320690": "南通经济技术开发区", - "320691": "高新区", - "320703": "连云区", - "320706": "海州区", - "320707": "赣榆区", - "320722": "东海县", - "320723": "灌云县", - "320724": "灌南县", - "320802": "清河区", - "320803": "淮安区", - "320804": "淮阴区", - "320811": "清浦区", - "320826": "涟水县", - "320829": "洪泽县", - "320830": "盱眙县", - "320831": "金湖县", - "320890": "经济开发区", - "320902": "亭湖区", - "320903": "盐都区", - "320904": "大丰区", - "320921": "响水县", - "320922": "滨海县", - "320923": "阜宁县", - "320924": "射阳县", - "320925": "建湖县", - "320981": "东台市", - "321002": "广陵区", - "321003": "邗江区", - "321012": "江都区", - "321023": "宝应县", - "321081": "仪征市", - "321084": "高邮市", - "321090": "经济开发区", - "321102": "京口区", - "321111": "润州区", - "321112": "丹徒区", - "321181": "丹阳市", - "321182": "扬中市", - "321183": "句容市", - "321202": "海陵区", - "321203": "高港区", - "321204": "姜堰区", - "321281": "兴化市", - "321282": "靖江市", - "321283": "泰兴市", - "321302": "宿城区", - "321311": "宿豫区", - "321322": "沭阳县", - "321323": "泗阳县", - "321324": "泗洪县", - "321390": "宿迁经济开发区", - "330102": "上城区", - "330103": "下城区", - "330104": "江干区", - "330105": "拱墅区", - "330106": "西湖区", - "330108": "滨江区", - "330109": "萧山区", - "330110": "余杭区", - "330111": "富阳区", - "330122": "桐庐县", - "330127": "淳安县", - "330182": "建德市", - "330185": "临安市", - "330203": "海曙区", - "330204": "江东区", - "330205": "江北区", - "330206": "北仑区", - "330211": "镇海区", - "330212": "鄞州区", - "330225": "象山县", - "330226": "宁海县", - "330281": "余姚市", - "330282": "慈溪市", - "330283": "奉化市", - "330290": "高新科技开发区", - "330302": "鹿城区", - "330303": "龙湾区", - "330304": "瓯海区", - "330305": "洞头区", - "330324": "永嘉县", - "330326": "平阳县", - "330327": "苍南县", - "330328": "文成县", - "330329": "泰顺县", - "330381": "瑞安市", - "330382": "乐清市", - "330402": "南湖区", - "330411": "秀洲区", - "330421": "嘉善县", - "330424": "海盐县", - "330481": "海宁市", - "330482": "平湖市", - "330483": "桐乡市", - "330502": "吴兴区", - "330503": "南浔区", - "330521": "德清县", - "330522": "长兴县", - "330523": "安吉县", - "330602": "越城区", - "330603": "柯桥区", - "330604": "上虞区", - "330624": "新昌县", - "330681": "诸暨市", - "330683": "嵊州市", - "330702": "婺城区", - "330703": "金东区", - "330723": "武义县", - "330726": "浦江县", - "330727": "磐安县", - "330781": "兰溪市", - "330782": "义乌市", - "330783": "东阳市", - "330784": "永康市", - "330802": "柯城区", - "330803": "衢江区", - "330822": "常山县", - "330824": "开化县", - "330825": "龙游县", - "330881": "江山市", - "330902": "定海区", - "330903": "普陀区", - "330921": "岱山县", - "330922": "嵊泗县", - "331002": "椒江区", - "331003": "黄岩区", - "331004": "路桥区", - "331021": "玉环县", - "331022": "三门县", - "331023": "天台县", - "331024": "仙居县", - "331081": "温岭市", - "331082": "临海市", - "331102": "莲都区", - "331121": "青田县", - "331122": "缙云县", - "331123": "遂昌县", - "331124": "松阳县", - "331125": "云和县", - "331126": "庆元县", - "331127": "景宁畲族自治县", - "331181": "龙泉市", - "340102": "瑶海区", - "340103": "庐阳区", - "340104": "蜀山区", - "340111": "包河区", - "340121": "长丰县", - "340122": "肥东县", - "340123": "肥西县", - "340124": "庐江县", - "340181": "巢湖市", - "340190": "高新技术开发区", - "340191": "经济技术开发区", - "340192": "北城新区", - "340193": "政务文化新区", - "340194": "滨湖新区", - "340195": "新站高新区", - "340202": "镜湖区", - "340203": "弋江区", - "340207": "鸠江区", - "340208": "三山区", - "340221": "芜湖县", - "340222": "繁昌县", - "340223": "南陵县", - "340225": "无为县", - "340302": "龙子湖区", - "340303": "蚌山区", - "340304": "禹会区", - "340311": "淮上区", - "340321": "怀远县", - "340322": "五河县", - "340323": "固镇县", - "340402": "大通区", - "340403": "田家庵区", - "340404": "谢家集区", - "340405": "八公山区", - "340406": "潘集区", - "340421": "凤台县", - "340490": "淮南高新技术产业开发区", - "340503": "花山区", - "340504": "雨山区", - "340506": "博望区", - "340521": "当涂县", - "340522": "含山县", - "340523": "和县", - "340602": "杜集区", - "340603": "相山区", - "340604": "烈山区", - "340621": "濉溪县", - "340702": "铜官山区", - "340703": "狮子山区", - "340711": "郊区", - "340721": "铜陵县", - "340802": "迎江区", - "340803": "大观区", - "340811": "宜秀区", - "340822": "怀宁县", - "340823": "枞阳县", - "340824": "潜山县", - "340825": "太湖县", - "340826": "宿松县", - "340827": "望江县", - "340828": "岳西县", - "340881": "桐城市", - "340890": "安庆经济技术开发区", - "341002": "屯溪区", - "341003": "黄山区", - "341004": "徽州区", - "341021": "歙县", - "341022": "休宁县", - "341023": "黟县", - "341024": "祁门县", - "341102": "琅琊区", - "341103": "南谯区", - "341122": "来安县", - "341124": "全椒县", - "341125": "定远县", - "341126": "凤阳县", - "341181": "天长市", - "341182": "明光市", - "341202": "颍州区", - "341203": "颍东区", - "341204": "颍泉区", - "341221": "临泉县", - "341222": "太和县", - "341225": "阜南县", - "341226": "颍上县", - "341282": "界首市", - "341290": "阜阳经济技术开发区", - "341302": "埇桥区", - "341321": "砀山县", - "341322": "萧县", - "341323": "灵璧县", - "341324": "泗县", - "341390": "经济开发区", - "341502": "金安区", - "341503": "裕安区", - "341521": "寿县", - "341522": "霍邱县", - "341523": "舒城县", - "341524": "金寨县", - "341525": "霍山县", - "341602": "谯城区", - "341621": "涡阳县", - "341622": "蒙城县", - "341623": "利辛县", - "341702": "贵池区", - "341721": "东至县", - "341722": "石台县", - "341723": "青阳县", - "341802": "宣州区", - "341821": "郎溪县", - "341822": "广德县", - "341823": "泾县", - "341824": "绩溪县", - "341825": "旌德县", - "341881": "宁国市", - "350102": "鼓楼区", - "350103": "台江区", - "350104": "仓山区", - "350105": "马尾区", - "350111": "晋安区", - "350121": "闽侯县", - "350122": "连江县", - "350123": "罗源县", - "350124": "闽清县", - "350125": "永泰县", - "350128": "平潭县", - "350181": "福清市", - "350182": "长乐市", - "350203": "思明区", - "350205": "海沧区", - "350206": "湖里区", - "350211": "集美区", - "350212": "同安区", - "350213": "翔安区", - "350302": "城厢区", - "350303": "涵江区", - "350304": "荔城区", - "350305": "秀屿区", - "350322": "仙游县", - "350402": "梅列区", - "350403": "三元区", - "350421": "明溪县", - "350423": "清流县", - "350424": "宁化县", - "350425": "大田县", - "350426": "尤溪县", - "350427": "沙县", - "350428": "将乐县", - "350429": "泰宁县", - "350430": "建宁县", - "350481": "永安市", - "350502": "鲤城区", - "350503": "丰泽区", - "350504": "洛江区", - "350505": "泉港区", - "350521": "惠安县", - "350524": "安溪县", - "350525": "永春县", - "350526": "德化县", - "350527": "金门县", - "350581": "石狮市", - "350582": "晋江市", - "350583": "南安市", - "350602": "芗城区", - "350603": "龙文区", - "350622": "云霄县", - "350623": "漳浦县", - "350624": "诏安县", - "350625": "长泰县", - "350626": "东山县", - "350627": "南靖县", - "350628": "平和县", - "350629": "华安县", - "350681": "龙海市", - "350702": "延平区", - "350703": "建阳区", - "350721": "顺昌县", - "350722": "浦城县", - "350723": "光泽县", - "350724": "松溪县", - "350725": "政和县", - "350781": "邵武市", - "350782": "武夷山市", - "350783": "建瓯市", - "350802": "新罗区", - "350803": "永定区", - "350821": "长汀县", - "350823": "上杭县", - "350824": "武平县", - "350825": "连城县", - "350881": "漳平市", - "350902": "蕉城区", - "350921": "霞浦县", - "350922": "古田县", - "350923": "屏南县", - "350924": "寿宁县", - "350925": "周宁县", - "350926": "柘荣县", - "350981": "福安市", - "350982": "福鼎市", - "350990": "东侨开发区", - "360102": "东湖区", - "360103": "西湖区", - "360104": "青云谱区", - "360105": "湾里区", - "360111": "青山湖区", - "360112": "新建区", - "360121": "南昌县", - "360123": "安义县", - "360124": "进贤县", - "360190": "经济技术开发区", - "360191": "红谷滩新区", - "360192": "高新区", - "360202": "昌江区", - "360203": "珠山区", - "360222": "浮梁县", - "360281": "乐平市", - "360302": "安源区", - "360313": "湘东区", - "360321": "莲花县", - "360322": "上栗县", - "360323": "芦溪县", - "360402": "庐山区", - "360403": "浔阳区", - "360421": "九江县", - "360423": "武宁县", - "360424": "修水县", - "360425": "永修县", - "360426": "德安县", - "360427": "星子县", - "360428": "都昌县", - "360429": "湖口县", - "360430": "彭泽县", - "360481": "瑞昌市", - "360482": "共青城市", - "360490": "经济技术开发区", - "360491": "八里湖新区", - "360502": "渝水区", - "360521": "分宜县", - "360602": "月湖区", - "360622": "余江县", - "360681": "贵溪市", - "360702": "章贡区", - "360703": "南康区", - "360721": "赣县", - "360722": "信丰县", - "360723": "大余县", - "360724": "上犹县", - "360725": "崇义县", - "360726": "安远县", - "360727": "龙南县", - "360728": "定南县", - "360729": "全南县", - "360730": "宁都县", - "360731": "于都县", - "360732": "兴国县", - "360733": "会昌县", - "360734": "寻乌县", - "360735": "石城县", - "360781": "瑞金市", - "360802": "吉州区", - "360803": "青原区", - "360821": "吉安县", - "360822": "吉水县", - "360823": "峡江县", - "360824": "新干县", - "360825": "永丰县", - "360826": "泰和县", - "360827": "遂川县", - "360828": "万安县", - "360829": "安福县", - "360830": "永新县", - "360881": "井冈山市", - "360902": "袁州区", - "360921": "奉新县", - "360922": "万载县", - "360923": "上高县", - "360924": "宜丰县", - "360925": "靖安县", - "360926": "铜鼓县", - "360981": "丰城市", - "360982": "樟树市", - "360983": "高安市", - "361002": "临川区", - "361021": "南城县", - "361022": "黎川县", - "361023": "南丰县", - "361024": "崇仁县", - "361025": "乐安县", - "361026": "宜黄县", - "361027": "金溪县", - "361028": "资溪县", - "361029": "东乡县", - "361030": "广昌县", - "361102": "信州区", - "361103": "广丰区", - "361121": "上饶县", - "361123": "玉山县", - "361124": "铅山县", - "361125": "横峰县", - "361126": "弋阳县", - "361127": "余干县", - "361128": "鄱阳县", - "361129": "万年县", - "361130": "婺源县", - "361181": "德兴市", - "370102": "历下区", - "370103": "市中区", - "370104": "槐荫区", - "370105": "天桥区", - "370112": "历城区", - "370113": "长清区", - "370124": "平阴县", - "370125": "济阳县", - "370126": "商河县", - "370181": "章丘市", - "370190": "高新区", - "370202": "市南区", - "370203": "市北区", - "370211": "黄岛区", - "370212": "崂山区", - "370213": "李沧区", - "370214": "城阳区", - "370281": "胶州市", - "370282": "即墨市", - "370283": "平度市", - "370285": "莱西市", - "370290": "开发区", - "370302": "淄川区", - "370303": "张店区", - "370304": "博山区", - "370305": "临淄区", - "370306": "周村区", - "370321": "桓台县", - "370322": "高青县", - "370323": "沂源县", - "370402": "市中区", - "370403": "薛城区", - "370404": "峄城区", - "370405": "台儿庄区", - "370406": "山亭区", - "370481": "滕州市", - "370502": "东营区", - "370503": "河口区", - "370521": "垦利县", - "370522": "利津县", - "370523": "广饶县", - "370602": "芝罘区", - "370611": "福山区", - "370612": "牟平区", - "370613": "莱山区", - "370634": "长岛县", - "370681": "龙口市", - "370682": "莱阳市", - "370683": "莱州市", - "370684": "蓬莱市", - "370685": "招远市", - "370686": "栖霞市", - "370687": "海阳市", - "370690": "开发区", - "370702": "潍城区", - "370703": "寒亭区", - "370704": "坊子区", - "370705": "奎文区", - "370724": "临朐县", - "370725": "昌乐县", - "370781": "青州市", - "370782": "诸城市", - "370783": "寿光市", - "370784": "安丘市", - "370785": "高密市", - "370786": "昌邑市", - "370790": "开发区", - "370791": "高新区", - "370811": "任城区", - "370812": "兖州区", - "370826": "微山县", - "370827": "鱼台县", - "370828": "金乡县", - "370829": "嘉祥县", - "370830": "汶上县", - "370831": "泗水县", - "370832": "梁山县", - "370881": "曲阜市", - "370883": "邹城市", - "370890": "高新区", - "370902": "泰山区", - "370911": "岱岳区", - "370921": "宁阳县", - "370923": "东平县", - "370982": "新泰市", - "370983": "肥城市", - "371002": "环翠区", - "371003": "文登区", - "371082": "荣成市", - "371083": "乳山市", - "371090": "工业新区", - "371091": "经济技术开发区", - "371102": "东港区", - "371103": "岚山区", - "371121": "五莲县", - "371122": "莒县", - "371202": "莱城区", - "371203": "钢城区", - "371302": "兰山区", - "371311": "罗庄区", - "371312": "河东区", - "371321": "沂南县", - "371322": "郯城县", - "371323": "沂水县", - "371324": "兰陵县", - "371325": "费县", - "371326": "平邑县", - "371327": "莒南县", - "371328": "蒙阴县", - "371329": "临沭县", - "371402": "德城区", - "371403": "陵城区", - "371422": "宁津县", - "371423": "庆云县", - "371424": "临邑县", - "371425": "齐河县", - "371426": "平原县", - "371427": "夏津县", - "371428": "武城县", - "371481": "乐陵市", - "371482": "禹城市", - "371490": "德州经济技术开发区", - "371502": "东昌府区", - "371521": "阳谷县", - "371522": "莘县", - "371523": "茌平县", - "371524": "东阿县", - "371525": "冠县", - "371526": "高唐县", - "371581": "临清市", - "371602": "滨城区", - "371603": "沾化区", - "371621": "惠民县", - "371622": "阳信县", - "371623": "无棣县", - "371625": "博兴县", - "371626": "邹平县", - "371690": "北海新区", - "371702": "牡丹区", - "371721": "曹县", - "371722": "单县", - "371723": "成武县", - "371724": "巨野县", - "371725": "郓城县", - "371726": "鄄城县", - "371727": "定陶县", - "371728": "东明县", - "410102": "中原区", - "410103": "二七区", - "410104": "管城回族区", - "410105": "金水区", - "410106": "上街区", - "410108": "惠济区", - "410122": "中牟县", - "410181": "巩义市", - "410182": "荥阳市", - "410183": "新密市", - "410184": "新郑市", - "410185": "登封市", - "410190": "高新技术开发区", - "410191": "经济技术开发区", - "410192": "郑东新区", - "410202": "龙亭区", - "410203": "顺河回族区", - "410204": "鼓楼区", - "410205": "禹王台区", - "410211": "金明区", - "410212": "祥符区", - "410221": "杞县", - "410222": "通许县", - "410223": "尉氏县", - "410225": "兰考县", - "410302": "老城区", - "410303": "西工区", - "410304": "瀍河回族区", - "410305": "涧西区", - "410306": "吉利区", - "410311": "洛龙区", - "410322": "孟津县", - "410323": "新安县", - "410324": "栾川县", - "410325": "嵩县", - "410326": "汝阳县", - "410327": "宜阳县", - "410328": "洛宁县", - "410329": "伊川县", - "410381": "偃师市", - "410390": "伊滨区", - "410402": "新华区", - "410403": "卫东区", - "410404": "石龙区", - "410411": "湛河区", - "410421": "宝丰县", - "410422": "叶县", - "410423": "鲁山县", - "410425": "郏县", - "410481": "舞钢市", - "410482": "汝州市", - "410502": "文峰区", - "410503": "北关区", - "410505": "殷都区", - "410506": "龙安区", - "410522": "安阳县", - "410523": "汤阴县", - "410526": "滑县", - "410527": "内黄县", - "410581": "林州市", - "410590": "开发区", - "410602": "鹤山区", - "410603": "山城区", - "410611": "淇滨区", - "410621": "浚县", - "410622": "淇县", - "410702": "红旗区", - "410703": "卫滨区", - "410704": "凤泉区", - "410711": "牧野区", - "410721": "新乡县", - "410724": "获嘉县", - "410725": "原阳县", - "410726": "延津县", - "410727": "封丘县", - "410728": "长垣县", - "410781": "卫辉市", - "410782": "辉县市", - "410802": "解放区", - "410803": "中站区", - "410804": "马村区", - "410811": "山阳区", - "410821": "修武县", - "410822": "博爱县", - "410823": "武陟县", - "410825": "温县", - "410882": "沁阳市", - "410883": "孟州市", - "410902": "华龙区", - "410922": "清丰县", - "410923": "南乐县", - "410926": "范县", - "410927": "台前县", - "410928": "濮阳县", - "411002": "魏都区", - "411023": "许昌县", - "411024": "鄢陵县", - "411025": "襄城县", - "411081": "禹州市", - "411082": "长葛市", - "411102": "源汇区", - "411103": "郾城区", - "411104": "召陵区", - "411121": "舞阳县", - "411122": "临颍县", - "411202": "湖滨区", - "411221": "渑池县", - "411222": "陕县", - "411224": "卢氏县", - "411281": "义马市", - "411282": "灵宝市", - "411302": "宛城区", - "411303": "卧龙区", - "411321": "南召县", - "411322": "方城县", - "411323": "西峡县", - "411324": "镇平县", - "411325": "内乡县", - "411326": "淅川县", - "411327": "社旗县", - "411328": "唐河县", - "411329": "新野县", - "411330": "桐柏县", - "411381": "邓州市", - "411402": "梁园区", - "411403": "睢阳区", - "411421": "民权县", - "411422": "睢县", - "411423": "宁陵县", - "411424": "柘城县", - "411425": "虞城县", - "411426": "夏邑县", - "411481": "永城市", - "411502": "浉河区", - "411503": "平桥区", - "411521": "罗山县", - "411522": "光山县", - "411523": "新县", - "411524": "商城县", - "411525": "固始县", - "411526": "潢川县", - "411527": "淮滨县", - "411528": "息县", - "411602": "川汇区", - "411621": "扶沟县", - "411622": "西华县", - "411623": "商水县", - "411624": "沈丘县", - "411625": "郸城县", - "411626": "淮阳县", - "411627": "太康县", - "411628": "鹿邑县", - "411681": "项城市", - "411690": "经济开发区", - "411691": "东新区", - "411702": "驿城区", - "411721": "西平县", - "411722": "上蔡县", - "411723": "平舆县", - "411724": "正阳县", - "411725": "确山县", - "411726": "泌阳县", - "411727": "汝南县", - "411728": "遂平县", - "411729": "新蔡县", - "419001": "济源市", - "420102": "江岸区", - "420103": "江汉区", - "420104": "硚口区", - "420105": "汉阳区", - "420106": "武昌区", - "420107": "青山区", - "420111": "洪山区", - "420112": "东西湖区", - "420113": "汉南区", - "420114": "蔡甸区", - "420115": "江夏区", - "420116": "黄陂区", - "420117": "新洲区", - "420190": "武汉经济技术开发区", - "420202": "黄石港区", - "420203": "西塞山区", - "420204": "下陆区", - "420205": "铁山区", - "420222": "阳新县", - "420281": "大冶市", - "420290": "黄石经济技术开发区", - "420302": "茅箭区", - "420303": "张湾区", - "420304": "郧阳区", - "420322": "郧西县", - "420323": "竹山县", - "420324": "竹溪县", - "420325": "房县", - "420381": "丹江口市", - "420502": "西陵区", - "420503": "伍家岗区", - "420504": "点军区", - "420505": "猇亭区", - "420506": "夷陵区", - "420525": "远安县", - "420526": "兴山县", - "420527": "秭归县", - "420528": "长阳土家族自治县", - "420529": "五峰土家族自治县", - "420581": "宜都市", - "420582": "当阳市", - "420583": "枝江市", - "420590": "经济开发区", - "420602": "襄城区", - "420606": "樊城区", - "420607": "襄州区", - "420624": "南漳县", - "420625": "谷城县", - "420626": "保康县", - "420682": "老河口市", - "420683": "枣阳市", - "420684": "宜城市", - "420702": "梁子湖区", - "420703": "华容区", - "420704": "鄂城区", - "420802": "东宝区", - "420804": "掇刀区", - "420821": "京山县", - "420822": "沙洋县", - "420881": "钟祥市", - "420902": "孝南区", - "420921": "孝昌县", - "420922": "大悟县", - "420923": "云梦县", - "420981": "应城市", - "420982": "安陆市", - "420984": "汉川市", - "421002": "沙市区", - "421003": "荆州区", - "421022": "公安县", - "421023": "监利县", - "421024": "江陵县", - "421081": "石首市", - "421083": "洪湖市", - "421087": "松滋市", - "421102": "黄州区", - "421121": "团风县", - "421122": "红安县", - "421123": "罗田县", - "421124": "英山县", - "421125": "浠水县", - "421126": "蕲春县", - "421127": "黄梅县", - "421181": "麻城市", - "421182": "武穴市", - "421202": "咸安区", - "421221": "嘉鱼县", - "421222": "通城县", - "421223": "崇阳县", - "421224": "通山县", - "421281": "赤壁市", - "421303": "曾都区", - "421321": "随县", - "421381": "广水市", - "422801": "恩施市", - "422802": "利川市", - "422822": "建始县", - "422823": "巴东县", - "422825": "宣恩县", - "422826": "咸丰县", - "422827": "来凤县", - "422828": "鹤峰县", - "429004": "仙桃市", - "429005": "潜江市", - "429006": "天门市", - "429021": "神农架林区", - "430102": "芙蓉区", - "430103": "天心区", - "430104": "岳麓区", - "430105": "开福区", - "430111": "雨花区", - "430112": "望城区", - "430121": "长沙县", - "430124": "宁乡县", - "430181": "浏阳市", - "430202": "荷塘区", - "430203": "芦淞区", - "430204": "石峰区", - "430211": "天元区", - "430221": "株洲县", - "430223": "攸县", - "430224": "茶陵县", - "430225": "炎陵县", - "430281": "醴陵市", - "430302": "雨湖区", - "430304": "岳塘区", - "430321": "湘潭县", - "430381": "湘乡市", - "430382": "韶山市", - "430405": "珠晖区", - "430406": "雁峰区", - "430407": "石鼓区", - "430408": "蒸湘区", - "430412": "南岳区", - "430421": "衡阳县", - "430422": "衡南县", - "430423": "衡山县", - "430424": "衡东县", - "430426": "祁东县", - "430481": "耒阳市", - "430482": "常宁市", - "430502": "双清区", - "430503": "大祥区", - "430511": "北塔区", - "430521": "邵东县", - "430522": "新邵县", - "430523": "邵阳县", - "430524": "隆回县", - "430525": "洞口县", - "430527": "绥宁县", - "430528": "新宁县", - "430529": "城步苗族自治县", - "430581": "武冈市", - "430602": "岳阳楼区", - "430603": "云溪区", - "430611": "君山区", - "430621": "岳阳县", - "430623": "华容县", - "430624": "湘阴县", - "430626": "平江县", - "430681": "汨罗市", - "430682": "临湘市", - "430702": "武陵区", - "430703": "鼎城区", - "430721": "安乡县", - "430722": "汉寿县", - "430723": "澧县", - "430724": "临澧县", - "430725": "桃源县", - "430726": "石门县", - "430781": "津市市", - "430802": "永定区", - "430811": "武陵源区", - "430821": "慈利县", - "430822": "桑植县", - "430902": "资阳区", - "430903": "赫山区", - "430921": "南县", - "430922": "桃江县", - "430923": "安化县", - "430981": "沅江市", - "431002": "北湖区", - "431003": "苏仙区", - "431021": "桂阳县", - "431022": "宜章县", - "431023": "永兴县", - "431024": "嘉禾县", - "431025": "临武县", - "431026": "汝城县", - "431027": "桂东县", - "431028": "安仁县", - "431081": "资兴市", - "431102": "零陵区", - "431103": "冷水滩区", - "431121": "祁阳县", - "431122": "东安县", - "431123": "双牌县", - "431124": "道县", - "431125": "江永县", - "431126": "宁远县", - "431127": "蓝山县", - "431128": "新田县", - "431129": "江华瑶族自治县", - "431202": "鹤城区", - "431221": "中方县", - "431222": "沅陵县", - "431223": "辰溪县", - "431224": "溆浦县", - "431225": "会同县", - "431226": "麻阳苗族自治县", - "431227": "新晃侗族自治县", - "431228": "芷江侗族自治县", - "431229": "靖州苗族侗族自治县", - "431230": "通道侗族自治县", - "431281": "洪江市", - "431302": "娄星区", - "431321": "双峰县", - "431322": "新化县", - "431381": "冷水江市", - "431382": "涟源市", - "433101": "吉首市", - "433122": "泸溪县", - "433123": "凤凰县", - "433124": "花垣县", - "433125": "保靖县", - "433126": "古丈县", - "433127": "永顺县", - "433130": "龙山县", - "440103": "荔湾区", - "440104": "越秀区", - "440105": "海珠区", - "440106": "天河区", - "440111": "白云区", - "440112": "黄埔区", - "440113": "番禺区", - "440114": "花都区", - "440115": "南沙区", - "440117": "从化区", - "440118": "增城区", - "440203": "武江区", - "440204": "浈江区", - "440205": "曲江区", - "440222": "始兴县", - "440224": "仁化县", - "440229": "翁源县", - "440232": "乳源瑶族自治县", - "440233": "新丰县", - "440281": "乐昌市", - "440282": "南雄市", - "440303": "罗湖区", - "440304": "福田区", - "440305": "南山区", - "440306": "宝安区", - "440307": "龙岗区", - "440308": "盐田区", - "440390": "坪山新区", - "440391": "光明新区", - "440392": "大鹏新区", - "440393": "龙华新区", - "440402": "香洲区", - "440403": "斗门区", - "440404": "金湾区", - "440507": "龙湖区", - "440511": "金平区", - "440512": "濠江区", - "440513": "潮阳区", - "440514": "潮南区", - "440515": "澄海区", - "440523": "南澳县", - "440604": "禅城区", - "440605": "南海区", - "440606": "顺德区", - "440607": "三水区", - "440608": "高明区", - "440703": "蓬江区", - "440704": "江海区", - "440705": "新会区", - "440781": "台山市", - "440783": "开平市", - "440784": "鹤山市", - "440785": "恩平市", - "440802": "赤坎区", - "440803": "霞山区", - "440804": "坡头区", - "440811": "麻章区", - "440823": "遂溪县", - "440825": "徐闻县", - "440881": "廉江市", - "440882": "雷州市", - "440883": "吴川市", - "440890": "经济技术开发区", - "440902": "茂南区", - "440904": "电白区", - "440981": "高州市", - "440982": "化州市", - "440983": "信宜市", - "441202": "端州区", - "441203": "鼎湖区", - "441204": "高要区", - "441223": "广宁县", - "441224": "怀集县", - "441225": "封开县", - "441226": "德庆县", - "441284": "四会市", - "441302": "惠城区", - "441303": "惠阳区", - "441322": "博罗县", - "441323": "惠东县", - "441324": "龙门县", - "441402": "梅江区", - "441403": "梅县区", - "441422": "大埔县", - "441423": "丰顺县", - "441424": "五华县", - "441426": "平远县", - "441427": "蕉岭县", - "441481": "兴宁市", - "441502": "城区", - "441521": "海丰县", - "441523": "陆河县", - "441581": "陆丰市", - "441602": "源城区", - "441621": "紫金县", - "441622": "龙川县", - "441623": "连平县", - "441624": "和平县", - "441625": "东源县", - "441702": "江城区", - "441704": "阳东区", - "441721": "阳西县", - "441781": "阳春市", - "441802": "清城区", - "441803": "清新区", - "441821": "佛冈县", - "441823": "阳山县", - "441825": "连山壮族瑶族自治县", - "441826": "连南瑶族自治县", - "441881": "英德市", - "441882": "连州市", - "441901": "中堂镇", - "441903": "南城区", - "441904": "长安镇", - "441905": "东坑镇", - "441906": "樟木头镇", - "441907": "莞城区", - "441908": "石龙镇", - "441909": "桥头镇", - "441910": "万江区", - "441911": "麻涌镇", - "441912": "虎门镇", - "441913": "谢岗镇", - "441914": "石碣镇", - "441915": "茶山镇", - "441916": "东城区", - "441917": "洪梅镇", - "441918": "道滘镇", - "441919": "高埗镇", - "441920": "企石镇", - "441921": "凤岗镇", - "441922": "大岭山镇", - "441923": "松山湖", - "441924": "清溪镇", - "441925": "望牛墩镇", - "441926": "厚街镇", - "441927": "常平镇", - "441928": "寮步镇", - "441929": "石排镇", - "441930": "横沥镇", - "441931": "塘厦镇", - "441932": "黄江镇", - "441933": "大朗镇", - "441990": "沙田镇", - "442001": "南头镇", - "442002": "神湾镇", - "442003": "东凤镇", - "442004": "五桂山镇", - "442005": "黄圃镇", - "442006": "小榄镇", - "442007": "石岐区街道", - "442008": "横栏镇", - "442009": "三角镇", - "442010": "三乡镇", - "442011": "港口镇", - "442012": "沙溪镇", - "442013": "板芙镇", - "442014": "沙朗镇", - "442015": "东升镇", - "442016": "阜沙镇", - "442017": "民众镇", - "442018": "东区街道", - "442019": "火炬开发区", - "442020": "西区街道", - "442021": "南区街道", - "442022": "古镇", - "442023": "坦洲镇", - "442024": "大涌镇", - "442025": "南朗镇", - "445102": "湘桥区", - "445103": "潮安区", - "445122": "饶平县", - "445190": "枫溪区", - "445202": "榕城区", - "445203": "揭东区", - "445222": "揭西县", - "445224": "惠来县", - "445281": "普宁市", - "445302": "云城区", - "445303": "云安区", - "445321": "新兴县", - "445322": "郁南县", - "445381": "罗定市", - "450102": "兴宁区", - "450103": "青秀区", - "450105": "江南区", - "450107": "西乡塘区", - "450108": "良庆区", - "450109": "邕宁区", - "450110": "武鸣区", - "450123": "隆安县", - "450124": "马山县", - "450125": "上林县", - "450126": "宾阳县", - "450127": "横县", - "450202": "城中区", - "450203": "鱼峰区", - "450204": "柳南区", - "450205": "柳北区", - "450221": "柳江县", - "450222": "柳城县", - "450223": "鹿寨县", - "450224": "融安县", - "450225": "融水苗族自治县", - "450226": "三江侗族自治县", - "450302": "秀峰区", - "450303": "叠彩区", - "450304": "象山区", - "450305": "七星区", - "450311": "雁山区", - "450312": "临桂区", - "450321": "阳朔县", - "450323": "灵川县", - "450324": "全州县", - "450325": "兴安县", - "450326": "永福县", - "450327": "灌阳县", - "450328": "龙胜各族自治县", - "450329": "资源县", - "450330": "平乐县", - "450331": "荔浦县", - "450332": "恭城瑶族自治县", - "450403": "万秀区", - "450405": "长洲区", - "450406": "龙圩区", - "450421": "苍梧县", - "450422": "藤县", - "450423": "蒙山县", - "450481": "岑溪市", - "450502": "海城区", - "450503": "银海区", - "450512": "铁山港区", - "450521": "合浦县", - "450602": "港口区", - "450603": "防城区", - "450621": "上思县", - "450681": "东兴市", - "450702": "钦南区", - "450703": "钦北区", - "450721": "灵山县", - "450722": "浦北县", - "450802": "港北区", - "450803": "港南区", - "450804": "覃塘区", - "450821": "平南县", - "450881": "桂平市", - "450902": "玉州区", - "450903": "福绵区", - "450921": "容县", - "450922": "陆川县", - "450923": "博白县", - "450924": "兴业县", - "450981": "北流市", - "451002": "右江区", - "451021": "田阳县", - "451022": "田东县", - "451023": "平果县", - "451024": "德保县", - "451026": "那坡县", - "451027": "凌云县", - "451028": "乐业县", - "451029": "田林县", - "451030": "西林县", - "451031": "隆林各族自治县", - "451081": "靖西市", - "451102": "八步区", - "451121": "昭平县", - "451122": "钟山县", - "451123": "富川瑶族自治县", - "451202": "金城江区", - "451221": "南丹县", - "451222": "天峨县", - "451223": "凤山县", - "451224": "东兰县", - "451225": "罗城仫佬族自治县", - "451226": "环江毛南族自治县", - "451227": "巴马瑶族自治县", - "451228": "都安瑶族自治县", - "451229": "大化瑶族自治县", - "451281": "宜州市", - "451302": "兴宾区", - "451321": "忻城县", - "451322": "象州县", - "451323": "武宣县", - "451324": "金秀瑶族自治县", - "451381": "合山市", - "451402": "江州区", - "451421": "扶绥县", - "451422": "宁明县", - "451423": "龙州县", - "451424": "大新县", - "451425": "天等县", - "451481": "凭祥市", - "460105": "秀英区", - "460106": "龙华区", - "460107": "琼山区", - "460108": "美兰区", - "460202": "海棠区", - "460203": "吉阳区", - "460204": "天涯区", - "460205": "崖州区", - "460321": "西沙群岛", - "460322": "南沙群岛", - "460323": "中沙群岛的岛礁及其海域", - "469001": "五指山市", - "469002": "琼海市", - "469003": "儋州市", - "469005": "文昌市", - "469006": "万宁市", - "469007": "东方市", - "469021": "定安县", - "469022": "屯昌县", - "469023": "澄迈县", - "469024": "临高县", - "469025": "白沙黎族自治县", - "469026": "昌江黎族自治县", - "469027": "乐东黎族自治县", - "469028": "陵水黎族自治县", - "469029": "保亭黎族苗族自治县", - "469030": "琼中黎族苗族自治县", - "500101": "万州区", - "500102": "涪陵区", - "500103": "渝中区", - "500104": "大渡口区", - "500105": "江北区", - "500106": "沙坪坝区", - "500107": "九龙坡区", - "500108": "南岸区", - "500109": "北碚区", - "500110": "綦江区", - "500111": "大足区", - "500112": "渝北区", - "500113": "巴南区", - "500114": "黔江区", - "500115": "长寿区", - "500116": "江津区", - "500117": "合川区", - "500118": "永川区", - "500119": "南川区", - "500120": "璧山区", - "500151": "铜梁区", - "500152": "潼南区", - "500153": "荣昌区", - "500228": "梁平县", - "500229": "城口县", - "500230": "丰都县", - "500231": "垫江县", - "500232": "武隆县", - "500233": "忠县", - "500234": "开县", - "500235": "云阳县", - "500236": "奉节县", - "500237": "巫山县", - "500238": "巫溪县", - "500240": "石柱土家族自治县", - "500241": "秀山土家族苗族自治县", - "500242": "酉阳土家族苗族自治县", - "500243": "彭水苗族土家族自治县", - "510104": "锦江区", - "510105": "青羊区", - "510106": "金牛区", - "510107": "武侯区", - "510108": "成华区", - "510112": "龙泉驿区", - "510113": "青白江区", - "510114": "新都区", - "510115": "温江区", - "510121": "金堂县", - "510122": "双流县", - "510124": "郫县", - "510129": "大邑县", - "510131": "蒲江县", - "510132": "新津县", - "510181": "都江堰市", - "510182": "彭州市", - "510183": "邛崃市", - "510184": "崇州市", - "510190": "高新西区", - "510191": "高新区", - "510302": "自流井区", - "510303": "贡井区", - "510304": "大安区", - "510311": "沿滩区", - "510321": "荣县", - "510322": "富顺县", - "510402": "东区", - "510403": "西区", - "510411": "仁和区", - "510421": "米易县", - "510422": "盐边县", - "510502": "江阳区", - "510503": "纳溪区", - "510504": "龙马潭区", - "510521": "泸县", - "510522": "合江县", - "510524": "叙永县", - "510525": "古蔺县", - "510603": "旌阳区", - "510623": "中江县", - "510626": "罗江县", - "510681": "广汉市", - "510682": "什邡市", - "510683": "绵竹市", - "510703": "涪城区", - "510704": "游仙区", - "510722": "三台县", - "510723": "盐亭县", - "510724": "安县", - "510725": "梓潼县", - "510726": "北川羌族自治县", - "510727": "平武县", - "510781": "江油市", - "510790": "经开区", - "510791": "高新区", - "510802": "利州区", - "510811": "昭化区", - "510812": "朝天区", - "510821": "旺苍县", - "510822": "青川县", - "510823": "剑阁县", - "510824": "苍溪县", - "510903": "船山区", - "510904": "安居区", - "510921": "蓬溪县", - "510922": "射洪县", - "510923": "大英县", - "511002": "市中区", - "511011": "东兴区", - "511024": "威远县", - "511025": "资中县", - "511028": "隆昌县", - "511102": "市中区", - "511111": "沙湾区", - "511112": "五通桥区", - "511113": "金口河区", - "511123": "犍为县", - "511124": "井研县", - "511126": "夹江县", - "511129": "沐川县", - "511132": "峨边彝族自治县", - "511133": "马边彝族自治县", - "511181": "峨眉山市", - "511302": "顺庆区", - "511303": "高坪区", - "511304": "嘉陵区", - "511321": "南部县", - "511322": "营山县", - "511323": "蓬安县", - "511324": "仪陇县", - "511325": "西充县", - "511381": "阆中市", - "511402": "东坡区", - "511403": "彭山区", - "511421": "仁寿县", - "511423": "洪雅县", - "511424": "丹棱县", - "511425": "青神县", - "511502": "翠屏区", - "511503": "南溪区", - "511521": "宜宾县", - "511523": "江安县", - "511524": "长宁县", - "511525": "高县", - "511526": "珙县", - "511527": "筠连县", - "511528": "兴文县", - "511529": "屏山县", - "511602": "广安区", - "511603": "前锋区", - "511621": "岳池县", - "511622": "武胜县", - "511623": "邻水县", - "511681": "华蓥市", - "511702": "通川区", - "511703": "达川区", - "511722": "宣汉县", - "511723": "开江县", - "511724": "大竹县", - "511725": "渠县", - "511781": "万源市", - "511802": "雨城区", - "511803": "名山区", - "511822": "荥经县", - "511823": "汉源县", - "511824": "石棉县", - "511825": "天全县", - "511826": "芦山县", - "511827": "宝兴县", - "511902": "巴州区", - "511903": "恩阳区", - "511921": "通江县", - "511922": "南江县", - "511923": "平昌县", - "512002": "雁江区", - "512021": "安岳县", - "512022": "乐至县", - "512081": "简阳市", - "513221": "汶川县", - "513222": "理县", - "513223": "茂县", - "513224": "松潘县", - "513225": "九寨沟县", - "513226": "金川县", - "513227": "小金县", - "513228": "黑水县", - "513229": "马尔康县", - "513230": "壤塘县", - "513231": "阿坝县", - "513232": "若尔盖县", - "513233": "红原县", - "513301": "康定市", - "513322": "泸定县", - "513323": "丹巴县", - "513324": "九龙县", - "513325": "雅江县", - "513326": "道孚县", - "513327": "炉霍县", - "513328": "甘孜县", - "513329": "新龙县", - "513330": "德格县", - "513331": "白玉县", - "513332": "石渠县", - "513333": "色达县", - "513334": "理塘县", - "513335": "巴塘县", - "513336": "乡城县", - "513337": "稻城县", - "513338": "得荣县", - "513401": "西昌市", - "513422": "木里藏族自治县", - "513423": "盐源县", - "513424": "德昌县", - "513425": "会理县", - "513426": "会东县", - "513427": "宁南县", - "513428": "普格县", - "513429": "布拖县", - "513430": "金阳县", - "513431": "昭觉县", - "513432": "喜德县", - "513433": "冕宁县", - "513434": "越西县", - "513435": "甘洛县", - "513436": "美姑县", - "513437": "雷波县", - "520102": "南明区", - "520103": "云岩区", - "520111": "花溪区", - "520112": "乌当区", - "520113": "白云区", - "520115": "观山湖区", - "520121": "开阳县", - "520122": "息烽县", - "520123": "修文县", - "520181": "清镇市", - "520201": "钟山区", - "520203": "六枝特区", - "520221": "水城县", - "520222": "盘县", - "520302": "红花岗区", - "520303": "汇川区", - "520321": "遵义县", - "520322": "桐梓县", - "520323": "绥阳县", - "520324": "正安县", - "520325": "道真仡佬族苗族自治县", - "520326": "务川仡佬族苗族自治县", - "520327": "凤冈县", - "520328": "湄潭县", - "520329": "余庆县", - "520330": "习水县", - "520381": "赤水市", - "520382": "仁怀市", - "520402": "西秀区", - "520403": "平坝区", - "520422": "普定县", - "520423": "镇宁布依族苗族自治县", - "520424": "关岭布依族苗族自治县", - "520425": "紫云苗族布依族自治县", - "520502": "七星关区", - "520521": "大方县", - "520522": "黔西县", - "520523": "金沙县", - "520524": "织金县", - "520525": "纳雍县", - "520526": "威宁彝族回族苗族自治县", - "520527": "赫章县", - "520602": "碧江区", - "520603": "万山区", - "520621": "江口县", - "520622": "玉屏侗族自治县", - "520623": "石阡县", - "520624": "思南县", - "520625": "印江土家族苗族自治县", - "520626": "德江县", - "520627": "沿河土家族自治县", - "520628": "松桃苗族自治县", - "522301": "兴义市", - "522322": "兴仁县", - "522323": "普安县", - "522324": "晴隆县", - "522325": "贞丰县", - "522326": "望谟县", - "522327": "册亨县", - "522328": "安龙县", - "522601": "凯里市", - "522622": "黄平县", - "522623": "施秉县", - "522624": "三穗县", - "522625": "镇远县", - "522626": "岑巩县", - "522627": "天柱县", - "522628": "锦屏县", - "522629": "剑河县", - "522630": "台江县", - "522631": "黎平县", - "522632": "榕江县", - "522633": "从江县", - "522634": "雷山县", - "522635": "麻江县", - "522636": "丹寨县", - "522701": "都匀市", - "522702": "福泉市", - "522722": "荔波县", - "522723": "贵定县", - "522725": "瓮安县", - "522726": "独山县", - "522727": "平塘县", - "522728": "罗甸县", - "522729": "长顺县", - "522730": "龙里县", - "522731": "惠水县", - "522732": "三都水族自治县", - "530102": "五华区", - "530103": "盘龙区", - "530111": "官渡区", - "530112": "西山区", - "530113": "东川区", - "530114": "呈贡区", - "530122": "晋宁县", - "530124": "富民县", - "530125": "宜良县", - "530126": "石林彝族自治县", - "530127": "嵩明县", - "530128": "禄劝彝族苗族自治县", - "530129": "寻甸回族彝族自治县", - "530181": "安宁市", - "530302": "麒麟区", - "530321": "马龙县", - "530322": "陆良县", - "530323": "师宗县", - "530324": "罗平县", - "530325": "富源县", - "530326": "会泽县", - "530328": "沾益县", - "530381": "宣威市", - "530402": "红塔区", - "530421": "江川县", - "530422": "澄江县", - "530423": "通海县", - "530424": "华宁县", - "530425": "易门县", - "530426": "峨山彝族自治县", - "530427": "新平彝族傣族自治县", - "530428": "元江哈尼族彝族傣族自治县", - "530502": "隆阳区", - "530521": "施甸县", - "530523": "龙陵县", - "530524": "昌宁县", - "530581": "腾冲市", - "530602": "昭阳区", - "530621": "鲁甸县", - "530622": "巧家县", - "530623": "盐津县", - "530624": "大关县", - "530625": "永善县", - "530626": "绥江县", - "530627": "镇雄县", - "530628": "彝良县", - "530629": "威信县", - "530630": "水富县", - "530702": "古城区", - "530721": "玉龙纳西族自治县", - "530722": "永胜县", - "530723": "华坪县", - "530724": "宁蒗彝族自治县", - "530802": "思茅区", - "530821": "宁洱哈尼族彝族自治县", - "530822": "墨江哈尼族自治县", - "530823": "景东彝族自治县", - "530824": "景谷傣族彝族自治县", - "530825": "镇沅彝族哈尼族拉祜族自治县", - "530826": "江城哈尼族彝族自治县", - "530827": "孟连傣族拉祜族佤族自治县", - "530828": "澜沧拉祜族自治县", - "530829": "西盟佤族自治县", - "530902": "临翔区", - "530921": "凤庆县", - "530922": "云县", - "530923": "永德县", - "530924": "镇康县", - "530925": "双江拉祜族佤族布朗族傣族自治县", - "530926": "耿马傣族佤族自治县", - "530927": "沧源佤族自治县", - "532301": "楚雄市", - "532322": "双柏县", - "532323": "牟定县", - "532324": "南华县", - "532325": "姚安县", - "532326": "大姚县", - "532327": "永仁县", - "532328": "元谋县", - "532329": "武定县", - "532331": "禄丰县", - "532501": "个旧市", - "532502": "开远市", - "532503": "蒙自市", - "532504": "弥勒市", - "532523": "屏边苗族自治县", - "532524": "建水县", - "532525": "石屏县", - "532527": "泸西县", - "532528": "元阳县", - "532529": "红河县", - "532530": "金平苗族瑶族傣族自治县", - "532531": "绿春县", - "532532": "河口瑶族自治县", - "532601": "文山市", - "532622": "砚山县", - "532623": "西畴县", - "532624": "麻栗坡县", - "532625": "马关县", - "532626": "丘北县", - "532627": "广南县", - "532628": "富宁县", - "532801": "景洪市", - "532822": "勐海县", - "532823": "勐腊县", - "532901": "大理市", - "532922": "漾濞彝族自治县", - "532923": "祥云县", - "532924": "宾川县", - "532925": "弥渡县", - "532926": "南涧彝族自治县", - "532927": "巍山彝族回族自治县", - "532928": "永平县", - "532929": "云龙县", - "532930": "洱源县", - "532931": "剑川县", - "532932": "鹤庆县", - "533102": "瑞丽市", - "533103": "芒市", - "533122": "梁河县", - "533123": "盈江县", - "533124": "陇川县", - "533321": "泸水县", - "533323": "福贡县", - "533324": "贡山独龙族怒族自治县", - "533325": "兰坪白族普米族自治县", - "533401": "香格里拉市", - "533422": "德钦县", - "533423": "维西傈僳族自治县", - "540102": "城关区", - "540121": "林周县", - "540122": "当雄县", - "540123": "尼木县", - "540124": "曲水县", - "540125": "堆龙德庆县", - "540126": "达孜县", - "540127": "墨竹工卡县", - "540202": "桑珠孜区", - "540221": "南木林县", - "540222": "江孜县", - "540223": "定日县", - "540224": "萨迦县", - "540225": "拉孜县", - "540226": "昂仁县", - "540227": "谢通门县", - "540228": "白朗县", - "540229": "仁布县", - "540230": "康马县", - "540231": "定结县", - "540232": "仲巴县", - "540233": "亚东县", - "540234": "吉隆县", - "540235": "聂拉木县", - "540236": "萨嘎县", - "540237": "岗巴县", - "540302": "卡若区", - "540321": "江达县", - "540322": "贡觉县", - "540323": "类乌齐县", - "540324": "丁青县", - "540325": "察雅县", - "540326": "八宿县", - "540327": "左贡县", - "540328": "芒康县", - "540329": "洛隆县", - "540330": "边坝县", - "540402": "巴宜区", - "540421": "工布江达县", - "540422": "米林县", - "540423": "墨脱县", - "540424": "波密县", - "540425": "察隅县", - "540426": "朗县", - "542221": "乃东县", - "542222": "扎囊县", - "542223": "贡嘎县", - "542224": "桑日县", - "542225": "琼结县", - "542226": "曲松县", - "542227": "措美县", - "542228": "洛扎县", - "542229": "加查县", - "542231": "隆子县", - "542232": "错那县", - "542233": "浪卡子县", - "542421": "那曲县", - "542422": "嘉黎县", - "542423": "比如县", - "542424": "聂荣县", - "542425": "安多县", - "542426": "申扎县", - "542427": "索县", - "542428": "班戈县", - "542429": "巴青县", - "542430": "尼玛县", - "542431": "双湖县", - "542521": "普兰县", - "542522": "札达县", - "542523": "噶尔县", - "542524": "日土县", - "542525": "革吉县", - "542526": "改则县", - "542527": "措勤县", - "610102": "新城区", - "610103": "碑林区", - "610104": "莲湖区", - "610111": "灞桥区", - "610112": "未央区", - "610113": "雁塔区", - "610114": "阎良区", - "610115": "临潼区", - "610116": "长安区", - "610117": "高陵区", - "610122": "蓝田县", - "610124": "周至县", - "610125": "户县", - "610202": "王益区", - "610203": "印台区", - "610204": "耀州区", - "610222": "宜君县", - "610302": "渭滨区", - "610303": "金台区", - "610304": "陈仓区", - "610322": "凤翔县", - "610323": "岐山县", - "610324": "扶风县", - "610326": "眉县", - "610327": "陇县", - "610328": "千阳县", - "610329": "麟游县", - "610330": "凤县", - "610331": "太白县", - "610402": "秦都区", - "610403": "杨陵区", - "610404": "渭城区", - "610422": "三原县", - "610423": "泾阳县", - "610424": "乾县", - "610425": "礼泉县", - "610426": "永寿县", - "610427": "彬县", - "610428": "长武县", - "610429": "旬邑县", - "610430": "淳化县", - "610431": "武功县", - "610481": "兴平市", - "610502": "临渭区", - "610521": "华县", - "610522": "潼关县", - "610523": "大荔县", - "610524": "合阳县", - "610525": "澄城县", - "610526": "蒲城县", - "610527": "白水县", - "610528": "富平县", - "610581": "韩城市", - "610582": "华阴市", - "610602": "宝塔区", - "610621": "延长县", - "610622": "延川县", - "610623": "子长县", - "610624": "安塞县", - "610625": "志丹县", - "610626": "吴起县", - "610627": "甘泉县", - "610628": "富县", - "610629": "洛川县", - "610630": "宜川县", - "610631": "黄龙县", - "610632": "黄陵县", - "610702": "汉台区", - "610721": "南郑县", - "610722": "城固县", - "610723": "洋县", - "610724": "西乡县", - "610725": "勉县", - "610726": "宁强县", - "610727": "略阳县", - "610728": "镇巴县", - "610729": "留坝县", - "610730": "佛坪县", - "610802": "榆阳区", - "610821": "神木县", - "610822": "府谷县", - "610823": "横山县", - "610824": "靖边县", - "610825": "定边县", - "610826": "绥德县", - "610827": "米脂县", - "610828": "佳县", - "610829": "吴堡县", - "610830": "清涧县", - "610831": "子洲县", - "610902": "汉滨区", - "610921": "汉阴县", - "610922": "石泉县", - "610923": "宁陕县", - "610924": "紫阳县", - "610925": "岚皋县", - "610926": "平利县", - "610927": "镇坪县", - "610928": "旬阳县", - "610929": "白河县", - "611002": "商州区", - "611021": "洛南县", - "611022": "丹凤县", - "611023": "商南县", - "611024": "山阳县", - "611025": "镇安县", - "611026": "柞水县", - "620102": "城关区", - "620103": "七里河区", - "620104": "西固区", - "620105": "安宁区", - "620111": "红古区", - "620121": "永登县", - "620122": "皋兰县", - "620123": "榆中县", - "620201": "市辖区", - "620290": "雄关区", - "620291": "长城区", - "620292": "镜铁区", - "620293": "新城镇", - "620294": "峪泉镇", - "620295": "文殊镇", - "620302": "金川区", - "620321": "永昌县", - "620402": "白银区", - "620403": "平川区", - "620421": "靖远县", - "620422": "会宁县", - "620423": "景泰县", - "620502": "秦州区", - "620503": "麦积区", - "620521": "清水县", - "620522": "秦安县", - "620523": "甘谷县", - "620524": "武山县", - "620525": "张家川回族自治县", - "620602": "凉州区", - "620621": "民勤县", - "620622": "古浪县", - "620623": "天祝藏族自治县", - "620702": "甘州区", - "620721": "肃南裕固族自治县", - "620722": "民乐县", - "620723": "临泽县", - "620724": "高台县", - "620725": "山丹县", - "620802": "崆峒区", - "620821": "泾川县", - "620822": "灵台县", - "620823": "崇信县", - "620824": "华亭县", - "620825": "庄浪县", - "620826": "静宁县", - "620902": "肃州区", - "620921": "金塔县", - "620922": "瓜州县", - "620923": "肃北蒙古族自治县", - "620924": "阿克塞哈萨克族自治县", - "620981": "玉门市", - "620982": "敦煌市", - "621002": "西峰区", - "621021": "庆城县", - "621022": "环县", - "621023": "华池县", - "621024": "合水县", - "621025": "正宁县", - "621026": "宁县", - "621027": "镇原县", - "621102": "安定区", - "621121": "通渭县", - "621122": "陇西县", - "621123": "渭源县", - "621124": "临洮县", - "621125": "漳县", - "621126": "岷县", - "621202": "武都区", - "621221": "成县", - "621222": "文县", - "621223": "宕昌县", - "621224": "康县", - "621225": "西和县", - "621226": "礼县", - "621227": "徽县", - "621228": "两当县", - "622901": "临夏市", - "622921": "临夏县", - "622922": "康乐县", - "622923": "永靖县", - "622924": "广河县", - "622925": "和政县", - "622926": "东乡族自治县", - "622927": "积石山保安族东乡族撒拉族自治县", - "623001": "合作市", - "623021": "临潭县", - "623022": "卓尼县", - "623023": "舟曲县", - "623024": "迭部县", - "623025": "玛曲县", - "623026": "碌曲县", - "623027": "夏河县", - "630102": "城东区", - "630103": "城中区", - "630104": "城西区", - "630105": "城北区", - "630121": "大通回族土族自治县", - "630122": "湟中县", - "630123": "湟源县", - "630202": "乐都区", - "630203": "平安区", - "630222": "民和回族土族自治县", - "630223": "互助土族自治县", - "630224": "化隆回族自治县", - "630225": "循化撒拉族自治县", - "632221": "门源回族自治县", - "632222": "祁连县", - "632223": "海晏县", - "632224": "刚察县", - "632321": "同仁县", - "632322": "尖扎县", - "632323": "泽库县", - "632324": "河南蒙古族自治县", - "632521": "共和县", - "632522": "同德县", - "632523": "贵德县", - "632524": "兴海县", - "632525": "贵南县", - "632621": "玛沁县", - "632622": "班玛县", - "632623": "甘德县", - "632624": "达日县", - "632625": "久治县", - "632626": "玛多县", - "632701": "玉树市", - "632722": "杂多县", - "632723": "称多县", - "632724": "治多县", - "632725": "囊谦县", - "632726": "曲麻莱县", - "632801": "格尔木市", - "632802": "德令哈市", - "632821": "乌兰县", - "632822": "都兰县", - "632823": "天峻县", - "640104": "兴庆区", - "640105": "西夏区", - "640106": "金凤区", - "640121": "永宁县", - "640122": "贺兰县", - "640181": "灵武市", - "640202": "大武口区", - "640205": "惠农区", - "640221": "平罗县", - "640302": "利通区", - "640303": "红寺堡区", - "640323": "盐池县", - "640324": "同心县", - "640381": "青铜峡市", - "640402": "原州区", - "640422": "西吉县", - "640423": "隆德县", - "640424": "泾源县", - "640425": "彭阳县", - "640502": "沙坡头区", - "640521": "中宁县", - "640522": "海原县", - "650102": "天山区", - "650103": "沙依巴克区", - "650104": "新市区", - "650105": "水磨沟区", - "650106": "头屯河区", - "650107": "达坂城区", - "650109": "米东区", - "650121": "乌鲁木齐县", - "650202": "独山子区", - "650203": "克拉玛依区", - "650204": "白碱滩区", - "650205": "乌尔禾区", - "650402": "高昌区", - "650421": "鄯善县", - "650422": "托克逊县", - "652201": "哈密市", - "652222": "巴里坤哈萨克自治县", - "652223": "伊吾县", - "652301": "昌吉市", - "652302": "阜康市", - "652323": "呼图壁县", - "652324": "玛纳斯县", - "652325": "奇台县", - "652327": "吉木萨尔县", - "652328": "木垒哈萨克自治县", - "652701": "博乐市", - "652702": "阿拉山口市", - "652722": "精河县", - "652723": "温泉县", - "652801": "库尔勒市", - "652822": "轮台县", - "652823": "尉犁县", - "652824": "若羌县", - "652825": "且末县", - "652826": "焉耆回族自治县", - "652827": "和静县", - "652828": "和硕县", - "652829": "博湖县", - "652901": "阿克苏市", - "652922": "温宿县", - "652923": "库车县", - "652924": "沙雅县", - "652925": "新和县", - "652926": "拜城县", - "652927": "乌什县", - "652928": "阿瓦提县", - "652929": "柯坪县", - "653001": "阿图什市", - "653022": "阿克陶县", - "653023": "阿合奇县", - "653024": "乌恰县", - "653101": "喀什市", - "653121": "疏附县", - "653122": "疏勒县", - "653123": "英吉沙县", - "653124": "泽普县", - "653125": "莎车县", - "653126": "叶城县", - "653127": "麦盖提县", - "653128": "岳普湖县", - "653129": "伽师县", - "653130": "巴楚县", - "653131": "塔什库尔干塔吉克自治县", - "653201": "和田市", - "653221": "和田县", - "653222": "墨玉县", - "653223": "皮山县", - "653224": "洛浦县", - "653225": "策勒县", - "653226": "于田县", - "653227": "民丰县", - "654002": "伊宁市", - "654003": "奎屯市", - "654004": "霍尔果斯市", - "654021": "伊宁县", - "654022": "察布查尔锡伯自治县", - "654023": "霍城县", - "654024": "巩留县", - "654025": "新源县", - "654026": "昭苏县", - "654027": "特克斯县", - "654028": "尼勒克县", - "654201": "塔城市", - "654202": "乌苏市", - "654221": "额敏县", - "654223": "沙湾县", - "654224": "托里县", - "654225": "裕民县", - "654226": "和布克赛尔蒙古自治县", - "654301": "阿勒泰市", - "654321": "布尔津县", - "654322": "富蕴县", - "654323": "福海县", - "654324": "哈巴河县", - "654325": "青河县", - "654326": "吉木乃县", - "654390": "北屯市", - "659001": "石河子市", - "659002": "阿拉尔市", - "659003": "图木舒克市", - "659004": "五家渠市", - "710101": "中正区", - "710102": "大同区", - "710103": "中山区", - "710104": "松山区", - "710105": "大安区", - "710106": "万华区", - "710107": "信义区", - "710108": "士林区", - "710109": "北投区", - "710110": "内湖区", - "710111": "南港区", - "710112": "文山区", - "710199": "其它区", - "710201": "新兴区", - "710202": "前金区", - "710203": "芩雅区", - "710204": "盐埕区", - "710205": "鼓山区", - "710206": "旗津区", - "710207": "前镇区", - "710208": "三民区", - "710209": "左营区", - "710210": "楠梓区", - "710211": "小港区", - "710241": "苓雅区", - "710242": "仁武区", - "710243": "大社区", - "710244": "冈山区", - "710245": "路竹区", - "710246": "阿莲区", - "710247": "田寮区", - "710248": "燕巢区", - "710249": "桥头区", - "710250": "梓官区", - "710251": "弥陀区", - "710252": "永安区", - "710253": "湖内区", - "710254": "凤山区", - "710255": "大寮区", - "710256": "林园区", - "710257": "鸟松区", - "710258": "大树区", - "710259": "旗山区", - "710260": "美浓区", - "710261": "六龟区", - "710262": "内门区", - "710263": "杉林区", - "710264": "甲仙区", - "710265": "桃源区", - "710266": "那玛夏区", - "710267": "茂林区", - "710268": "茄萣区", - "710299": "其它区", - "710301": "中西区", - "710302": "东区", - "710303": "南区", - "710304": "北区", - "710305": "安平区", - "710306": "安南区", - "710339": "永康区", - "710340": "归仁区", - "710341": "新化区", - "710342": "左镇区", - "710343": "玉井区", - "710344": "楠西区", - "710345": "南化区", - "710346": "仁德区", - "710347": "关庙区", - "710348": "龙崎区", - "710349": "官田区", - "710350": "麻豆区", - "710351": "佳里区", - "710352": "西港区", - "710353": "七股区", - "710354": "将军区", - "710355": "学甲区", - "710356": "北门区", - "710357": "新营区", - "710358": "后壁区", - "710359": "白河区", - "710360": "东山区", - "710361": "六甲区", - "710362": "下营区", - "710363": "柳营区", - "710364": "盐水区", - "710365": "善化区", - "710366": "大内区", - "710367": "山上区", - "710368": "新市区", - "710369": "安定区", - "710399": "其它区", - "710401": "中区", - "710402": "东区", - "710403": "南区", - "710404": "西区", - "710405": "北区", - "710406": "北屯区", - "710407": "西屯区", - "710408": "南屯区", - "710431": "太平区", - "710432": "大里区", - "710433": "雾峰区", - "710434": "乌日区", - "710435": "丰原区", - "710436": "后里区", - "710437": "石冈区", - "710438": "东势区", - "710439": "和平区", - "710440": "新社区", - "710441": "潭子区", - "710442": "大雅区", - "710443": "神冈区", - "710444": "大肚区", - "710445": "沙鹿区", - "710446": "龙井区", - "710447": "梧栖区", - "710448": "清水区", - "710449": "大甲区", - "710450": "外埔区", - "710451": "大安区", - "710499": "其它区", - "710507": "金沙镇", - "710508": "金湖镇", - "710509": "金宁乡", - "710510": "金城镇", - "710511": "烈屿乡", - "710512": "乌坵乡", - "710614": "南投市", - "710615": "中寮乡", - "710616": "草屯镇", - "710617": "国姓乡", - "710618": "埔里镇", - "710619": "仁爱乡", - "710620": "名间乡", - "710621": "集集镇", - "710622": "水里乡", - "710623": "鱼池乡", - "710624": "信义乡", - "710625": "竹山镇", - "710626": "鹿谷乡", - "710701": "仁爱区", - "710702": "信义区", - "710703": "中正区", - "710704": "中山区", - "710705": "安乐区", - "710706": "暖暖区", - "710707": "七堵区", - "710799": "其它区", - "710801": "东区", - "710802": "北区", - "710803": "香山区", - "710899": "其它区", - "710901": "东区", - "710902": "西区", - "710999": "其它区", - "711130": "万里区", - "711132": "板桥区", - "711133": "汐止区", - "711134": "深坑区", - "711136": "瑞芳区", - "711137": "平溪区", - "711138": "双溪区", - "711140": "新店区", - "711141": "坪林区", - "711142": "乌来区", - "711143": "永和区", - "711144": "中和区", - "711145": "土城区", - "711146": "三峡区", - "711147": "树林区", - "711149": "三重区", - "711150": "新庄区", - "711151": "泰山区", - "711152": "林口区", - "711154": "五股区", - "711155": "八里区", - "711156": "淡水区", - "711157": "三芝区", - "810101": "中西区", - "810102": "湾仔", - "810103": "东区", - "810104": "南区", - "810201": "九龙城区", - "810202": "油尖旺区", - "810203": "深水埗区", - "810204": "黄大仙区", - "810205": "观塘区", - "810301": "北区", - "810302": "大埔区", - "810303": "沙田区", - "810304": "西贡区", - "810305": "元朗区", - "810306": "屯门区", - "810307": "荃湾区", - "810308": "葵青区", - "810309": "离岛区", - "820101": "澳门半岛", - "820201": "离岛" - } -} \ No newline at end of file diff --git a/litemall-vue/src/views/items/detail/EntityGroup/index.vue b/litemall-vue/src/views/items/detail/EntityGroup/index.vue deleted file mode 100755 index 13b0d347..00000000 --- a/litemall-vue/src/views/items/detail/EntityGroup/index.vue +++ /dev/null @@ -1,513 +0,0 @@ - - - - - diff --git a/litemall-vue/src/views/items/detail/EntityGroup/popup-address.vue b/litemall-vue/src/views/items/detail/EntityGroup/popup-address.vue deleted file mode 100755 index 1dc5afe2..00000000 --- a/litemall-vue/src/views/items/detail/EntityGroup/popup-address.vue +++ /dev/null @@ -1,168 +0,0 @@ - - - - - diff --git a/litemall-vue/src/views/items/detail/EntityGroup/popup-area.vue b/litemall-vue/src/views/items/detail/EntityGroup/popup-area.vue deleted file mode 100755 index 03f95546..00000000 --- a/litemall-vue/src/views/items/detail/EntityGroup/popup-area.vue +++ /dev/null @@ -1,50 +0,0 @@ - - - - diff --git a/litemall-vue/src/views/items/detail/VirtualGroup/index.vue b/litemall-vue/src/views/items/detail/VirtualGroup/index.vue deleted file mode 100755 index dba406ae..00000000 --- a/litemall-vue/src/views/items/detail/VirtualGroup/index.vue +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - diff --git a/litemall-vue/src/views/items/detail/index.vue b/litemall-vue/src/views/items/detail/index.vue index cf3b1311..4e06f954 100755 --- a/litemall-vue/src/views/items/detail/index.vue +++ b/litemall-vue/src/views/items/detail/index.vue @@ -1,71 +1,74 @@ + + + + + + diff --git a/litemall-vue/src/views/items/list/index.vue b/litemall-vue/src/views/items/list/index.vue index 5979431c..3c14acb7 100755 --- a/litemall-vue/src/views/items/list/index.vue +++ b/litemall-vue/src/views/items/list/index.vue @@ -49,14 +49,14 @@ - + diff --git a/litemall-vue/src/views/items/search-result/index.vue b/litemall-vue/src/views/items/search-result/index.vue index 121d0610..d928686e 100755 --- a/litemall-vue/src/views/items/search-result/index.vue +++ b/litemall-vue/src/views/items/search-result/index.vue @@ -30,8 +30,6 @@ - - diff --git a/litemall-vue/src/views/user/tabbar-user-ecoupon.vue b/litemall-vue/src/views/user/tabbar-user-ecoupon.vue index 1ae7bf83..eb3c98d8 100755 --- a/litemall-vue/src/views/user/tabbar-user-ecoupon.vue +++ b/litemall-vue/src/views/user/tabbar-user-ecoupon.vue @@ -1,86 +1,86 @@ - - - - - - + + + + + + diff --git a/litemall-vue/src/views/user/tabbar-user-header.vue b/litemall-vue/src/views/user/tabbar-user-header.vue index fded15d7..48303068 100755 --- a/litemall-vue/src/views/user/tabbar-user-header.vue +++ b/litemall-vue/src/views/user/tabbar-user-header.vue @@ -12,7 +12,6 @@ import avatar_default from '@/assets/images/avatar_default.png'; import bg_default from '@/assets/images/user_head_bg.png'; import { getLocalStorage } from '@/utils/local-storage'; -import _ from 'lodash'; export default { name: 'user-header', @@ -45,13 +44,6 @@ export default { ); this.avatar = avatar_default; this.nickName = infoData.nickName || '昵称'; - if (!_.isEmpty(infoData.avatar)) { - this.avatar = `http://www.qmenhu.com${infoData.avatar}`; - } - console.log(this.avatar); - console.log('-----------'); - console.log(infoData); - this.background_image = infoData.background_image || bg_default; }, toSetting() { diff --git a/litemall-vue/src/views/user/tabbar-user-order.vue b/litemall-vue/src/views/user/tabbar-user-order.vue index 1a31eef6..69d70dd7 100755 --- a/litemall-vue/src/views/user/tabbar-user-order.vue +++ b/litemall-vue/src/views/user/tabbar-user-order.vue @@ -1,105 +1,107 @@ - - - - - - + + + + + + diff --git a/litemall-vue/src/views/user/tabbar-user.vue b/litemall-vue/src/views/user/tabbar-user.vue index b09521d7..2699d72a 100755 --- a/litemall-vue/src/views/user/tabbar-user.vue +++ b/litemall-vue/src/views/user/tabbar-user.vue @@ -11,10 +11,11 @@ - - - + + + + + + diff --git a/litemall-vue/src/views/order/payment/index.vue b/litemall-vue/src/views/order/payment/index.vue index d81cea89..b51a2b02 100755 --- a/litemall-vue/src/views/order/payment/index.vue +++ b/litemall-vue/src/views/order/payment/index.vue @@ -1,165 +1,125 @@ - - - - - + + + + + diff --git a/litemall-vue/src/views/order/place-order-entity.vue b/litemall-vue/src/views/order/place-order-entity.vue new file mode 100644 index 00000000..ae02f688 --- /dev/null +++ b/litemall-vue/src/views/order/place-order-entity.vue @@ -0,0 +1,242 @@ + + + + + + \ No newline at end of file diff --git a/litemall-vue/src/views/order/place-order-entity/bottom-goods-info.vue b/litemall-vue/src/views/order/place-order-entity/bottom-goods-info.vue deleted file mode 100755 index 48c3c066..00000000 --- a/litemall-vue/src/views/order/place-order-entity/bottom-goods-info.vue +++ /dev/null @@ -1,68 +0,0 @@ - - - - diff --git a/litemall-vue/src/views/order/place-order-entity/index.vue b/litemall-vue/src/views/order/place-order-entity/index.vue deleted file mode 100755 index 63ca0da2..00000000 --- a/litemall-vue/src/views/order/place-order-entity/index.vue +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - diff --git a/litemall-vue/src/views/order/place-order-entity/top-user-info.vue b/litemall-vue/src/views/order/place-order-entity/top-user-info.vue deleted file mode 100755 index 505f43fd..00000000 --- a/litemall-vue/src/views/order/place-order-entity/top-user-info.vue +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - diff --git a/litemall-vue/src/views/order/place-order-virtual/index.vue b/litemall-vue/src/views/order/place-order-virtual/index.vue deleted file mode 100755 index cf36025f..00000000 --- a/litemall-vue/src/views/order/place-order-virtual/index.vue +++ /dev/null @@ -1,122 +0,0 @@ - - - - - diff --git a/litemall-vue/src/views/order/tabbar-cart.vue b/litemall-vue/src/views/order/tabbar-cart.vue index b4be6e1a..ec44e014 100755 --- a/litemall-vue/src/views/order/tabbar-cart.vue +++ b/litemall-vue/src/views/order/tabbar-cart.vue @@ -8,13 +8,13 @@
- -
-
- - {{item.goodsName}} + +
+
+ + {{spec}} +
-
{{item.price * 100 | yuan}}
@@ -26,10 +26,6 @@
-
- 清除失效商品 -
- 您的购物车空空如也~ import { Checkbox, CheckboxGroup, Card, SubmitBar, Stepper, Tag } from 'vant'; import { cartList, cartUpdate, cartChecked, cartDelete} from '@/api/api'; +import { setLocalStorage } from '@/utils/local-storage'; import isEmpty from '@/components/is-empty/'; import _ from 'lodash'; @@ -136,7 +133,6 @@ export default { }).productId ); }); - console.log(this.goods); if (this.isEditor) { this.$dialog .confirm({ @@ -147,30 +143,11 @@ export default { this.deleteNext(productIds); }); } else { - // for (check in checkedGoods){ - // await this.doCheck(productIds); - // } - // let { data } = await this.$reqGet( - // '/wx/cart/checkout?cartId=0&addressId=0&couponId=0&grouponRulesId=0' - // ); this.isSubmit = true; - this.$router.push({ name: 'placeOrderEntity' }); + setLocalStorage({AddressId: 0, CartId: 0, CouponId: 0}); + this.$router.push({ name: 'placeOrderEntity'}); } }, - doCheck(productIds, isChecked) { - // let good = _.find(this.goods, vv => { - // return id === vv.id; - // }) - // let productId = good.productId; - - cartChecked({productIds: productIds, isChecked: isChecked}); - // if (this.checkedGoods.length == this.AllGoods.length) { - // this.allCheckedStatus = true; - // } - }, - formatPrice(price) { - return (price / 100).toFixed(2); - }, setCheckAll(val) { if (this.checkedGoods.length === this.AllGoods.length) { this.checkedGoods = []; @@ -183,7 +160,6 @@ export default { this.$dialog .confirm({ message: '确定删除所选商品吗', cancelButtonText: '再想想' }) .then(() => { - // const goodsId = this.goods.splice(i, 1)[0].id; this.$nextTick(() => { this.deleteNext(productId); }); @@ -207,13 +183,13 @@ export default { }); //没选中的不掉接口 if (delProductIds.length > 0) { - this.doCheck(delProductIds, 0); + cartChecked({productIds: delProductIds, isChecked: 0}); } if (addProductIds.length > 0) { - this.doCheck(addProductIds, 1); + cartChecked({productIds: addProductIds, isChecked: 1}); } }, - async deleteNext(o) { + deleteNext(o) { let productIds = []; if (o instanceof Array) { productIds = o; @@ -221,29 +197,12 @@ export default { productIds.push(o); } - - cartDelete({productIds: productIds}); - - this.count = this.count - productIds.length; - this.goods = data.data.cartList; - - // this.isEditor = !!this.goods.length; - // this.checkedGoods.forEach((goods, i) => { - // if (goods.id == goodsId) { - // this.checkedGoods.splice(i, 1); - // return false; - // } - // }); - }, - clearInvalid() { - this.$dialog - .confirm({ - message: '确定清除所有失效商品吗?', - cancelButtonText: '再想想' - }) - .then(() => { - this.goods = this.goods.filter(goods => goods.checked); - }); + cartDelete({productIds: productIds}).then(res => { + this.goods = res.data.data.cartList; + this.AllGoods = this.getAllList(); + this.checkedGoods = this.getCheckedList(this.goods); + this.count = this.checkedGoods.length; + }); } }, diff --git a/litemall-vue/src/views/user/module-address-edit/index.vue b/litemall-vue/src/views/user/module-address-edit/index.vue index 0205a6b4..1099eb67 100755 --- a/litemall-vue/src/views/user/module-address-edit/index.vue +++ b/litemall-vue/src/views/user/module-address-edit/index.vue @@ -1,112 +1,66 @@ - - - + + + diff --git a/litemall-vue/src/views/user/module-address/index.vue b/litemall-vue/src/views/user/module-address/index.vue index c1f1e91b..a68c624c 100755 --- a/litemall-vue/src/views/user/module-address/index.vue +++ b/litemall-vue/src/views/user/module-address/index.vue @@ -1,114 +1,65 @@ - - - - - - + + + + + + diff --git a/litemall-vue/src/views/user/module-collect/index.vue b/litemall-vue/src/views/user/module-collect/index.vue index e3093908..603bdd11 100644 --- a/litemall-vue/src/views/user/module-collect/index.vue +++ b/litemall-vue/src/views/user/module-collect/index.vue @@ -1,9 +1,5 @@ + \ No newline at end of file diff --git a/litemall-vue/src/views/user/module-server/index.vue b/litemall-vue/src/views/user/module-server/index.vue index 1fb2cbe4..ace5ecc9 100755 --- a/litemall-vue/src/views/user/module-server/index.vue +++ b/litemall-vue/src/views/user/module-server/index.vue @@ -3,16 +3,24 @@ - + - 电话 XXX + + + + + + + + +
+ \ No newline at end of file diff --git a/litemall-vue/src/views/user/order-ele-list/handle-status-10.vue b/litemall-vue/src/views/user/order-ele-list/handle-status-10.vue deleted file mode 100644 index 5911d0fd..00000000 --- a/litemall-vue/src/views/user/order-ele-list/handle-status-10.vue +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/litemall-vue/src/views/user/order-ele-list/handle-status-100.vue b/litemall-vue/src/views/user/order-ele-list/handle-status-100.vue deleted file mode 100644 index 0e54e2ba..00000000 --- a/litemall-vue/src/views/user/order-ele-list/handle-status-100.vue +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/litemall-vue/src/views/user/order-ele-list/handle-status-110.vue b/litemall-vue/src/views/user/order-ele-list/handle-status-110.vue deleted file mode 100644 index 69c7e082..00000000 --- a/litemall-vue/src/views/user/order-ele-list/handle-status-110.vue +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/litemall-vue/src/views/user/order-ele-list/handle-status-120.vue b/litemall-vue/src/views/user/order-ele-list/handle-status-120.vue deleted file mode 100644 index 69c7e082..00000000 --- a/litemall-vue/src/views/user/order-ele-list/handle-status-120.vue +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/litemall-vue/src/views/user/order-ele-list/handle-status-40.vue b/litemall-vue/src/views/user/order-ele-list/handle-status-40.vue deleted file mode 100644 index 69c7e082..00000000 --- a/litemall-vue/src/views/user/order-ele-list/handle-status-40.vue +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/litemall-vue/src/views/user/order-ele-list/handle-status-60.vue b/litemall-vue/src/views/user/order-ele-list/handle-status-60.vue deleted file mode 100644 index a754a66a..00000000 --- a/litemall-vue/src/views/user/order-ele-list/handle-status-60.vue +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/litemall-vue/src/views/user/order-ele-list/handle-status-70.vue b/litemall-vue/src/views/user/order-ele-list/handle-status-70.vue deleted file mode 100644 index a754a66a..00000000 --- a/litemall-vue/src/views/user/order-ele-list/handle-status-70.vue +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/litemall-vue/src/views/user/order-ele-list/index.vue b/litemall-vue/src/views/user/order-ele-list/index.vue index 7dc196e7..dd99dc1f 100644 --- a/litemall-vue/src/views/user/order-ele-list/index.vue +++ b/litemall-vue/src/views/user/order-ele-list/index.vue @@ -1,74 +1,50 @@ @@ -195,4 +111,89 @@ export default { padding: 10px; } } +.van-coupon-item { + overflow: hidden; + border-radius: 4px; + margin: 0 15px 15px; + background-color: #fff; + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.1); +} +.van-coupon-item:active { + background-color: #e8e8e8; +} +.van-coupon-item__content { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + height: 100px; + padding: 24px 0 0 15px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border:1px solid red; + +} +.van-coupon-item h2, +.van-coupon-item p { + margin: 0; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.van-coupon-item h2 { + height: 34px; + font-weight: 500; + line-height: 34px; +} +.van-coupon-item p { + font-size: 12px; + line-height: 16px; + color: #969799; +} +.van-coupon-item__head { + min-width: 90px; +} +.van-coupon-item__head h2 { + color: #f44; + font-size: 24px; +} +.van-coupon-item__head h2 span { + font-size: 50%; +} +.van-coupon-item__body { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + position: relative; + border-radius: 0 4px 4px 0; + margin-left:20px; +} +.van-coupon-item__body h2 { + font-size: 16px; +} +.van-coupon-item__corner { + top: 16px; + right: 15px; + position: absolute; +} +.van-coupon-item__corner .van-icon { + border-color: #f44; + background-color: #f44; +} +.van-coupon-item__reason { + padding: 7px 15px; + border-top: 1px dashed #ebedf0; + background-color: #fafafa; +} +.van-coupon-item--disabled:active { + background-color: #fff; +} +.van-coupon-item--disabled .van-coupon-item__content { + height: 90px; +} +.van-coupon-item--disabled h2, +.van-coupon-item--disabled p, +.van-coupon-item--disabled span { + color: #969799; +} diff --git a/litemall-vue/src/views/user/order-entity-list/handle-status-10.vue b/litemall-vue/src/views/user/order-entity-list/handle-status-10.vue deleted file mode 100644 index 49e77b20..00000000 --- a/litemall-vue/src/views/user/order-entity-list/handle-status-10.vue +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/litemall-vue/src/views/user/order-entity-list/handle-status-20.vue b/litemall-vue/src/views/user/order-entity-list/handle-status-20.vue deleted file mode 100644 index 0ffeebef..00000000 --- a/litemall-vue/src/views/user/order-entity-list/handle-status-20.vue +++ /dev/null @@ -1,13 +0,0 @@ - - - diff --git a/litemall-vue/src/views/user/order-entity-list/handle-status-25.vue b/litemall-vue/src/views/user/order-entity-list/handle-status-25.vue deleted file mode 100644 index f5996bc3..00000000 --- a/litemall-vue/src/views/user/order-entity-list/handle-status-25.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/litemall-vue/src/views/user/order-entity-list/handle-status-30.vue b/litemall-vue/src/views/user/order-entity-list/handle-status-30.vue deleted file mode 100644 index 787a28ae..00000000 --- a/litemall-vue/src/views/user/order-entity-list/handle-status-30.vue +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/litemall-vue/src/views/user/order-entity-list/handle-status-40.vue b/litemall-vue/src/views/user/order-entity-list/handle-status-40.vue deleted file mode 100644 index 995c998f..00000000 --- a/litemall-vue/src/views/user/order-entity-list/handle-status-40.vue +++ /dev/null @@ -1,8 +0,0 @@ - - - diff --git a/litemall-vue/src/views/user/order-entity-list/handle-status-50.vue b/litemall-vue/src/views/user/order-entity-list/handle-status-50.vue deleted file mode 100644 index 33e7369a..00000000 --- a/litemall-vue/src/views/user/order-entity-list/handle-status-50.vue +++ /dev/null @@ -1,8 +0,0 @@ - - - diff --git a/litemall-vue/src/views/user/order-entity-list/handle-status-60.vue b/litemall-vue/src/views/user/order-entity-list/handle-status-60.vue deleted file mode 100644 index 6672701a..00000000 --- a/litemall-vue/src/views/user/order-entity-list/handle-status-60.vue +++ /dev/null @@ -1,8 +0,0 @@ - - - diff --git a/litemall-vue/src/views/user/order-entity-list/handle-status-70.vue b/litemall-vue/src/views/user/order-entity-list/handle-status-70.vue deleted file mode 100644 index 6672701a..00000000 --- a/litemall-vue/src/views/user/order-entity-list/handle-status-70.vue +++ /dev/null @@ -1,8 +0,0 @@ - - - diff --git a/litemall-vue/src/views/user/order-entity-list/index.vue b/litemall-vue/src/views/user/order-entity-list/index.vue index 02872b97..49af6c8c 100644 --- a/litemall-vue/src/views/user/order-entity-list/index.vue +++ b/litemall-vue/src/views/user/order-entity-list/index.vue @@ -1,20 +1,15 @@ diff --git a/litemall-vue/src/views/user/tabbar-user-ecoupon.vue b/litemall-vue/src/views/user/tabbar-user-ecoupon.vue index eb3c98d8..4c6cecfb 100755 --- a/litemall-vue/src/views/user/tabbar-user-ecoupon.vue +++ b/litemall-vue/src/views/user/tabbar-user-ecoupon.vue @@ -8,19 +8,19 @@ -
+
待使用
-
+
已使用
-
+
过期关闭
-- Gitee From d6efbd651b4006628959bc3e51f114b7aea1624c Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Mon, 29 Apr 2019 14:00:41 +0800 Subject: [PATCH 105/391] =?UTF-8?q?SQL:=20=E6=95=B0=E6=8D=AE=E5=BA=93regio?= =?UTF-8?q?n=E8=A1=A8=E7=9A=84code=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-db/sql/litemall_data.sql | 4 ++-- litemall-db/sql/litemall_table.sql | 24 ++++++++++++------------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/litemall-db/sql/litemall_data.sql b/litemall-db/sql/litemall_data.sql index d7cfcad5..b61eeda8 100644 --- a/litemall-db/sql/litemall_data.sql +++ b/litemall-db/sql/litemall_data.sql @@ -40,7 +40,7 @@ UNLOCK TABLES; LOCK TABLES `litemall_admin` WRITE; /*!40000 ALTER TABLE `litemall_admin` DISABLE KEYS */; -INSERT INTO `litemall_admin` VALUES (1,'admin123','$2a$10$.rEfyBb/GURD9P2p0fRg/OAJGloGNDkJS4lY0cQHeqDgsbdTylBpu',NULL,NULL,'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif','2018-02-01 00:00:00','2018-02-01 00:00:00',0,'[1]'),(4,'promotion123','$2a$10$wDZLOLLnzZ1EFZ3ldZ1XFOUWDEX6TnQCUFdJz4g.PoMaLTzS8TjWq','',NULL,'\'','2019-01-07 15:16:59','2019-01-07 15:17:34',0,'[3]'),(5,'mall123','$2a$10$aCtsc4rG6KmxQ59.IkYse.oRyKuwQoU2CPCmxSdB.d5nXq6aw/z4O','',NULL,'\'','2019-01-07 15:17:25','2019-01-07 15:21:05',0,'[2]'); +INSERT INTO `litemall_admin` VALUES (1,'admin123','$2a$10$.rEfyBb/GURD9P2p0fRg/OAJGloGNDkJS4lY0cQHeqDgsbdTylBpu',NULL,NULL,'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif','2018-02-01 00:00:00','2018-02-01 00:00:00',0,'[1]'),(4,'promotion123','$2a$10$wDZLOLLnzZ1EFZ3ldZ1XFOUWDEX6TnQCUFdJz4g.PoMaLTzS8TjWq','',NULL,'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif','2019-01-07 15:16:59','2019-01-07 15:17:34',0,'[3]'),(5,'mall123','$2a$10$aCtsc4rG6KmxQ59.IkYse.oRyKuwQoU2CPCmxSdB.d5nXq6aw/z4O','',NULL,'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif','2019-01-07 15:17:25','2019-01-07 15:21:05',0,'[2]'); /*!40000 ALTER TABLE `litemall_admin` ENABLE KEYS */; UNLOCK TABLES; @@ -252,7 +252,7 @@ UNLOCK TABLES; LOCK TABLES `litemall_region` WRITE; /*!40000 ALTER TABLE `litemall_region` DISABLE KEYS */; -INSERT INTO `litemall_region` VALUES (1,0,'北京市',1,11),(2,0,'天津市',1,12),(3,0,'河北省',1,13),(4,0,'山西省',1,14),(5,0,'内蒙古自治区',1,15),(6,0,'辽宁省',1,21),(7,0,'吉林省',1,22),(8,0,'黑龙江省',1,23),(9,0,'上海市',1,31),(10,0,'江苏省',1,32),(11,0,'浙江省',1,33),(12,0,'安徽省',1,34),(13,0,'福建省',1,35),(14,0,'江西省',1,36),(15,0,'山东省',1,37),(16,0,'河南省',1,41),(17,0,'湖北省',1,42),(18,0,'湖南省',1,43),(19,0,'广东省',1,44),(20,0,'广西壮族自治区',1,45),(21,0,'海南省',1,46),(22,0,'重庆市',1,50),(23,0,'四川省',1,51),(24,0,'贵州省',1,52),(25,0,'云南省',1,53),(26,0,'西藏自治区',1,54),(27,0,'陕西省',1,61),(28,0,'甘肃省',1,62),(29,0,'青海省',1,63),(30,0,'宁夏回族自治区',1,64),(31,0,'新疆维吾尔自治区',1,65),(32,1,'市辖区',2,1101),(33,2,'市辖区',2,1201),(34,3,'石家庄市',2,1301),(35,3,'唐山市',2,1302),(36,3,'秦皇岛市',2,1303),(37,3,'邯郸市',2,1304),(38,3,'邢台市',2,1305),(39,3,'保定市',2,1306),(40,3,'张家口市',2,1307),(41,3,'承德市',2,1308),(42,3,'沧州市',2,1309),(43,3,'廊坊市',2,1310),(44,3,'衡水市',2,1311),(45,3,'省直辖县级行政区划',2,1390),(46,4,'太原市',2,1401),(47,4,'大同市',2,1402),(48,4,'阳泉市',2,1403),(49,4,'长治市',2,1404),(50,4,'晋城市',2,1405),(51,4,'朔州市',2,1406),(52,4,'晋中市',2,1407),(53,4,'运城市',2,1408),(54,4,'忻州市',2,1409),(55,4,'临汾市',2,1410),(56,4,'吕梁市',2,1411),(57,5,'呼和浩特市',2,1501),(58,5,'包头市',2,1502),(59,5,'乌海市',2,1503),(60,5,'赤峰市',2,1504),(61,5,'通辽市',2,1505),(62,5,'鄂尔多斯市',2,1506),(63,5,'呼伦贝尔市',2,1507),(64,5,'巴彦淖尔市',2,1508),(65,5,'乌兰察布市',2,1509),(66,5,'兴安盟',2,1522),(67,5,'锡林郭勒盟',2,1525),(68,5,'阿拉善盟',2,1529),(69,6,'沈阳市',2,2101),(70,6,'大连市',2,2102),(71,6,'鞍山市',2,2103),(72,6,'抚顺市',2,2104),(73,6,'本溪市',2,2105),(74,6,'丹东市',2,2106),(75,6,'锦州市',2,2107),(76,6,'营口市',2,2108),(77,6,'阜新市',2,2109),(78,6,'辽阳市',2,2110),(79,6,'盘锦市',2,2111),(80,6,'铁岭市',2,2112),(81,6,'朝阳市',2,2113),(82,6,'葫芦岛市',2,2114),(83,7,'长春市',2,2201),(84,7,'吉林市',2,2202),(85,7,'四平市',2,2203),(86,7,'辽源市',2,2204),(87,7,'通化市',2,2205),(88,7,'白山市',2,2206),(89,7,'松原市',2,2207),(90,7,'白城市',2,2208),(91,7,'延边朝鲜族自治州',2,2224),(92,8,'哈尔滨市',2,2301),(93,8,'齐齐哈尔市',2,2302),(94,8,'鸡西市',2,2303),(95,8,'鹤岗市',2,2304),(96,8,'双鸭山市',2,2305),(97,8,'大庆市',2,2306),(98,8,'伊春市',2,2307),(99,8,'佳木斯市',2,2308),(100,8,'七台河市',2,2309),(101,8,'牡丹江市',2,2310),(102,8,'黑河市',2,2311),(103,8,'绥化市',2,2312),(104,8,'大兴安岭地区',2,2327),(105,9,'市辖区',2,3101),(106,10,'南京市',2,3201),(107,10,'无锡市',2,3202),(108,10,'徐州市',2,3203),(109,10,'常州市',2,3204),(110,10,'苏州市',2,3205),(111,10,'南通市',2,3206),(112,10,'连云港市',2,3207),(113,10,'淮安市',2,3208),(114,10,'盐城市',2,3209),(115,10,'扬州市',2,3210),(116,10,'镇江市',2,3211),(117,10,'泰州市',2,3212),(118,10,'宿迁市',2,3213),(119,11,'杭州市',2,3301),(120,11,'宁波市',2,3302),(121,11,'温州市',2,3303),(122,11,'嘉兴市',2,3304),(123,11,'湖州市',2,3305),(124,11,'绍兴市',2,3306),(125,11,'金华市',2,3307),(126,11,'衢州市',2,3308),(127,11,'舟山市',2,3309),(128,11,'台州市',2,3310),(129,11,'丽水市',2,3311),(130,12,'合肥市',2,3401),(131,12,'芜湖市',2,3402),(132,12,'蚌埠市',2,3403),(133,12,'淮南市',2,3404),(134,12,'马鞍山市',2,3405),(135,12,'淮北市',2,3406),(136,12,'铜陵市',2,3407),(137,12,'安庆市',2,3408),(138,12,'黄山市',2,3410),(139,12,'滁州市',2,3411),(140,12,'阜阳市',2,3412),(141,12,'宿州市',2,3413),(142,12,'六安市',2,3415),(143,12,'亳州市',2,3416),(144,12,'池州市',2,3417),(145,12,'宣城市',2,3418),(146,13,'福州市',2,3501),(147,13,'厦门市',2,3502),(148,13,'莆田市',2,3503),(149,13,'三明市',2,3504),(150,13,'泉州市',2,3505),(151,13,'漳州市',2,3506),(152,13,'南平市',2,3507),(153,13,'龙岩市',2,3508),(154,13,'宁德市',2,3509),(155,14,'南昌市',2,3601),(156,14,'景德镇市',2,3602),(157,14,'萍乡市',2,3603),(158,14,'九江市',2,3604),(159,14,'新余市',2,3605),(160,14,'鹰潭市',2,3606),(161,14,'赣州市',2,3607),(162,14,'吉安市',2,3608),(163,14,'宜春市',2,3609),(164,14,'抚州市',2,3610),(165,14,'上饶市',2,3611),(166,15,'济南市',2,3701),(167,15,'青岛市',2,3702),(168,15,'淄博市',2,3703),(169,15,'枣庄市',2,3704),(170,15,'东营市',2,3705),(171,15,'烟台市',2,3706),(172,15,'潍坊市',2,3707),(173,15,'济宁市',2,3708),(174,15,'泰安市',2,3709),(175,15,'威海市',2,3710),(176,15,'日照市',2,3711),(177,15,'莱芜市',2,3712),(178,15,'临沂市',2,3713),(179,15,'德州市',2,3714),(180,15,'聊城市',2,3715),(181,15,'滨州市',2,3716),(182,15,'菏泽市',2,3717),(183,16,'郑州市',2,4101),(184,16,'开封市',2,4102),(185,16,'洛阳市',2,4103),(186,16,'平顶山市',2,4104),(187,16,'安阳市',2,4105),(188,16,'鹤壁市',2,4106),(189,16,'新乡市',2,4107),(190,16,'焦作市',2,4108),(191,16,'濮阳市',2,4109),(192,16,'许昌市',2,4110),(193,16,'漯河市',2,4111),(194,16,'三门峡市',2,4112),(195,16,'南阳市',2,4113),(196,16,'商丘市',2,4114),(197,16,'信阳市',2,4115),(198,16,'周口市',2,4116),(199,16,'驻马店市',2,4117),(200,16,'省直辖县级行政区划',2,4190),(201,17,'武汉市',2,4201),(202,17,'黄石市',2,4202),(203,17,'十堰市',2,4203),(204,17,'宜昌市',2,4205),(205,17,'襄阳市',2,4206),(206,17,'鄂州市',2,4207),(207,17,'荆门市',2,4208),(208,17,'孝感市',2,4209),(209,17,'荆州市',2,4210),(210,17,'黄冈市',2,4211),(211,17,'咸宁市',2,4212),(212,17,'随州市',2,4213),(213,17,'恩施土家族苗族自治州',2,4228),(214,17,'省直辖县级行政区划',2,4290),(215,18,'长沙市',2,4301),(216,18,'株洲市',2,4302),(217,18,'湘潭市',2,4303),(218,18,'衡阳市',2,4304),(219,18,'邵阳市',2,4305),(220,18,'岳阳市',2,4306),(221,18,'常德市',2,4307),(222,18,'张家界市',2,4308),(223,18,'益阳市',2,4309),(224,18,'郴州市',2,4310),(225,18,'永州市',2,4311),(226,18,'怀化市',2,4312),(227,18,'娄底市',2,4313),(228,18,'湘西土家族苗族自治州',2,4331),(229,19,'广州市',2,4401),(230,19,'韶关市',2,4402),(231,19,'深圳市',2,4403),(232,19,'珠海市',2,4404),(233,19,'汕头市',2,4405),(234,19,'佛山市',2,4406),(235,19,'江门市',2,4407),(236,19,'湛江市',2,4408),(237,19,'茂名市',2,4409),(238,19,'肇庆市',2,4412),(239,19,'惠州市',2,4413),(240,19,'梅州市',2,4414),(241,19,'汕尾市',2,4415),(242,19,'河源市',2,4416),(243,19,'阳江市',2,4417),(244,19,'清远市',2,4418),(245,19,'东莞市',2,4419),(246,19,'中山市',2,4420),(247,19,'潮州市',2,4451),(248,19,'揭阳市',2,4452),(249,19,'云浮市',2,4453),(250,20,'南宁市',2,4501),(251,20,'柳州市',2,4502),(252,20,'桂林市',2,4503),(253,20,'梧州市',2,4504),(254,20,'北海市',2,4505),(255,20,'防城港市',2,4506),(256,20,'钦州市',2,4507),(257,20,'贵港市',2,4508),(258,20,'玉林市',2,4509),(259,20,'百色市',2,4510),(260,20,'贺州市',2,4511),(261,20,'河池市',2,4512),(262,20,'来宾市',2,4513),(263,20,'崇左市',2,4514),(264,21,'海口市',2,4601),(265,21,'三亚市',2,4602),(266,21,'三沙市',2,4603),(267,21,'儋州市',2,4604),(268,21,'省直辖县级行政区划',2,4690),(269,22,'市辖区',2,5001),(270,22,'县',2,5002),(271,23,'成都市',2,5101),(272,23,'自贡市',2,5103),(273,23,'攀枝花市',2,5104),(274,23,'泸州市',2,5105),(275,23,'德阳市',2,5106),(276,23,'绵阳市',2,5107),(277,23,'广元市',2,5108),(278,23,'遂宁市',2,5109),(279,23,'内江市',2,5110),(280,23,'乐山市',2,5111),(281,23,'南充市',2,5113),(282,23,'眉山市',2,5114),(283,23,'宜宾市',2,5115),(284,23,'广安市',2,5116),(285,23,'达州市',2,5117),(286,23,'雅安市',2,5118),(287,23,'巴中市',2,5119),(288,23,'资阳市',2,5120),(289,23,'阿坝藏族羌族自治州',2,5132),(290,23,'甘孜藏族自治州',2,5133),(291,23,'凉山彝族自治州',2,5134),(292,24,'贵阳市',2,5201),(293,24,'六盘水市',2,5202),(294,24,'遵义市',2,5203),(295,24,'安顺市',2,5204),(296,24,'毕节市',2,5205),(297,24,'铜仁市',2,5206),(298,24,'黔西南布依族苗族自治州',2,5223),(299,24,'黔东南苗族侗族自治州',2,5226),(300,24,'黔南布依族苗族自治州',2,5227),(301,25,'昆明市',2,5301),(302,25,'曲靖市',2,5303),(303,25,'玉溪市',2,5304),(304,25,'保山市',2,5305),(305,25,'昭通市',2,5306),(306,25,'丽江市',2,5307),(307,25,'普洱市',2,5308),(308,25,'临沧市',2,5309),(309,25,'楚雄彝族自治州',2,5323),(310,25,'红河哈尼族彝族自治州',2,5325),(311,25,'文山壮族苗族自治州',2,5326),(312,25,'西双版纳傣族自治州',2,5328),(313,25,'大理白族自治州',2,5329),(314,25,'德宏傣族景颇族自治州',2,5331),(315,25,'怒江傈僳族自治州',2,5333),(316,25,'迪庆藏族自治州',2,5334),(317,26,'拉萨市',2,5401),(318,26,'日喀则市',2,5402),(319,26,'昌都市',2,5403),(320,26,'林芝市',2,5404),(321,26,'山南市',2,5405),(322,26,'那曲地区',2,5424),(323,26,'阿里地区',2,5425),(324,27,'西安市',2,6101),(325,27,'铜川市',2,6102),(326,27,'宝鸡市',2,6103),(327,27,'咸阳市',2,6104),(328,27,'渭南市',2,6105),(329,27,'延安市',2,6106),(330,27,'汉中市',2,6107),(331,27,'榆林市',2,6108),(332,27,'安康市',2,6109),(333,27,'商洛市',2,6110),(334,28,'兰州市',2,6201),(335,28,'嘉峪关市',2,6202),(336,28,'金昌市',2,6203),(337,28,'白银市',2,6204),(338,28,'天水市',2,6205),(339,28,'武威市',2,6206),(340,28,'张掖市',2,6207),(341,28,'平凉市',2,6208),(342,28,'酒泉市',2,6209),(343,28,'庆阳市',2,6210),(344,28,'定西市',2,6211),(345,28,'陇南市',2,6212),(346,28,'临夏回族自治州',2,6229),(347,28,'甘南藏族自治州',2,6230),(348,29,'西宁市',2,6301),(349,29,'海东市',2,6302),(350,29,'海北藏族自治州',2,6322),(351,29,'黄南藏族自治州',2,6323),(352,29,'海南藏族自治州',2,6325),(353,29,'果洛藏族自治州',2,6326),(354,29,'玉树藏族自治州',2,6327),(355,29,'海西蒙古族藏族自治州',2,6328),(356,30,'银川市',2,6401),(357,30,'石嘴山市',2,6402),(358,30,'吴忠市',2,6403),(359,30,'固原市',2,6404),(360,30,'中卫市',2,6405),(361,31,'乌鲁木齐市',2,6501),(362,31,'克拉玛依市',2,6502),(363,31,'吐鲁番市',2,6504),(364,31,'哈密市',2,6505),(365,31,'昌吉回族自治州',2,6523),(366,31,'博尔塔拉蒙古自治州',2,6527),(367,31,'巴音郭楞蒙古自治州',2,6528),(368,31,'阿克苏地区',2,6529),(369,31,'克孜勒苏柯尔克孜自治州',2,6530),(370,31,'喀什地区',2,6531),(371,31,'和田地区',2,6532),(372,31,'伊犁哈萨克自治州',2,6540),(373,31,'塔城地区',2,6542),(374,31,'阿勒泰地区',2,6543),(375,31,'自治区直辖县级行政区划',2,6590),(376,32,'东城区',3,110101),(377,32,'西城区',3,110102),(378,32,'朝阳区',3,110105),(379,32,'丰台区',3,110106),(380,32,'石景山区',3,110107),(381,32,'海淀区',3,110108),(382,32,'门头沟区',3,110109),(383,32,'房山区',3,110111),(384,32,'通州区',3,110112),(385,32,'顺义区',3,110113),(386,32,'昌平区',3,110114),(387,32,'大兴区',3,110115),(388,32,'怀柔区',3,110116),(389,32,'平谷区',3,110117),(390,32,'密云区',3,110118),(391,32,'延庆区',3,110119),(392,33,'和平区',3,120101),(393,33,'河东区',3,120102),(394,33,'河西区',3,120103),(395,33,'南开区',3,120104),(396,33,'河北区',3,120105),(397,33,'红桥区',3,120106),(398,33,'东丽区',3,120110),(399,33,'西青区',3,120111),(400,33,'津南区',3,120112),(401,33,'北辰区',3,120113),(402,33,'武清区',3,120114),(403,33,'宝坻区',3,120115),(404,33,'滨海新区',3,120116),(405,33,'宁河区',3,120117),(406,33,'静海区',3,120118),(407,33,'蓟州区',3,120119),(408,34,'长安区',3,130102),(409,34,'桥西区',3,130104),(410,34,'新华区',3,130105),(411,34,'井陉矿区',3,130107),(412,34,'裕华区',3,130108),(413,34,'藁城区',3,130109),(414,34,'鹿泉区',3,130110),(415,34,'栾城区',3,130111),(416,34,'井陉县',3,130121),(417,34,'正定县',3,130123),(418,34,'行唐县',3,130125),(419,34,'灵寿县',3,130126),(420,34,'高邑县',3,130127),(421,34,'深泽县',3,130128),(422,34,'赞皇县',3,130129),(423,34,'无极县',3,130130),(424,34,'平山县',3,130131),(425,34,'元氏县',3,130132),(426,34,'赵县',3,130133),(427,34,'晋州市',3,130183),(428,34,'新乐市',3,130184),(429,35,'路南区',3,130202),(430,35,'路北区',3,130203),(431,35,'古冶区',3,130204),(432,35,'开平区',3,130205),(433,35,'丰南区',3,130207),(434,35,'丰润区',3,130208),(435,35,'曹妃甸区',3,130209),(436,35,'滦县',3,130223),(437,35,'滦南县',3,130224),(438,35,'乐亭县',3,130225),(439,35,'迁西县',3,130227),(440,35,'玉田县',3,130229),(441,35,'遵化市',3,130281),(442,35,'迁安市',3,130283),(443,36,'海港区',3,130302),(444,36,'山海关区',3,130303),(445,36,'北戴河区',3,130304),(446,36,'抚宁区',3,130306),(447,36,'青龙满族自治县',3,130321),(448,36,'昌黎县',3,130322),(449,36,'卢龙县',3,130324),(450,37,'邯山区',3,130402),(451,37,'丛台区',3,130403),(452,37,'复兴区',3,130404),(453,37,'峰峰矿区',3,130406),(454,37,'邯郸县',3,130421),(455,37,'临漳县',3,130423),(456,37,'成安县',3,130424),(457,37,'大名县',3,130425),(458,37,'涉县',3,130426),(459,37,'磁县',3,130427),(460,37,'肥乡县',3,130428),(461,37,'永年县',3,130429),(462,37,'邱县',3,130430),(463,37,'鸡泽县',3,130431),(464,37,'广平县',3,130432),(465,37,'馆陶县',3,130433),(466,37,'魏县',3,130434),(467,37,'曲周县',3,130435),(468,37,'武安市',3,130481),(469,38,'桥东区',3,130502),(470,38,'桥西区',3,130503),(471,38,'邢台县',3,130521),(472,38,'临城县',3,130522),(473,38,'内丘县',3,130523),(474,38,'柏乡县',3,130524),(475,38,'隆尧县',3,130525),(476,38,'任县',3,130526),(477,38,'南和县',3,130527),(478,38,'宁晋县',3,130528),(479,38,'巨鹿县',3,130529),(480,38,'新河县',3,130530),(481,38,'广宗县',3,130531),(482,38,'平乡县',3,130532),(483,38,'威县',3,130533),(484,38,'清河县',3,130534),(485,38,'临西县',3,130535),(486,38,'南宫市',3,130581),(487,38,'沙河市',3,130582),(488,39,'竞秀区',3,130602),(489,39,'莲池区',3,130606),(490,39,'满城区',3,130607),(491,39,'清苑区',3,130608),(492,39,'徐水区',3,130609),(493,39,'涞水县',3,130623),(494,39,'阜平县',3,130624),(495,39,'定兴县',3,130626),(496,39,'唐县',3,130627),(497,39,'高阳县',3,130628),(498,39,'容城县',3,130629),(499,39,'涞源县',3,130630),(500,39,'望都县',3,130631),(501,39,'安新县',3,130632),(502,39,'易县',3,130633),(503,39,'曲阳县',3,130634),(504,39,'蠡县',3,130635),(505,39,'顺平县',3,130636),(506,39,'博野县',3,130637),(507,39,'雄县',3,130638),(508,39,'涿州市',3,130681),(509,39,'安国市',3,130683),(510,39,'高碑店市',3,130684),(511,40,'桥东区',3,130702),(512,40,'桥西区',3,130703),(513,40,'宣化区',3,130705),(514,40,'下花园区',3,130706),(515,40,'万全区',3,130708),(516,40,'崇礼区',3,130709),(517,40,'张北县',3,130722),(518,40,'康保县',3,130723),(519,40,'沽源县',3,130724),(520,40,'尚义县',3,130725),(521,40,'蔚县',3,130726),(522,40,'阳原县',3,130727),(523,40,'怀安县',3,130728),(524,40,'怀来县',3,130730),(525,40,'涿鹿县',3,130731),(526,40,'赤城县',3,130732),(527,41,'双桥区',3,130802),(528,41,'双滦区',3,130803),(529,41,'鹰手营子矿区',3,130804),(530,41,'承德县',3,130821),(531,41,'兴隆县',3,130822),(532,41,'平泉县',3,130823),(533,41,'滦平县',3,130824),(534,41,'隆化县',3,130825),(535,41,'丰宁满族自治县',3,130826),(536,41,'宽城满族自治县',3,130827),(537,41,'围场满族蒙古族自治县',3,130828),(538,42,'新华区',3,130902),(539,42,'运河区',3,130903),(540,42,'沧县',3,130921),(541,42,'青县',3,130922),(542,42,'东光县',3,130923),(543,42,'海兴县',3,130924),(544,42,'盐山县',3,130925),(545,42,'肃宁县',3,130926),(546,42,'南皮县',3,130927),(547,42,'吴桥县',3,130928),(548,42,'献县',3,130929),(549,42,'孟村回族自治县',3,130930),(550,42,'泊头市',3,130981),(551,42,'任丘市',3,130982),(552,42,'黄骅市',3,130983),(553,42,'河间市',3,130984),(554,43,'安次区',3,131002),(555,43,'广阳区',3,131003),(556,43,'固安县',3,131022),(557,43,'永清县',3,131023),(558,43,'香河县',3,131024),(559,43,'大城县',3,131025),(560,43,'文安县',3,131026),(561,43,'大厂回族自治县',3,131028),(562,43,'霸州市',3,131081),(563,43,'三河市',3,131082),(564,44,'桃城区',3,131102),(565,44,'冀州区',3,131103),(566,44,'枣强县',3,131121),(567,44,'武邑县',3,131122),(568,44,'武强县',3,131123),(569,44,'饶阳县',3,131124),(570,44,'安平县',3,131125),(571,44,'故城县',3,131126),(572,44,'景县',3,131127),(573,44,'阜城县',3,131128),(574,44,'深州市',3,131182),(575,45,'定州市',3,139001),(576,45,'辛集市',3,139002),(577,46,'小店区',3,140105),(578,46,'迎泽区',3,140106),(579,46,'杏花岭区',3,140107),(580,46,'尖草坪区',3,140108),(581,46,'万柏林区',3,140109),(582,46,'晋源区',3,140110),(583,46,'清徐县',3,140121),(584,46,'阳曲县',3,140122),(585,46,'娄烦县',3,140123),(586,46,'古交市',3,140181),(587,47,'城区',3,140202),(588,47,'矿区',3,140203),(589,47,'南郊区',3,140211),(590,47,'新荣区',3,140212),(591,47,'阳高县',3,140221),(592,47,'天镇县',3,140222),(593,47,'广灵县',3,140223),(594,47,'灵丘县',3,140224),(595,47,'浑源县',3,140225),(596,47,'左云县',3,140226),(597,47,'大同县',3,140227),(598,48,'城区',3,140302),(599,48,'矿区',3,140303),(600,48,'郊区',3,140311),(601,48,'平定县',3,140321),(602,48,'盂县',3,140322),(603,49,'城区',3,140402),(604,49,'郊区',3,140411),(605,49,'长治县',3,140421),(606,49,'襄垣县',3,140423),(607,49,'屯留县',3,140424),(608,49,'平顺县',3,140425),(609,49,'黎城县',3,140426),(610,49,'壶关县',3,140427),(611,49,'长子县',3,140428),(612,49,'武乡县',3,140429),(613,49,'沁县',3,140430),(614,49,'沁源县',3,140431),(615,49,'潞城市',3,140481),(616,50,'城区',3,140502),(617,50,'沁水县',3,140521),(618,50,'阳城县',3,140522),(619,50,'陵川县',3,140524),(620,50,'泽州县',3,140525),(621,50,'高平市',3,140581),(622,51,'朔城区',3,140602),(623,51,'平鲁区',3,140603),(624,51,'山阴县',3,140621),(625,51,'应县',3,140622),(626,51,'右玉县',3,140623),(627,51,'怀仁县',3,140624),(628,52,'榆次区',3,140702),(629,52,'榆社县',3,140721),(630,52,'左权县',3,140722),(631,52,'和顺县',3,140723),(632,52,'昔阳县',3,140724),(633,52,'寿阳县',3,140725),(634,52,'太谷县',3,140726),(635,52,'祁县',3,140727),(636,52,'平遥县',3,140728),(637,52,'灵石县',3,140729),(638,52,'介休市',3,140781),(639,53,'盐湖区',3,140802),(640,53,'临猗县',3,140821),(641,53,'万荣县',3,140822),(642,53,'闻喜县',3,140823),(643,53,'稷山县',3,140824),(644,53,'新绛县',3,140825),(645,53,'绛县',3,140826),(646,53,'垣曲县',3,140827),(647,53,'夏县',3,140828),(648,53,'平陆县',3,140829),(649,53,'芮城县',3,140830),(650,53,'永济市',3,140881),(651,53,'河津市',3,140882),(652,54,'忻府区',3,140902),(653,54,'定襄县',3,140921),(654,54,'五台县',3,140922),(655,54,'代县',3,140923),(656,54,'繁峙县',3,140924),(657,54,'宁武县',3,140925),(658,54,'静乐县',3,140926),(659,54,'神池县',3,140927),(660,54,'五寨县',3,140928),(661,54,'岢岚县',3,140929),(662,54,'河曲县',3,140930),(663,54,'保德县',3,140931),(664,54,'偏关县',3,140932),(665,54,'原平市',3,140981),(666,55,'尧都区',3,141002),(667,55,'曲沃县',3,141021),(668,55,'翼城县',3,141022),(669,55,'襄汾县',3,141023),(670,55,'洪洞县',3,141024),(671,55,'古县',3,141025),(672,55,'安泽县',3,141026),(673,55,'浮山县',3,141027),(674,55,'吉县',3,141028),(675,55,'乡宁县',3,141029),(676,55,'大宁县',3,141030),(677,55,'隰县',3,141031),(678,55,'永和县',3,141032),(679,55,'蒲县',3,141033),(680,55,'汾西县',3,141034),(681,55,'侯马市',3,141081),(682,55,'霍州市',3,141082),(683,56,'离石区',3,141102),(684,56,'文水县',3,141121),(685,56,'交城县',3,141122),(686,56,'兴县',3,141123),(687,56,'临县',3,141124),(688,56,'柳林县',3,141125),(689,56,'石楼县',3,141126),(690,56,'岚县',3,141127),(691,56,'方山县',3,141128),(692,56,'中阳县',3,141129),(693,56,'交口县',3,141130),(694,56,'孝义市',3,141181),(695,56,'汾阳市',3,141182),(696,57,'新城区',3,150102),(697,57,'回民区',3,150103),(698,57,'玉泉区',3,150104),(699,57,'赛罕区',3,150105),(700,57,'土默特左旗',3,150121),(701,57,'托克托县',3,150122),(702,57,'和林格尔县',3,150123),(703,57,'清水河县',3,150124),(704,57,'武川县',3,150125),(705,58,'东河区',3,150202),(706,58,'昆都仑区',3,150203),(707,58,'青山区',3,150204),(708,58,'石拐区',3,150205),(709,58,'白云鄂博矿区',3,150206),(710,58,'九原区',3,150207),(711,58,'土默特右旗',3,150221),(712,58,'固阳县',3,150222),(713,58,'达尔罕茂明安联合旗',3,150223),(714,59,'海勃湾区',3,150302),(715,59,'海南区',3,150303),(716,59,'乌达区',3,150304),(717,60,'红山区',3,150402),(718,60,'元宝山区',3,150403),(719,60,'松山区',3,150404),(720,60,'阿鲁科尔沁旗',3,150421),(721,60,'巴林左旗',3,150422),(722,60,'巴林右旗',3,150423),(723,60,'林西县',3,150424),(724,60,'克什克腾旗',3,150425),(725,60,'翁牛特旗',3,150426),(726,60,'喀喇沁旗',3,150428),(727,60,'宁城县',3,150429),(728,60,'敖汉旗',3,150430),(729,61,'科尔沁区',3,150502),(730,61,'科尔沁左翼中旗',3,150521),(731,61,'科尔沁左翼后旗',3,150522),(732,61,'开鲁县',3,150523),(733,61,'库伦旗',3,150524),(734,61,'奈曼旗',3,150525),(735,61,'扎鲁特旗',3,150526),(736,61,'霍林郭勒市',3,150581),(737,62,'东胜区',3,150602),(738,62,'康巴什区',3,150603),(739,62,'达拉特旗',3,150621),(740,62,'准格尔旗',3,150622),(741,62,'鄂托克前旗',3,150623),(742,62,'鄂托克旗',3,150624),(743,62,'杭锦旗',3,150625),(744,62,'乌审旗',3,150626),(745,62,'伊金霍洛旗',3,150627),(746,63,'海拉尔区',3,150702),(747,63,'扎赉诺尔区',3,150703),(748,63,'阿荣旗',3,150721),(749,63,'莫力达瓦达斡尔族自治旗',3,150722),(750,63,'鄂伦春自治旗',3,150723),(751,63,'鄂温克族自治旗',3,150724),(752,63,'陈巴尔虎旗',3,150725),(753,63,'新巴尔虎左旗',3,150726),(754,63,'新巴尔虎右旗',3,150727),(755,63,'满洲里市',3,150781),(756,63,'牙克石市',3,150782),(757,63,'扎兰屯市',3,150783),(758,63,'额尔古纳市',3,150784),(759,63,'根河市',3,150785),(760,64,'临河区',3,150802),(761,64,'五原县',3,150821),(762,64,'磴口县',3,150822),(763,64,'乌拉特前旗',3,150823),(764,64,'乌拉特中旗',3,150824),(765,64,'乌拉特后旗',3,150825),(766,64,'杭锦后旗',3,150826),(767,65,'集宁区',3,150902),(768,65,'卓资县',3,150921),(769,65,'化德县',3,150922),(770,65,'商都县',3,150923),(771,65,'兴和县',3,150924),(772,65,'凉城县',3,150925),(773,65,'察哈尔右翼前旗',3,150926),(774,65,'察哈尔右翼中旗',3,150927),(775,65,'察哈尔右翼后旗',3,150928),(776,65,'四子王旗',3,150929),(777,65,'丰镇市',3,150981),(778,66,'乌兰浩特市',3,152201),(779,66,'阿尔山市',3,152202),(780,66,'科尔沁右翼前旗',3,152221),(781,66,'科尔沁右翼中旗',3,152222),(782,66,'扎赉特旗',3,152223),(783,66,'突泉县',3,152224),(784,67,'二连浩特市',3,152501),(785,67,'锡林浩特市',3,152502),(786,67,'阿巴嘎旗',3,152522),(787,67,'苏尼特左旗',3,152523),(788,67,'苏尼特右旗',3,152524),(789,67,'东乌珠穆沁旗',3,152525),(790,67,'西乌珠穆沁旗',3,152526),(791,67,'太仆寺旗',3,152527),(792,67,'镶黄旗',3,152528),(793,67,'正镶白旗',3,152529),(794,67,'正蓝旗',3,152530),(795,67,'多伦县',3,152531),(796,68,'阿拉善左旗',3,152921),(797,68,'阿拉善右旗',3,152922),(798,68,'额济纳旗',3,152923),(799,69,'和平区',3,210102),(800,69,'沈河区',3,210103),(801,69,'大东区',3,210104),(802,69,'皇姑区',3,210105),(803,69,'铁西区',3,210106),(804,69,'苏家屯区',3,210111),(805,69,'浑南区',3,210112),(806,69,'沈北新区',3,210113),(807,69,'于洪区',3,210114),(808,69,'辽中区',3,210115),(809,69,'康平县',3,210123),(810,69,'法库县',3,210124),(811,69,'新民市',3,210181),(812,70,'中山区',3,210202),(813,70,'西岗区',3,210203),(814,70,'沙河口区',3,210204),(815,70,'甘井子区',3,210211),(816,70,'旅顺口区',3,210212),(817,70,'金州区',3,210213),(818,70,'普兰店区',3,210214),(819,70,'长海县',3,210224),(820,70,'瓦房店市',3,210281),(821,70,'庄河市',3,210283),(822,71,'铁东区',3,210302),(823,71,'铁西区',3,210303),(824,71,'立山区',3,210304),(825,71,'千山区',3,210311),(826,71,'台安县',3,210321),(827,71,'岫岩满族自治县',3,210323),(828,71,'海城市',3,210381),(829,72,'新抚区',3,210402),(830,72,'东洲区',3,210403),(831,72,'望花区',3,210404),(832,72,'顺城区',3,210411),(833,72,'抚顺县',3,210421),(834,72,'新宾满族自治县',3,210422),(835,72,'清原满族自治县',3,210423),(836,73,'平山区',3,210502),(837,73,'溪湖区',3,210503),(838,73,'明山区',3,210504),(839,73,'南芬区',3,210505),(840,73,'本溪满族自治县',3,210521),(841,73,'桓仁满族自治县',3,210522),(842,74,'元宝区',3,210602),(843,74,'振兴区',3,210603),(844,74,'振安区',3,210604),(845,74,'宽甸满族自治县',3,210624),(846,74,'东港市',3,210681),(847,74,'凤城市',3,210682),(848,75,'古塔区',3,210702),(849,75,'凌河区',3,210703),(850,75,'太和区',3,210711),(851,75,'黑山县',3,210726),(852,75,'义县',3,210727),(853,75,'凌海市',3,210781),(854,75,'北镇市',3,210782),(855,76,'站前区',3,210802),(856,76,'西市区',3,210803),(857,76,'鲅鱼圈区',3,210804),(858,76,'老边区',3,210811),(859,76,'盖州市',3,210881),(860,76,'大石桥市',3,210882),(861,77,'海州区',3,210902),(862,77,'新邱区',3,210903),(863,77,'太平区',3,210904),(864,77,'清河门区',3,210905),(865,77,'细河区',3,210911),(866,77,'阜新蒙古族自治县',3,210921),(867,77,'彰武县',3,210922),(868,78,'白塔区',3,211002),(869,78,'文圣区',3,211003),(870,78,'宏伟区',3,211004),(871,78,'弓长岭区',3,211005),(872,78,'太子河区',3,211011),(873,78,'辽阳县',3,211021),(874,78,'灯塔市',3,211081),(875,79,'双台子区',3,211102),(876,79,'兴隆台区',3,211103),(877,79,'大洼区',3,211104),(878,79,'盘山县',3,211122),(879,80,'银州区',3,211202),(880,80,'清河区',3,211204),(881,80,'铁岭县',3,211221),(882,80,'西丰县',3,211223),(883,80,'昌图县',3,211224),(884,80,'调兵山市',3,211281),(885,80,'开原市',3,211282),(886,81,'双塔区',3,211302),(887,81,'龙城区',3,211303),(888,81,'朝阳县',3,211321),(889,81,'建平县',3,211322),(890,81,'喀喇沁左翼蒙古族自治县',3,211324),(891,81,'北票市',3,211381),(892,81,'凌源市',3,211382),(893,82,'连山区',3,211402),(894,82,'龙港区',3,211403),(895,82,'南票区',3,211404),(896,82,'绥中县',3,211421),(897,82,'建昌县',3,211422),(898,82,'兴城市',3,211481),(899,83,'南关区',3,220102),(900,83,'宽城区',3,220103),(901,83,'朝阳区',3,220104),(902,83,'二道区',3,220105),(903,83,'绿园区',3,220106),(904,83,'双阳区',3,220112),(905,83,'九台区',3,220113),(906,83,'农安县',3,220122),(907,83,'榆树市',3,220182),(908,83,'德惠市',3,220183),(909,84,'昌邑区',3,220202),(910,84,'龙潭区',3,220203),(911,84,'船营区',3,220204),(912,84,'丰满区',3,220211),(913,84,'永吉县',3,220221),(914,84,'蛟河市',3,220281),(915,84,'桦甸市',3,220282),(916,84,'舒兰市',3,220283),(917,84,'磐石市',3,220284),(918,85,'铁西区',3,220302),(919,85,'铁东区',3,220303),(920,85,'梨树县',3,220322),(921,85,'伊通满族自治县',3,220323),(922,85,'公主岭市',3,220381),(923,85,'双辽市',3,220382),(924,86,'龙山区',3,220402),(925,86,'西安区',3,220403),(926,86,'东丰县',3,220421),(927,86,'东辽县',3,220422),(928,87,'东昌区',3,220502),(929,87,'二道江区',3,220503),(930,87,'通化县',3,220521),(931,87,'辉南县',3,220523),(932,87,'柳河县',3,220524),(933,87,'梅河口市',3,220581),(934,87,'集安市',3,220582),(935,88,'浑江区',3,220602),(936,88,'江源区',3,220605),(937,88,'抚松县',3,220621),(938,88,'靖宇县',3,220622),(939,88,'长白朝鲜族自治县',3,220623),(940,88,'临江市',3,220681),(941,89,'宁江区',3,220702),(942,89,'前郭尔罗斯蒙古族自治县',3,220721),(943,89,'长岭县',3,220722),(944,89,'乾安县',3,220723),(945,89,'扶余市',3,220781),(946,90,'洮北区',3,220802),(947,90,'镇赉县',3,220821),(948,90,'通榆县',3,220822),(949,90,'洮南市',3,220881),(950,90,'大安市',3,220882),(951,91,'延吉市',3,222401),(952,91,'图们市',3,222402),(953,91,'敦化市',3,222403),(954,91,'珲春市',3,222404),(955,91,'龙井市',3,222405),(956,91,'和龙市',3,222406),(957,91,'汪清县',3,222424),(958,91,'安图县',3,222426),(959,92,'道里区',3,230102),(960,92,'南岗区',3,230103),(961,92,'道外区',3,230104),(962,92,'平房区',3,230108),(963,92,'松北区',3,230109),(964,92,'香坊区',3,230110),(965,92,'呼兰区',3,230111),(966,92,'阿城区',3,230112),(967,92,'双城区',3,230113),(968,92,'依兰县',3,230123),(969,92,'方正县',3,230124),(970,92,'宾县',3,230125),(971,92,'巴彦县',3,230126),(972,92,'木兰县',3,230127),(973,92,'通河县',3,230128),(974,92,'延寿县',3,230129),(975,92,'尚志市',3,230183),(976,92,'五常市',3,230184),(977,93,'龙沙区',3,230202),(978,93,'建华区',3,230203),(979,93,'铁锋区',3,230204),(980,93,'昂昂溪区',3,230205),(981,93,'富拉尔基区',3,230206),(982,93,'碾子山区',3,230207),(983,93,'梅里斯达斡尔族区',3,230208),(984,93,'龙江县',3,230221),(985,93,'依安县',3,230223),(986,93,'泰来县',3,230224),(987,93,'甘南县',3,230225),(988,93,'富裕县',3,230227),(989,93,'克山县',3,230229),(990,93,'克东县',3,230230),(991,93,'拜泉县',3,230231),(992,93,'讷河市',3,230281),(993,94,'鸡冠区',3,230302),(994,94,'恒山区',3,230303),(995,94,'滴道区',3,230304),(996,94,'梨树区',3,230305),(997,94,'城子河区',3,230306),(998,94,'麻山区',3,230307),(999,94,'鸡东县',3,230321),(1000,94,'虎林市',3,230381),(1001,94,'密山市',3,230382),(1002,95,'向阳区',3,230402),(1003,95,'工农区',3,230403),(1004,95,'南山区',3,230404),(1005,95,'兴安区',3,230405),(1006,95,'东山区',3,230406),(1007,95,'兴山区',3,230407),(1008,95,'萝北县',3,230421),(1009,95,'绥滨县',3,230422),(1010,96,'尖山区',3,230502),(1011,96,'岭东区',3,230503),(1012,96,'四方台区',3,230505),(1013,96,'宝山区',3,230506),(1014,96,'集贤县',3,230521),(1015,96,'友谊县',3,230522),(1016,96,'宝清县',3,230523),(1017,96,'饶河县',3,230524),(1018,97,'萨尔图区',3,230602),(1019,97,'龙凤区',3,230603),(1020,97,'让胡路区',3,230604),(1021,97,'红岗区',3,230605),(1022,97,'大同区',3,230606),(1023,97,'肇州县',3,230621),(1024,97,'肇源县',3,230622),(1025,97,'林甸县',3,230623),(1026,97,'杜尔伯特蒙古族自治县',3,230624),(1027,98,'伊春区',3,230702),(1028,98,'南岔区',3,230703),(1029,98,'友好区',3,230704),(1030,98,'西林区',3,230705),(1031,98,'翠峦区',3,230706),(1032,98,'新青区',3,230707),(1033,98,'美溪区',3,230708),(1034,98,'金山屯区',3,230709),(1035,98,'五营区',3,230710),(1036,98,'乌马河区',3,230711),(1037,98,'汤旺河区',3,230712),(1038,98,'带岭区',3,230713),(1039,98,'乌伊岭区',3,230714),(1040,98,'红星区',3,230715),(1041,98,'上甘岭区',3,230716),(1042,98,'嘉荫县',3,230722),(1043,98,'铁力市',3,230781),(1044,99,'向阳区',3,230803),(1045,99,'前进区',3,230804),(1046,99,'东风区',3,230805),(1047,99,'郊区',3,230811),(1048,99,'桦南县',3,230822),(1049,99,'桦川县',3,230826),(1050,99,'汤原县',3,230828),(1051,99,'同江市',3,230881),(1052,99,'富锦市',3,230882),(1053,99,'抚远市',3,230883),(1054,100,'新兴区',3,230902),(1055,100,'桃山区',3,230903),(1056,100,'茄子河区',3,230904),(1057,100,'勃利县',3,230921),(1058,101,'东安区',3,231002),(1059,101,'阳明区',3,231003),(1060,101,'爱民区',3,231004),(1061,101,'西安区',3,231005),(1062,101,'林口县',3,231025),(1063,101,'绥芬河市',3,231081),(1064,101,'海林市',3,231083),(1065,101,'宁安市',3,231084),(1066,101,'穆棱市',3,231085),(1067,101,'东宁市',3,231086),(1068,102,'爱辉区',3,231102),(1069,102,'嫩江县',3,231121),(1070,102,'逊克县',3,231123),(1071,102,'孙吴县',3,231124),(1072,102,'北安市',3,231181),(1073,102,'五大连池市',3,231182),(1074,103,'北林区',3,231202),(1075,103,'望奎县',3,231221),(1076,103,'兰西县',3,231222),(1077,103,'青冈县',3,231223),(1078,103,'庆安县',3,231224),(1079,103,'明水县',3,231225),(1080,103,'绥棱县',3,231226),(1081,103,'安达市',3,231281),(1082,103,'肇东市',3,231282),(1083,103,'海伦市',3,231283),(1084,104,'呼玛县',3,232721),(1085,104,'塔河县',3,232722),(1086,104,'漠河县',3,232723),(1087,105,'黄浦区',3,310101),(1088,105,'徐汇区',3,310104),(1089,105,'长宁区',3,310105),(1090,105,'静安区',3,310106),(1091,105,'普陀区',3,310107),(1092,105,'虹口区',3,310109),(1093,105,'杨浦区',3,310110),(1094,105,'闵行区',3,310112),(1095,105,'宝山区',3,310113),(1096,105,'嘉定区',3,310114),(1097,105,'浦东新区',3,310115),(1098,105,'金山区',3,310116),(1099,105,'松江区',3,310117),(1100,105,'青浦区',3,310118),(1101,105,'奉贤区',3,310120),(1102,105,'崇明区',3,310151),(1103,106,'玄武区',3,320102),(1104,106,'秦淮区',3,320104),(1105,106,'建邺区',3,320105),(1106,106,'鼓楼区',3,320106),(1107,106,'浦口区',3,320111),(1108,106,'栖霞区',3,320113),(1109,106,'雨花台区',3,320114),(1110,106,'江宁区',3,320115),(1111,106,'六合区',3,320116),(1112,106,'溧水区',3,320117),(1113,106,'高淳区',3,320118),(1114,107,'锡山区',3,320205),(1115,107,'惠山区',3,320206),(1116,107,'滨湖区',3,320211),(1117,107,'梁溪区',3,320213),(1118,107,'新吴区',3,320214),(1119,107,'江阴市',3,320281),(1120,107,'宜兴市',3,320282),(1121,108,'鼓楼区',3,320302),(1122,108,'云龙区',3,320303),(1123,108,'贾汪区',3,320305),(1124,108,'泉山区',3,320311),(1125,108,'铜山区',3,320312),(1126,108,'丰县',3,320321),(1127,108,'沛县',3,320322),(1128,108,'睢宁县',3,320324),(1129,108,'新沂市',3,320381),(1130,108,'邳州市',3,320382),(1131,109,'天宁区',3,320402),(1132,109,'钟楼区',3,320404),(1133,109,'新北区',3,320411),(1134,109,'武进区',3,320412),(1135,109,'金坛区',3,320413),(1136,109,'溧阳市',3,320481),(1137,110,'虎丘区',3,320505),(1138,110,'吴中区',3,320506),(1139,110,'相城区',3,320507),(1140,110,'姑苏区',3,320508),(1141,110,'吴江区',3,320509),(1142,110,'常熟市',3,320581),(1143,110,'张家港市',3,320582),(1144,110,'昆山市',3,320583),(1145,110,'太仓市',3,320585),(1146,111,'崇川区',3,320602),(1147,111,'港闸区',3,320611),(1148,111,'通州区',3,320612),(1149,111,'海安县',3,320621),(1150,111,'如东县',3,320623),(1151,111,'启东市',3,320681),(1152,111,'如皋市',3,320682),(1153,111,'海门市',3,320684),(1154,112,'连云区',3,320703),(1155,112,'海州区',3,320706),(1156,112,'赣榆区',3,320707),(1157,112,'东海县',3,320722),(1158,112,'灌云县',3,320723),(1159,112,'灌南县',3,320724),(1160,113,'淮安区',3,320803),(1161,113,'淮阴区',3,320804),(1162,113,'清江浦区',3,320812),(1163,113,'洪泽区',3,320813),(1164,113,'涟水县',3,320826),(1165,113,'盱眙县',3,320830),(1166,113,'金湖县',3,320831),(1167,114,'亭湖区',3,320902),(1168,114,'盐都区',3,320903),(1169,114,'大丰区',3,320904),(1170,114,'响水县',3,320921),(1171,114,'滨海县',3,320922),(1172,114,'阜宁县',3,320923),(1173,114,'射阳县',3,320924),(1174,114,'建湖县',3,320925),(1175,114,'东台市',3,320981),(1176,115,'广陵区',3,321002),(1177,115,'邗江区',3,321003),(1178,115,'江都区',3,321012),(1179,115,'宝应县',3,321023),(1180,115,'仪征市',3,321081),(1181,115,'高邮市',3,321084),(1182,116,'京口区',3,321102),(1183,116,'润州区',3,321111),(1184,116,'丹徒区',3,321112),(1185,116,'丹阳市',3,321181),(1186,116,'扬中市',3,321182),(1187,116,'句容市',3,321183),(1188,117,'海陵区',3,321202),(1189,117,'高港区',3,321203),(1190,117,'姜堰区',3,321204),(1191,117,'兴化市',3,321281),(1192,117,'靖江市',3,321282),(1193,117,'泰兴市',3,321283),(1194,118,'宿城区',3,321302),(1195,118,'宿豫区',3,321311),(1196,118,'沭阳县',3,321322),(1197,118,'泗阳县',3,321323),(1198,118,'泗洪县',3,321324),(1199,119,'上城区',3,330102),(1200,119,'下城区',3,330103),(1201,119,'江干区',3,330104),(1202,119,'拱墅区',3,330105),(1203,119,'西湖区',3,330106),(1204,119,'滨江区',3,330108),(1205,119,'萧山区',3,330109),(1206,119,'余杭区',3,330110),(1207,119,'富阳区',3,330111),(1208,119,'桐庐县',3,330122),(1209,119,'淳安县',3,330127),(1210,119,'建德市',3,330182),(1211,119,'临安市',3,330185),(1212,120,'海曙区',3,330203),(1213,120,'江东区',3,330204),(1214,120,'江北区',3,330205),(1215,120,'北仑区',3,330206),(1216,120,'镇海区',3,330211),(1217,120,'鄞州区',3,330212),(1218,120,'象山县',3,330225),(1219,120,'宁海县',3,330226),(1220,120,'余姚市',3,330281),(1221,120,'慈溪市',3,330282),(1222,120,'奉化市',3,330283),(1223,121,'鹿城区',3,330302),(1224,121,'龙湾区',3,330303),(1225,121,'瓯海区',3,330304),(1226,121,'洞头区',3,330305),(1227,121,'永嘉县',3,330324),(1228,121,'平阳县',3,330326),(1229,121,'苍南县',3,330327),(1230,121,'文成县',3,330328),(1231,121,'泰顺县',3,330329),(1232,121,'瑞安市',3,330381),(1233,121,'乐清市',3,330382),(1234,122,'南湖区',3,330402),(1235,122,'秀洲区',3,330411),(1236,122,'嘉善县',3,330421),(1237,122,'海盐县',3,330424),(1238,122,'海宁市',3,330481),(1239,122,'平湖市',3,330482),(1240,122,'桐乡市',3,330483),(1241,123,'吴兴区',3,330502),(1242,123,'南浔区',3,330503),(1243,123,'德清县',3,330521),(1244,123,'长兴县',3,330522),(1245,123,'安吉县',3,330523),(1246,124,'越城区',3,330602),(1247,124,'柯桥区',3,330603),(1248,124,'上虞区',3,330604),(1249,124,'新昌县',3,330624),(1250,124,'诸暨市',3,330681),(1251,124,'嵊州市',3,330683),(1252,125,'婺城区',3,330702),(1253,125,'金东区',3,330703),(1254,125,'武义县',3,330723),(1255,125,'浦江县',3,330726),(1256,125,'磐安县',3,330727),(1257,125,'兰溪市',3,330781),(1258,125,'义乌市',3,330782),(1259,125,'东阳市',3,330783),(1260,125,'永康市',3,330784),(1261,126,'柯城区',3,330802),(1262,126,'衢江区',3,330803),(1263,126,'常山县',3,330822),(1264,126,'开化县',3,330824),(1265,126,'龙游县',3,330825),(1266,126,'江山市',3,330881),(1267,127,'定海区',3,330902),(1268,127,'普陀区',3,330903),(1269,127,'岱山县',3,330921),(1270,127,'嵊泗县',3,330922),(1271,128,'椒江区',3,331002),(1272,128,'黄岩区',3,331003),(1273,128,'路桥区',3,331004),(1274,128,'玉环县',3,331021),(1275,128,'三门县',3,331022),(1276,128,'天台县',3,331023),(1277,128,'仙居县',3,331024),(1278,128,'温岭市',3,331081),(1279,128,'临海市',3,331082),(1280,129,'莲都区',3,331102),(1281,129,'青田县',3,331121),(1282,129,'缙云县',3,331122),(1283,129,'遂昌县',3,331123),(1284,129,'松阳县',3,331124),(1285,129,'云和县',3,331125),(1286,129,'庆元县',3,331126),(1287,129,'景宁畲族自治县',3,331127),(1288,129,'龙泉市',3,331181),(1289,130,'瑶海区',3,340102),(1290,130,'庐阳区',3,340103),(1291,130,'蜀山区',3,340104),(1292,130,'包河区',3,340111),(1293,130,'长丰县',3,340121),(1294,130,'肥东县',3,340122),(1295,130,'肥西县',3,340123),(1296,130,'庐江县',3,340124),(1297,130,'巢湖市',3,340181),(1298,131,'镜湖区',3,340202),(1299,131,'弋江区',3,340203),(1300,131,'鸠江区',3,340207),(1301,131,'三山区',3,340208),(1302,131,'芜湖县',3,340221),(1303,131,'繁昌县',3,340222),(1304,131,'南陵县',3,340223),(1305,131,'无为县',3,340225),(1306,132,'龙子湖区',3,340302),(1307,132,'蚌山区',3,340303),(1308,132,'禹会区',3,340304),(1309,132,'淮上区',3,340311),(1310,132,'怀远县',3,340321),(1311,132,'五河县',3,340322),(1312,132,'固镇县',3,340323),(1313,133,'大通区',3,340402),(1314,133,'田家庵区',3,340403),(1315,133,'谢家集区',3,340404),(1316,133,'八公山区',3,340405),(1317,133,'潘集区',3,340406),(1318,133,'凤台县',3,340421),(1319,133,'寿县',3,340422),(1320,134,'花山区',3,340503),(1321,134,'雨山区',3,340504),(1322,134,'博望区',3,340506),(1323,134,'当涂县',3,340521),(1324,134,'含山县',3,340522),(1325,134,'和县',3,340523),(1326,135,'杜集区',3,340602),(1327,135,'相山区',3,340603),(1328,135,'烈山区',3,340604),(1329,135,'濉溪县',3,340621),(1330,136,'铜官区',3,340705),(1331,136,'义安区',3,340706),(1332,136,'郊区',3,340711),(1333,136,'枞阳县',3,340722),(1334,137,'迎江区',3,340802),(1335,137,'大观区',3,340803),(1336,137,'宜秀区',3,340811),(1337,137,'怀宁县',3,340822),(1338,137,'潜山县',3,340824),(1339,137,'太湖县',3,340825),(1340,137,'宿松县',3,340826),(1341,137,'望江县',3,340827),(1342,137,'岳西县',3,340828),(1343,137,'桐城市',3,340881),(1344,138,'屯溪区',3,341002),(1345,138,'黄山区',3,341003),(1346,138,'徽州区',3,341004),(1347,138,'歙县',3,341021),(1348,138,'休宁县',3,341022),(1349,138,'黟县',3,341023),(1350,138,'祁门县',3,341024),(1351,139,'琅琊区',3,341102),(1352,139,'南谯区',3,341103),(1353,139,'来安县',3,341122),(1354,139,'全椒县',3,341124),(1355,139,'定远县',3,341125),(1356,139,'凤阳县',3,341126),(1357,139,'天长市',3,341181),(1358,139,'明光市',3,341182),(1359,140,'颍州区',3,341202),(1360,140,'颍东区',3,341203),(1361,140,'颍泉区',3,341204),(1362,140,'临泉县',3,341221),(1363,140,'太和县',3,341222),(1364,140,'阜南县',3,341225),(1365,140,'颍上县',3,341226),(1366,140,'界首市',3,341282),(1367,141,'埇桥区',3,341302),(1368,141,'砀山县',3,341321),(1369,141,'萧县',3,341322),(1370,141,'灵璧县',3,341323),(1371,141,'泗县',3,341324),(1372,142,'金安区',3,341502),(1373,142,'裕安区',3,341503),(1374,142,'叶集区',3,341504),(1375,142,'霍邱县',3,341522),(1376,142,'舒城县',3,341523),(1377,142,'金寨县',3,341524),(1378,142,'霍山县',3,341525),(1379,143,'谯城区',3,341602),(1380,143,'涡阳县',3,341621),(1381,143,'蒙城县',3,341622),(1382,143,'利辛县',3,341623),(1383,144,'贵池区',3,341702),(1384,144,'东至县',3,341721),(1385,144,'石台县',3,341722),(1386,144,'青阳县',3,341723),(1387,145,'宣州区',3,341802),(1388,145,'郎溪县',3,341821),(1389,145,'广德县',3,341822),(1390,145,'泾县',3,341823),(1391,145,'绩溪县',3,341824),(1392,145,'旌德县',3,341825),(1393,145,'宁国市',3,341881),(1394,146,'鼓楼区',3,350102),(1395,146,'台江区',3,350103),(1396,146,'仓山区',3,350104),(1397,146,'马尾区',3,350105),(1398,146,'晋安区',3,350111),(1399,146,'闽侯县',3,350121),(1400,146,'连江县',3,350122),(1401,146,'罗源县',3,350123),(1402,146,'闽清县',3,350124),(1403,146,'永泰县',3,350125),(1404,146,'平潭县',3,350128),(1405,146,'福清市',3,350181),(1406,146,'长乐市',3,350182),(1407,147,'思明区',3,350203),(1408,147,'海沧区',3,350205),(1409,147,'湖里区',3,350206),(1410,147,'集美区',3,350211),(1411,147,'同安区',3,350212),(1412,147,'翔安区',3,350213),(1413,148,'城厢区',3,350302),(1414,148,'涵江区',3,350303),(1415,148,'荔城区',3,350304),(1416,148,'秀屿区',3,350305),(1417,148,'仙游县',3,350322),(1418,149,'梅列区',3,350402),(1419,149,'三元区',3,350403),(1420,149,'明溪县',3,350421),(1421,149,'清流县',3,350423),(1422,149,'宁化县',3,350424),(1423,149,'大田县',3,350425),(1424,149,'尤溪县',3,350426),(1425,149,'沙县',3,350427),(1426,149,'将乐县',3,350428),(1427,149,'泰宁县',3,350429),(1428,149,'建宁县',3,350430),(1429,149,'永安市',3,350481),(1430,150,'鲤城区',3,350502),(1431,150,'丰泽区',3,350503),(1432,150,'洛江区',3,350504),(1433,150,'泉港区',3,350505),(1434,150,'惠安县',3,350521),(1435,150,'安溪县',3,350524),(1436,150,'永春县',3,350525),(1437,150,'德化县',3,350526),(1438,150,'金门县',3,350527),(1439,150,'石狮市',3,350581),(1440,150,'晋江市',3,350582),(1441,150,'南安市',3,350583),(1442,151,'芗城区',3,350602),(1443,151,'龙文区',3,350603),(1444,151,'云霄县',3,350622),(1445,151,'漳浦县',3,350623),(1446,151,'诏安县',3,350624),(1447,151,'长泰县',3,350625),(1448,151,'东山县',3,350626),(1449,151,'南靖县',3,350627),(1450,151,'平和县',3,350628),(1451,151,'华安县',3,350629),(1452,151,'龙海市',3,350681),(1453,152,'延平区',3,350702),(1454,152,'建阳区',3,350703),(1455,152,'顺昌县',3,350721),(1456,152,'浦城县',3,350722),(1457,152,'光泽县',3,350723),(1458,152,'松溪县',3,350724),(1459,152,'政和县',3,350725),(1460,152,'邵武市',3,350781),(1461,152,'武夷山市',3,350782),(1462,152,'建瓯市',3,350783),(1463,153,'新罗区',3,350802),(1464,153,'永定区',3,350803),(1465,153,'长汀县',3,350821),(1466,153,'上杭县',3,350823),(1467,153,'武平县',3,350824),(1468,153,'连城县',3,350825),(1469,153,'漳平市',3,350881),(1470,154,'蕉城区',3,350902),(1471,154,'霞浦县',3,350921),(1472,154,'古田县',3,350922),(1473,154,'屏南县',3,350923),(1474,154,'寿宁县',3,350924),(1475,154,'周宁县',3,350925),(1476,154,'柘荣县',3,350926),(1477,154,'福安市',3,350981),(1478,154,'福鼎市',3,350982),(1479,155,'东湖区',3,360102),(1480,155,'西湖区',3,360103),(1481,155,'青云谱区',3,360104),(1482,155,'湾里区',3,360105),(1483,155,'青山湖区',3,360111),(1484,155,'新建区',3,360112),(1485,155,'南昌县',3,360121),(1486,155,'安义县',3,360123),(1487,155,'进贤县',3,360124),(1488,156,'昌江区',3,360202),(1489,156,'珠山区',3,360203),(1490,156,'浮梁县',3,360222),(1491,156,'乐平市',3,360281),(1492,157,'安源区',3,360302),(1493,157,'湘东区',3,360313),(1494,157,'莲花县',3,360321),(1495,157,'上栗县',3,360322),(1496,157,'芦溪县',3,360323),(1497,158,'濂溪区',3,360402),(1498,158,'浔阳区',3,360403),(1499,158,'九江县',3,360421),(1500,158,'武宁县',3,360423),(1501,158,'修水县',3,360424),(1502,158,'永修县',3,360425),(1503,158,'德安县',3,360426),(1504,158,'都昌县',3,360428),(1505,158,'湖口县',3,360429),(1506,158,'彭泽县',3,360430),(1507,158,'瑞昌市',3,360481),(1508,158,'共青城市',3,360482),(1509,158,'庐山市',3,360483),(1510,159,'渝水区',3,360502),(1511,159,'分宜县',3,360521),(1512,160,'月湖区',3,360602),(1513,160,'余江县',3,360622),(1514,160,'贵溪市',3,360681),(1515,161,'章贡区',3,360702),(1516,161,'南康区',3,360703),(1517,161,'赣县',3,360721),(1518,161,'信丰县',3,360722),(1519,161,'大余县',3,360723),(1520,161,'上犹县',3,360724),(1521,161,'崇义县',3,360725),(1522,161,'安远县',3,360726),(1523,161,'龙南县',3,360727),(1524,161,'定南县',3,360728),(1525,161,'全南县',3,360729),(1526,161,'宁都县',3,360730),(1527,161,'于都县',3,360731),(1528,161,'兴国县',3,360732),(1529,161,'会昌县',3,360733),(1530,161,'寻乌县',3,360734),(1531,161,'石城县',3,360735),(1532,161,'瑞金市',3,360781),(1533,162,'吉州区',3,360802),(1534,162,'青原区',3,360803),(1535,162,'吉安县',3,360821),(1536,162,'吉水县',3,360822),(1537,162,'峡江县',3,360823),(1538,162,'新干县',3,360824),(1539,162,'永丰县',3,360825),(1540,162,'泰和县',3,360826),(1541,162,'遂川县',3,360827),(1542,162,'万安县',3,360828),(1543,162,'安福县',3,360829),(1544,162,'永新县',3,360830),(1545,162,'井冈山市',3,360881),(1546,163,'袁州区',3,360902),(1547,163,'奉新县',3,360921),(1548,163,'万载县',3,360922),(1549,163,'上高县',3,360923),(1550,163,'宜丰县',3,360924),(1551,163,'靖安县',3,360925),(1552,163,'铜鼓县',3,360926),(1553,163,'丰城市',3,360981),(1554,163,'樟树市',3,360982),(1555,163,'高安市',3,360983),(1556,164,'临川区',3,361002),(1557,164,'南城县',3,361021),(1558,164,'黎川县',3,361022),(1559,164,'南丰县',3,361023),(1560,164,'崇仁县',3,361024),(1561,164,'乐安县',3,361025),(1562,164,'宜黄县',3,361026),(1563,164,'金溪县',3,361027),(1564,164,'资溪县',3,361028),(1565,164,'东乡县',3,361029),(1566,164,'广昌县',3,361030),(1567,165,'信州区',3,361102),(1568,165,'广丰区',3,361103),(1569,165,'上饶县',3,361121),(1570,165,'玉山县',3,361123),(1571,165,'铅山县',3,361124),(1572,165,'横峰县',3,361125),(1573,165,'弋阳县',3,361126),(1574,165,'余干县',3,361127),(1575,165,'鄱阳县',3,361128),(1576,165,'万年县',3,361129),(1577,165,'婺源县',3,361130),(1578,165,'德兴市',3,361181),(1579,166,'历下区',3,370102),(1580,166,'市中区',3,370103),(1581,166,'槐荫区',3,370104),(1582,166,'天桥区',3,370105),(1583,166,'历城区',3,370112),(1584,166,'长清区',3,370113),(1585,166,'平阴县',3,370124),(1586,166,'济阳县',3,370125),(1587,166,'商河县',3,370126),(1588,166,'章丘市',3,370181),(1589,167,'市南区',3,370202),(1590,167,'市北区',3,370203),(1591,167,'黄岛区',3,370211),(1592,167,'崂山区',3,370212),(1593,167,'李沧区',3,370213),(1594,167,'城阳区',3,370214),(1595,167,'胶州市',3,370281),(1596,167,'即墨市',3,370282),(1597,167,'平度市',3,370283),(1598,167,'莱西市',3,370285),(1599,168,'淄川区',3,370302),(1600,168,'张店区',3,370303),(1601,168,'博山区',3,370304),(1602,168,'临淄区',3,370305),(1603,168,'周村区',3,370306),(1604,168,'桓台县',3,370321),(1605,168,'高青县',3,370322),(1606,168,'沂源县',3,370323),(1607,169,'市中区',3,370402),(1608,169,'薛城区',3,370403),(1609,169,'峄城区',3,370404),(1610,169,'台儿庄区',3,370405),(1611,169,'山亭区',3,370406),(1612,169,'滕州市',3,370481),(1613,170,'东营区',3,370502),(1614,170,'河口区',3,370503),(1615,170,'垦利区',3,370505),(1616,170,'利津县',3,370522),(1617,170,'广饶县',3,370523),(1618,171,'芝罘区',3,370602),(1619,171,'福山区',3,370611),(1620,171,'牟平区',3,370612),(1621,171,'莱山区',3,370613),(1622,171,'长岛县',3,370634),(1623,171,'龙口市',3,370681),(1624,171,'莱阳市',3,370682),(1625,171,'莱州市',3,370683),(1626,171,'蓬莱市',3,370684),(1627,171,'招远市',3,370685),(1628,171,'栖霞市',3,370686),(1629,171,'海阳市',3,370687),(1630,172,'潍城区',3,370702),(1631,172,'寒亭区',3,370703),(1632,172,'坊子区',3,370704),(1633,172,'奎文区',3,370705),(1634,172,'临朐县',3,370724),(1635,172,'昌乐县',3,370725),(1636,172,'青州市',3,370781),(1637,172,'诸城市',3,370782),(1638,172,'寿光市',3,370783),(1639,172,'安丘市',3,370784),(1640,172,'高密市',3,370785),(1641,172,'昌邑市',3,370786),(1642,173,'任城区',3,370811),(1643,173,'兖州区',3,370812),(1644,173,'微山县',3,370826),(1645,173,'鱼台县',3,370827),(1646,173,'金乡县',3,370828),(1647,173,'嘉祥县',3,370829),(1648,173,'汶上县',3,370830),(1649,173,'泗水县',3,370831),(1650,173,'梁山县',3,370832),(1651,173,'曲阜市',3,370881),(1652,173,'邹城市',3,370883),(1653,174,'泰山区',3,370902),(1654,174,'岱岳区',3,370911),(1655,174,'宁阳县',3,370921),(1656,174,'东平县',3,370923),(1657,174,'新泰市',3,370982),(1658,174,'肥城市',3,370983),(1659,175,'环翠区',3,371002),(1660,175,'文登区',3,371003),(1661,175,'荣成市',3,371082),(1662,175,'乳山市',3,371083),(1663,176,'东港区',3,371102),(1664,176,'岚山区',3,371103),(1665,176,'五莲县',3,371121),(1666,176,'莒县',3,371122),(1667,177,'莱城区',3,371202),(1668,177,'钢城区',3,371203),(1669,178,'兰山区',3,371302),(1670,178,'罗庄区',3,371311),(1671,178,'河东区',3,371312),(1672,178,'沂南县',3,371321),(1673,178,'郯城县',3,371322),(1674,178,'沂水县',3,371323),(1675,178,'兰陵县',3,371324),(1676,178,'费县',3,371325),(1677,178,'平邑县',3,371326),(1678,178,'莒南县',3,371327),(1679,178,'蒙阴县',3,371328),(1680,178,'临沭县',3,371329),(1681,179,'德城区',3,371402),(1682,179,'陵城区',3,371403),(1683,179,'宁津县',3,371422),(1684,179,'庆云县',3,371423),(1685,179,'临邑县',3,371424),(1686,179,'齐河县',3,371425),(1687,179,'平原县',3,371426),(1688,179,'夏津县',3,371427),(1689,179,'武城县',3,371428),(1690,179,'乐陵市',3,371481),(1691,179,'禹城市',3,371482),(1692,180,'东昌府区',3,371502),(1693,180,'阳谷县',3,371521),(1694,180,'莘县',3,371522),(1695,180,'茌平县',3,371523),(1696,180,'东阿县',3,371524),(1697,180,'冠县',3,371525),(1698,180,'高唐县',3,371526),(1699,180,'临清市',3,371581),(1700,181,'滨城区',3,371602),(1701,181,'沾化区',3,371603),(1702,181,'惠民县',3,371621),(1703,181,'阳信县',3,371622),(1704,181,'无棣县',3,371623),(1705,181,'博兴县',3,371625),(1706,181,'邹平县',3,371626),(1707,182,'牡丹区',3,371702),(1708,182,'定陶区',3,371703),(1709,182,'曹县',3,371721),(1710,182,'单县',3,371722),(1711,182,'成武县',3,371723),(1712,182,'巨野县',3,371724),(1713,182,'郓城县',3,371725),(1714,182,'鄄城县',3,371726),(1715,182,'东明县',3,371728),(1716,183,'中原区',3,410102),(1717,183,'二七区',3,410103),(1718,183,'管城回族区',3,410104),(1719,183,'金水区',3,410105),(1720,183,'上街区',3,410106),(1721,183,'惠济区',3,410108),(1722,183,'中牟县',3,410122),(1723,183,'巩义市',3,410181),(1724,183,'荥阳市',3,410182),(1725,183,'新密市',3,410183),(1726,183,'新郑市',3,410184),(1727,183,'登封市',3,410185),(1728,184,'龙亭区',3,410202),(1729,184,'顺河回族区',3,410203),(1730,184,'鼓楼区',3,410204),(1731,184,'禹王台区',3,410205),(1732,184,'金明区',3,410211),(1733,184,'祥符区',3,410212),(1734,184,'杞县',3,410221),(1735,184,'通许县',3,410222),(1736,184,'尉氏县',3,410223),(1737,184,'兰考县',3,410225),(1738,185,'老城区',3,410302),(1739,185,'西工区',3,410303),(1740,185,'瀍河回族区',3,410304),(1741,185,'涧西区',3,410305),(1742,185,'吉利区',3,410306),(1743,185,'洛龙区',3,410311),(1744,185,'孟津县',3,410322),(1745,185,'新安县',3,410323),(1746,185,'栾川县',3,410324),(1747,185,'嵩县',3,410325),(1748,185,'汝阳县',3,410326),(1749,185,'宜阳县',3,410327),(1750,185,'洛宁县',3,410328),(1751,185,'伊川县',3,410329),(1752,185,'偃师市',3,410381),(1753,186,'新华区',3,410402),(1754,186,'卫东区',3,410403),(1755,186,'石龙区',3,410404),(1756,186,'湛河区',3,410411),(1757,186,'宝丰县',3,410421),(1758,186,'叶县',3,410422),(1759,186,'鲁山县',3,410423),(1760,186,'郏县',3,410425),(1761,186,'舞钢市',3,410481),(1762,186,'汝州市',3,410482),(1763,187,'文峰区',3,410502),(1764,187,'北关区',3,410503),(1765,187,'殷都区',3,410505),(1766,187,'龙安区',3,410506),(1767,187,'安阳县',3,410522),(1768,187,'汤阴县',3,410523),(1769,187,'滑县',3,410526),(1770,187,'内黄县',3,410527),(1771,187,'林州市',3,410581),(1772,188,'鹤山区',3,410602),(1773,188,'山城区',3,410603),(1774,188,'淇滨区',3,410611),(1775,188,'浚县',3,410621),(1776,188,'淇县',3,410622),(1777,189,'红旗区',3,410702),(1778,189,'卫滨区',3,410703),(1779,189,'凤泉区',3,410704),(1780,189,'牧野区',3,410711),(1781,189,'新乡县',3,410721),(1782,189,'获嘉县',3,410724),(1783,189,'原阳县',3,410725),(1784,189,'延津县',3,410726),(1785,189,'封丘县',3,410727),(1786,189,'长垣县',3,410728),(1787,189,'卫辉市',3,410781),(1788,189,'辉县市',3,410782),(1789,190,'解放区',3,410802),(1790,190,'中站区',3,410803),(1791,190,'马村区',3,410804),(1792,190,'山阳区',3,410811),(1793,190,'修武县',3,410821),(1794,190,'博爱县',3,410822),(1795,190,'武陟县',3,410823),(1796,190,'温县',3,410825),(1797,190,'沁阳市',3,410882),(1798,190,'孟州市',3,410883),(1799,191,'华龙区',3,410902),(1800,191,'清丰县',3,410922),(1801,191,'南乐县',3,410923),(1802,191,'范县',3,410926),(1803,191,'台前县',3,410927),(1804,191,'濮阳县',3,410928),(1805,192,'魏都区',3,411002),(1806,192,'许昌县',3,411023),(1807,192,'鄢陵县',3,411024),(1808,192,'襄城县',3,411025),(1809,192,'禹州市',3,411081),(1810,192,'长葛市',3,411082),(1811,193,'源汇区',3,411102),(1812,193,'郾城区',3,411103),(1813,193,'召陵区',3,411104),(1814,193,'舞阳县',3,411121),(1815,193,'临颍县',3,411122),(1816,194,'湖滨区',3,411202),(1817,194,'陕州区',3,411203),(1818,194,'渑池县',3,411221),(1819,194,'卢氏县',3,411224),(1820,194,'义马市',3,411281),(1821,194,'灵宝市',3,411282),(1822,195,'宛城区',3,411302),(1823,195,'卧龙区',3,411303),(1824,195,'南召县',3,411321),(1825,195,'方城县',3,411322),(1826,195,'西峡县',3,411323),(1827,195,'镇平县',3,411324),(1828,195,'内乡县',3,411325),(1829,195,'淅川县',3,411326),(1830,195,'社旗县',3,411327),(1831,195,'唐河县',3,411328),(1832,195,'新野县',3,411329),(1833,195,'桐柏县',3,411330),(1834,195,'邓州市',3,411381),(1835,196,'梁园区',3,411402),(1836,196,'睢阳区',3,411403),(1837,196,'民权县',3,411421),(1838,196,'睢县',3,411422),(1839,196,'宁陵县',3,411423),(1840,196,'柘城县',3,411424),(1841,196,'虞城县',3,411425),(1842,196,'夏邑县',3,411426),(1843,196,'永城市',3,411481),(1844,197,'浉河区',3,411502),(1845,197,'平桥区',3,411503),(1846,197,'罗山县',3,411521),(1847,197,'光山县',3,411522),(1848,197,'新县',3,411523),(1849,197,'商城县',3,411524),(1850,197,'固始县',3,411525),(1851,197,'潢川县',3,411526),(1852,197,'淮滨县',3,411527),(1853,197,'息县',3,411528),(1854,198,'川汇区',3,411602),(1855,198,'扶沟县',3,411621),(1856,198,'西华县',3,411622),(1857,198,'商水县',3,411623),(1858,198,'沈丘县',3,411624),(1859,198,'郸城县',3,411625),(1860,198,'淮阳县',3,411626),(1861,198,'太康县',3,411627),(1862,198,'鹿邑县',3,411628),(1863,198,'项城市',3,411681),(1864,199,'驿城区',3,411702),(1865,199,'西平县',3,411721),(1866,199,'上蔡县',3,411722),(1867,199,'平舆县',3,411723),(1868,199,'正阳县',3,411724),(1869,199,'确山县',3,411725),(1870,199,'泌阳县',3,411726),(1871,199,'汝南县',3,411727),(1872,199,'遂平县',3,411728),(1873,199,'新蔡县',3,411729),(1874,200,'济源市',3,419001),(1875,201,'江岸区',3,420102),(1876,201,'江汉区',3,420103),(1877,201,'硚口区',3,420104),(1878,201,'汉阳区',3,420105),(1879,201,'武昌区',3,420106),(1880,201,'青山区',3,420107),(1881,201,'洪山区',3,420111),(1882,201,'东西湖区',3,420112),(1883,201,'汉南区',3,420113),(1884,201,'蔡甸区',3,420114),(1885,201,'江夏区',3,420115),(1886,201,'黄陂区',3,420116),(1887,201,'新洲区',3,420117),(1888,202,'黄石港区',3,420202),(1889,202,'西塞山区',3,420203),(1890,202,'下陆区',3,420204),(1891,202,'铁山区',3,420205),(1892,202,'阳新县',3,420222),(1893,202,'大冶市',3,420281),(1894,203,'茅箭区',3,420302),(1895,203,'张湾区',3,420303),(1896,203,'郧阳区',3,420304),(1897,203,'郧西县',3,420322),(1898,203,'竹山县',3,420323),(1899,203,'竹溪县',3,420324),(1900,203,'房县',3,420325),(1901,203,'丹江口市',3,420381),(1902,204,'西陵区',3,420502),(1903,204,'伍家岗区',3,420503),(1904,204,'点军区',3,420504),(1905,204,'猇亭区',3,420505),(1906,204,'夷陵区',3,420506),(1907,204,'远安县',3,420525),(1908,204,'兴山县',3,420526),(1909,204,'秭归县',3,420527),(1910,204,'长阳土家族自治县',3,420528),(1911,204,'五峰土家族自治县',3,420529),(1912,204,'宜都市',3,420581),(1913,204,'当阳市',3,420582),(1914,204,'枝江市',3,420583),(1915,205,'襄城区',3,420602),(1916,205,'樊城区',3,420606),(1917,205,'襄州区',3,420607),(1918,205,'南漳县',3,420624),(1919,205,'谷城县',3,420625),(1920,205,'保康县',3,420626),(1921,205,'老河口市',3,420682),(1922,205,'枣阳市',3,420683),(1923,205,'宜城市',3,420684),(1924,206,'梁子湖区',3,420702),(1925,206,'华容区',3,420703),(1926,206,'鄂城区',3,420704),(1927,207,'东宝区',3,420802),(1928,207,'掇刀区',3,420804),(1929,207,'京山县',3,420821),(1930,207,'沙洋县',3,420822),(1931,207,'钟祥市',3,420881),(1932,208,'孝南区',3,420902),(1933,208,'孝昌县',3,420921),(1934,208,'大悟县',3,420922),(1935,208,'云梦县',3,420923),(1936,208,'应城市',3,420981),(1937,208,'安陆市',3,420982),(1938,208,'汉川市',3,420984),(1939,209,'沙市区',3,421002),(1940,209,'荆州区',3,421003),(1941,209,'公安县',3,421022),(1942,209,'监利县',3,421023),(1943,209,'江陵县',3,421024),(1944,209,'石首市',3,421081),(1945,209,'洪湖市',3,421083),(1946,209,'松滋市',3,421087),(1947,210,'黄州区',3,421102),(1948,210,'团风县',3,421121),(1949,210,'红安县',3,421122),(1950,210,'罗田县',3,421123),(1951,210,'英山县',3,421124),(1952,210,'浠水县',3,421125),(1953,210,'蕲春县',3,421126),(1954,210,'黄梅县',3,421127),(1955,210,'麻城市',3,421181),(1956,210,'武穴市',3,421182),(1957,211,'咸安区',3,421202),(1958,211,'嘉鱼县',3,421221),(1959,211,'通城县',3,421222),(1960,211,'崇阳县',3,421223),(1961,211,'通山县',3,421224),(1962,211,'赤壁市',3,421281),(1963,212,'曾都区',3,421303),(1964,212,'随县',3,421321),(1965,212,'广水市',3,421381),(1966,213,'恩施市',3,422801),(1967,213,'利川市',3,422802),(1968,213,'建始县',3,422822),(1969,213,'巴东县',3,422823),(1970,213,'宣恩县',3,422825),(1971,213,'咸丰县',3,422826),(1972,213,'来凤县',3,422827),(1973,213,'鹤峰县',3,422828),(1974,214,'仙桃市',3,429004),(1975,214,'潜江市',3,429005),(1976,214,'天门市',3,429006),(1977,214,'神农架林区',3,429021),(1978,215,'芙蓉区',3,430102),(1979,215,'天心区',3,430103),(1980,215,'岳麓区',3,430104),(1981,215,'开福区',3,430105),(1982,215,'雨花区',3,430111),(1983,215,'望城区',3,430112),(1984,215,'长沙县',3,430121),(1985,215,'宁乡县',3,430124),(1986,215,'浏阳市',3,430181),(1987,216,'荷塘区',3,430202),(1988,216,'芦淞区',3,430203),(1989,216,'石峰区',3,430204),(1990,216,'天元区',3,430211),(1991,216,'株洲县',3,430221),(1992,216,'攸县',3,430223),(1993,216,'茶陵县',3,430224),(1994,216,'炎陵县',3,430225),(1995,216,'醴陵市',3,430281),(1996,217,'雨湖区',3,430302),(1997,217,'岳塘区',3,430304),(1998,217,'湘潭县',3,430321),(1999,217,'湘乡市',3,430381),(2000,217,'韶山市',3,430382),(2001,218,'珠晖区',3,430405),(2002,218,'雁峰区',3,430406),(2003,218,'石鼓区',3,430407),(2004,218,'蒸湘区',3,430408),(2005,218,'南岳区',3,430412),(2006,218,'衡阳县',3,430421),(2007,218,'衡南县',3,430422),(2008,218,'衡山县',3,430423),(2009,218,'衡东县',3,430424),(2010,218,'祁东县',3,430426),(2011,218,'耒阳市',3,430481),(2012,218,'常宁市',3,430482),(2013,219,'双清区',3,430502),(2014,219,'大祥区',3,430503),(2015,219,'北塔区',3,430511),(2016,219,'邵东县',3,430521),(2017,219,'新邵县',3,430522),(2018,219,'邵阳县',3,430523),(2019,219,'隆回县',3,430524),(2020,219,'洞口县',3,430525),(2021,219,'绥宁县',3,430527),(2022,219,'新宁县',3,430528),(2023,219,'城步苗族自治县',3,430529),(2024,219,'武冈市',3,430581),(2025,220,'岳阳楼区',3,430602),(2026,220,'云溪区',3,430603),(2027,220,'君山区',3,430611),(2028,220,'岳阳县',3,430621),(2029,220,'华容县',3,430623),(2030,220,'湘阴县',3,430624),(2031,220,'平江县',3,430626),(2032,220,'汨罗市',3,430681),(2033,220,'临湘市',3,430682),(2034,221,'武陵区',3,430702),(2035,221,'鼎城区',3,430703),(2036,221,'安乡县',3,430721),(2037,221,'汉寿县',3,430722),(2038,221,'澧县',3,430723),(2039,221,'临澧县',3,430724),(2040,221,'桃源县',3,430725),(2041,221,'石门县',3,430726),(2042,221,'津市市',3,430781),(2043,222,'永定区',3,430802),(2044,222,'武陵源区',3,430811),(2045,222,'慈利县',3,430821),(2046,222,'桑植县',3,430822),(2047,223,'资阳区',3,430902),(2048,223,'赫山区',3,430903),(2049,223,'南县',3,430921),(2050,223,'桃江县',3,430922),(2051,223,'安化县',3,430923),(2052,223,'沅江市',3,430981),(2053,224,'北湖区',3,431002),(2054,224,'苏仙区',3,431003),(2055,224,'桂阳县',3,431021),(2056,224,'宜章县',3,431022),(2057,224,'永兴县',3,431023),(2058,224,'嘉禾县',3,431024),(2059,224,'临武县',3,431025),(2060,224,'汝城县',3,431026),(2061,224,'桂东县',3,431027),(2062,224,'安仁县',3,431028),(2063,224,'资兴市',3,431081),(2064,225,'零陵区',3,431102),(2065,225,'冷水滩区',3,431103),(2066,225,'祁阳县',3,431121),(2067,225,'东安县',3,431122),(2068,225,'双牌县',3,431123),(2069,225,'道县',3,431124),(2070,225,'江永县',3,431125),(2071,225,'宁远县',3,431126),(2072,225,'蓝山县',3,431127),(2073,225,'新田县',3,431128),(2074,225,'江华瑶族自治县',3,431129),(2075,226,'鹤城区',3,431202),(2076,226,'中方县',3,431221),(2077,226,'沅陵县',3,431222),(2078,226,'辰溪县',3,431223),(2079,226,'溆浦县',3,431224),(2080,226,'会同县',3,431225),(2081,226,'麻阳苗族自治县',3,431226),(2082,226,'新晃侗族自治县',3,431227),(2083,226,'芷江侗族自治县',3,431228),(2084,226,'靖州苗族侗族自治县',3,431229),(2085,226,'通道侗族自治县',3,431230),(2086,226,'洪江市',3,431281),(2087,227,'娄星区',3,431302),(2088,227,'双峰县',3,431321),(2089,227,'新化县',3,431322),(2090,227,'冷水江市',3,431381),(2091,227,'涟源市',3,431382),(2092,228,'吉首市',3,433101),(2093,228,'泸溪县',3,433122),(2094,228,'凤凰县',3,433123),(2095,228,'花垣县',3,433124),(2096,228,'保靖县',3,433125),(2097,228,'古丈县',3,433126),(2098,228,'永顺县',3,433127),(2099,228,'龙山县',3,433130),(2100,229,'荔湾区',3,440103),(2101,229,'越秀区',3,440104),(2102,229,'海珠区',3,440105),(2103,229,'天河区',3,440106),(2104,229,'白云区',3,440111),(2105,229,'黄埔区',3,440112),(2106,229,'番禺区',3,440113),(2107,229,'花都区',3,440114),(2108,229,'南沙区',3,440115),(2109,229,'从化区',3,440117),(2110,229,'增城区',3,440118),(2111,230,'武江区',3,440203),(2112,230,'浈江区',3,440204),(2113,230,'曲江区',3,440205),(2114,230,'始兴县',3,440222),(2115,230,'仁化县',3,440224),(2116,230,'翁源县',3,440229),(2117,230,'乳源瑶族自治县',3,440232),(2118,230,'新丰县',3,440233),(2119,230,'乐昌市',3,440281),(2120,230,'南雄市',3,440282),(2121,231,'罗湖区',3,440303),(2122,231,'福田区',3,440304),(2123,231,'南山区',3,440305),(2124,231,'宝安区',3,440306),(2125,231,'龙岗区',3,440307),(2126,231,'盐田区',3,440308),(2127,232,'香洲区',3,440402),(2128,232,'斗门区',3,440403),(2129,232,'金湾区',3,440404),(2130,233,'龙湖区',3,440507),(2131,233,'金平区',3,440511),(2132,233,'濠江区',3,440512),(2133,233,'潮阳区',3,440513),(2134,233,'潮南区',3,440514),(2135,233,'澄海区',3,440515),(2136,233,'南澳县',3,440523),(2137,234,'禅城区',3,440604),(2138,234,'南海区',3,440605),(2139,234,'顺德区',3,440606),(2140,234,'三水区',3,440607),(2141,234,'高明区',3,440608),(2142,235,'蓬江区',3,440703),(2143,235,'江海区',3,440704),(2144,235,'新会区',3,440705),(2145,235,'台山市',3,440781),(2146,235,'开平市',3,440783),(2147,235,'鹤山市',3,440784),(2148,235,'恩平市',3,440785),(2149,236,'赤坎区',3,440802),(2150,236,'霞山区',3,440803),(2151,236,'坡头区',3,440804),(2152,236,'麻章区',3,440811),(2153,236,'遂溪县',3,440823),(2154,236,'徐闻县',3,440825),(2155,236,'廉江市',3,440881),(2156,236,'雷州市',3,440882),(2157,236,'吴川市',3,440883),(2158,237,'茂南区',3,440902),(2159,237,'电白区',3,440904),(2160,237,'高州市',3,440981),(2161,237,'化州市',3,440982),(2162,237,'信宜市',3,440983),(2163,238,'端州区',3,441202),(2164,238,'鼎湖区',3,441203),(2165,238,'高要区',3,441204),(2166,238,'广宁县',3,441223),(2167,238,'怀集县',3,441224),(2168,238,'封开县',3,441225),(2169,238,'德庆县',3,441226),(2170,238,'四会市',3,441284),(2171,239,'惠城区',3,441302),(2172,239,'惠阳区',3,441303),(2173,239,'博罗县',3,441322),(2174,239,'惠东县',3,441323),(2175,239,'龙门县',3,441324),(2176,240,'梅江区',3,441402),(2177,240,'梅县区',3,441403),(2178,240,'大埔县',3,441422),(2179,240,'丰顺县',3,441423),(2180,240,'五华县',3,441424),(2181,240,'平远县',3,441426),(2182,240,'蕉岭县',3,441427),(2183,240,'兴宁市',3,441481),(2184,241,'城区',3,441502),(2185,241,'海丰县',3,441521),(2186,241,'陆河县',3,441523),(2187,241,'陆丰市',3,441581),(2188,242,'源城区',3,441602),(2189,242,'紫金县',3,441621),(2190,242,'龙川县',3,441622),(2191,242,'连平县',3,441623),(2192,242,'和平县',3,441624),(2193,242,'东源县',3,441625),(2194,243,'江城区',3,441702),(2195,243,'阳东区',3,441704),(2196,243,'阳西县',3,441721),(2197,243,'阳春市',3,441781),(2198,244,'清城区',3,441802),(2199,244,'清新区',3,441803),(2200,244,'佛冈县',3,441821),(2201,244,'阳山县',3,441823),(2202,244,'连山壮族瑶族自治县',3,441825),(2203,244,'连南瑶族自治县',3,441826),(2204,244,'英德市',3,441881),(2205,244,'连州市',3,441882),(2206,245,'东莞市',3,441900),(2207,246,'中山市',3,442000),(2208,247,'湘桥区',3,445102),(2209,247,'潮安区',3,445103),(2210,247,'饶平县',3,445122),(2211,248,'榕城区',3,445202),(2212,248,'揭东区',3,445203),(2213,248,'揭西县',3,445222),(2214,248,'惠来县',3,445224),(2215,248,'普宁市',3,445281),(2216,249,'云城区',3,445302),(2217,249,'云安区',3,445303),(2218,249,'新兴县',3,445321),(2219,249,'郁南县',3,445322),(2220,249,'罗定市',3,445381),(2221,250,'兴宁区',3,450102),(2222,250,'青秀区',3,450103),(2223,250,'江南区',3,450105),(2224,250,'西乡塘区',3,450107),(2225,250,'良庆区',3,450108),(2226,250,'邕宁区',3,450109),(2227,250,'武鸣区',3,450110),(2228,250,'隆安县',3,450123),(2229,250,'马山县',3,450124),(2230,250,'上林县',3,450125),(2231,250,'宾阳县',3,450126),(2232,250,'横县',3,450127),(2233,251,'城中区',3,450202),(2234,251,'鱼峰区',3,450203),(2235,251,'柳南区',3,450204),(2236,251,'柳北区',3,450205),(2237,251,'柳江区',3,450206),(2238,251,'柳城县',3,450222),(2239,251,'鹿寨县',3,450223),(2240,251,'融安县',3,450224),(2241,251,'融水苗族自治县',3,450225),(2242,251,'三江侗族自治县',3,450226),(2243,252,'秀峰区',3,450302),(2244,252,'叠彩区',3,450303),(2245,252,'象山区',3,450304),(2246,252,'七星区',3,450305),(2247,252,'雁山区',3,450311),(2248,252,'临桂区',3,450312),(2249,252,'阳朔县',3,450321),(2250,252,'灵川县',3,450323),(2251,252,'全州县',3,450324),(2252,252,'兴安县',3,450325),(2253,252,'永福县',3,450326),(2254,252,'灌阳县',3,450327),(2255,252,'龙胜各族自治县',3,450328),(2256,252,'资源县',3,450329),(2257,252,'平乐县',3,450330),(2258,252,'荔浦县',3,450331),(2259,252,'恭城瑶族自治县',3,450332),(2260,253,'万秀区',3,450403),(2261,253,'长洲区',3,450405),(2262,253,'龙圩区',3,450406),(2263,253,'苍梧县',3,450421),(2264,253,'藤县',3,450422),(2265,253,'蒙山县',3,450423),(2266,253,'岑溪市',3,450481),(2267,254,'海城区',3,450502),(2268,254,'银海区',3,450503),(2269,254,'铁山港区',3,450512),(2270,254,'合浦县',3,450521),(2271,255,'港口区',3,450602),(2272,255,'防城区',3,450603),(2273,255,'上思县',3,450621),(2274,255,'东兴市',3,450681),(2275,256,'钦南区',3,450702),(2276,256,'钦北区',3,450703),(2277,256,'灵山县',3,450721),(2278,256,'浦北县',3,450722),(2279,257,'港北区',3,450802),(2280,257,'港南区',3,450803),(2281,257,'覃塘区',3,450804),(2282,257,'平南县',3,450821),(2283,257,'桂平市',3,450881),(2284,258,'玉州区',3,450902),(2285,258,'福绵区',3,450903),(2286,258,'容县',3,450921),(2287,258,'陆川县',3,450922),(2288,258,'博白县',3,450923),(2289,258,'兴业县',3,450924),(2290,258,'北流市',3,450981),(2291,259,'右江区',3,451002),(2292,259,'田阳县',3,451021),(2293,259,'田东县',3,451022),(2294,259,'平果县',3,451023),(2295,259,'德保县',3,451024),(2296,259,'那坡县',3,451026),(2297,259,'凌云县',3,451027),(2298,259,'乐业县',3,451028),(2299,259,'田林县',3,451029),(2300,259,'西林县',3,451030),(2301,259,'隆林各族自治县',3,451031),(2302,259,'靖西市',3,451081),(2303,260,'八步区',3,451102),(2304,260,'平桂区',3,451103),(2305,260,'昭平县',3,451121),(2306,260,'钟山县',3,451122),(2307,260,'富川瑶族自治县',3,451123),(2308,261,'金城江区',3,451202),(2309,261,'南丹县',3,451221),(2310,261,'天峨县',3,451222),(2311,261,'凤山县',3,451223),(2312,261,'东兰县',3,451224),(2313,261,'罗城仫佬族自治县',3,451225),(2314,261,'环江毛南族自治县',3,451226),(2315,261,'巴马瑶族自治县',3,451227),(2316,261,'都安瑶族自治县',3,451228),(2317,261,'大化瑶族自治县',3,451229),(2318,261,'宜州市',3,451281),(2319,262,'兴宾区',3,451302),(2320,262,'忻城县',3,451321),(2321,262,'象州县',3,451322),(2322,262,'武宣县',3,451323),(2323,262,'金秀瑶族自治县',3,451324),(2324,262,'合山市',3,451381),(2325,263,'江州区',3,451402),(2326,263,'扶绥县',3,451421),(2327,263,'宁明县',3,451422),(2328,263,'龙州县',3,451423),(2329,263,'大新县',3,451424),(2330,263,'天等县',3,451425),(2331,263,'凭祥市',3,451481),(2332,264,'秀英区',3,460105),(2333,264,'龙华区',3,460106),(2334,264,'琼山区',3,460107),(2335,264,'美兰区',3,460108),(2336,265,'市辖区',3,460201),(2337,265,'海棠区',3,460202),(2338,265,'吉阳区',3,460203),(2339,265,'天涯区',3,460204),(2340,265,'崖州区',3,460205),(2341,266,'西沙群岛',3,460321),(2342,266,'南沙群岛',3,460322),(2343,266,'中沙群岛的岛礁及其海域',3,460323),(2344,267,'儋州市',3,460400),(2345,268,'五指山市',3,469001),(2346,268,'琼海市',3,469002),(2347,268,'文昌市',3,469005),(2348,268,'万宁市',3,469006),(2349,268,'东方市',3,469007),(2350,268,'定安县',3,469021),(2351,268,'屯昌县',3,469022),(2352,268,'澄迈县',3,469023),(2353,268,'临高县',3,469024),(2354,268,'白沙黎族自治县',3,469025),(2355,268,'昌江黎族自治县',3,469026),(2356,268,'乐东黎族自治县',3,469027),(2357,268,'陵水黎族自治县',3,469028),(2358,268,'保亭黎族苗族自治县',3,469029),(2359,268,'琼中黎族苗族自治县',3,469030),(2360,269,'万州区',3,500101),(2361,269,'涪陵区',3,500102),(2362,269,'渝中区',3,500103),(2363,269,'大渡口区',3,500104),(2364,269,'江北区',3,500105),(2365,269,'沙坪坝区',3,500106),(2366,269,'九龙坡区',3,500107),(2367,269,'南岸区',3,500108),(2368,269,'北碚区',3,500109),(2369,269,'綦江区',3,500110),(2370,269,'大足区',3,500111),(2371,269,'渝北区',3,500112),(2372,269,'巴南区',3,500113),(2373,269,'黔江区',3,500114),(2374,269,'长寿区',3,500115),(2375,269,'江津区',3,500116),(2376,269,'合川区',3,500117),(2377,269,'永川区',3,500118),(2378,269,'南川区',3,500119),(2379,269,'璧山区',3,500120),(2380,269,'铜梁区',3,500151),(2381,269,'潼南区',3,500152),(2382,269,'荣昌区',3,500153),(2383,269,'开州区',3,500154),(2384,270,'梁平县',3,500228),(2385,270,'城口县',3,500229),(2386,270,'丰都县',3,500230),(2387,270,'垫江县',3,500231),(2388,270,'武隆县',3,500232),(2389,270,'忠县',3,500233),(2390,270,'云阳县',3,500235),(2391,270,'奉节县',3,500236),(2392,270,'巫山县',3,500237),(2393,270,'巫溪县',3,500238),(2394,270,'石柱土家族自治县',3,500240),(2395,270,'秀山土家族苗族自治县',3,500241),(2396,270,'酉阳土家族苗族自治县',3,500242),(2397,270,'彭水苗族土家族自治县',3,500243),(2398,271,'锦江区',3,510104),(2399,271,'青羊区',3,510105),(2400,271,'金牛区',3,510106),(2401,271,'武侯区',3,510107),(2402,271,'成华区',3,510108),(2403,271,'龙泉驿区',3,510112),(2404,271,'青白江区',3,510113),(2405,271,'新都区',3,510114),(2406,271,'温江区',3,510115),(2407,271,'双流区',3,510116),(2408,271,'金堂县',3,510121),(2409,271,'郫县',3,510124),(2410,271,'大邑县',3,510129),(2411,271,'蒲江县',3,510131),(2412,271,'新津县',3,510132),(2413,271,'都江堰市',3,510181),(2414,271,'彭州市',3,510182),(2415,271,'邛崃市',3,510183),(2416,271,'崇州市',3,510184),(2417,271,'简阳市',3,510185),(2418,272,'自流井区',3,510302),(2419,272,'贡井区',3,510303),(2420,272,'大安区',3,510304),(2421,272,'沿滩区',3,510311),(2422,272,'荣县',3,510321),(2423,272,'富顺县',3,510322),(2424,273,'东区',3,510402),(2425,273,'西区',3,510403),(2426,273,'仁和区',3,510411),(2427,273,'米易县',3,510421),(2428,273,'盐边县',3,510422),(2429,274,'江阳区',3,510502),(2430,274,'纳溪区',3,510503),(2431,274,'龙马潭区',3,510504),(2432,274,'泸县',3,510521),(2433,274,'合江县',3,510522),(2434,274,'叙永县',3,510524),(2435,274,'古蔺县',3,510525),(2436,275,'旌阳区',3,510603),(2437,275,'中江县',3,510623),(2438,275,'罗江县',3,510626),(2439,275,'广汉市',3,510681),(2440,275,'什邡市',3,510682),(2441,275,'绵竹市',3,510683),(2442,276,'涪城区',3,510703),(2443,276,'游仙区',3,510704),(2444,276,'安州区',3,510705),(2445,276,'三台县',3,510722),(2446,276,'盐亭县',3,510723),(2447,276,'梓潼县',3,510725),(2448,276,'北川羌族自治县',3,510726),(2449,276,'平武县',3,510727),(2450,276,'江油市',3,510781),(2451,277,'利州区',3,510802),(2452,277,'昭化区',3,510811),(2453,277,'朝天区',3,510812),(2454,277,'旺苍县',3,510821),(2455,277,'青川县',3,510822),(2456,277,'剑阁县',3,510823),(2457,277,'苍溪县',3,510824),(2458,278,'船山区',3,510903),(2459,278,'安居区',3,510904),(2460,278,'蓬溪县',3,510921),(2461,278,'射洪县',3,510922),(2462,278,'大英县',3,510923),(2463,279,'市中区',3,511002),(2464,279,'东兴区',3,511011),(2465,279,'威远县',3,511024),(2466,279,'资中县',3,511025),(2467,279,'隆昌县',3,511028),(2468,280,'市中区',3,511102),(2469,280,'沙湾区',3,511111),(2470,280,'五通桥区',3,511112),(2471,280,'金口河区',3,511113),(2472,280,'犍为县',3,511123),(2473,280,'井研县',3,511124),(2474,280,'夹江县',3,511126),(2475,280,'沐川县',3,511129),(2476,280,'峨边彝族自治县',3,511132),(2477,280,'马边彝族自治县',3,511133),(2478,280,'峨眉山市',3,511181),(2479,281,'顺庆区',3,511302),(2480,281,'高坪区',3,511303),(2481,281,'嘉陵区',3,511304),(2482,281,'南部县',3,511321),(2483,281,'营山县',3,511322),(2484,281,'蓬安县',3,511323),(2485,281,'仪陇县',3,511324),(2486,281,'西充县',3,511325),(2487,281,'阆中市',3,511381),(2488,282,'东坡区',3,511402),(2489,282,'彭山区',3,511403),(2490,282,'仁寿县',3,511421),(2491,282,'洪雅县',3,511423),(2492,282,'丹棱县',3,511424),(2493,282,'青神县',3,511425),(2494,283,'翠屏区',3,511502),(2495,283,'南溪区',3,511503),(2496,283,'宜宾县',3,511521),(2497,283,'江安县',3,511523),(2498,283,'长宁县',3,511524),(2499,283,'高县',3,511525),(2500,283,'珙县',3,511526),(2501,283,'筠连县',3,511527),(2502,283,'兴文县',3,511528),(2503,283,'屏山县',3,511529),(2504,284,'广安区',3,511602),(2505,284,'前锋区',3,511603),(2506,284,'岳池县',3,511621),(2507,284,'武胜县',3,511622),(2508,284,'邻水县',3,511623),(2509,284,'华蓥市',3,511681),(2510,285,'通川区',3,511702),(2511,285,'达川区',3,511703),(2512,285,'宣汉县',3,511722),(2513,285,'开江县',3,511723),(2514,285,'大竹县',3,511724),(2515,285,'渠县',3,511725),(2516,285,'万源市',3,511781),(2517,286,'雨城区',3,511802),(2518,286,'名山区',3,511803),(2519,286,'荥经县',3,511822),(2520,286,'汉源县',3,511823),(2521,286,'石棉县',3,511824),(2522,286,'天全县',3,511825),(2523,286,'芦山县',3,511826),(2524,286,'宝兴县',3,511827),(2525,287,'巴州区',3,511902),(2526,287,'恩阳区',3,511903),(2527,287,'通江县',3,511921),(2528,287,'南江县',3,511922),(2529,287,'平昌县',3,511923),(2530,288,'雁江区',3,512002),(2531,288,'安岳县',3,512021),(2532,288,'乐至县',3,512022),(2533,289,'马尔康市',3,513201),(2534,289,'汶川县',3,513221),(2535,289,'理县',3,513222),(2536,289,'茂县',3,513223),(2537,289,'松潘县',3,513224),(2538,289,'九寨沟县',3,513225),(2539,289,'金川县',3,513226),(2540,289,'小金县',3,513227),(2541,289,'黑水县',3,513228),(2542,289,'壤塘县',3,513230),(2543,289,'阿坝县',3,513231),(2544,289,'若尔盖县',3,513232),(2545,289,'红原县',3,513233),(2546,290,'康定市',3,513301),(2547,290,'泸定县',3,513322),(2548,290,'丹巴县',3,513323),(2549,290,'九龙县',3,513324),(2550,290,'雅江县',3,513325),(2551,290,'道孚县',3,513326),(2552,290,'炉霍县',3,513327),(2553,290,'甘孜县',3,513328),(2554,290,'新龙县',3,513329),(2555,290,'德格县',3,513330),(2556,290,'白玉县',3,513331),(2557,290,'石渠县',3,513332),(2558,290,'色达县',3,513333),(2559,290,'理塘县',3,513334),(2560,290,'巴塘县',3,513335),(2561,290,'乡城县',3,513336),(2562,290,'稻城县',3,513337),(2563,290,'得荣县',3,513338),(2564,291,'西昌市',3,513401),(2565,291,'木里藏族自治县',3,513422),(2566,291,'盐源县',3,513423),(2567,291,'德昌县',3,513424),(2568,291,'会理县',3,513425),(2569,291,'会东县',3,513426),(2570,291,'宁南县',3,513427),(2571,291,'普格县',3,513428),(2572,291,'布拖县',3,513429),(2573,291,'金阳县',3,513430),(2574,291,'昭觉县',3,513431),(2575,291,'喜德县',3,513432),(2576,291,'冕宁县',3,513433),(2577,291,'越西县',3,513434),(2578,291,'甘洛县',3,513435),(2579,291,'美姑县',3,513436),(2580,291,'雷波县',3,513437),(2581,292,'南明区',3,520102),(2582,292,'云岩区',3,520103),(2583,292,'花溪区',3,520111),(2584,292,'乌当区',3,520112),(2585,292,'白云区',3,520113),(2586,292,'观山湖区',3,520115),(2587,292,'开阳县',3,520121),(2588,292,'息烽县',3,520122),(2589,292,'修文县',3,520123),(2590,292,'清镇市',3,520181),(2591,293,'钟山区',3,520201),(2592,293,'六枝特区',3,520203),(2593,293,'水城县',3,520221),(2594,293,'盘县',3,520222),(2595,294,'红花岗区',3,520302),(2596,294,'汇川区',3,520303),(2597,294,'播州区',3,520304),(2598,294,'桐梓县',3,520322),(2599,294,'绥阳县',3,520323),(2600,294,'正安县',3,520324),(2601,294,'道真仡佬族苗族自治县',3,520325),(2602,294,'务川仡佬族苗族自治县',3,520326),(2603,294,'凤冈县',3,520327),(2604,294,'湄潭县',3,520328),(2605,294,'余庆县',3,520329),(2606,294,'习水县',3,520330),(2607,294,'赤水市',3,520381),(2608,294,'仁怀市',3,520382),(2609,295,'西秀区',3,520402),(2610,295,'平坝区',3,520403),(2611,295,'普定县',3,520422),(2612,295,'镇宁布依族苗族自治县',3,520423),(2613,295,'关岭布依族苗族自治县',3,520424),(2614,295,'紫云苗族布依族自治县',3,520425),(2615,296,'七星关区',3,520502),(2616,296,'大方县',3,520521),(2617,296,'黔西县',3,520522),(2618,296,'金沙县',3,520523),(2619,296,'织金县',3,520524),(2620,296,'纳雍县',3,520525),(2621,296,'威宁彝族回族苗族自治县',3,520526),(2622,296,'赫章县',3,520527),(2623,297,'碧江区',3,520602),(2624,297,'万山区',3,520603),(2625,297,'江口县',3,520621),(2626,297,'玉屏侗族自治县',3,520622),(2627,297,'石阡县',3,520623),(2628,297,'思南县',3,520624),(2629,297,'印江土家族苗族自治县',3,520625),(2630,297,'德江县',3,520626),(2631,297,'沿河土家族自治县',3,520627),(2632,297,'松桃苗族自治县',3,520628),(2633,298,'兴义市',3,522301),(2634,298,'兴仁县',3,522322),(2635,298,'普安县',3,522323),(2636,298,'晴隆县',3,522324),(2637,298,'贞丰县',3,522325),(2638,298,'望谟县',3,522326),(2639,298,'册亨县',3,522327),(2640,298,'安龙县',3,522328),(2641,299,'凯里市',3,522601),(2642,299,'黄平县',3,522622),(2643,299,'施秉县',3,522623),(2644,299,'三穗县',3,522624),(2645,299,'镇远县',3,522625),(2646,299,'岑巩县',3,522626),(2647,299,'天柱县',3,522627),(2648,299,'锦屏县',3,522628),(2649,299,'剑河县',3,522629),(2650,299,'台江县',3,522630),(2651,299,'黎平县',3,522631),(2652,299,'榕江县',3,522632),(2653,299,'从江县',3,522633),(2654,299,'雷山县',3,522634),(2655,299,'麻江县',3,522635),(2656,299,'丹寨县',3,522636),(2657,300,'都匀市',3,522701),(2658,300,'福泉市',3,522702),(2659,300,'荔波县',3,522722),(2660,300,'贵定县',3,522723),(2661,300,'瓮安县',3,522725),(2662,300,'独山县',3,522726),(2663,300,'平塘县',3,522727),(2664,300,'罗甸县',3,522728),(2665,300,'长顺县',3,522729),(2666,300,'龙里县',3,522730),(2667,300,'惠水县',3,522731),(2668,300,'三都水族自治县',3,522732),(2669,301,'五华区',3,530102),(2670,301,'盘龙区',3,530103),(2671,301,'官渡区',3,530111),(2672,301,'西山区',3,530112),(2673,301,'东川区',3,530113),(2674,301,'呈贡区',3,530114),(2675,301,'晋宁县',3,530122),(2676,301,'富民县',3,530124),(2677,301,'宜良县',3,530125),(2678,301,'石林彝族自治县',3,530126),(2679,301,'嵩明县',3,530127),(2680,301,'禄劝彝族苗族自治县',3,530128),(2681,301,'寻甸回族彝族自治县',3,530129),(2682,301,'安宁市',3,530181),(2683,302,'麒麟区',3,530302),(2684,302,'沾益区',3,530303),(2685,302,'马龙县',3,530321),(2686,302,'陆良县',3,530322),(2687,302,'师宗县',3,530323),(2688,302,'罗平县',3,530324),(2689,302,'富源县',3,530325),(2690,302,'会泽县',3,530326),(2691,302,'宣威市',3,530381),(2692,303,'红塔区',3,530402),(2693,303,'江川区',3,530403),(2694,303,'澄江县',3,530422),(2695,303,'通海县',3,530423),(2696,303,'华宁县',3,530424),(2697,303,'易门县',3,530425),(2698,303,'峨山彝族自治县',3,530426),(2699,303,'新平彝族傣族自治县',3,530427),(2700,303,'元江哈尼族彝族傣族自治县',3,530428),(2701,304,'隆阳区',3,530502),(2702,304,'施甸县',3,530521),(2703,304,'龙陵县',3,530523),(2704,304,'昌宁县',3,530524),(2705,304,'腾冲市',3,530581),(2706,305,'昭阳区',3,530602),(2707,305,'鲁甸县',3,530621),(2708,305,'巧家县',3,530622),(2709,305,'盐津县',3,530623),(2710,305,'大关县',3,530624),(2711,305,'永善县',3,530625),(2712,305,'绥江县',3,530626),(2713,305,'镇雄县',3,530627),(2714,305,'彝良县',3,530628),(2715,305,'威信县',3,530629),(2716,305,'水富县',3,530630),(2717,306,'古城区',3,530702),(2718,306,'玉龙纳西族自治县',3,530721),(2719,306,'永胜县',3,530722),(2720,306,'华坪县',3,530723),(2721,306,'宁蒗彝族自治县',3,530724),(2722,307,'思茅区',3,530802),(2723,307,'宁洱哈尼族彝族自治县',3,530821),(2724,307,'墨江哈尼族自治县',3,530822),(2725,307,'景东彝族自治县',3,530823),(2726,307,'景谷傣族彝族自治县',3,530824),(2727,307,'镇沅彝族哈尼族拉祜族自治县',3,530825),(2728,307,'江城哈尼族彝族自治县',3,530826),(2729,307,'孟连傣族拉祜族佤族自治县',3,530827),(2730,307,'澜沧拉祜族自治县',3,530828),(2731,307,'西盟佤族自治县',3,530829),(2732,308,'临翔区',3,530902),(2733,308,'凤庆县',3,530921),(2734,308,'云县',3,530922),(2735,308,'永德县',3,530923),(2736,308,'镇康县',3,530924),(2737,308,'双江拉祜族佤族布朗族傣族自治县',3,530925),(2738,308,'耿马傣族佤族自治县',3,530926),(2739,308,'沧源佤族自治县',3,530927),(2740,309,'楚雄市',3,532301),(2741,309,'双柏县',3,532322),(2742,309,'牟定县',3,532323),(2743,309,'南华县',3,532324),(2744,309,'姚安县',3,532325),(2745,309,'大姚县',3,532326),(2746,309,'永仁县',3,532327),(2747,309,'元谋县',3,532328),(2748,309,'武定县',3,532329),(2749,309,'禄丰县',3,532331),(2750,310,'个旧市',3,532501),(2751,310,'开远市',3,532502),(2752,310,'蒙自市',3,532503),(2753,310,'弥勒市',3,532504),(2754,310,'屏边苗族自治县',3,532523),(2755,310,'建水县',3,532524),(2756,310,'石屏县',3,532525),(2757,310,'泸西县',3,532527),(2758,310,'元阳县',3,532528),(2759,310,'红河县',3,532529),(2760,310,'金平苗族瑶族傣族自治县',3,532530),(2761,310,'绿春县',3,532531),(2762,310,'河口瑶族自治县',3,532532),(2763,311,'文山市',3,532601),(2764,311,'砚山县',3,532622),(2765,311,'西畴县',3,532623),(2766,311,'麻栗坡县',3,532624),(2767,311,'马关县',3,532625),(2768,311,'丘北县',3,532626),(2769,311,'广南县',3,532627),(2770,311,'富宁县',3,532628),(2771,312,'景洪市',3,532801),(2772,312,'勐海县',3,532822),(2773,312,'勐腊县',3,532823),(2774,313,'大理市',3,532901),(2775,313,'漾濞彝族自治县',3,532922),(2776,313,'祥云县',3,532923),(2777,313,'宾川县',3,532924),(2778,313,'弥渡县',3,532925),(2779,313,'南涧彝族自治县',3,532926),(2780,313,'巍山彝族回族自治县',3,532927),(2781,313,'永平县',3,532928),(2782,313,'云龙县',3,532929),(2783,313,'洱源县',3,532930),(2784,313,'剑川县',3,532931),(2785,313,'鹤庆县',3,532932),(2786,314,'瑞丽市',3,533102),(2787,314,'芒市',3,533103),(2788,314,'梁河县',3,533122),(2789,314,'盈江县',3,533123),(2790,314,'陇川县',3,533124),(2791,315,'泸水市',3,533301),(2792,315,'福贡县',3,533323),(2793,315,'贡山独龙族怒族自治县',3,533324),(2794,315,'兰坪白族普米族自治县',3,533325),(2795,316,'香格里拉市',3,533401),(2796,316,'德钦县',3,533422),(2797,316,'维西傈僳族自治县',3,533423),(2798,317,'城关区',3,540102),(2799,317,'堆龙德庆区',3,540103),(2800,317,'林周县',3,540121),(2801,317,'当雄县',3,540122),(2802,317,'尼木县',3,540123),(2803,317,'曲水县',3,540124),(2804,317,'达孜县',3,540126),(2805,317,'墨竹工卡县',3,540127),(2806,318,'桑珠孜区',3,540202),(2807,318,'南木林县',3,540221),(2808,318,'江孜县',3,540222),(2809,318,'定日县',3,540223),(2810,318,'萨迦县',3,540224),(2811,318,'拉孜县',3,540225),(2812,318,'昂仁县',3,540226),(2813,318,'谢通门县',3,540227),(2814,318,'白朗县',3,540228),(2815,318,'仁布县',3,540229),(2816,318,'康马县',3,540230),(2817,318,'定结县',3,540231),(2818,318,'仲巴县',3,540232),(2819,318,'亚东县',3,540233),(2820,318,'吉隆县',3,540234),(2821,318,'聂拉木县',3,540235),(2822,318,'萨嘎县',3,540236),(2823,318,'岗巴县',3,540237),(2824,319,'卡若区',3,540302),(2825,319,'江达县',3,540321),(2826,319,'贡觉县',3,540322),(2827,319,'类乌齐县',3,540323),(2828,319,'丁青县',3,540324),(2829,319,'察雅县',3,540325),(2830,319,'八宿县',3,540326),(2831,319,'左贡县',3,540327),(2832,319,'芒康县',3,540328),(2833,319,'洛隆县',3,540329),(2834,319,'边坝县',3,540330),(2835,320,'巴宜区',3,540402),(2836,320,'工布江达县',3,540421),(2837,320,'米林县',3,540422),(2838,320,'墨脱县',3,540423),(2839,320,'波密县',3,540424),(2840,320,'察隅县',3,540425),(2841,320,'朗县',3,540426),(2842,321,'乃东区',3,540502),(2843,321,'扎囊县',3,540521),(2844,321,'贡嘎县',3,540522),(2845,321,'桑日县',3,540523),(2846,321,'琼结县',3,540524),(2847,321,'曲松县',3,540525),(2848,321,'措美县',3,540526),(2849,321,'洛扎县',3,540527),(2850,321,'加查县',3,540528),(2851,321,'隆子县',3,540529),(2852,321,'错那县',3,540530),(2853,321,'浪卡子县',3,540531),(2854,322,'那曲县',3,542421),(2855,322,'嘉黎县',3,542422),(2856,322,'比如县',3,542423),(2857,322,'聂荣县',3,542424),(2858,322,'安多县',3,542425),(2859,322,'申扎县',3,542426),(2860,322,'索县',3,542427),(2861,322,'班戈县',3,542428),(2862,322,'巴青县',3,542429),(2863,322,'尼玛县',3,542430),(2864,322,'双湖县',3,542431),(2865,323,'普兰县',3,542521),(2866,323,'札达县',3,542522),(2867,323,'噶尔县',3,542523),(2868,323,'日土县',3,542524),(2869,323,'革吉县',3,542525),(2870,323,'改则县',3,542526),(2871,323,'措勤县',3,542527),(2872,324,'新城区',3,610102),(2873,324,'碑林区',3,610103),(2874,324,'莲湖区',3,610104),(2875,324,'灞桥区',3,610111),(2876,324,'未央区',3,610112),(2877,324,'雁塔区',3,610113),(2878,324,'阎良区',3,610114),(2879,324,'临潼区',3,610115),(2880,324,'长安区',3,610116),(2881,324,'高陵区',3,610117),(2882,324,'蓝田县',3,610122),(2883,324,'周至县',3,610124),(2884,324,'户县',3,610125),(2885,325,'王益区',3,610202),(2886,325,'印台区',3,610203),(2887,325,'耀州区',3,610204),(2888,325,'宜君县',3,610222),(2889,326,'渭滨区',3,610302),(2890,326,'金台区',3,610303),(2891,326,'陈仓区',3,610304),(2892,326,'凤翔县',3,610322),(2893,326,'岐山县',3,610323),(2894,326,'扶风县',3,610324),(2895,326,'眉县',3,610326),(2896,326,'陇县',3,610327),(2897,326,'千阳县',3,610328),(2898,326,'麟游县',3,610329),(2899,326,'凤县',3,610330),(2900,326,'太白县',3,610331),(2901,327,'秦都区',3,610402),(2902,327,'杨陵区',3,610403),(2903,327,'渭城区',3,610404),(2904,327,'三原县',3,610422),(2905,327,'泾阳县',3,610423),(2906,327,'乾县',3,610424),(2907,327,'礼泉县',3,610425),(2908,327,'永寿县',3,610426),(2909,327,'彬县',3,610427),(2910,327,'长武县',3,610428),(2911,327,'旬邑县',3,610429),(2912,327,'淳化县',3,610430),(2913,327,'武功县',3,610431),(2914,327,'兴平市',3,610481),(2915,328,'临渭区',3,610502),(2916,328,'华州区',3,610503),(2917,328,'潼关县',3,610522),(2918,328,'大荔县',3,610523),(2919,328,'合阳县',3,610524),(2920,328,'澄城县',3,610525),(2921,328,'蒲城县',3,610526),(2922,328,'白水县',3,610527),(2923,328,'富平县',3,610528),(2924,328,'韩城市',3,610581),(2925,328,'华阴市',3,610582),(2926,329,'宝塔区',3,610602),(2927,329,'安塞区',3,610603),(2928,329,'延长县',3,610621),(2929,329,'延川县',3,610622),(2930,329,'子长县',3,610623),(2931,329,'志丹县',3,610625),(2932,329,'吴起县',3,610626),(2933,329,'甘泉县',3,610627),(2934,329,'富县',3,610628),(2935,329,'洛川县',3,610629),(2936,329,'宜川县',3,610630),(2937,329,'黄龙县',3,610631),(2938,329,'黄陵县',3,610632),(2939,330,'汉台区',3,610702),(2940,330,'南郑县',3,610721),(2941,330,'城固县',3,610722),(2942,330,'洋县',3,610723),(2943,330,'西乡县',3,610724),(2944,330,'勉县',3,610725),(2945,330,'宁强县',3,610726),(2946,330,'略阳县',3,610727),(2947,330,'镇巴县',3,610728),(2948,330,'留坝县',3,610729),(2949,330,'佛坪县',3,610730),(2950,331,'榆阳区',3,610802),(2951,331,'横山区',3,610803),(2952,331,'神木县',3,610821),(2953,331,'府谷县',3,610822),(2954,331,'靖边县',3,610824),(2955,331,'定边县',3,610825),(2956,331,'绥德县',3,610826),(2957,331,'米脂县',3,610827),(2958,331,'佳县',3,610828),(2959,331,'吴堡县',3,610829),(2960,331,'清涧县',3,610830),(2961,331,'子洲县',3,610831),(2962,332,'汉滨区',3,610902),(2963,332,'汉阴县',3,610921),(2964,332,'石泉县',3,610922),(2965,332,'宁陕县',3,610923),(2966,332,'紫阳县',3,610924),(2967,332,'岚皋县',3,610925),(2968,332,'平利县',3,610926),(2969,332,'镇坪县',3,610927),(2970,332,'旬阳县',3,610928),(2971,332,'白河县',3,610929),(2972,333,'商州区',3,611002),(2973,333,'洛南县',3,611021),(2974,333,'丹凤县',3,611022),(2975,333,'商南县',3,611023),(2976,333,'山阳县',3,611024),(2977,333,'镇安县',3,611025),(2978,333,'柞水县',3,611026),(2979,334,'城关区',3,620102),(2980,334,'七里河区',3,620103),(2981,334,'西固区',3,620104),(2982,334,'安宁区',3,620105),(2983,334,'红古区',3,620111),(2984,334,'永登县',3,620121),(2985,334,'皋兰县',3,620122),(2986,334,'榆中县',3,620123),(2987,335,'嘉峪关市',3,620201),(2988,336,'金川区',3,620302),(2989,336,'永昌县',3,620321),(2990,337,'白银区',3,620402),(2991,337,'平川区',3,620403),(2992,337,'靖远县',3,620421),(2993,337,'会宁县',3,620422),(2994,337,'景泰县',3,620423),(2995,338,'秦州区',3,620502),(2996,338,'麦积区',3,620503),(2997,338,'清水县',3,620521),(2998,338,'秦安县',3,620522),(2999,338,'甘谷县',3,620523),(3000,338,'武山县',3,620524),(3001,338,'张家川回族自治县',3,620525),(3002,339,'凉州区',3,620602),(3003,339,'民勤县',3,620621),(3004,339,'古浪县',3,620622),(3005,339,'天祝藏族自治县',3,620623),(3006,340,'甘州区',3,620702),(3007,340,'肃南裕固族自治县',3,620721),(3008,340,'民乐县',3,620722),(3009,340,'临泽县',3,620723),(3010,340,'高台县',3,620724),(3011,340,'山丹县',3,620725),(3012,341,'崆峒区',3,620802),(3013,341,'泾川县',3,620821),(3014,341,'灵台县',3,620822),(3015,341,'崇信县',3,620823),(3016,341,'华亭县',3,620824),(3017,341,'庄浪县',3,620825),(3018,341,'静宁县',3,620826),(3019,342,'肃州区',3,620902),(3020,342,'金塔县',3,620921),(3021,342,'瓜州县',3,620922),(3022,342,'肃北蒙古族自治县',3,620923),(3023,342,'阿克塞哈萨克族自治县',3,620924),(3024,342,'玉门市',3,620981),(3025,342,'敦煌市',3,620982),(3026,343,'西峰区',3,621002),(3027,343,'庆城县',3,621021),(3028,343,'环县',3,621022),(3029,343,'华池县',3,621023),(3030,343,'合水县',3,621024),(3031,343,'正宁县',3,621025),(3032,343,'宁县',3,621026),(3033,343,'镇原县',3,621027),(3034,344,'安定区',3,621102),(3035,344,'通渭县',3,621121),(3036,344,'陇西县',3,621122),(3037,344,'渭源县',3,621123),(3038,344,'临洮县',3,621124),(3039,344,'漳县',3,621125),(3040,344,'岷县',3,621126),(3041,345,'武都区',3,621202),(3042,345,'成县',3,621221),(3043,345,'文县',3,621222),(3044,345,'宕昌县',3,621223),(3045,345,'康县',3,621224),(3046,345,'西和县',3,621225),(3047,345,'礼县',3,621226),(3048,345,'徽县',3,621227),(3049,345,'两当县',3,621228),(3050,346,'临夏市',3,622901),(3051,346,'临夏县',3,622921),(3052,346,'康乐县',3,622922),(3053,346,'永靖县',3,622923),(3054,346,'广河县',3,622924),(3055,346,'和政县',3,622925),(3056,346,'东乡族自治县',3,622926),(3057,346,'积石山保安族东乡族撒拉族自治县',3,622927),(3058,347,'合作市',3,623001),(3059,347,'临潭县',3,623021),(3060,347,'卓尼县',3,623022),(3061,347,'舟曲县',3,623023),(3062,347,'迭部县',3,623024),(3063,347,'玛曲县',3,623025),(3064,347,'碌曲县',3,623026),(3065,347,'夏河县',3,623027),(3066,348,'城东区',3,630102),(3067,348,'城中区',3,630103),(3068,348,'城西区',3,630104),(3069,348,'城北区',3,630105),(3070,348,'大通回族土族自治县',3,630121),(3071,348,'湟中县',3,630122),(3072,348,'湟源县',3,630123),(3073,349,'乐都区',3,630202),(3074,349,'平安区',3,630203),(3075,349,'民和回族土族自治县',3,630222),(3076,349,'互助土族自治县',3,630223),(3077,349,'化隆回族自治县',3,630224),(3078,349,'循化撒拉族自治县',3,630225),(3079,350,'门源回族自治县',3,632221),(3080,350,'祁连县',3,632222),(3081,350,'海晏县',3,632223),(3082,350,'刚察县',3,632224),(3083,351,'同仁县',3,632321),(3084,351,'尖扎县',3,632322),(3085,351,'泽库县',3,632323),(3086,351,'河南蒙古族自治县',3,632324),(3087,352,'共和县',3,632521),(3088,352,'同德县',3,632522),(3089,352,'贵德县',3,632523),(3090,352,'兴海县',3,632524),(3091,352,'贵南县',3,632525),(3092,353,'玛沁县',3,632621),(3093,353,'班玛县',3,632622),(3094,353,'甘德县',3,632623),(3095,353,'达日县',3,632624),(3096,353,'久治县',3,632625),(3097,353,'玛多县',3,632626),(3098,354,'玉树市',3,632701),(3099,354,'杂多县',3,632722),(3100,354,'称多县',3,632723),(3101,354,'治多县',3,632724),(3102,354,'囊谦县',3,632725),(3103,354,'曲麻莱县',3,632726),(3104,355,'格尔木市',3,632801),(3105,355,'德令哈市',3,632802),(3106,355,'乌兰县',3,632821),(3107,355,'都兰县',3,632822),(3108,355,'天峻县',3,632823),(3109,356,'兴庆区',3,640104),(3110,356,'西夏区',3,640105),(3111,356,'金凤区',3,640106),(3112,356,'永宁县',3,640121),(3113,356,'贺兰县',3,640122),(3114,356,'灵武市',3,640181),(3115,357,'大武口区',3,640202),(3116,357,'惠农区',3,640205),(3117,357,'平罗县',3,640221),(3118,358,'利通区',3,640302),(3119,358,'红寺堡区',3,640303),(3120,358,'盐池县',3,640323),(3121,358,'同心县',3,640324),(3122,358,'青铜峡市',3,640381),(3123,359,'原州区',3,640402),(3124,359,'西吉县',3,640422),(3125,359,'隆德县',3,640423),(3126,359,'泾源县',3,640424),(3127,359,'彭阳县',3,640425),(3128,360,'沙坡头区',3,640502),(3129,360,'中宁县',3,640521),(3130,360,'海原县',3,640522),(3131,361,'天山区',3,650102),(3132,361,'沙依巴克区',3,650103),(3133,361,'新市区',3,650104),(3134,361,'水磨沟区',3,650105),(3135,361,'头屯河区',3,650106),(3136,361,'达坂城区',3,650107),(3137,361,'米东区',3,650109),(3138,361,'乌鲁木齐县',3,650121),(3139,362,'独山子区',3,650202),(3140,362,'克拉玛依区',3,650203),(3141,362,'白碱滩区',3,650204),(3142,362,'乌尔禾区',3,650205),(3143,363,'高昌区',3,650402),(3144,363,'鄯善县',3,650421),(3145,363,'托克逊县',3,650422),(3146,364,'伊州区',3,650502),(3147,364,'巴里坤哈萨克自治县',3,650521),(3148,364,'伊吾县',3,650522),(3149,365,'昌吉市',3,652301),(3150,365,'阜康市',3,652302),(3151,365,'呼图壁县',3,652323),(3152,365,'玛纳斯县',3,652324),(3153,365,'奇台县',3,652325),(3154,365,'吉木萨尔县',3,652327),(3155,365,'木垒哈萨克自治县',3,652328),(3156,366,'博乐市',3,652701),(3157,366,'阿拉山口市',3,652702),(3158,366,'精河县',3,652722),(3159,366,'温泉县',3,652723),(3160,367,'库尔勒市',3,652801),(3161,367,'轮台县',3,652822),(3162,367,'尉犁县',3,652823),(3163,367,'若羌县',3,652824),(3164,367,'且末县',3,652825),(3165,367,'焉耆回族自治县',3,652826),(3166,367,'和静县',3,652827),(3167,367,'和硕县',3,652828),(3168,367,'博湖县',3,652829),(3169,368,'阿克苏市',3,652901),(3170,368,'温宿县',3,652922),(3171,368,'库车县',3,652923),(3172,368,'沙雅县',3,652924),(3173,368,'新和县',3,652925),(3174,368,'拜城县',3,652926),(3175,368,'乌什县',3,652927),(3176,368,'阿瓦提县',3,652928),(3177,368,'柯坪县',3,652929),(3178,369,'阿图什市',3,653001),(3179,369,'阿克陶县',3,653022),(3180,369,'阿合奇县',3,653023),(3181,369,'乌恰县',3,653024),(3182,370,'喀什市',3,653101),(3183,370,'疏附县',3,653121),(3184,370,'疏勒县',3,653122),(3185,370,'英吉沙县',3,653123),(3186,370,'泽普县',3,653124),(3187,370,'莎车县',3,653125),(3188,370,'叶城县',3,653126),(3189,370,'麦盖提县',3,653127),(3190,370,'岳普湖县',3,653128),(3191,370,'伽师县',3,653129),(3192,370,'巴楚县',3,653130),(3193,370,'塔什库尔干塔吉克自治县',3,653131),(3194,371,'和田市',3,653201),(3195,371,'和田县',3,653221),(3196,371,'墨玉县',3,653222),(3197,371,'皮山县',3,653223),(3198,371,'洛浦县',3,653224),(3199,371,'策勒县',3,653225),(3200,371,'于田县',3,653226),(3201,371,'民丰县',3,653227),(3202,372,'伊宁市',3,654002),(3203,372,'奎屯市',3,654003),(3204,372,'霍尔果斯市',3,654004),(3205,372,'伊宁县',3,654021),(3206,372,'察布查尔锡伯自治县',3,654022),(3207,372,'霍城县',3,654023),(3208,372,'巩留县',3,654024),(3209,372,'新源县',3,654025),(3210,372,'昭苏县',3,654026),(3211,372,'特克斯县',3,654027),(3212,372,'尼勒克县',3,654028),(3213,373,'塔城市',3,654201),(3214,373,'乌苏市',3,654202),(3215,373,'额敏县',3,654221),(3216,373,'沙湾县',3,654223),(3217,373,'托里县',3,654224),(3218,373,'裕民县',3,654225),(3219,373,'和布克赛尔蒙古自治县',3,654226),(3220,374,'阿勒泰市',3,654301),(3221,374,'布尔津县',3,654321),(3222,374,'富蕴县',3,654322),(3223,374,'福海县',3,654323),(3224,374,'哈巴河县',3,654324),(3225,374,'青河县',3,654325),(3226,374,'吉木乃县',3,654326),(3227,375,'石河子市',3,659001),(3228,375,'阿拉尔市',3,659002),(3229,375,'图木舒克市',3,659003),(3230,375,'五家渠市',3,659004),(3231,375,'铁门关市',3,659006); +INSERT INTO `litemall_region` VALUES (1,0,'北京市',1,110000),(2,0,'天津市',1,120000),(3,0,'河北省',1,130000),(4,0,'山西省',1,140000),(5,0,'内蒙古自治区',1,150000),(6,0,'辽宁省',1,210000),(7,0,'吉林省',1,220000),(8,0,'黑龙江省',1,230000),(9,0,'上海市',1,310000),(10,0,'江苏省',1,320000),(11,0,'浙江省',1,330000),(12,0,'安徽省',1,340000),(13,0,'福建省',1,350000),(14,0,'江西省',1,360000),(15,0,'山东省',1,370000),(16,0,'河南省',1,410000),(17,0,'湖北省',1,420000),(18,0,'湖南省',1,430000),(19,0,'广东省',1,440000),(20,0,'广西壮族自治区',1,450000),(21,0,'海南省',1,460000),(22,0,'重庆市',1,500000),(23,0,'四川省',1,510000),(24,0,'贵州省',1,520000),(25,0,'云南省',1,530000),(26,0,'西藏自治区',1,540000),(27,0,'陕西省',1,610000),(28,0,'甘肃省',1,620000),(29,0,'青海省',1,630000),(30,0,'宁夏回族自治区',1,640000),(31,0,'新疆维吾尔自治区',1,650000),(32,1,'市辖区',2,110100),(33,2,'市辖区',2,120100),(34,3,'石家庄市',2,130100),(35,3,'唐山市',2,130200),(36,3,'秦皇岛市',2,130300),(37,3,'邯郸市',2,130400),(38,3,'邢台市',2,130500),(39,3,'保定市',2,130600),(40,3,'张家口市',2,130700),(41,3,'承德市',2,130800),(42,3,'沧州市',2,130900),(43,3,'廊坊市',2,131000),(44,3,'衡水市',2,131100),(45,3,'省直辖县级行政区划',2,139000),(46,4,'太原市',2,140100),(47,4,'大同市',2,140200),(48,4,'阳泉市',2,140300),(49,4,'长治市',2,140400),(50,4,'晋城市',2,140500),(51,4,'朔州市',2,140600),(52,4,'晋中市',2,140700),(53,4,'运城市',2,140800),(54,4,'忻州市',2,140900),(55,4,'临汾市',2,141000),(56,4,'吕梁市',2,141100),(57,5,'呼和浩特市',2,150100),(58,5,'包头市',2,150200),(59,5,'乌海市',2,150300),(60,5,'赤峰市',2,150400),(61,5,'通辽市',2,150500),(62,5,'鄂尔多斯市',2,150600),(63,5,'呼伦贝尔市',2,150700),(64,5,'巴彦淖尔市',2,150800),(65,5,'乌兰察布市',2,150900),(66,5,'兴安盟',2,152200),(67,5,'锡林郭勒盟',2,152500),(68,5,'阿拉善盟',2,152900),(69,6,'沈阳市',2,210100),(70,6,'大连市',2,210200),(71,6,'鞍山市',2,210300),(72,6,'抚顺市',2,210400),(73,6,'本溪市',2,210500),(74,6,'丹东市',2,210600),(75,6,'锦州市',2,210700),(76,6,'营口市',2,210800),(77,6,'阜新市',2,210900),(78,6,'辽阳市',2,211000),(79,6,'盘锦市',2,211100),(80,6,'铁岭市',2,211200),(81,6,'朝阳市',2,211300),(82,6,'葫芦岛市',2,211400),(83,7,'长春市',2,220100),(84,7,'吉林市',2,220200),(85,7,'四平市',2,220300),(86,7,'辽源市',2,220400),(87,7,'通化市',2,220500),(88,7,'白山市',2,220600),(89,7,'松原市',2,220700),(90,7,'白城市',2,220800),(91,7,'延边朝鲜族自治州',2,222400),(92,8,'哈尔滨市',2,230100),(93,8,'齐齐哈尔市',2,230200),(94,8,'鸡西市',2,230300),(95,8,'鹤岗市',2,230400),(96,8,'双鸭山市',2,230500),(97,8,'大庆市',2,230600),(98,8,'伊春市',2,230700),(99,8,'佳木斯市',2,230800),(100,8,'七台河市',2,230900),(101,8,'牡丹江市',2,231000),(102,8,'黑河市',2,231100),(103,8,'绥化市',2,231200),(104,8,'大兴安岭地区',2,232700),(105,9,'市辖区',2,310100),(106,10,'南京市',2,320100),(107,10,'无锡市',2,320200),(108,10,'徐州市',2,320300),(109,10,'常州市',2,320400),(110,10,'苏州市',2,320500),(111,10,'南通市',2,320600),(112,10,'连云港市',2,320700),(113,10,'淮安市',2,320800),(114,10,'盐城市',2,320900),(115,10,'扬州市',2,321000),(116,10,'镇江市',2,321100),(117,10,'泰州市',2,321200),(118,10,'宿迁市',2,321300),(119,11,'杭州市',2,330100),(120,11,'宁波市',2,330200),(121,11,'温州市',2,330300),(122,11,'嘉兴市',2,330400),(123,11,'湖州市',2,330500),(124,11,'绍兴市',2,330600),(125,11,'金华市',2,330700),(126,11,'衢州市',2,330800),(127,11,'舟山市',2,330900),(128,11,'台州市',2,331000),(129,11,'丽水市',2,331100),(130,12,'合肥市',2,340100),(131,12,'芜湖市',2,340200),(132,12,'蚌埠市',2,340300),(133,12,'淮南市',2,340400),(134,12,'马鞍山市',2,340500),(135,12,'淮北市',2,340600),(136,12,'铜陵市',2,340700),(137,12,'安庆市',2,340800),(138,12,'黄山市',2,341000),(139,12,'滁州市',2,341100),(140,12,'阜阳市',2,341200),(141,12,'宿州市',2,341300),(142,12,'六安市',2,341500),(143,12,'亳州市',2,341600),(144,12,'池州市',2,341700),(145,12,'宣城市',2,341800),(146,13,'福州市',2,350100),(147,13,'厦门市',2,350200),(148,13,'莆田市',2,350300),(149,13,'三明市',2,350400),(150,13,'泉州市',2,350500),(151,13,'漳州市',2,350600),(152,13,'南平市',2,350700),(153,13,'龙岩市',2,350800),(154,13,'宁德市',2,350900),(155,14,'南昌市',2,360100),(156,14,'景德镇市',2,360200),(157,14,'萍乡市',2,360300),(158,14,'九江市',2,360400),(159,14,'新余市',2,360500),(160,14,'鹰潭市',2,360600),(161,14,'赣州市',2,360700),(162,14,'吉安市',2,360800),(163,14,'宜春市',2,360900),(164,14,'抚州市',2,361000),(165,14,'上饶市',2,361100),(166,15,'济南市',2,370100),(167,15,'青岛市',2,370200),(168,15,'淄博市',2,370300),(169,15,'枣庄市',2,370400),(170,15,'东营市',2,370500),(171,15,'烟台市',2,370600),(172,15,'潍坊市',2,370700),(173,15,'济宁市',2,370800),(174,15,'泰安市',2,370900),(175,15,'威海市',2,371000),(176,15,'日照市',2,371100),(177,15,'莱芜市',2,371200),(178,15,'临沂市',2,371300),(179,15,'德州市',2,371400),(180,15,'聊城市',2,371500),(181,15,'滨州市',2,371600),(182,15,'菏泽市',2,371700),(183,16,'郑州市',2,410100),(184,16,'开封市',2,410200),(185,16,'洛阳市',2,410300),(186,16,'平顶山市',2,410400),(187,16,'安阳市',2,410500),(188,16,'鹤壁市',2,410600),(189,16,'新乡市',2,410700),(190,16,'焦作市',2,410800),(191,16,'濮阳市',2,410900),(192,16,'许昌市',2,411000),(193,16,'漯河市',2,411100),(194,16,'三门峡市',2,411200),(195,16,'南阳市',2,411300),(196,16,'商丘市',2,411400),(197,16,'信阳市',2,411500),(198,16,'周口市',2,411600),(199,16,'驻马店市',2,411700),(200,16,'省直辖县级行政区划',2,419000),(201,17,'武汉市',2,420100),(202,17,'黄石市',2,420200),(203,17,'十堰市',2,420300),(204,17,'宜昌市',2,420500),(205,17,'襄阳市',2,420600),(206,17,'鄂州市',2,420700),(207,17,'荆门市',2,420800),(208,17,'孝感市',2,420900),(209,17,'荆州市',2,421000),(210,17,'黄冈市',2,421100),(211,17,'咸宁市',2,421200),(212,17,'随州市',2,421300),(213,17,'恩施土家族苗族自治州',2,422800),(214,17,'省直辖县级行政区划',2,429000),(215,18,'长沙市',2,430100),(216,18,'株洲市',2,430200),(217,18,'湘潭市',2,430300),(218,18,'衡阳市',2,430400),(219,18,'邵阳市',2,430500),(220,18,'岳阳市',2,430600),(221,18,'常德市',2,430700),(222,18,'张家界市',2,430800),(223,18,'益阳市',2,430900),(224,18,'郴州市',2,431000),(225,18,'永州市',2,431100),(226,18,'怀化市',2,431200),(227,18,'娄底市',2,431300),(228,18,'湘西土家族苗族自治州',2,433100),(229,19,'广州市',2,440100),(230,19,'韶关市',2,440200),(231,19,'深圳市',2,440300),(232,19,'珠海市',2,440400),(233,19,'汕头市',2,440500),(234,19,'佛山市',2,440600),(235,19,'江门市',2,440700),(236,19,'湛江市',2,440800),(237,19,'茂名市',2,440900),(238,19,'肇庆市',2,441200),(239,19,'惠州市',2,441300),(240,19,'梅州市',2,441400),(241,19,'汕尾市',2,441500),(242,19,'河源市',2,441600),(243,19,'阳江市',2,441700),(244,19,'清远市',2,441800),(245,19,'东莞市',2,441900),(246,19,'中山市',2,442000),(247,19,'潮州市',2,445100),(248,19,'揭阳市',2,445200),(249,19,'云浮市',2,445300),(250,20,'南宁市',2,450100),(251,20,'柳州市',2,450200),(252,20,'桂林市',2,450300),(253,20,'梧州市',2,450400),(254,20,'北海市',2,450500),(255,20,'防城港市',2,450600),(256,20,'钦州市',2,450700),(257,20,'贵港市',2,450800),(258,20,'玉林市',2,450900),(259,20,'百色市',2,451000),(260,20,'贺州市',2,451100),(261,20,'河池市',2,451200),(262,20,'来宾市',2,451300),(263,20,'崇左市',2,451400),(264,21,'海口市',2,460100),(265,21,'三亚市',2,460200),(266,21,'三沙市',2,460300),(267,21,'儋州市',2,460400),(268,21,'省直辖县级行政区划',2,469000),(269,22,'市辖区',2,500100),(270,22,'县',2,500200),(271,23,'成都市',2,510100),(272,23,'自贡市',2,510300),(273,23,'攀枝花市',2,510400),(274,23,'泸州市',2,510500),(275,23,'德阳市',2,510600),(276,23,'绵阳市',2,510700),(277,23,'广元市',2,510800),(278,23,'遂宁市',2,510900),(279,23,'内江市',2,511000),(280,23,'乐山市',2,511100),(281,23,'南充市',2,511300),(282,23,'眉山市',2,511400),(283,23,'宜宾市',2,511500),(284,23,'广安市',2,511600),(285,23,'达州市',2,511700),(286,23,'雅安市',2,511800),(287,23,'巴中市',2,511900),(288,23,'资阳市',2,512000),(289,23,'阿坝藏族羌族自治州',2,513200),(290,23,'甘孜藏族自治州',2,513300),(291,23,'凉山彝族自治州',2,513400),(292,24,'贵阳市',2,520100),(293,24,'六盘水市',2,520200),(294,24,'遵义市',2,520300),(295,24,'安顺市',2,520400),(296,24,'毕节市',2,520500),(297,24,'铜仁市',2,520600),(298,24,'黔西南布依族苗族自治州',2,522300),(299,24,'黔东南苗族侗族自治州',2,522600),(300,24,'黔南布依族苗族自治州',2,522700),(301,25,'昆明市',2,530100),(302,25,'曲靖市',2,530300),(303,25,'玉溪市',2,530400),(304,25,'保山市',2,530500),(305,25,'昭通市',2,530600),(306,25,'丽江市',2,530700),(307,25,'普洱市',2,530800),(308,25,'临沧市',2,530900),(309,25,'楚雄彝族自治州',2,532300),(310,25,'红河哈尼族彝族自治州',2,532500),(311,25,'文山壮族苗族自治州',2,532600),(312,25,'西双版纳傣族自治州',2,532800),(313,25,'大理白族自治州',2,532900),(314,25,'德宏傣族景颇族自治州',2,533100),(315,25,'怒江傈僳族自治州',2,533300),(316,25,'迪庆藏族自治州',2,533400),(317,26,'拉萨市',2,540100),(318,26,'日喀则市',2,540200),(319,26,'昌都市',2,540300),(320,26,'林芝市',2,540400),(321,26,'山南市',2,540500),(322,26,'那曲地区',2,542400),(323,26,'阿里地区',2,542500),(324,27,'西安市',2,610100),(325,27,'铜川市',2,610200),(326,27,'宝鸡市',2,610300),(327,27,'咸阳市',2,610400),(328,27,'渭南市',2,610500),(329,27,'延安市',2,610600),(330,27,'汉中市',2,610700),(331,27,'榆林市',2,610800),(332,27,'安康市',2,610900),(333,27,'商洛市',2,611000),(334,28,'兰州市',2,620100),(335,28,'嘉峪关市',2,620200),(336,28,'金昌市',2,620300),(337,28,'白银市',2,620400),(338,28,'天水市',2,620500),(339,28,'武威市',2,620600),(340,28,'张掖市',2,620700),(341,28,'平凉市',2,620800),(342,28,'酒泉市',2,620900),(343,28,'庆阳市',2,621000),(344,28,'定西市',2,621100),(345,28,'陇南市',2,621200),(346,28,'临夏回族自治州',2,622900),(347,28,'甘南藏族自治州',2,623000),(348,29,'西宁市',2,630100),(349,29,'海东市',2,630200),(350,29,'海北藏族自治州',2,632200),(351,29,'黄南藏族自治州',2,632300),(352,29,'海南藏族自治州',2,632500),(353,29,'果洛藏族自治州',2,632600),(354,29,'玉树藏族自治州',2,632700),(355,29,'海西蒙古族藏族自治州',2,632800),(356,30,'银川市',2,640100),(357,30,'石嘴山市',2,640200),(358,30,'吴忠市',2,640300),(359,30,'固原市',2,640400),(360,30,'中卫市',2,640500),(361,31,'乌鲁木齐市',2,650100),(362,31,'克拉玛依市',2,650200),(363,31,'吐鲁番市',2,650400),(364,31,'哈密市',2,650500),(365,31,'昌吉回族自治州',2,652300),(366,31,'博尔塔拉蒙古自治州',2,652700),(367,31,'巴音郭楞蒙古自治州',2,652800),(368,31,'阿克苏地区',2,652900),(369,31,'克孜勒苏柯尔克孜自治州',2,653000),(370,31,'喀什地区',2,653100),(371,31,'和田地区',2,653200),(372,31,'伊犁哈萨克自治州',2,654000),(373,31,'塔城地区',2,654200),(374,31,'阿勒泰地区',2,654300),(375,31,'自治区直辖县级行政区划',2,659000),(376,32,'东城区',3,110101),(377,32,'西城区',3,110102),(378,32,'朝阳区',3,110105),(379,32,'丰台区',3,110106),(380,32,'石景山区',3,110107),(381,32,'海淀区',3,110108),(382,32,'门头沟区',3,110109),(383,32,'房山区',3,110111),(384,32,'通州区',3,110112),(385,32,'顺义区',3,110113),(386,32,'昌平区',3,110114),(387,32,'大兴区',3,110115),(388,32,'怀柔区',3,110116),(389,32,'平谷区',3,110117),(390,32,'密云区',3,110118),(391,32,'延庆区',3,110119),(392,33,'和平区',3,120101),(393,33,'河东区',3,120102),(394,33,'河西区',3,120103),(395,33,'南开区',3,120104),(396,33,'河北区',3,120105),(397,33,'红桥区',3,120106),(398,33,'东丽区',3,120110),(399,33,'西青区',3,120111),(400,33,'津南区',3,120112),(401,33,'北辰区',3,120113),(402,33,'武清区',3,120114),(403,33,'宝坻区',3,120115),(404,33,'滨海新区',3,120116),(405,33,'宁河区',3,120117),(406,33,'静海区',3,120118),(407,33,'蓟州区',3,120119),(408,34,'长安区',3,130102),(409,34,'桥西区',3,130104),(410,34,'新华区',3,130105),(411,34,'井陉矿区',3,130107),(412,34,'裕华区',3,130108),(413,34,'藁城区',3,130109),(414,34,'鹿泉区',3,130110),(415,34,'栾城区',3,130111),(416,34,'井陉县',3,130121),(417,34,'正定县',3,130123),(418,34,'行唐县',3,130125),(419,34,'灵寿县',3,130126),(420,34,'高邑县',3,130127),(421,34,'深泽县',3,130128),(422,34,'赞皇县',3,130129),(423,34,'无极县',3,130130),(424,34,'平山县',3,130131),(425,34,'元氏县',3,130132),(426,34,'赵县',3,130133),(427,34,'晋州市',3,130183),(428,34,'新乐市',3,130184),(429,35,'路南区',3,130202),(430,35,'路北区',3,130203),(431,35,'古冶区',3,130204),(432,35,'开平区',3,130205),(433,35,'丰南区',3,130207),(434,35,'丰润区',3,130208),(435,35,'曹妃甸区',3,130209),(436,35,'滦县',3,130223),(437,35,'滦南县',3,130224),(438,35,'乐亭县',3,130225),(439,35,'迁西县',3,130227),(440,35,'玉田县',3,130229),(441,35,'遵化市',3,130281),(442,35,'迁安市',3,130283),(443,36,'海港区',3,130302),(444,36,'山海关区',3,130303),(445,36,'北戴河区',3,130304),(446,36,'抚宁区',3,130306),(447,36,'青龙满族自治县',3,130321),(448,36,'昌黎县',3,130322),(449,36,'卢龙县',3,130324),(450,37,'邯山区',3,130402),(451,37,'丛台区',3,130403),(452,37,'复兴区',3,130404),(453,37,'峰峰矿区',3,130406),(454,37,'邯郸县',3,130421),(455,37,'临漳县',3,130423),(456,37,'成安县',3,130424),(457,37,'大名县',3,130425),(458,37,'涉县',3,130426),(459,37,'磁县',3,130427),(460,37,'肥乡县',3,130428),(461,37,'永年县',3,130429),(462,37,'邱县',3,130430),(463,37,'鸡泽县',3,130431),(464,37,'广平县',3,130432),(465,37,'馆陶县',3,130433),(466,37,'魏县',3,130434),(467,37,'曲周县',3,130435),(468,37,'武安市',3,130481),(469,38,'桥东区',3,130502),(470,38,'桥西区',3,130503),(471,38,'邢台县',3,130521),(472,38,'临城县',3,130522),(473,38,'内丘县',3,130523),(474,38,'柏乡县',3,130524),(475,38,'隆尧县',3,130525),(476,38,'任县',3,130526),(477,38,'南和县',3,130527),(478,38,'宁晋县',3,130528),(479,38,'巨鹿县',3,130529),(480,38,'新河县',3,130530),(481,38,'广宗县',3,130531),(482,38,'平乡县',3,130532),(483,38,'威县',3,130533),(484,38,'清河县',3,130534),(485,38,'临西县',3,130535),(486,38,'南宫市',3,130581),(487,38,'沙河市',3,130582),(488,39,'竞秀区',3,130602),(489,39,'莲池区',3,130606),(490,39,'满城区',3,130607),(491,39,'清苑区',3,130608),(492,39,'徐水区',3,130609),(493,39,'涞水县',3,130623),(494,39,'阜平县',3,130624),(495,39,'定兴县',3,130626),(496,39,'唐县',3,130627),(497,39,'高阳县',3,130628),(498,39,'容城县',3,130629),(499,39,'涞源县',3,130630),(500,39,'望都县',3,130631),(501,39,'安新县',3,130632),(502,39,'易县',3,130633),(503,39,'曲阳县',3,130634),(504,39,'蠡县',3,130635),(505,39,'顺平县',3,130636),(506,39,'博野县',3,130637),(507,39,'雄县',3,130638),(508,39,'涿州市',3,130681),(509,39,'安国市',3,130683),(510,39,'高碑店市',3,130684),(511,40,'桥东区',3,130702),(512,40,'桥西区',3,130703),(513,40,'宣化区',3,130705),(514,40,'下花园区',3,130706),(515,40,'万全区',3,130708),(516,40,'崇礼区',3,130709),(517,40,'张北县',3,130722),(518,40,'康保县',3,130723),(519,40,'沽源县',3,130724),(520,40,'尚义县',3,130725),(521,40,'蔚县',3,130726),(522,40,'阳原县',3,130727),(523,40,'怀安县',3,130728),(524,40,'怀来县',3,130730),(525,40,'涿鹿县',3,130731),(526,40,'赤城县',3,130732),(527,41,'双桥区',3,130802),(528,41,'双滦区',3,130803),(529,41,'鹰手营子矿区',3,130804),(530,41,'承德县',3,130821),(531,41,'兴隆县',3,130822),(532,41,'平泉县',3,130823),(533,41,'滦平县',3,130824),(534,41,'隆化县',3,130825),(535,41,'丰宁满族自治县',3,130826),(536,41,'宽城满族自治县',3,130827),(537,41,'围场满族蒙古族自治县',3,130828),(538,42,'新华区',3,130902),(539,42,'运河区',3,130903),(540,42,'沧县',3,130921),(541,42,'青县',3,130922),(542,42,'东光县',3,130923),(543,42,'海兴县',3,130924),(544,42,'盐山县',3,130925),(545,42,'肃宁县',3,130926),(546,42,'南皮县',3,130927),(547,42,'吴桥县',3,130928),(548,42,'献县',3,130929),(549,42,'孟村回族自治县',3,130930),(550,42,'泊头市',3,130981),(551,42,'任丘市',3,130982),(552,42,'黄骅市',3,130983),(553,42,'河间市',3,130984),(554,43,'安次区',3,131002),(555,43,'广阳区',3,131003),(556,43,'固安县',3,131022),(557,43,'永清县',3,131023),(558,43,'香河县',3,131024),(559,43,'大城县',3,131025),(560,43,'文安县',3,131026),(561,43,'大厂回族自治县',3,131028),(562,43,'霸州市',3,131081),(563,43,'三河市',3,131082),(564,44,'桃城区',3,131102),(565,44,'冀州区',3,131103),(566,44,'枣强县',3,131121),(567,44,'武邑县',3,131122),(568,44,'武强县',3,131123),(569,44,'饶阳县',3,131124),(570,44,'安平县',3,131125),(571,44,'故城县',3,131126),(572,44,'景县',3,131127),(573,44,'阜城县',3,131128),(574,44,'深州市',3,131182),(575,45,'定州市',3,139001),(576,45,'辛集市',3,139002),(577,46,'小店区',3,140105),(578,46,'迎泽区',3,140106),(579,46,'杏花岭区',3,140107),(580,46,'尖草坪区',3,140108),(581,46,'万柏林区',3,140109),(582,46,'晋源区',3,140110),(583,46,'清徐县',3,140121),(584,46,'阳曲县',3,140122),(585,46,'娄烦县',3,140123),(586,46,'古交市',3,140181),(587,47,'城区',3,140202),(588,47,'矿区',3,140203),(589,47,'南郊区',3,140211),(590,47,'新荣区',3,140212),(591,47,'阳高县',3,140221),(592,47,'天镇县',3,140222),(593,47,'广灵县',3,140223),(594,47,'灵丘县',3,140224),(595,47,'浑源县',3,140225),(596,47,'左云县',3,140226),(597,47,'大同县',3,140227),(598,48,'城区',3,140302),(599,48,'矿区',3,140303),(600,48,'郊区',3,140311),(601,48,'平定县',3,140321),(602,48,'盂县',3,140322),(603,49,'城区',3,140402),(604,49,'郊区',3,140411),(605,49,'长治县',3,140421),(606,49,'襄垣县',3,140423),(607,49,'屯留县',3,140424),(608,49,'平顺县',3,140425),(609,49,'黎城县',3,140426),(610,49,'壶关县',3,140427),(611,49,'长子县',3,140428),(612,49,'武乡县',3,140429),(613,49,'沁县',3,140430),(614,49,'沁源县',3,140431),(615,49,'潞城市',3,140481),(616,50,'城区',3,140502),(617,50,'沁水县',3,140521),(618,50,'阳城县',3,140522),(619,50,'陵川县',3,140524),(620,50,'泽州县',3,140525),(621,50,'高平市',3,140581),(622,51,'朔城区',3,140602),(623,51,'平鲁区',3,140603),(624,51,'山阴县',3,140621),(625,51,'应县',3,140622),(626,51,'右玉县',3,140623),(627,51,'怀仁县',3,140624),(628,52,'榆次区',3,140702),(629,52,'榆社县',3,140721),(630,52,'左权县',3,140722),(631,52,'和顺县',3,140723),(632,52,'昔阳县',3,140724),(633,52,'寿阳县',3,140725),(634,52,'太谷县',3,140726),(635,52,'祁县',3,140727),(636,52,'平遥县',3,140728),(637,52,'灵石县',3,140729),(638,52,'介休市',3,140781),(639,53,'盐湖区',3,140802),(640,53,'临猗县',3,140821),(641,53,'万荣县',3,140822),(642,53,'闻喜县',3,140823),(643,53,'稷山县',3,140824),(644,53,'新绛县',3,140825),(645,53,'绛县',3,140826),(646,53,'垣曲县',3,140827),(647,53,'夏县',3,140828),(648,53,'平陆县',3,140829),(649,53,'芮城县',3,140830),(650,53,'永济市',3,140881),(651,53,'河津市',3,140882),(652,54,'忻府区',3,140902),(653,54,'定襄县',3,140921),(654,54,'五台县',3,140922),(655,54,'代县',3,140923),(656,54,'繁峙县',3,140924),(657,54,'宁武县',3,140925),(658,54,'静乐县',3,140926),(659,54,'神池县',3,140927),(660,54,'五寨县',3,140928),(661,54,'岢岚县',3,140929),(662,54,'河曲县',3,140930),(663,54,'保德县',3,140931),(664,54,'偏关县',3,140932),(665,54,'原平市',3,140981),(666,55,'尧都区',3,141002),(667,55,'曲沃县',3,141021),(668,55,'翼城县',3,141022),(669,55,'襄汾县',3,141023),(670,55,'洪洞县',3,141024),(671,55,'古县',3,141025),(672,55,'安泽县',3,141026),(673,55,'浮山县',3,141027),(674,55,'吉县',3,141028),(675,55,'乡宁县',3,141029),(676,55,'大宁县',3,141030),(677,55,'隰县',3,141031),(678,55,'永和县',3,141032),(679,55,'蒲县',3,141033),(680,55,'汾西县',3,141034),(681,55,'侯马市',3,141081),(682,55,'霍州市',3,141082),(683,56,'离石区',3,141102),(684,56,'文水县',3,141121),(685,56,'交城县',3,141122),(686,56,'兴县',3,141123),(687,56,'临县',3,141124),(688,56,'柳林县',3,141125),(689,56,'石楼县',3,141126),(690,56,'岚县',3,141127),(691,56,'方山县',3,141128),(692,56,'中阳县',3,141129),(693,56,'交口县',3,141130),(694,56,'孝义市',3,141181),(695,56,'汾阳市',3,141182),(696,57,'新城区',3,150102),(697,57,'回民区',3,150103),(698,57,'玉泉区',3,150104),(699,57,'赛罕区',3,150105),(700,57,'土默特左旗',3,150121),(701,57,'托克托县',3,150122),(702,57,'和林格尔县',3,150123),(703,57,'清水河县',3,150124),(704,57,'武川县',3,150125),(705,58,'东河区',3,150202),(706,58,'昆都仑区',3,150203),(707,58,'青山区',3,150204),(708,58,'石拐区',3,150205),(709,58,'白云鄂博矿区',3,150206),(710,58,'九原区',3,150207),(711,58,'土默特右旗',3,150221),(712,58,'固阳县',3,150222),(713,58,'达尔罕茂明安联合旗',3,150223),(714,59,'海勃湾区',3,150302),(715,59,'海南区',3,150303),(716,59,'乌达区',3,150304),(717,60,'红山区',3,150402),(718,60,'元宝山区',3,150403),(719,60,'松山区',3,150404),(720,60,'阿鲁科尔沁旗',3,150421),(721,60,'巴林左旗',3,150422),(722,60,'巴林右旗',3,150423),(723,60,'林西县',3,150424),(724,60,'克什克腾旗',3,150425),(725,60,'翁牛特旗',3,150426),(726,60,'喀喇沁旗',3,150428),(727,60,'宁城县',3,150429),(728,60,'敖汉旗',3,150430),(729,61,'科尔沁区',3,150502),(730,61,'科尔沁左翼中旗',3,150521),(731,61,'科尔沁左翼后旗',3,150522),(732,61,'开鲁县',3,150523),(733,61,'库伦旗',3,150524),(734,61,'奈曼旗',3,150525),(735,61,'扎鲁特旗',3,150526),(736,61,'霍林郭勒市',3,150581),(737,62,'东胜区',3,150602),(738,62,'康巴什区',3,150603),(739,62,'达拉特旗',3,150621),(740,62,'准格尔旗',3,150622),(741,62,'鄂托克前旗',3,150623),(742,62,'鄂托克旗',3,150624),(743,62,'杭锦旗',3,150625),(744,62,'乌审旗',3,150626),(745,62,'伊金霍洛旗',3,150627),(746,63,'海拉尔区',3,150702),(747,63,'扎赉诺尔区',3,150703),(748,63,'阿荣旗',3,150721),(749,63,'莫力达瓦达斡尔族自治旗',3,150722),(750,63,'鄂伦春自治旗',3,150723),(751,63,'鄂温克族自治旗',3,150724),(752,63,'陈巴尔虎旗',3,150725),(753,63,'新巴尔虎左旗',3,150726),(754,63,'新巴尔虎右旗',3,150727),(755,63,'满洲里市',3,150781),(756,63,'牙克石市',3,150782),(757,63,'扎兰屯市',3,150783),(758,63,'额尔古纳市',3,150784),(759,63,'根河市',3,150785),(760,64,'临河区',3,150802),(761,64,'五原县',3,150821),(762,64,'磴口县',3,150822),(763,64,'乌拉特前旗',3,150823),(764,64,'乌拉特中旗',3,150824),(765,64,'乌拉特后旗',3,150825),(766,64,'杭锦后旗',3,150826),(767,65,'集宁区',3,150902),(768,65,'卓资县',3,150921),(769,65,'化德县',3,150922),(770,65,'商都县',3,150923),(771,65,'兴和县',3,150924),(772,65,'凉城县',3,150925),(773,65,'察哈尔右翼前旗',3,150926),(774,65,'察哈尔右翼中旗',3,150927),(775,65,'察哈尔右翼后旗',3,150928),(776,65,'四子王旗',3,150929),(777,65,'丰镇市',3,150981),(778,66,'乌兰浩特市',3,152201),(779,66,'阿尔山市',3,152202),(780,66,'科尔沁右翼前旗',3,152221),(781,66,'科尔沁右翼中旗',3,152222),(782,66,'扎赉特旗',3,152223),(783,66,'突泉县',3,152224),(784,67,'二连浩特市',3,152501),(785,67,'锡林浩特市',3,152502),(786,67,'阿巴嘎旗',3,152522),(787,67,'苏尼特左旗',3,152523),(788,67,'苏尼特右旗',3,152524),(789,67,'东乌珠穆沁旗',3,152525),(790,67,'西乌珠穆沁旗',3,152526),(791,67,'太仆寺旗',3,152527),(792,67,'镶黄旗',3,152528),(793,67,'正镶白旗',3,152529),(794,67,'正蓝旗',3,152530),(795,67,'多伦县',3,152531),(796,68,'阿拉善左旗',3,152921),(797,68,'阿拉善右旗',3,152922),(798,68,'额济纳旗',3,152923),(799,69,'和平区',3,210102),(800,69,'沈河区',3,210103),(801,69,'大东区',3,210104),(802,69,'皇姑区',3,210105),(803,69,'铁西区',3,210106),(804,69,'苏家屯区',3,210111),(805,69,'浑南区',3,210112),(806,69,'沈北新区',3,210113),(807,69,'于洪区',3,210114),(808,69,'辽中区',3,210115),(809,69,'康平县',3,210123),(810,69,'法库县',3,210124),(811,69,'新民市',3,210181),(812,70,'中山区',3,210202),(813,70,'西岗区',3,210203),(814,70,'沙河口区',3,210204),(815,70,'甘井子区',3,210211),(816,70,'旅顺口区',3,210212),(817,70,'金州区',3,210213),(818,70,'普兰店区',3,210214),(819,70,'长海县',3,210224),(820,70,'瓦房店市',3,210281),(821,70,'庄河市',3,210283),(822,71,'铁东区',3,210302),(823,71,'铁西区',3,210303),(824,71,'立山区',3,210304),(825,71,'千山区',3,210311),(826,71,'台安县',3,210321),(827,71,'岫岩满族自治县',3,210323),(828,71,'海城市',3,210381),(829,72,'新抚区',3,210402),(830,72,'东洲区',3,210403),(831,72,'望花区',3,210404),(832,72,'顺城区',3,210411),(833,72,'抚顺县',3,210421),(834,72,'新宾满族自治县',3,210422),(835,72,'清原满族自治县',3,210423),(836,73,'平山区',3,210502),(837,73,'溪湖区',3,210503),(838,73,'明山区',3,210504),(839,73,'南芬区',3,210505),(840,73,'本溪满族自治县',3,210521),(841,73,'桓仁满族自治县',3,210522),(842,74,'元宝区',3,210602),(843,74,'振兴区',3,210603),(844,74,'振安区',3,210604),(845,74,'宽甸满族自治县',3,210624),(846,74,'东港市',3,210681),(847,74,'凤城市',3,210682),(848,75,'古塔区',3,210702),(849,75,'凌河区',3,210703),(850,75,'太和区',3,210711),(851,75,'黑山县',3,210726),(852,75,'义县',3,210727),(853,75,'凌海市',3,210781),(854,75,'北镇市',3,210782),(855,76,'站前区',3,210802),(856,76,'西市区',3,210803),(857,76,'鲅鱼圈区',3,210804),(858,76,'老边区',3,210811),(859,76,'盖州市',3,210881),(860,76,'大石桥市',3,210882),(861,77,'海州区',3,210902),(862,77,'新邱区',3,210903),(863,77,'太平区',3,210904),(864,77,'清河门区',3,210905),(865,77,'细河区',3,210911),(866,77,'阜新蒙古族自治县',3,210921),(867,77,'彰武县',3,210922),(868,78,'白塔区',3,211002),(869,78,'文圣区',3,211003),(870,78,'宏伟区',3,211004),(871,78,'弓长岭区',3,211005),(872,78,'太子河区',3,211011),(873,78,'辽阳县',3,211021),(874,78,'灯塔市',3,211081),(875,79,'双台子区',3,211102),(876,79,'兴隆台区',3,211103),(877,79,'大洼区',3,211104),(878,79,'盘山县',3,211122),(879,80,'银州区',3,211202),(880,80,'清河区',3,211204),(881,80,'铁岭县',3,211221),(882,80,'西丰县',3,211223),(883,80,'昌图县',3,211224),(884,80,'调兵山市',3,211281),(885,80,'开原市',3,211282),(886,81,'双塔区',3,211302),(887,81,'龙城区',3,211303),(888,81,'朝阳县',3,211321),(889,81,'建平县',3,211322),(890,81,'喀喇沁左翼蒙古族自治县',3,211324),(891,81,'北票市',3,211381),(892,81,'凌源市',3,211382),(893,82,'连山区',3,211402),(894,82,'龙港区',3,211403),(895,82,'南票区',3,211404),(896,82,'绥中县',3,211421),(897,82,'建昌县',3,211422),(898,82,'兴城市',3,211481),(899,83,'南关区',3,220102),(900,83,'宽城区',3,220103),(901,83,'朝阳区',3,220104),(902,83,'二道区',3,220105),(903,83,'绿园区',3,220106),(904,83,'双阳区',3,220112),(905,83,'九台区',3,220113),(906,83,'农安县',3,220122),(907,83,'榆树市',3,220182),(908,83,'德惠市',3,220183),(909,84,'昌邑区',3,220202),(910,84,'龙潭区',3,220203),(911,84,'船营区',3,220204),(912,84,'丰满区',3,220211),(913,84,'永吉县',3,220221),(914,84,'蛟河市',3,220281),(915,84,'桦甸市',3,220282),(916,84,'舒兰市',3,220283),(917,84,'磐石市',3,220284),(918,85,'铁西区',3,220302),(919,85,'铁东区',3,220303),(920,85,'梨树县',3,220322),(921,85,'伊通满族自治县',3,220323),(922,85,'公主岭市',3,220381),(923,85,'双辽市',3,220382),(924,86,'龙山区',3,220402),(925,86,'西安区',3,220403),(926,86,'东丰县',3,220421),(927,86,'东辽县',3,220422),(928,87,'东昌区',3,220502),(929,87,'二道江区',3,220503),(930,87,'通化县',3,220521),(931,87,'辉南县',3,220523),(932,87,'柳河县',3,220524),(933,87,'梅河口市',3,220581),(934,87,'集安市',3,220582),(935,88,'浑江区',3,220602),(936,88,'江源区',3,220605),(937,88,'抚松县',3,220621),(938,88,'靖宇县',3,220622),(939,88,'长白朝鲜族自治县',3,220623),(940,88,'临江市',3,220681),(941,89,'宁江区',3,220702),(942,89,'前郭尔罗斯蒙古族自治县',3,220721),(943,89,'长岭县',3,220722),(944,89,'乾安县',3,220723),(945,89,'扶余市',3,220781),(946,90,'洮北区',3,220802),(947,90,'镇赉县',3,220821),(948,90,'通榆县',3,220822),(949,90,'洮南市',3,220881),(950,90,'大安市',3,220882),(951,91,'延吉市',3,222401),(952,91,'图们市',3,222402),(953,91,'敦化市',3,222403),(954,91,'珲春市',3,222404),(955,91,'龙井市',3,222405),(956,91,'和龙市',3,222406),(957,91,'汪清县',3,222424),(958,91,'安图县',3,222426),(959,92,'道里区',3,230102),(960,92,'南岗区',3,230103),(961,92,'道外区',3,230104),(962,92,'平房区',3,230108),(963,92,'松北区',3,230109),(964,92,'香坊区',3,230110),(965,92,'呼兰区',3,230111),(966,92,'阿城区',3,230112),(967,92,'双城区',3,230113),(968,92,'依兰县',3,230123),(969,92,'方正县',3,230124),(970,92,'宾县',3,230125),(971,92,'巴彦县',3,230126),(972,92,'木兰县',3,230127),(973,92,'通河县',3,230128),(974,92,'延寿县',3,230129),(975,92,'尚志市',3,230183),(976,92,'五常市',3,230184),(977,93,'龙沙区',3,230202),(978,93,'建华区',3,230203),(979,93,'铁锋区',3,230204),(980,93,'昂昂溪区',3,230205),(981,93,'富拉尔基区',3,230206),(982,93,'碾子山区',3,230207),(983,93,'梅里斯达斡尔族区',3,230208),(984,93,'龙江县',3,230221),(985,93,'依安县',3,230223),(986,93,'泰来县',3,230224),(987,93,'甘南县',3,230225),(988,93,'富裕县',3,230227),(989,93,'克山县',3,230229),(990,93,'克东县',3,230230),(991,93,'拜泉县',3,230231),(992,93,'讷河市',3,230281),(993,94,'鸡冠区',3,230302),(994,94,'恒山区',3,230303),(995,94,'滴道区',3,230304),(996,94,'梨树区',3,230305),(997,94,'城子河区',3,230306),(998,94,'麻山区',3,230307),(999,94,'鸡东县',3,230321),(1000,94,'虎林市',3,230381),(1001,94,'密山市',3,230382),(1002,95,'向阳区',3,230402),(1003,95,'工农区',3,230403),(1004,95,'南山区',3,230404),(1005,95,'兴安区',3,230405),(1006,95,'东山区',3,230406),(1007,95,'兴山区',3,230407),(1008,95,'萝北县',3,230421),(1009,95,'绥滨县',3,230422),(1010,96,'尖山区',3,230502),(1011,96,'岭东区',3,230503),(1012,96,'四方台区',3,230505),(1013,96,'宝山区',3,230506),(1014,96,'集贤县',3,230521),(1015,96,'友谊县',3,230522),(1016,96,'宝清县',3,230523),(1017,96,'饶河县',3,230524),(1018,97,'萨尔图区',3,230602),(1019,97,'龙凤区',3,230603),(1020,97,'让胡路区',3,230604),(1021,97,'红岗区',3,230605),(1022,97,'大同区',3,230606),(1023,97,'肇州县',3,230621),(1024,97,'肇源县',3,230622),(1025,97,'林甸县',3,230623),(1026,97,'杜尔伯特蒙古族自治县',3,230624),(1027,98,'伊春区',3,230702),(1028,98,'南岔区',3,230703),(1029,98,'友好区',3,230704),(1030,98,'西林区',3,230705),(1031,98,'翠峦区',3,230706),(1032,98,'新青区',3,230707),(1033,98,'美溪区',3,230708),(1034,98,'金山屯区',3,230709),(1035,98,'五营区',3,230710),(1036,98,'乌马河区',3,230711),(1037,98,'汤旺河区',3,230712),(1038,98,'带岭区',3,230713),(1039,98,'乌伊岭区',3,230714),(1040,98,'红星区',3,230715),(1041,98,'上甘岭区',3,230716),(1042,98,'嘉荫县',3,230722),(1043,98,'铁力市',3,230781),(1044,99,'向阳区',3,230803),(1045,99,'前进区',3,230804),(1046,99,'东风区',3,230805),(1047,99,'郊区',3,230811),(1048,99,'桦南县',3,230822),(1049,99,'桦川县',3,230826),(1050,99,'汤原县',3,230828),(1051,99,'同江市',3,230881),(1052,99,'富锦市',3,230882),(1053,99,'抚远市',3,230883),(1054,100,'新兴区',3,230902),(1055,100,'桃山区',3,230903),(1056,100,'茄子河区',3,230904),(1057,100,'勃利县',3,230921),(1058,101,'东安区',3,231002),(1059,101,'阳明区',3,231003),(1060,101,'爱民区',3,231004),(1061,101,'西安区',3,231005),(1062,101,'林口县',3,231025),(1063,101,'绥芬河市',3,231081),(1064,101,'海林市',3,231083),(1065,101,'宁安市',3,231084),(1066,101,'穆棱市',3,231085),(1067,101,'东宁市',3,231086),(1068,102,'爱辉区',3,231102),(1069,102,'嫩江县',3,231121),(1070,102,'逊克县',3,231123),(1071,102,'孙吴县',3,231124),(1072,102,'北安市',3,231181),(1073,102,'五大连池市',3,231182),(1074,103,'北林区',3,231202),(1075,103,'望奎县',3,231221),(1076,103,'兰西县',3,231222),(1077,103,'青冈县',3,231223),(1078,103,'庆安县',3,231224),(1079,103,'明水县',3,231225),(1080,103,'绥棱县',3,231226),(1081,103,'安达市',3,231281),(1082,103,'肇东市',3,231282),(1083,103,'海伦市',3,231283),(1084,104,'呼玛县',3,232721),(1085,104,'塔河县',3,232722),(1086,104,'漠河县',3,232723),(1087,105,'黄浦区',3,310101),(1088,105,'徐汇区',3,310104),(1089,105,'长宁区',3,310105),(1090,105,'静安区',3,310106),(1091,105,'普陀区',3,310107),(1092,105,'虹口区',3,310109),(1093,105,'杨浦区',3,310110),(1094,105,'闵行区',3,310112),(1095,105,'宝山区',3,310113),(1096,105,'嘉定区',3,310114),(1097,105,'浦东新区',3,310115),(1098,105,'金山区',3,310116),(1099,105,'松江区',3,310117),(1100,105,'青浦区',3,310118),(1101,105,'奉贤区',3,310120),(1102,105,'崇明区',3,310151),(1103,106,'玄武区',3,320102),(1104,106,'秦淮区',3,320104),(1105,106,'建邺区',3,320105),(1106,106,'鼓楼区',3,320106),(1107,106,'浦口区',3,320111),(1108,106,'栖霞区',3,320113),(1109,106,'雨花台区',3,320114),(1110,106,'江宁区',3,320115),(1111,106,'六合区',3,320116),(1112,106,'溧水区',3,320117),(1113,106,'高淳区',3,320118),(1114,107,'锡山区',3,320205),(1115,107,'惠山区',3,320206),(1116,107,'滨湖区',3,320211),(1117,107,'梁溪区',3,320213),(1118,107,'新吴区',3,320214),(1119,107,'江阴市',3,320281),(1120,107,'宜兴市',3,320282),(1121,108,'鼓楼区',3,320302),(1122,108,'云龙区',3,320303),(1123,108,'贾汪区',3,320305),(1124,108,'泉山区',3,320311),(1125,108,'铜山区',3,320312),(1126,108,'丰县',3,320321),(1127,108,'沛县',3,320322),(1128,108,'睢宁县',3,320324),(1129,108,'新沂市',3,320381),(1130,108,'邳州市',3,320382),(1131,109,'天宁区',3,320402),(1132,109,'钟楼区',3,320404),(1133,109,'新北区',3,320411),(1134,109,'武进区',3,320412),(1135,109,'金坛区',3,320413),(1136,109,'溧阳市',3,320481),(1137,110,'虎丘区',3,320505),(1138,110,'吴中区',3,320506),(1139,110,'相城区',3,320507),(1140,110,'姑苏区',3,320508),(1141,110,'吴江区',3,320509),(1142,110,'常熟市',3,320581),(1143,110,'张家港市',3,320582),(1144,110,'昆山市',3,320583),(1145,110,'太仓市',3,320585),(1146,111,'崇川区',3,320602),(1147,111,'港闸区',3,320611),(1148,111,'通州区',3,320612),(1149,111,'海安县',3,320621),(1150,111,'如东县',3,320623),(1151,111,'启东市',3,320681),(1152,111,'如皋市',3,320682),(1153,111,'海门市',3,320684),(1154,112,'连云区',3,320703),(1155,112,'海州区',3,320706),(1156,112,'赣榆区',3,320707),(1157,112,'东海县',3,320722),(1158,112,'灌云县',3,320723),(1159,112,'灌南县',3,320724),(1160,113,'淮安区',3,320803),(1161,113,'淮阴区',3,320804),(1162,113,'清江浦区',3,320812),(1163,113,'洪泽区',3,320813),(1164,113,'涟水县',3,320826),(1165,113,'盱眙县',3,320830),(1166,113,'金湖县',3,320831),(1167,114,'亭湖区',3,320902),(1168,114,'盐都区',3,320903),(1169,114,'大丰区',3,320904),(1170,114,'响水县',3,320921),(1171,114,'滨海县',3,320922),(1172,114,'阜宁县',3,320923),(1173,114,'射阳县',3,320924),(1174,114,'建湖县',3,320925),(1175,114,'东台市',3,320981),(1176,115,'广陵区',3,321002),(1177,115,'邗江区',3,321003),(1178,115,'江都区',3,321012),(1179,115,'宝应县',3,321023),(1180,115,'仪征市',3,321081),(1181,115,'高邮市',3,321084),(1182,116,'京口区',3,321102),(1183,116,'润州区',3,321111),(1184,116,'丹徒区',3,321112),(1185,116,'丹阳市',3,321181),(1186,116,'扬中市',3,321182),(1187,116,'句容市',3,321183),(1188,117,'海陵区',3,321202),(1189,117,'高港区',3,321203),(1190,117,'姜堰区',3,321204),(1191,117,'兴化市',3,321281),(1192,117,'靖江市',3,321282),(1193,117,'泰兴市',3,321283),(1194,118,'宿城区',3,321302),(1195,118,'宿豫区',3,321311),(1196,118,'沭阳县',3,321322),(1197,118,'泗阳县',3,321323),(1198,118,'泗洪县',3,321324),(1199,119,'上城区',3,330102),(1200,119,'下城区',3,330103),(1201,119,'江干区',3,330104),(1202,119,'拱墅区',3,330105),(1203,119,'西湖区',3,330106),(1204,119,'滨江区',3,330108),(1205,119,'萧山区',3,330109),(1206,119,'余杭区',3,330110),(1207,119,'富阳区',3,330111),(1208,119,'桐庐县',3,330122),(1209,119,'淳安县',3,330127),(1210,119,'建德市',3,330182),(1211,119,'临安市',3,330185),(1212,120,'海曙区',3,330203),(1213,120,'江东区',3,330204),(1214,120,'江北区',3,330205),(1215,120,'北仑区',3,330206),(1216,120,'镇海区',3,330211),(1217,120,'鄞州区',3,330212),(1218,120,'象山县',3,330225),(1219,120,'宁海县',3,330226),(1220,120,'余姚市',3,330281),(1221,120,'慈溪市',3,330282),(1222,120,'奉化市',3,330283),(1223,121,'鹿城区',3,330302),(1224,121,'龙湾区',3,330303),(1225,121,'瓯海区',3,330304),(1226,121,'洞头区',3,330305),(1227,121,'永嘉县',3,330324),(1228,121,'平阳县',3,330326),(1229,121,'苍南县',3,330327),(1230,121,'文成县',3,330328),(1231,121,'泰顺县',3,330329),(1232,121,'瑞安市',3,330381),(1233,121,'乐清市',3,330382),(1234,122,'南湖区',3,330402),(1235,122,'秀洲区',3,330411),(1236,122,'嘉善县',3,330421),(1237,122,'海盐县',3,330424),(1238,122,'海宁市',3,330481),(1239,122,'平湖市',3,330482),(1240,122,'桐乡市',3,330483),(1241,123,'吴兴区',3,330502),(1242,123,'南浔区',3,330503),(1243,123,'德清县',3,330521),(1244,123,'长兴县',3,330522),(1245,123,'安吉县',3,330523),(1246,124,'越城区',3,330602),(1247,124,'柯桥区',3,330603),(1248,124,'上虞区',3,330604),(1249,124,'新昌县',3,330624),(1250,124,'诸暨市',3,330681),(1251,124,'嵊州市',3,330683),(1252,125,'婺城区',3,330702),(1253,125,'金东区',3,330703),(1254,125,'武义县',3,330723),(1255,125,'浦江县',3,330726),(1256,125,'磐安县',3,330727),(1257,125,'兰溪市',3,330781),(1258,125,'义乌市',3,330782),(1259,125,'东阳市',3,330783),(1260,125,'永康市',3,330784),(1261,126,'柯城区',3,330802),(1262,126,'衢江区',3,330803),(1263,126,'常山县',3,330822),(1264,126,'开化县',3,330824),(1265,126,'龙游县',3,330825),(1266,126,'江山市',3,330881),(1267,127,'定海区',3,330902),(1268,127,'普陀区',3,330903),(1269,127,'岱山县',3,330921),(1270,127,'嵊泗县',3,330922),(1271,128,'椒江区',3,331002),(1272,128,'黄岩区',3,331003),(1273,128,'路桥区',3,331004),(1274,128,'玉环县',3,331021),(1275,128,'三门县',3,331022),(1276,128,'天台县',3,331023),(1277,128,'仙居县',3,331024),(1278,128,'温岭市',3,331081),(1279,128,'临海市',3,331082),(1280,129,'莲都区',3,331102),(1281,129,'青田县',3,331121),(1282,129,'缙云县',3,331122),(1283,129,'遂昌县',3,331123),(1284,129,'松阳县',3,331124),(1285,129,'云和县',3,331125),(1286,129,'庆元县',3,331126),(1287,129,'景宁畲族自治县',3,331127),(1288,129,'龙泉市',3,331181),(1289,130,'瑶海区',3,340102),(1290,130,'庐阳区',3,340103),(1291,130,'蜀山区',3,340104),(1292,130,'包河区',3,340111),(1293,130,'长丰县',3,340121),(1294,130,'肥东县',3,340122),(1295,130,'肥西县',3,340123),(1296,130,'庐江县',3,340124),(1297,130,'巢湖市',3,340181),(1298,131,'镜湖区',3,340202),(1299,131,'弋江区',3,340203),(1300,131,'鸠江区',3,340207),(1301,131,'三山区',3,340208),(1302,131,'芜湖县',3,340221),(1303,131,'繁昌县',3,340222),(1304,131,'南陵县',3,340223),(1305,131,'无为县',3,340225),(1306,132,'龙子湖区',3,340302),(1307,132,'蚌山区',3,340303),(1308,132,'禹会区',3,340304),(1309,132,'淮上区',3,340311),(1310,132,'怀远县',3,340321),(1311,132,'五河县',3,340322),(1312,132,'固镇县',3,340323),(1313,133,'大通区',3,340402),(1314,133,'田家庵区',3,340403),(1315,133,'谢家集区',3,340404),(1316,133,'八公山区',3,340405),(1317,133,'潘集区',3,340406),(1318,133,'凤台县',3,340421),(1319,133,'寿县',3,340422),(1320,134,'花山区',3,340503),(1321,134,'雨山区',3,340504),(1322,134,'博望区',3,340506),(1323,134,'当涂县',3,340521),(1324,134,'含山县',3,340522),(1325,134,'和县',3,340523),(1326,135,'杜集区',3,340602),(1327,135,'相山区',3,340603),(1328,135,'烈山区',3,340604),(1329,135,'濉溪县',3,340621),(1330,136,'铜官区',3,340705),(1331,136,'义安区',3,340706),(1332,136,'郊区',3,340711),(1333,136,'枞阳县',3,340722),(1334,137,'迎江区',3,340802),(1335,137,'大观区',3,340803),(1336,137,'宜秀区',3,340811),(1337,137,'怀宁县',3,340822),(1338,137,'潜山县',3,340824),(1339,137,'太湖县',3,340825),(1340,137,'宿松县',3,340826),(1341,137,'望江县',3,340827),(1342,137,'岳西县',3,340828),(1343,137,'桐城市',3,340881),(1344,138,'屯溪区',3,341002),(1345,138,'黄山区',3,341003),(1346,138,'徽州区',3,341004),(1347,138,'歙县',3,341021),(1348,138,'休宁县',3,341022),(1349,138,'黟县',3,341023),(1350,138,'祁门县',3,341024),(1351,139,'琅琊区',3,341102),(1352,139,'南谯区',3,341103),(1353,139,'来安县',3,341122),(1354,139,'全椒县',3,341124),(1355,139,'定远县',3,341125),(1356,139,'凤阳县',3,341126),(1357,139,'天长市',3,341181),(1358,139,'明光市',3,341182),(1359,140,'颍州区',3,341202),(1360,140,'颍东区',3,341203),(1361,140,'颍泉区',3,341204),(1362,140,'临泉县',3,341221),(1363,140,'太和县',3,341222),(1364,140,'阜南县',3,341225),(1365,140,'颍上县',3,341226),(1366,140,'界首市',3,341282),(1367,141,'埇桥区',3,341302),(1368,141,'砀山县',3,341321),(1369,141,'萧县',3,341322),(1370,141,'灵璧县',3,341323),(1371,141,'泗县',3,341324),(1372,142,'金安区',3,341502),(1373,142,'裕安区',3,341503),(1374,142,'叶集区',3,341504),(1375,142,'霍邱县',3,341522),(1376,142,'舒城县',3,341523),(1377,142,'金寨县',3,341524),(1378,142,'霍山县',3,341525),(1379,143,'谯城区',3,341602),(1380,143,'涡阳县',3,341621),(1381,143,'蒙城县',3,341622),(1382,143,'利辛县',3,341623),(1383,144,'贵池区',3,341702),(1384,144,'东至县',3,341721),(1385,144,'石台县',3,341722),(1386,144,'青阳县',3,341723),(1387,145,'宣州区',3,341802),(1388,145,'郎溪县',3,341821),(1389,145,'广德县',3,341822),(1390,145,'泾县',3,341823),(1391,145,'绩溪县',3,341824),(1392,145,'旌德县',3,341825),(1393,145,'宁国市',3,341881),(1394,146,'鼓楼区',3,350102),(1395,146,'台江区',3,350103),(1396,146,'仓山区',3,350104),(1397,146,'马尾区',3,350105),(1398,146,'晋安区',3,350111),(1399,146,'闽侯县',3,350121),(1400,146,'连江县',3,350122),(1401,146,'罗源县',3,350123),(1402,146,'闽清县',3,350124),(1403,146,'永泰县',3,350125),(1404,146,'平潭县',3,350128),(1405,146,'福清市',3,350181),(1406,146,'长乐市',3,350182),(1407,147,'思明区',3,350203),(1408,147,'海沧区',3,350205),(1409,147,'湖里区',3,350206),(1410,147,'集美区',3,350211),(1411,147,'同安区',3,350212),(1412,147,'翔安区',3,350213),(1413,148,'城厢区',3,350302),(1414,148,'涵江区',3,350303),(1415,148,'荔城区',3,350304),(1416,148,'秀屿区',3,350305),(1417,148,'仙游县',3,350322),(1418,149,'梅列区',3,350402),(1419,149,'三元区',3,350403),(1420,149,'明溪县',3,350421),(1421,149,'清流县',3,350423),(1422,149,'宁化县',3,350424),(1423,149,'大田县',3,350425),(1424,149,'尤溪县',3,350426),(1425,149,'沙县',3,350427),(1426,149,'将乐县',3,350428),(1427,149,'泰宁县',3,350429),(1428,149,'建宁县',3,350430),(1429,149,'永安市',3,350481),(1430,150,'鲤城区',3,350502),(1431,150,'丰泽区',3,350503),(1432,150,'洛江区',3,350504),(1433,150,'泉港区',3,350505),(1434,150,'惠安县',3,350521),(1435,150,'安溪县',3,350524),(1436,150,'永春县',3,350525),(1437,150,'德化县',3,350526),(1438,150,'金门县',3,350527),(1439,150,'石狮市',3,350581),(1440,150,'晋江市',3,350582),(1441,150,'南安市',3,350583),(1442,151,'芗城区',3,350602),(1443,151,'龙文区',3,350603),(1444,151,'云霄县',3,350622),(1445,151,'漳浦县',3,350623),(1446,151,'诏安县',3,350624),(1447,151,'长泰县',3,350625),(1448,151,'东山县',3,350626),(1449,151,'南靖县',3,350627),(1450,151,'平和县',3,350628),(1451,151,'华安县',3,350629),(1452,151,'龙海市',3,350681),(1453,152,'延平区',3,350702),(1454,152,'建阳区',3,350703),(1455,152,'顺昌县',3,350721),(1456,152,'浦城县',3,350722),(1457,152,'光泽县',3,350723),(1458,152,'松溪县',3,350724),(1459,152,'政和县',3,350725),(1460,152,'邵武市',3,350781),(1461,152,'武夷山市',3,350782),(1462,152,'建瓯市',3,350783),(1463,153,'新罗区',3,350802),(1464,153,'永定区',3,350803),(1465,153,'长汀县',3,350821),(1466,153,'上杭县',3,350823),(1467,153,'武平县',3,350824),(1468,153,'连城县',3,350825),(1469,153,'漳平市',3,350881),(1470,154,'蕉城区',3,350902),(1471,154,'霞浦县',3,350921),(1472,154,'古田县',3,350922),(1473,154,'屏南县',3,350923),(1474,154,'寿宁县',3,350924),(1475,154,'周宁县',3,350925),(1476,154,'柘荣县',3,350926),(1477,154,'福安市',3,350981),(1478,154,'福鼎市',3,350982),(1479,155,'东湖区',3,360102),(1480,155,'西湖区',3,360103),(1481,155,'青云谱区',3,360104),(1482,155,'湾里区',3,360105),(1483,155,'青山湖区',3,360111),(1484,155,'新建区',3,360112),(1485,155,'南昌县',3,360121),(1486,155,'安义县',3,360123),(1487,155,'进贤县',3,360124),(1488,156,'昌江区',3,360202),(1489,156,'珠山区',3,360203),(1490,156,'浮梁县',3,360222),(1491,156,'乐平市',3,360281),(1492,157,'安源区',3,360302),(1493,157,'湘东区',3,360313),(1494,157,'莲花县',3,360321),(1495,157,'上栗县',3,360322),(1496,157,'芦溪县',3,360323),(1497,158,'濂溪区',3,360402),(1498,158,'浔阳区',3,360403),(1499,158,'九江县',3,360421),(1500,158,'武宁县',3,360423),(1501,158,'修水县',3,360424),(1502,158,'永修县',3,360425),(1503,158,'德安县',3,360426),(1504,158,'都昌县',3,360428),(1505,158,'湖口县',3,360429),(1506,158,'彭泽县',3,360430),(1507,158,'瑞昌市',3,360481),(1508,158,'共青城市',3,360482),(1509,158,'庐山市',3,360483),(1510,159,'渝水区',3,360502),(1511,159,'分宜县',3,360521),(1512,160,'月湖区',3,360602),(1513,160,'余江县',3,360622),(1514,160,'贵溪市',3,360681),(1515,161,'章贡区',3,360702),(1516,161,'南康区',3,360703),(1517,161,'赣县',3,360721),(1518,161,'信丰县',3,360722),(1519,161,'大余县',3,360723),(1520,161,'上犹县',3,360724),(1521,161,'崇义县',3,360725),(1522,161,'安远县',3,360726),(1523,161,'龙南县',3,360727),(1524,161,'定南县',3,360728),(1525,161,'全南县',3,360729),(1526,161,'宁都县',3,360730),(1527,161,'于都县',3,360731),(1528,161,'兴国县',3,360732),(1529,161,'会昌县',3,360733),(1530,161,'寻乌县',3,360734),(1531,161,'石城县',3,360735),(1532,161,'瑞金市',3,360781),(1533,162,'吉州区',3,360802),(1534,162,'青原区',3,360803),(1535,162,'吉安县',3,360821),(1536,162,'吉水县',3,360822),(1537,162,'峡江县',3,360823),(1538,162,'新干县',3,360824),(1539,162,'永丰县',3,360825),(1540,162,'泰和县',3,360826),(1541,162,'遂川县',3,360827),(1542,162,'万安县',3,360828),(1543,162,'安福县',3,360829),(1544,162,'永新县',3,360830),(1545,162,'井冈山市',3,360881),(1546,163,'袁州区',3,360902),(1547,163,'奉新县',3,360921),(1548,163,'万载县',3,360922),(1549,163,'上高县',3,360923),(1550,163,'宜丰县',3,360924),(1551,163,'靖安县',3,360925),(1552,163,'铜鼓县',3,360926),(1553,163,'丰城市',3,360981),(1554,163,'樟树市',3,360982),(1555,163,'高安市',3,360983),(1556,164,'临川区',3,361002),(1557,164,'南城县',3,361021),(1558,164,'黎川县',3,361022),(1559,164,'南丰县',3,361023),(1560,164,'崇仁县',3,361024),(1561,164,'乐安县',3,361025),(1562,164,'宜黄县',3,361026),(1563,164,'金溪县',3,361027),(1564,164,'资溪县',3,361028),(1565,164,'东乡县',3,361029),(1566,164,'广昌县',3,361030),(1567,165,'信州区',3,361102),(1568,165,'广丰区',3,361103),(1569,165,'上饶县',3,361121),(1570,165,'玉山县',3,361123),(1571,165,'铅山县',3,361124),(1572,165,'横峰县',3,361125),(1573,165,'弋阳县',3,361126),(1574,165,'余干县',3,361127),(1575,165,'鄱阳县',3,361128),(1576,165,'万年县',3,361129),(1577,165,'婺源县',3,361130),(1578,165,'德兴市',3,361181),(1579,166,'历下区',3,370102),(1580,166,'市中区',3,370103),(1581,166,'槐荫区',3,370104),(1582,166,'天桥区',3,370105),(1583,166,'历城区',3,370112),(1584,166,'长清区',3,370113),(1585,166,'平阴县',3,370124),(1586,166,'济阳县',3,370125),(1587,166,'商河县',3,370126),(1588,166,'章丘市',3,370181),(1589,167,'市南区',3,370202),(1590,167,'市北区',3,370203),(1591,167,'黄岛区',3,370211),(1592,167,'崂山区',3,370212),(1593,167,'李沧区',3,370213),(1594,167,'城阳区',3,370214),(1595,167,'胶州市',3,370281),(1596,167,'即墨市',3,370282),(1597,167,'平度市',3,370283),(1598,167,'莱西市',3,370285),(1599,168,'淄川区',3,370302),(1600,168,'张店区',3,370303),(1601,168,'博山区',3,370304),(1602,168,'临淄区',3,370305),(1603,168,'周村区',3,370306),(1604,168,'桓台县',3,370321),(1605,168,'高青县',3,370322),(1606,168,'沂源县',3,370323),(1607,169,'市中区',3,370402),(1608,169,'薛城区',3,370403),(1609,169,'峄城区',3,370404),(1610,169,'台儿庄区',3,370405),(1611,169,'山亭区',3,370406),(1612,169,'滕州市',3,370481),(1613,170,'东营区',3,370502),(1614,170,'河口区',3,370503),(1615,170,'垦利区',3,370505),(1616,170,'利津县',3,370522),(1617,170,'广饶县',3,370523),(1618,171,'芝罘区',3,370602),(1619,171,'福山区',3,370611),(1620,171,'牟平区',3,370612),(1621,171,'莱山区',3,370613),(1622,171,'长岛县',3,370634),(1623,171,'龙口市',3,370681),(1624,171,'莱阳市',3,370682),(1625,171,'莱州市',3,370683),(1626,171,'蓬莱市',3,370684),(1627,171,'招远市',3,370685),(1628,171,'栖霞市',3,370686),(1629,171,'海阳市',3,370687),(1630,172,'潍城区',3,370702),(1631,172,'寒亭区',3,370703),(1632,172,'坊子区',3,370704),(1633,172,'奎文区',3,370705),(1634,172,'临朐县',3,370724),(1635,172,'昌乐县',3,370725),(1636,172,'青州市',3,370781),(1637,172,'诸城市',3,370782),(1638,172,'寿光市',3,370783),(1639,172,'安丘市',3,370784),(1640,172,'高密市',3,370785),(1641,172,'昌邑市',3,370786),(1642,173,'任城区',3,370811),(1643,173,'兖州区',3,370812),(1644,173,'微山县',3,370826),(1645,173,'鱼台县',3,370827),(1646,173,'金乡县',3,370828),(1647,173,'嘉祥县',3,370829),(1648,173,'汶上县',3,370830),(1649,173,'泗水县',3,370831),(1650,173,'梁山县',3,370832),(1651,173,'曲阜市',3,370881),(1652,173,'邹城市',3,370883),(1653,174,'泰山区',3,370902),(1654,174,'岱岳区',3,370911),(1655,174,'宁阳县',3,370921),(1656,174,'东平县',3,370923),(1657,174,'新泰市',3,370982),(1658,174,'肥城市',3,370983),(1659,175,'环翠区',3,371002),(1660,175,'文登区',3,371003),(1661,175,'荣成市',3,371082),(1662,175,'乳山市',3,371083),(1663,176,'东港区',3,371102),(1664,176,'岚山区',3,371103),(1665,176,'五莲县',3,371121),(1666,176,'莒县',3,371122),(1667,177,'莱城区',3,371202),(1668,177,'钢城区',3,371203),(1669,178,'兰山区',3,371302),(1670,178,'罗庄区',3,371311),(1671,178,'河东区',3,371312),(1672,178,'沂南县',3,371321),(1673,178,'郯城县',3,371322),(1674,178,'沂水县',3,371323),(1675,178,'兰陵县',3,371324),(1676,178,'费县',3,371325),(1677,178,'平邑县',3,371326),(1678,178,'莒南县',3,371327),(1679,178,'蒙阴县',3,371328),(1680,178,'临沭县',3,371329),(1681,179,'德城区',3,371402),(1682,179,'陵城区',3,371403),(1683,179,'宁津县',3,371422),(1684,179,'庆云县',3,371423),(1685,179,'临邑县',3,371424),(1686,179,'齐河县',3,371425),(1687,179,'平原县',3,371426),(1688,179,'夏津县',3,371427),(1689,179,'武城县',3,371428),(1690,179,'乐陵市',3,371481),(1691,179,'禹城市',3,371482),(1692,180,'东昌府区',3,371502),(1693,180,'阳谷县',3,371521),(1694,180,'莘县',3,371522),(1695,180,'茌平县',3,371523),(1696,180,'东阿县',3,371524),(1697,180,'冠县',3,371525),(1698,180,'高唐县',3,371526),(1699,180,'临清市',3,371581),(1700,181,'滨城区',3,371602),(1701,181,'沾化区',3,371603),(1702,181,'惠民县',3,371621),(1703,181,'阳信县',3,371622),(1704,181,'无棣县',3,371623),(1705,181,'博兴县',3,371625),(1706,181,'邹平县',3,371626),(1707,182,'牡丹区',3,371702),(1708,182,'定陶区',3,371703),(1709,182,'曹县',3,371721),(1710,182,'单县',3,371722),(1711,182,'成武县',3,371723),(1712,182,'巨野县',3,371724),(1713,182,'郓城县',3,371725),(1714,182,'鄄城县',3,371726),(1715,182,'东明县',3,371728),(1716,183,'中原区',3,410102),(1717,183,'二七区',3,410103),(1718,183,'管城回族区',3,410104),(1719,183,'金水区',3,410105),(1720,183,'上街区',3,410106),(1721,183,'惠济区',3,410108),(1722,183,'中牟县',3,410122),(1723,183,'巩义市',3,410181),(1724,183,'荥阳市',3,410182),(1725,183,'新密市',3,410183),(1726,183,'新郑市',3,410184),(1727,183,'登封市',3,410185),(1728,184,'龙亭区',3,410202),(1729,184,'顺河回族区',3,410203),(1730,184,'鼓楼区',3,410204),(1731,184,'禹王台区',3,410205),(1732,184,'金明区',3,410211),(1733,184,'祥符区',3,410212),(1734,184,'杞县',3,410221),(1735,184,'通许县',3,410222),(1736,184,'尉氏县',3,410223),(1737,184,'兰考县',3,410225),(1738,185,'老城区',3,410302),(1739,185,'西工区',3,410303),(1740,185,'瀍河回族区',3,410304),(1741,185,'涧西区',3,410305),(1742,185,'吉利区',3,410306),(1743,185,'洛龙区',3,410311),(1744,185,'孟津县',3,410322),(1745,185,'新安县',3,410323),(1746,185,'栾川县',3,410324),(1747,185,'嵩县',3,410325),(1748,185,'汝阳县',3,410326),(1749,185,'宜阳县',3,410327),(1750,185,'洛宁县',3,410328),(1751,185,'伊川县',3,410329),(1752,185,'偃师市',3,410381),(1753,186,'新华区',3,410402),(1754,186,'卫东区',3,410403),(1755,186,'石龙区',3,410404),(1756,186,'湛河区',3,410411),(1757,186,'宝丰县',3,410421),(1758,186,'叶县',3,410422),(1759,186,'鲁山县',3,410423),(1760,186,'郏县',3,410425),(1761,186,'舞钢市',3,410481),(1762,186,'汝州市',3,410482),(1763,187,'文峰区',3,410502),(1764,187,'北关区',3,410503),(1765,187,'殷都区',3,410505),(1766,187,'龙安区',3,410506),(1767,187,'安阳县',3,410522),(1768,187,'汤阴县',3,410523),(1769,187,'滑县',3,410526),(1770,187,'内黄县',3,410527),(1771,187,'林州市',3,410581),(1772,188,'鹤山区',3,410602),(1773,188,'山城区',3,410603),(1774,188,'淇滨区',3,410611),(1775,188,'浚县',3,410621),(1776,188,'淇县',3,410622),(1777,189,'红旗区',3,410702),(1778,189,'卫滨区',3,410703),(1779,189,'凤泉区',3,410704),(1780,189,'牧野区',3,410711),(1781,189,'新乡县',3,410721),(1782,189,'获嘉县',3,410724),(1783,189,'原阳县',3,410725),(1784,189,'延津县',3,410726),(1785,189,'封丘县',3,410727),(1786,189,'长垣县',3,410728),(1787,189,'卫辉市',3,410781),(1788,189,'辉县市',3,410782),(1789,190,'解放区',3,410802),(1790,190,'中站区',3,410803),(1791,190,'马村区',3,410804),(1792,190,'山阳区',3,410811),(1793,190,'修武县',3,410821),(1794,190,'博爱县',3,410822),(1795,190,'武陟县',3,410823),(1796,190,'温县',3,410825),(1797,190,'沁阳市',3,410882),(1798,190,'孟州市',3,410883),(1799,191,'华龙区',3,410902),(1800,191,'清丰县',3,410922),(1801,191,'南乐县',3,410923),(1802,191,'范县',3,410926),(1803,191,'台前县',3,410927),(1804,191,'濮阳县',3,410928),(1805,192,'魏都区',3,411002),(1806,192,'许昌县',3,411023),(1807,192,'鄢陵县',3,411024),(1808,192,'襄城县',3,411025),(1809,192,'禹州市',3,411081),(1810,192,'长葛市',3,411082),(1811,193,'源汇区',3,411102),(1812,193,'郾城区',3,411103),(1813,193,'召陵区',3,411104),(1814,193,'舞阳县',3,411121),(1815,193,'临颍县',3,411122),(1816,194,'湖滨区',3,411202),(1817,194,'陕州区',3,411203),(1818,194,'渑池县',3,411221),(1819,194,'卢氏县',3,411224),(1820,194,'义马市',3,411281),(1821,194,'灵宝市',3,411282),(1822,195,'宛城区',3,411302),(1823,195,'卧龙区',3,411303),(1824,195,'南召县',3,411321),(1825,195,'方城县',3,411322),(1826,195,'西峡县',3,411323),(1827,195,'镇平县',3,411324),(1828,195,'内乡县',3,411325),(1829,195,'淅川县',3,411326),(1830,195,'社旗县',3,411327),(1831,195,'唐河县',3,411328),(1832,195,'新野县',3,411329),(1833,195,'桐柏县',3,411330),(1834,195,'邓州市',3,411381),(1835,196,'梁园区',3,411402),(1836,196,'睢阳区',3,411403),(1837,196,'民权县',3,411421),(1838,196,'睢县',3,411422),(1839,196,'宁陵县',3,411423),(1840,196,'柘城县',3,411424),(1841,196,'虞城县',3,411425),(1842,196,'夏邑县',3,411426),(1843,196,'永城市',3,411481),(1844,197,'浉河区',3,411502),(1845,197,'平桥区',3,411503),(1846,197,'罗山县',3,411521),(1847,197,'光山县',3,411522),(1848,197,'新县',3,411523),(1849,197,'商城县',3,411524),(1850,197,'固始县',3,411525),(1851,197,'潢川县',3,411526),(1852,197,'淮滨县',3,411527),(1853,197,'息县',3,411528),(1854,198,'川汇区',3,411602),(1855,198,'扶沟县',3,411621),(1856,198,'西华县',3,411622),(1857,198,'商水县',3,411623),(1858,198,'沈丘县',3,411624),(1859,198,'郸城县',3,411625),(1860,198,'淮阳县',3,411626),(1861,198,'太康县',3,411627),(1862,198,'鹿邑县',3,411628),(1863,198,'项城市',3,411681),(1864,199,'驿城区',3,411702),(1865,199,'西平县',3,411721),(1866,199,'上蔡县',3,411722),(1867,199,'平舆县',3,411723),(1868,199,'正阳县',3,411724),(1869,199,'确山县',3,411725),(1870,199,'泌阳县',3,411726),(1871,199,'汝南县',3,411727),(1872,199,'遂平县',3,411728),(1873,199,'新蔡县',3,411729),(1874,200,'济源市',3,419001),(1875,201,'江岸区',3,420102),(1876,201,'江汉区',3,420103),(1877,201,'硚口区',3,420104),(1878,201,'汉阳区',3,420105),(1879,201,'武昌区',3,420106),(1880,201,'青山区',3,420107),(1881,201,'洪山区',3,420111),(1882,201,'东西湖区',3,420112),(1883,201,'汉南区',3,420113),(1884,201,'蔡甸区',3,420114),(1885,201,'江夏区',3,420115),(1886,201,'黄陂区',3,420116),(1887,201,'新洲区',3,420117),(1888,202,'黄石港区',3,420202),(1889,202,'西塞山区',3,420203),(1890,202,'下陆区',3,420204),(1891,202,'铁山区',3,420205),(1892,202,'阳新县',3,420222),(1893,202,'大冶市',3,420281),(1894,203,'茅箭区',3,420302),(1895,203,'张湾区',3,420303),(1896,203,'郧阳区',3,420304),(1897,203,'郧西县',3,420322),(1898,203,'竹山县',3,420323),(1899,203,'竹溪县',3,420324),(1900,203,'房县',3,420325),(1901,203,'丹江口市',3,420381),(1902,204,'西陵区',3,420502),(1903,204,'伍家岗区',3,420503),(1904,204,'点军区',3,420504),(1905,204,'猇亭区',3,420505),(1906,204,'夷陵区',3,420506),(1907,204,'远安县',3,420525),(1908,204,'兴山县',3,420526),(1909,204,'秭归县',3,420527),(1910,204,'长阳土家族自治县',3,420528),(1911,204,'五峰土家族自治县',3,420529),(1912,204,'宜都市',3,420581),(1913,204,'当阳市',3,420582),(1914,204,'枝江市',3,420583),(1915,205,'襄城区',3,420602),(1916,205,'樊城区',3,420606),(1917,205,'襄州区',3,420607),(1918,205,'南漳县',3,420624),(1919,205,'谷城县',3,420625),(1920,205,'保康县',3,420626),(1921,205,'老河口市',3,420682),(1922,205,'枣阳市',3,420683),(1923,205,'宜城市',3,420684),(1924,206,'梁子湖区',3,420702),(1925,206,'华容区',3,420703),(1926,206,'鄂城区',3,420704),(1927,207,'东宝区',3,420802),(1928,207,'掇刀区',3,420804),(1929,207,'京山县',3,420821),(1930,207,'沙洋县',3,420822),(1931,207,'钟祥市',3,420881),(1932,208,'孝南区',3,420902),(1933,208,'孝昌县',3,420921),(1934,208,'大悟县',3,420922),(1935,208,'云梦县',3,420923),(1936,208,'应城市',3,420981),(1937,208,'安陆市',3,420982),(1938,208,'汉川市',3,420984),(1939,209,'沙市区',3,421002),(1940,209,'荆州区',3,421003),(1941,209,'公安县',3,421022),(1942,209,'监利县',3,421023),(1943,209,'江陵县',3,421024),(1944,209,'石首市',3,421081),(1945,209,'洪湖市',3,421083),(1946,209,'松滋市',3,421087),(1947,210,'黄州区',3,421102),(1948,210,'团风县',3,421121),(1949,210,'红安县',3,421122),(1950,210,'罗田县',3,421123),(1951,210,'英山县',3,421124),(1952,210,'浠水县',3,421125),(1953,210,'蕲春县',3,421126),(1954,210,'黄梅县',3,421127),(1955,210,'麻城市',3,421181),(1956,210,'武穴市',3,421182),(1957,211,'咸安区',3,421202),(1958,211,'嘉鱼县',3,421221),(1959,211,'通城县',3,421222),(1960,211,'崇阳县',3,421223),(1961,211,'通山县',3,421224),(1962,211,'赤壁市',3,421281),(1963,212,'曾都区',3,421303),(1964,212,'随县',3,421321),(1965,212,'广水市',3,421381),(1966,213,'恩施市',3,422801),(1967,213,'利川市',3,422802),(1968,213,'建始县',3,422822),(1969,213,'巴东县',3,422823),(1970,213,'宣恩县',3,422825),(1971,213,'咸丰县',3,422826),(1972,213,'来凤县',3,422827),(1973,213,'鹤峰县',3,422828),(1974,214,'仙桃市',3,429004),(1975,214,'潜江市',3,429005),(1976,214,'天门市',3,429006),(1977,214,'神农架林区',3,429021),(1978,215,'芙蓉区',3,430102),(1979,215,'天心区',3,430103),(1980,215,'岳麓区',3,430104),(1981,215,'开福区',3,430105),(1982,215,'雨花区',3,430111),(1983,215,'望城区',3,430112),(1984,215,'长沙县',3,430121),(1985,215,'宁乡县',3,430124),(1986,215,'浏阳市',3,430181),(1987,216,'荷塘区',3,430202),(1988,216,'芦淞区',3,430203),(1989,216,'石峰区',3,430204),(1990,216,'天元区',3,430211),(1991,216,'株洲县',3,430221),(1992,216,'攸县',3,430223),(1993,216,'茶陵县',3,430224),(1994,216,'炎陵县',3,430225),(1995,216,'醴陵市',3,430281),(1996,217,'雨湖区',3,430302),(1997,217,'岳塘区',3,430304),(1998,217,'湘潭县',3,430321),(1999,217,'湘乡市',3,430381),(2000,217,'韶山市',3,430382),(2001,218,'珠晖区',3,430405),(2002,218,'雁峰区',3,430406),(2003,218,'石鼓区',3,430407),(2004,218,'蒸湘区',3,430408),(2005,218,'南岳区',3,430412),(2006,218,'衡阳县',3,430421),(2007,218,'衡南县',3,430422),(2008,218,'衡山县',3,430423),(2009,218,'衡东县',3,430424),(2010,218,'祁东县',3,430426),(2011,218,'耒阳市',3,430481),(2012,218,'常宁市',3,430482),(2013,219,'双清区',3,430502),(2014,219,'大祥区',3,430503),(2015,219,'北塔区',3,430511),(2016,219,'邵东县',3,430521),(2017,219,'新邵县',3,430522),(2018,219,'邵阳县',3,430523),(2019,219,'隆回县',3,430524),(2020,219,'洞口县',3,430525),(2021,219,'绥宁县',3,430527),(2022,219,'新宁县',3,430528),(2023,219,'城步苗族自治县',3,430529),(2024,219,'武冈市',3,430581),(2025,220,'岳阳楼区',3,430602),(2026,220,'云溪区',3,430603),(2027,220,'君山区',3,430611),(2028,220,'岳阳县',3,430621),(2029,220,'华容县',3,430623),(2030,220,'湘阴县',3,430624),(2031,220,'平江县',3,430626),(2032,220,'汨罗市',3,430681),(2033,220,'临湘市',3,430682),(2034,221,'武陵区',3,430702),(2035,221,'鼎城区',3,430703),(2036,221,'安乡县',3,430721),(2037,221,'汉寿县',3,430722),(2038,221,'澧县',3,430723),(2039,221,'临澧县',3,430724),(2040,221,'桃源县',3,430725),(2041,221,'石门县',3,430726),(2042,221,'津市市',3,430781),(2043,222,'永定区',3,430802),(2044,222,'武陵源区',3,430811),(2045,222,'慈利县',3,430821),(2046,222,'桑植县',3,430822),(2047,223,'资阳区',3,430902),(2048,223,'赫山区',3,430903),(2049,223,'南县',3,430921),(2050,223,'桃江县',3,430922),(2051,223,'安化县',3,430923),(2052,223,'沅江市',3,430981),(2053,224,'北湖区',3,431002),(2054,224,'苏仙区',3,431003),(2055,224,'桂阳县',3,431021),(2056,224,'宜章县',3,431022),(2057,224,'永兴县',3,431023),(2058,224,'嘉禾县',3,431024),(2059,224,'临武县',3,431025),(2060,224,'汝城县',3,431026),(2061,224,'桂东县',3,431027),(2062,224,'安仁县',3,431028),(2063,224,'资兴市',3,431081),(2064,225,'零陵区',3,431102),(2065,225,'冷水滩区',3,431103),(2066,225,'祁阳县',3,431121),(2067,225,'东安县',3,431122),(2068,225,'双牌县',3,431123),(2069,225,'道县',3,431124),(2070,225,'江永县',3,431125),(2071,225,'宁远县',3,431126),(2072,225,'蓝山县',3,431127),(2073,225,'新田县',3,431128),(2074,225,'江华瑶族自治县',3,431129),(2075,226,'鹤城区',3,431202),(2076,226,'中方县',3,431221),(2077,226,'沅陵县',3,431222),(2078,226,'辰溪县',3,431223),(2079,226,'溆浦县',3,431224),(2080,226,'会同县',3,431225),(2081,226,'麻阳苗族自治县',3,431226),(2082,226,'新晃侗族自治县',3,431227),(2083,226,'芷江侗族自治县',3,431228),(2084,226,'靖州苗族侗族自治县',3,431229),(2085,226,'通道侗族自治县',3,431230),(2086,226,'洪江市',3,431281),(2087,227,'娄星区',3,431302),(2088,227,'双峰县',3,431321),(2089,227,'新化县',3,431322),(2090,227,'冷水江市',3,431381),(2091,227,'涟源市',3,431382),(2092,228,'吉首市',3,433101),(2093,228,'泸溪县',3,433122),(2094,228,'凤凰县',3,433123),(2095,228,'花垣县',3,433124),(2096,228,'保靖县',3,433125),(2097,228,'古丈县',3,433126),(2098,228,'永顺县',3,433127),(2099,228,'龙山县',3,433130),(2100,229,'荔湾区',3,440103),(2101,229,'越秀区',3,440104),(2102,229,'海珠区',3,440105),(2103,229,'天河区',3,440106),(2104,229,'白云区',3,440111),(2105,229,'黄埔区',3,440112),(2106,229,'番禺区',3,440113),(2107,229,'花都区',3,440114),(2108,229,'南沙区',3,440115),(2109,229,'从化区',3,440117),(2110,229,'增城区',3,440118),(2111,230,'武江区',3,440203),(2112,230,'浈江区',3,440204),(2113,230,'曲江区',3,440205),(2114,230,'始兴县',3,440222),(2115,230,'仁化县',3,440224),(2116,230,'翁源县',3,440229),(2117,230,'乳源瑶族自治县',3,440232),(2118,230,'新丰县',3,440233),(2119,230,'乐昌市',3,440281),(2120,230,'南雄市',3,440282),(2121,231,'罗湖区',3,440303),(2122,231,'福田区',3,440304),(2123,231,'南山区',3,440305),(2124,231,'宝安区',3,440306),(2125,231,'龙岗区',3,440307),(2126,231,'盐田区',3,440308),(2127,232,'香洲区',3,440402),(2128,232,'斗门区',3,440403),(2129,232,'金湾区',3,440404),(2130,233,'龙湖区',3,440507),(2131,233,'金平区',3,440511),(2132,233,'濠江区',3,440512),(2133,233,'潮阳区',3,440513),(2134,233,'潮南区',3,440514),(2135,233,'澄海区',3,440515),(2136,233,'南澳县',3,440523),(2137,234,'禅城区',3,440604),(2138,234,'南海区',3,440605),(2139,234,'顺德区',3,440606),(2140,234,'三水区',3,440607),(2141,234,'高明区',3,440608),(2142,235,'蓬江区',3,440703),(2143,235,'江海区',3,440704),(2144,235,'新会区',3,440705),(2145,235,'台山市',3,440781),(2146,235,'开平市',3,440783),(2147,235,'鹤山市',3,440784),(2148,235,'恩平市',3,440785),(2149,236,'赤坎区',3,440802),(2150,236,'霞山区',3,440803),(2151,236,'坡头区',3,440804),(2152,236,'麻章区',3,440811),(2153,236,'遂溪县',3,440823),(2154,236,'徐闻县',3,440825),(2155,236,'廉江市',3,440881),(2156,236,'雷州市',3,440882),(2157,236,'吴川市',3,440883),(2158,237,'茂南区',3,440902),(2159,237,'电白区',3,440904),(2160,237,'高州市',3,440981),(2161,237,'化州市',3,440982),(2162,237,'信宜市',3,440983),(2163,238,'端州区',3,441202),(2164,238,'鼎湖区',3,441203),(2165,238,'高要区',3,441204),(2166,238,'广宁县',3,441223),(2167,238,'怀集县',3,441224),(2168,238,'封开县',3,441225),(2169,238,'德庆县',3,441226),(2170,238,'四会市',3,441284),(2171,239,'惠城区',3,441302),(2172,239,'惠阳区',3,441303),(2173,239,'博罗县',3,441322),(2174,239,'惠东县',3,441323),(2175,239,'龙门县',3,441324),(2176,240,'梅江区',3,441402),(2177,240,'梅县区',3,441403),(2178,240,'大埔县',3,441422),(2179,240,'丰顺县',3,441423),(2180,240,'五华县',3,441424),(2181,240,'平远县',3,441426),(2182,240,'蕉岭县',3,441427),(2183,240,'兴宁市',3,441481),(2184,241,'城区',3,441502),(2185,241,'海丰县',3,441521),(2186,241,'陆河县',3,441523),(2187,241,'陆丰市',3,441581),(2188,242,'源城区',3,441602),(2189,242,'紫金县',3,441621),(2190,242,'龙川县',3,441622),(2191,242,'连平县',3,441623),(2192,242,'和平县',3,441624),(2193,242,'东源县',3,441625),(2194,243,'江城区',3,441702),(2195,243,'阳东区',3,441704),(2196,243,'阳西县',3,441721),(2197,243,'阳春市',3,441781),(2198,244,'清城区',3,441802),(2199,244,'清新区',3,441803),(2200,244,'佛冈县',3,441821),(2201,244,'阳山县',3,441823),(2202,244,'连山壮族瑶族自治县',3,441825),(2203,244,'连南瑶族自治县',3,441826),(2204,244,'英德市',3,441881),(2205,244,'连州市',3,441882),(2206,245,'东莞市',3,441900),(2207,246,'中山市',3,442000),(2208,247,'湘桥区',3,445102),(2209,247,'潮安区',3,445103),(2210,247,'饶平县',3,445122),(2211,248,'榕城区',3,445202),(2212,248,'揭东区',3,445203),(2213,248,'揭西县',3,445222),(2214,248,'惠来县',3,445224),(2215,248,'普宁市',3,445281),(2216,249,'云城区',3,445302),(2217,249,'云安区',3,445303),(2218,249,'新兴县',3,445321),(2219,249,'郁南县',3,445322),(2220,249,'罗定市',3,445381),(2221,250,'兴宁区',3,450102),(2222,250,'青秀区',3,450103),(2223,250,'江南区',3,450105),(2224,250,'西乡塘区',3,450107),(2225,250,'良庆区',3,450108),(2226,250,'邕宁区',3,450109),(2227,250,'武鸣区',3,450110),(2228,250,'隆安县',3,450123),(2229,250,'马山县',3,450124),(2230,250,'上林县',3,450125),(2231,250,'宾阳县',3,450126),(2232,250,'横县',3,450127),(2233,251,'城中区',3,450202),(2234,251,'鱼峰区',3,450203),(2235,251,'柳南区',3,450204),(2236,251,'柳北区',3,450205),(2237,251,'柳江区',3,450206),(2238,251,'柳城县',3,450222),(2239,251,'鹿寨县',3,450223),(2240,251,'融安县',3,450224),(2241,251,'融水苗族自治县',3,450225),(2242,251,'三江侗族自治县',3,450226),(2243,252,'秀峰区',3,450302),(2244,252,'叠彩区',3,450303),(2245,252,'象山区',3,450304),(2246,252,'七星区',3,450305),(2247,252,'雁山区',3,450311),(2248,252,'临桂区',3,450312),(2249,252,'阳朔县',3,450321),(2250,252,'灵川县',3,450323),(2251,252,'全州县',3,450324),(2252,252,'兴安县',3,450325),(2253,252,'永福县',3,450326),(2254,252,'灌阳县',3,450327),(2255,252,'龙胜各族自治县',3,450328),(2256,252,'资源县',3,450329),(2257,252,'平乐县',3,450330),(2258,252,'荔浦县',3,450331),(2259,252,'恭城瑶族自治县',3,450332),(2260,253,'万秀区',3,450403),(2261,253,'长洲区',3,450405),(2262,253,'龙圩区',3,450406),(2263,253,'苍梧县',3,450421),(2264,253,'藤县',3,450422),(2265,253,'蒙山县',3,450423),(2266,253,'岑溪市',3,450481),(2267,254,'海城区',3,450502),(2268,254,'银海区',3,450503),(2269,254,'铁山港区',3,450512),(2270,254,'合浦县',3,450521),(2271,255,'港口区',3,450602),(2272,255,'防城区',3,450603),(2273,255,'上思县',3,450621),(2274,255,'东兴市',3,450681),(2275,256,'钦南区',3,450702),(2276,256,'钦北区',3,450703),(2277,256,'灵山县',3,450721),(2278,256,'浦北县',3,450722),(2279,257,'港北区',3,450802),(2280,257,'港南区',3,450803),(2281,257,'覃塘区',3,450804),(2282,257,'平南县',3,450821),(2283,257,'桂平市',3,450881),(2284,258,'玉州区',3,450902),(2285,258,'福绵区',3,450903),(2286,258,'容县',3,450921),(2287,258,'陆川县',3,450922),(2288,258,'博白县',3,450923),(2289,258,'兴业县',3,450924),(2290,258,'北流市',3,450981),(2291,259,'右江区',3,451002),(2292,259,'田阳县',3,451021),(2293,259,'田东县',3,451022),(2294,259,'平果县',3,451023),(2295,259,'德保县',3,451024),(2296,259,'那坡县',3,451026),(2297,259,'凌云县',3,451027),(2298,259,'乐业县',3,451028),(2299,259,'田林县',3,451029),(2300,259,'西林县',3,451030),(2301,259,'隆林各族自治县',3,451031),(2302,259,'靖西市',3,451081),(2303,260,'八步区',3,451102),(2304,260,'平桂区',3,451103),(2305,260,'昭平县',3,451121),(2306,260,'钟山县',3,451122),(2307,260,'富川瑶族自治县',3,451123),(2308,261,'金城江区',3,451202),(2309,261,'南丹县',3,451221),(2310,261,'天峨县',3,451222),(2311,261,'凤山县',3,451223),(2312,261,'东兰县',3,451224),(2313,261,'罗城仫佬族自治县',3,451225),(2314,261,'环江毛南族自治县',3,451226),(2315,261,'巴马瑶族自治县',3,451227),(2316,261,'都安瑶族自治县',3,451228),(2317,261,'大化瑶族自治县',3,451229),(2318,261,'宜州市',3,451281),(2319,262,'兴宾区',3,451302),(2320,262,'忻城县',3,451321),(2321,262,'象州县',3,451322),(2322,262,'武宣县',3,451323),(2323,262,'金秀瑶族自治县',3,451324),(2324,262,'合山市',3,451381),(2325,263,'江州区',3,451402),(2326,263,'扶绥县',3,451421),(2327,263,'宁明县',3,451422),(2328,263,'龙州县',3,451423),(2329,263,'大新县',3,451424),(2330,263,'天等县',3,451425),(2331,263,'凭祥市',3,451481),(2332,264,'秀英区',3,460105),(2333,264,'龙华区',3,460106),(2334,264,'琼山区',3,460107),(2335,264,'美兰区',3,460108),(2336,265,'市辖区',3,460201),(2337,265,'海棠区',3,460202),(2338,265,'吉阳区',3,460203),(2339,265,'天涯区',3,460204),(2340,265,'崖州区',3,460205),(2341,266,'西沙群岛',3,460321),(2342,266,'南沙群岛',3,460322),(2343,266,'中沙群岛的岛礁及其海域',3,460323),(2344,267,'儋州市',3,460400),(2345,268,'五指山市',3,469001),(2346,268,'琼海市',3,469002),(2347,268,'文昌市',3,469005),(2348,268,'万宁市',3,469006),(2349,268,'东方市',3,469007),(2350,268,'定安县',3,469021),(2351,268,'屯昌县',3,469022),(2352,268,'澄迈县',3,469023),(2353,268,'临高县',3,469024),(2354,268,'白沙黎族自治县',3,469025),(2355,268,'昌江黎族自治县',3,469026),(2356,268,'乐东黎族自治县',3,469027),(2357,268,'陵水黎族自治县',3,469028),(2358,268,'保亭黎族苗族自治县',3,469029),(2359,268,'琼中黎族苗族自治县',3,469030),(2360,269,'万州区',3,500101),(2361,269,'涪陵区',3,500102),(2362,269,'渝中区',3,500103),(2363,269,'大渡口区',3,500104),(2364,269,'江北区',3,500105),(2365,269,'沙坪坝区',3,500106),(2366,269,'九龙坡区',3,500107),(2367,269,'南岸区',3,500108),(2368,269,'北碚区',3,500109),(2369,269,'綦江区',3,500110),(2370,269,'大足区',3,500111),(2371,269,'渝北区',3,500112),(2372,269,'巴南区',3,500113),(2373,269,'黔江区',3,500114),(2374,269,'长寿区',3,500115),(2375,269,'江津区',3,500116),(2376,269,'合川区',3,500117),(2377,269,'永川区',3,500118),(2378,269,'南川区',3,500119),(2379,269,'璧山区',3,500120),(2380,269,'铜梁区',3,500151),(2381,269,'潼南区',3,500152),(2382,269,'荣昌区',3,500153),(2383,269,'开州区',3,500154),(2384,270,'梁平县',3,500228),(2385,270,'城口县',3,500229),(2386,270,'丰都县',3,500230),(2387,270,'垫江县',3,500231),(2388,270,'武隆县',3,500232),(2389,270,'忠县',3,500233),(2390,270,'云阳县',3,500235),(2391,270,'奉节县',3,500236),(2392,270,'巫山县',3,500237),(2393,270,'巫溪县',3,500238),(2394,270,'石柱土家族自治县',3,500240),(2395,270,'秀山土家族苗族自治县',3,500241),(2396,270,'酉阳土家族苗族自治县',3,500242),(2397,270,'彭水苗族土家族自治县',3,500243),(2398,271,'锦江区',3,510104),(2399,271,'青羊区',3,510105),(2400,271,'金牛区',3,510106),(2401,271,'武侯区',3,510107),(2402,271,'成华区',3,510108),(2403,271,'龙泉驿区',3,510112),(2404,271,'青白江区',3,510113),(2405,271,'新都区',3,510114),(2406,271,'温江区',3,510115),(2407,271,'双流区',3,510116),(2408,271,'金堂县',3,510121),(2409,271,'郫县',3,510124),(2410,271,'大邑县',3,510129),(2411,271,'蒲江县',3,510131),(2412,271,'新津县',3,510132),(2413,271,'都江堰市',3,510181),(2414,271,'彭州市',3,510182),(2415,271,'邛崃市',3,510183),(2416,271,'崇州市',3,510184),(2417,271,'简阳市',3,510185),(2418,272,'自流井区',3,510302),(2419,272,'贡井区',3,510303),(2420,272,'大安区',3,510304),(2421,272,'沿滩区',3,510311),(2422,272,'荣县',3,510321),(2423,272,'富顺县',3,510322),(2424,273,'东区',3,510402),(2425,273,'西区',3,510403),(2426,273,'仁和区',3,510411),(2427,273,'米易县',3,510421),(2428,273,'盐边县',3,510422),(2429,274,'江阳区',3,510502),(2430,274,'纳溪区',3,510503),(2431,274,'龙马潭区',3,510504),(2432,274,'泸县',3,510521),(2433,274,'合江县',3,510522),(2434,274,'叙永县',3,510524),(2435,274,'古蔺县',3,510525),(2436,275,'旌阳区',3,510603),(2437,275,'中江县',3,510623),(2438,275,'罗江县',3,510626),(2439,275,'广汉市',3,510681),(2440,275,'什邡市',3,510682),(2441,275,'绵竹市',3,510683),(2442,276,'涪城区',3,510703),(2443,276,'游仙区',3,510704),(2444,276,'安州区',3,510705),(2445,276,'三台县',3,510722),(2446,276,'盐亭县',3,510723),(2447,276,'梓潼县',3,510725),(2448,276,'北川羌族自治县',3,510726),(2449,276,'平武县',3,510727),(2450,276,'江油市',3,510781),(2451,277,'利州区',3,510802),(2452,277,'昭化区',3,510811),(2453,277,'朝天区',3,510812),(2454,277,'旺苍县',3,510821),(2455,277,'青川县',3,510822),(2456,277,'剑阁县',3,510823),(2457,277,'苍溪县',3,510824),(2458,278,'船山区',3,510903),(2459,278,'安居区',3,510904),(2460,278,'蓬溪县',3,510921),(2461,278,'射洪县',3,510922),(2462,278,'大英县',3,510923),(2463,279,'市中区',3,511002),(2464,279,'东兴区',3,511011),(2465,279,'威远县',3,511024),(2466,279,'资中县',3,511025),(2467,279,'隆昌县',3,511028),(2468,280,'市中区',3,511102),(2469,280,'沙湾区',3,511111),(2470,280,'五通桥区',3,511112),(2471,280,'金口河区',3,511113),(2472,280,'犍为县',3,511123),(2473,280,'井研县',3,511124),(2474,280,'夹江县',3,511126),(2475,280,'沐川县',3,511129),(2476,280,'峨边彝族自治县',3,511132),(2477,280,'马边彝族自治县',3,511133),(2478,280,'峨眉山市',3,511181),(2479,281,'顺庆区',3,511302),(2480,281,'高坪区',3,511303),(2481,281,'嘉陵区',3,511304),(2482,281,'南部县',3,511321),(2483,281,'营山县',3,511322),(2484,281,'蓬安县',3,511323),(2485,281,'仪陇县',3,511324),(2486,281,'西充县',3,511325),(2487,281,'阆中市',3,511381),(2488,282,'东坡区',3,511402),(2489,282,'彭山区',3,511403),(2490,282,'仁寿县',3,511421),(2491,282,'洪雅县',3,511423),(2492,282,'丹棱县',3,511424),(2493,282,'青神县',3,511425),(2494,283,'翠屏区',3,511502),(2495,283,'南溪区',3,511503),(2496,283,'宜宾县',3,511521),(2497,283,'江安县',3,511523),(2498,283,'长宁县',3,511524),(2499,283,'高县',3,511525),(2500,283,'珙县',3,511526),(2501,283,'筠连县',3,511527),(2502,283,'兴文县',3,511528),(2503,283,'屏山县',3,511529),(2504,284,'广安区',3,511602),(2505,284,'前锋区',3,511603),(2506,284,'岳池县',3,511621),(2507,284,'武胜县',3,511622),(2508,284,'邻水县',3,511623),(2509,284,'华蓥市',3,511681),(2510,285,'通川区',3,511702),(2511,285,'达川区',3,511703),(2512,285,'宣汉县',3,511722),(2513,285,'开江县',3,511723),(2514,285,'大竹县',3,511724),(2515,285,'渠县',3,511725),(2516,285,'万源市',3,511781),(2517,286,'雨城区',3,511802),(2518,286,'名山区',3,511803),(2519,286,'荥经县',3,511822),(2520,286,'汉源县',3,511823),(2521,286,'石棉县',3,511824),(2522,286,'天全县',3,511825),(2523,286,'芦山县',3,511826),(2524,286,'宝兴县',3,511827),(2525,287,'巴州区',3,511902),(2526,287,'恩阳区',3,511903),(2527,287,'通江县',3,511921),(2528,287,'南江县',3,511922),(2529,287,'平昌县',3,511923),(2530,288,'雁江区',3,512002),(2531,288,'安岳县',3,512021),(2532,288,'乐至县',3,512022),(2533,289,'马尔康市',3,513201),(2534,289,'汶川县',3,513221),(2535,289,'理县',3,513222),(2536,289,'茂县',3,513223),(2537,289,'松潘县',3,513224),(2538,289,'九寨沟县',3,513225),(2539,289,'金川县',3,513226),(2540,289,'小金县',3,513227),(2541,289,'黑水县',3,513228),(2542,289,'壤塘县',3,513230),(2543,289,'阿坝县',3,513231),(2544,289,'若尔盖县',3,513232),(2545,289,'红原县',3,513233),(2546,290,'康定市',3,513301),(2547,290,'泸定县',3,513322),(2548,290,'丹巴县',3,513323),(2549,290,'九龙县',3,513324),(2550,290,'雅江县',3,513325),(2551,290,'道孚县',3,513326),(2552,290,'炉霍县',3,513327),(2553,290,'甘孜县',3,513328),(2554,290,'新龙县',3,513329),(2555,290,'德格县',3,513330),(2556,290,'白玉县',3,513331),(2557,290,'石渠县',3,513332),(2558,290,'色达县',3,513333),(2559,290,'理塘县',3,513334),(2560,290,'巴塘县',3,513335),(2561,290,'乡城县',3,513336),(2562,290,'稻城县',3,513337),(2563,290,'得荣县',3,513338),(2564,291,'西昌市',3,513401),(2565,291,'木里藏族自治县',3,513422),(2566,291,'盐源县',3,513423),(2567,291,'德昌县',3,513424),(2568,291,'会理县',3,513425),(2569,291,'会东县',3,513426),(2570,291,'宁南县',3,513427),(2571,291,'普格县',3,513428),(2572,291,'布拖县',3,513429),(2573,291,'金阳县',3,513430),(2574,291,'昭觉县',3,513431),(2575,291,'喜德县',3,513432),(2576,291,'冕宁县',3,513433),(2577,291,'越西县',3,513434),(2578,291,'甘洛县',3,513435),(2579,291,'美姑县',3,513436),(2580,291,'雷波县',3,513437),(2581,292,'南明区',3,520102),(2582,292,'云岩区',3,520103),(2583,292,'花溪区',3,520111),(2584,292,'乌当区',3,520112),(2585,292,'白云区',3,520113),(2586,292,'观山湖区',3,520115),(2587,292,'开阳县',3,520121),(2588,292,'息烽县',3,520122),(2589,292,'修文县',3,520123),(2590,292,'清镇市',3,520181),(2591,293,'钟山区',3,520201),(2592,293,'六枝特区',3,520203),(2593,293,'水城县',3,520221),(2594,293,'盘县',3,520222),(2595,294,'红花岗区',3,520302),(2596,294,'汇川区',3,520303),(2597,294,'播州区',3,520304),(2598,294,'桐梓县',3,520322),(2599,294,'绥阳县',3,520323),(2600,294,'正安县',3,520324),(2601,294,'道真仡佬族苗族自治县',3,520325),(2602,294,'务川仡佬族苗族自治县',3,520326),(2603,294,'凤冈县',3,520327),(2604,294,'湄潭县',3,520328),(2605,294,'余庆县',3,520329),(2606,294,'习水县',3,520330),(2607,294,'赤水市',3,520381),(2608,294,'仁怀市',3,520382),(2609,295,'西秀区',3,520402),(2610,295,'平坝区',3,520403),(2611,295,'普定县',3,520422),(2612,295,'镇宁布依族苗族自治县',3,520423),(2613,295,'关岭布依族苗族自治县',3,520424),(2614,295,'紫云苗族布依族自治县',3,520425),(2615,296,'七星关区',3,520502),(2616,296,'大方县',3,520521),(2617,296,'黔西县',3,520522),(2618,296,'金沙县',3,520523),(2619,296,'织金县',3,520524),(2620,296,'纳雍县',3,520525),(2621,296,'威宁彝族回族苗族自治县',3,520526),(2622,296,'赫章县',3,520527),(2623,297,'碧江区',3,520602),(2624,297,'万山区',3,520603),(2625,297,'江口县',3,520621),(2626,297,'玉屏侗族自治县',3,520622),(2627,297,'石阡县',3,520623),(2628,297,'思南县',3,520624),(2629,297,'印江土家族苗族自治县',3,520625),(2630,297,'德江县',3,520626),(2631,297,'沿河土家族自治县',3,520627),(2632,297,'松桃苗族自治县',3,520628),(2633,298,'兴义市',3,522301),(2634,298,'兴仁县',3,522322),(2635,298,'普安县',3,522323),(2636,298,'晴隆县',3,522324),(2637,298,'贞丰县',3,522325),(2638,298,'望谟县',3,522326),(2639,298,'册亨县',3,522327),(2640,298,'安龙县',3,522328),(2641,299,'凯里市',3,522601),(2642,299,'黄平县',3,522622),(2643,299,'施秉县',3,522623),(2644,299,'三穗县',3,522624),(2645,299,'镇远县',3,522625),(2646,299,'岑巩县',3,522626),(2647,299,'天柱县',3,522627),(2648,299,'锦屏县',3,522628),(2649,299,'剑河县',3,522629),(2650,299,'台江县',3,522630),(2651,299,'黎平县',3,522631),(2652,299,'榕江县',3,522632),(2653,299,'从江县',3,522633),(2654,299,'雷山县',3,522634),(2655,299,'麻江县',3,522635),(2656,299,'丹寨县',3,522636),(2657,300,'都匀市',3,522701),(2658,300,'福泉市',3,522702),(2659,300,'荔波县',3,522722),(2660,300,'贵定县',3,522723),(2661,300,'瓮安县',3,522725),(2662,300,'独山县',3,522726),(2663,300,'平塘县',3,522727),(2664,300,'罗甸县',3,522728),(2665,300,'长顺县',3,522729),(2666,300,'龙里县',3,522730),(2667,300,'惠水县',3,522731),(2668,300,'三都水族自治县',3,522732),(2669,301,'五华区',3,530102),(2670,301,'盘龙区',3,530103),(2671,301,'官渡区',3,530111),(2672,301,'西山区',3,530112),(2673,301,'东川区',3,530113),(2674,301,'呈贡区',3,530114),(2675,301,'晋宁县',3,530122),(2676,301,'富民县',3,530124),(2677,301,'宜良县',3,530125),(2678,301,'石林彝族自治县',3,530126),(2679,301,'嵩明县',3,530127),(2680,301,'禄劝彝族苗族自治县',3,530128),(2681,301,'寻甸回族彝族自治县',3,530129),(2682,301,'安宁市',3,530181),(2683,302,'麒麟区',3,530302),(2684,302,'沾益区',3,530303),(2685,302,'马龙县',3,530321),(2686,302,'陆良县',3,530322),(2687,302,'师宗县',3,530323),(2688,302,'罗平县',3,530324),(2689,302,'富源县',3,530325),(2690,302,'会泽县',3,530326),(2691,302,'宣威市',3,530381),(2692,303,'红塔区',3,530402),(2693,303,'江川区',3,530403),(2694,303,'澄江县',3,530422),(2695,303,'通海县',3,530423),(2696,303,'华宁县',3,530424),(2697,303,'易门县',3,530425),(2698,303,'峨山彝族自治县',3,530426),(2699,303,'新平彝族傣族自治县',3,530427),(2700,303,'元江哈尼族彝族傣族自治县',3,530428),(2701,304,'隆阳区',3,530502),(2702,304,'施甸县',3,530521),(2703,304,'龙陵县',3,530523),(2704,304,'昌宁县',3,530524),(2705,304,'腾冲市',3,530581),(2706,305,'昭阳区',3,530602),(2707,305,'鲁甸县',3,530621),(2708,305,'巧家县',3,530622),(2709,305,'盐津县',3,530623),(2710,305,'大关县',3,530624),(2711,305,'永善县',3,530625),(2712,305,'绥江县',3,530626),(2713,305,'镇雄县',3,530627),(2714,305,'彝良县',3,530628),(2715,305,'威信县',3,530629),(2716,305,'水富县',3,530630),(2717,306,'古城区',3,530702),(2718,306,'玉龙纳西族自治县',3,530721),(2719,306,'永胜县',3,530722),(2720,306,'华坪县',3,530723),(2721,306,'宁蒗彝族自治县',3,530724),(2722,307,'思茅区',3,530802),(2723,307,'宁洱哈尼族彝族自治县',3,530821),(2724,307,'墨江哈尼族自治县',3,530822),(2725,307,'景东彝族自治县',3,530823),(2726,307,'景谷傣族彝族自治县',3,530824),(2727,307,'镇沅彝族哈尼族拉祜族自治县',3,530825),(2728,307,'江城哈尼族彝族自治县',3,530826),(2729,307,'孟连傣族拉祜族佤族自治县',3,530827),(2730,307,'澜沧拉祜族自治县',3,530828),(2731,307,'西盟佤族自治县',3,530829),(2732,308,'临翔区',3,530902),(2733,308,'凤庆县',3,530921),(2734,308,'云县',3,530922),(2735,308,'永德县',3,530923),(2736,308,'镇康县',3,530924),(2737,308,'双江拉祜族佤族布朗族傣族自治县',3,530925),(2738,308,'耿马傣族佤族自治县',3,530926),(2739,308,'沧源佤族自治县',3,530927),(2740,309,'楚雄市',3,532301),(2741,309,'双柏县',3,532322),(2742,309,'牟定县',3,532323),(2743,309,'南华县',3,532324),(2744,309,'姚安县',3,532325),(2745,309,'大姚县',3,532326),(2746,309,'永仁县',3,532327),(2747,309,'元谋县',3,532328),(2748,309,'武定县',3,532329),(2749,309,'禄丰县',3,532331),(2750,310,'个旧市',3,532501),(2751,310,'开远市',3,532502),(2752,310,'蒙自市',3,532503),(2753,310,'弥勒市',3,532504),(2754,310,'屏边苗族自治县',3,532523),(2755,310,'建水县',3,532524),(2756,310,'石屏县',3,532525),(2757,310,'泸西县',3,532527),(2758,310,'元阳县',3,532528),(2759,310,'红河县',3,532529),(2760,310,'金平苗族瑶族傣族自治县',3,532530),(2761,310,'绿春县',3,532531),(2762,310,'河口瑶族自治县',3,532532),(2763,311,'文山市',3,532601),(2764,311,'砚山县',3,532622),(2765,311,'西畴县',3,532623),(2766,311,'麻栗坡县',3,532624),(2767,311,'马关县',3,532625),(2768,311,'丘北县',3,532626),(2769,311,'广南县',3,532627),(2770,311,'富宁县',3,532628),(2771,312,'景洪市',3,532801),(2772,312,'勐海县',3,532822),(2773,312,'勐腊县',3,532823),(2774,313,'大理市',3,532901),(2775,313,'漾濞彝族自治县',3,532922),(2776,313,'祥云县',3,532923),(2777,313,'宾川县',3,532924),(2778,313,'弥渡县',3,532925),(2779,313,'南涧彝族自治县',3,532926),(2780,313,'巍山彝族回族自治县',3,532927),(2781,313,'永平县',3,532928),(2782,313,'云龙县',3,532929),(2783,313,'洱源县',3,532930),(2784,313,'剑川县',3,532931),(2785,313,'鹤庆县',3,532932),(2786,314,'瑞丽市',3,533102),(2787,314,'芒市',3,533103),(2788,314,'梁河县',3,533122),(2789,314,'盈江县',3,533123),(2790,314,'陇川县',3,533124),(2791,315,'泸水市',3,533301),(2792,315,'福贡县',3,533323),(2793,315,'贡山独龙族怒族自治县',3,533324),(2794,315,'兰坪白族普米族自治县',3,533325),(2795,316,'香格里拉市',3,533401),(2796,316,'德钦县',3,533422),(2797,316,'维西傈僳族自治县',3,533423),(2798,317,'城关区',3,540102),(2799,317,'堆龙德庆区',3,540103),(2800,317,'林周县',3,540121),(2801,317,'当雄县',3,540122),(2802,317,'尼木县',3,540123),(2803,317,'曲水县',3,540124),(2804,317,'达孜县',3,540126),(2805,317,'墨竹工卡县',3,540127),(2806,318,'桑珠孜区',3,540202),(2807,318,'南木林县',3,540221),(2808,318,'江孜县',3,540222),(2809,318,'定日县',3,540223),(2810,318,'萨迦县',3,540224),(2811,318,'拉孜县',3,540225),(2812,318,'昂仁县',3,540226),(2813,318,'谢通门县',3,540227),(2814,318,'白朗县',3,540228),(2815,318,'仁布县',3,540229),(2816,318,'康马县',3,540230),(2817,318,'定结县',3,540231),(2818,318,'仲巴县',3,540232),(2819,318,'亚东县',3,540233),(2820,318,'吉隆县',3,540234),(2821,318,'聂拉木县',3,540235),(2822,318,'萨嘎县',3,540236),(2823,318,'岗巴县',3,540237),(2824,319,'卡若区',3,540302),(2825,319,'江达县',3,540321),(2826,319,'贡觉县',3,540322),(2827,319,'类乌齐县',3,540323),(2828,319,'丁青县',3,540324),(2829,319,'察雅县',3,540325),(2830,319,'八宿县',3,540326),(2831,319,'左贡县',3,540327),(2832,319,'芒康县',3,540328),(2833,319,'洛隆县',3,540329),(2834,319,'边坝县',3,540330),(2835,320,'巴宜区',3,540402),(2836,320,'工布江达县',3,540421),(2837,320,'米林县',3,540422),(2838,320,'墨脱县',3,540423),(2839,320,'波密县',3,540424),(2840,320,'察隅县',3,540425),(2841,320,'朗县',3,540426),(2842,321,'乃东区',3,540502),(2843,321,'扎囊县',3,540521),(2844,321,'贡嘎县',3,540522),(2845,321,'桑日县',3,540523),(2846,321,'琼结县',3,540524),(2847,321,'曲松县',3,540525),(2848,321,'措美县',3,540526),(2849,321,'洛扎县',3,540527),(2850,321,'加查县',3,540528),(2851,321,'隆子县',3,540529),(2852,321,'错那县',3,540530),(2853,321,'浪卡子县',3,540531),(2854,322,'那曲县',3,542421),(2855,322,'嘉黎县',3,542422),(2856,322,'比如县',3,542423),(2857,322,'聂荣县',3,542424),(2858,322,'安多县',3,542425),(2859,322,'申扎县',3,542426),(2860,322,'索县',3,542427),(2861,322,'班戈县',3,542428),(2862,322,'巴青县',3,542429),(2863,322,'尼玛县',3,542430),(2864,322,'双湖县',3,542431),(2865,323,'普兰县',3,542521),(2866,323,'札达县',3,542522),(2867,323,'噶尔县',3,542523),(2868,323,'日土县',3,542524),(2869,323,'革吉县',3,542525),(2870,323,'改则县',3,542526),(2871,323,'措勤县',3,542527),(2872,324,'新城区',3,610102),(2873,324,'碑林区',3,610103),(2874,324,'莲湖区',3,610104),(2875,324,'灞桥区',3,610111),(2876,324,'未央区',3,610112),(2877,324,'雁塔区',3,610113),(2878,324,'阎良区',3,610114),(2879,324,'临潼区',3,610115),(2880,324,'长安区',3,610116),(2881,324,'高陵区',3,610117),(2882,324,'蓝田县',3,610122),(2883,324,'周至县',3,610124),(2884,324,'户县',3,610125),(2885,325,'王益区',3,610202),(2886,325,'印台区',3,610203),(2887,325,'耀州区',3,610204),(2888,325,'宜君县',3,610222),(2889,326,'渭滨区',3,610302),(2890,326,'金台区',3,610303),(2891,326,'陈仓区',3,610304),(2892,326,'凤翔县',3,610322),(2893,326,'岐山县',3,610323),(2894,326,'扶风县',3,610324),(2895,326,'眉县',3,610326),(2896,326,'陇县',3,610327),(2897,326,'千阳县',3,610328),(2898,326,'麟游县',3,610329),(2899,326,'凤县',3,610330),(2900,326,'太白县',3,610331),(2901,327,'秦都区',3,610402),(2902,327,'杨陵区',3,610403),(2903,327,'渭城区',3,610404),(2904,327,'三原县',3,610422),(2905,327,'泾阳县',3,610423),(2906,327,'乾县',3,610424),(2907,327,'礼泉县',3,610425),(2908,327,'永寿县',3,610426),(2909,327,'彬县',3,610427),(2910,327,'长武县',3,610428),(2911,327,'旬邑县',3,610429),(2912,327,'淳化县',3,610430),(2913,327,'武功县',3,610431),(2914,327,'兴平市',3,610481),(2915,328,'临渭区',3,610502),(2916,328,'华州区',3,610503),(2917,328,'潼关县',3,610522),(2918,328,'大荔县',3,610523),(2919,328,'合阳县',3,610524),(2920,328,'澄城县',3,610525),(2921,328,'蒲城县',3,610526),(2922,328,'白水县',3,610527),(2923,328,'富平县',3,610528),(2924,328,'韩城市',3,610581),(2925,328,'华阴市',3,610582),(2926,329,'宝塔区',3,610602),(2927,329,'安塞区',3,610603),(2928,329,'延长县',3,610621),(2929,329,'延川县',3,610622),(2930,329,'子长县',3,610623),(2931,329,'志丹县',3,610625),(2932,329,'吴起县',3,610626),(2933,329,'甘泉县',3,610627),(2934,329,'富县',3,610628),(2935,329,'洛川县',3,610629),(2936,329,'宜川县',3,610630),(2937,329,'黄龙县',3,610631),(2938,329,'黄陵县',3,610632),(2939,330,'汉台区',3,610702),(2940,330,'南郑县',3,610721),(2941,330,'城固县',3,610722),(2942,330,'洋县',3,610723),(2943,330,'西乡县',3,610724),(2944,330,'勉县',3,610725),(2945,330,'宁强县',3,610726),(2946,330,'略阳县',3,610727),(2947,330,'镇巴县',3,610728),(2948,330,'留坝县',3,610729),(2949,330,'佛坪县',3,610730),(2950,331,'榆阳区',3,610802),(2951,331,'横山区',3,610803),(2952,331,'神木县',3,610821),(2953,331,'府谷县',3,610822),(2954,331,'靖边县',3,610824),(2955,331,'定边县',3,610825),(2956,331,'绥德县',3,610826),(2957,331,'米脂县',3,610827),(2958,331,'佳县',3,610828),(2959,331,'吴堡县',3,610829),(2960,331,'清涧县',3,610830),(2961,331,'子洲县',3,610831),(2962,332,'汉滨区',3,610902),(2963,332,'汉阴县',3,610921),(2964,332,'石泉县',3,610922),(2965,332,'宁陕县',3,610923),(2966,332,'紫阳县',3,610924),(2967,332,'岚皋县',3,610925),(2968,332,'平利县',3,610926),(2969,332,'镇坪县',3,610927),(2970,332,'旬阳县',3,610928),(2971,332,'白河县',3,610929),(2972,333,'商州区',3,611002),(2973,333,'洛南县',3,611021),(2974,333,'丹凤县',3,611022),(2975,333,'商南县',3,611023),(2976,333,'山阳县',3,611024),(2977,333,'镇安县',3,611025),(2978,333,'柞水县',3,611026),(2979,334,'城关区',3,620102),(2980,334,'七里河区',3,620103),(2981,334,'西固区',3,620104),(2982,334,'安宁区',3,620105),(2983,334,'红古区',3,620111),(2984,334,'永登县',3,620121),(2985,334,'皋兰县',3,620122),(2986,334,'榆中县',3,620123),(2987,335,'嘉峪关市',3,620201),(2988,336,'金川区',3,620302),(2989,336,'永昌县',3,620321),(2990,337,'白银区',3,620402),(2991,337,'平川区',3,620403),(2992,337,'靖远县',3,620421),(2993,337,'会宁县',3,620422),(2994,337,'景泰县',3,620423),(2995,338,'秦州区',3,620502),(2996,338,'麦积区',3,620503),(2997,338,'清水县',3,620521),(2998,338,'秦安县',3,620522),(2999,338,'甘谷县',3,620523),(3000,338,'武山县',3,620524),(3001,338,'张家川回族自治县',3,620525),(3002,339,'凉州区',3,620602),(3003,339,'民勤县',3,620621),(3004,339,'古浪县',3,620622),(3005,339,'天祝藏族自治县',3,620623),(3006,340,'甘州区',3,620702),(3007,340,'肃南裕固族自治县',3,620721),(3008,340,'民乐县',3,620722),(3009,340,'临泽县',3,620723),(3010,340,'高台县',3,620724),(3011,340,'山丹县',3,620725),(3012,341,'崆峒区',3,620802),(3013,341,'泾川县',3,620821),(3014,341,'灵台县',3,620822),(3015,341,'崇信县',3,620823),(3016,341,'华亭县',3,620824),(3017,341,'庄浪县',3,620825),(3018,341,'静宁县',3,620826),(3019,342,'肃州区',3,620902),(3020,342,'金塔县',3,620921),(3021,342,'瓜州县',3,620922),(3022,342,'肃北蒙古族自治县',3,620923),(3023,342,'阿克塞哈萨克族自治县',3,620924),(3024,342,'玉门市',3,620981),(3025,342,'敦煌市',3,620982),(3026,343,'西峰区',3,621002),(3027,343,'庆城县',3,621021),(3028,343,'环县',3,621022),(3029,343,'华池县',3,621023),(3030,343,'合水县',3,621024),(3031,343,'正宁县',3,621025),(3032,343,'宁县',3,621026),(3033,343,'镇原县',3,621027),(3034,344,'安定区',3,621102),(3035,344,'通渭县',3,621121),(3036,344,'陇西县',3,621122),(3037,344,'渭源县',3,621123),(3038,344,'临洮县',3,621124),(3039,344,'漳县',3,621125),(3040,344,'岷县',3,621126),(3041,345,'武都区',3,621202),(3042,345,'成县',3,621221),(3043,345,'文县',3,621222),(3044,345,'宕昌县',3,621223),(3045,345,'康县',3,621224),(3046,345,'西和县',3,621225),(3047,345,'礼县',3,621226),(3048,345,'徽县',3,621227),(3049,345,'两当县',3,621228),(3050,346,'临夏市',3,622901),(3051,346,'临夏县',3,622921),(3052,346,'康乐县',3,622922),(3053,346,'永靖县',3,622923),(3054,346,'广河县',3,622924),(3055,346,'和政县',3,622925),(3056,346,'东乡族自治县',3,622926),(3057,346,'积石山保安族东乡族撒拉族自治县',3,622927),(3058,347,'合作市',3,623001),(3059,347,'临潭县',3,623021),(3060,347,'卓尼县',3,623022),(3061,347,'舟曲县',3,623023),(3062,347,'迭部县',3,623024),(3063,347,'玛曲县',3,623025),(3064,347,'碌曲县',3,623026),(3065,347,'夏河县',3,623027),(3066,348,'城东区',3,630102),(3067,348,'城中区',3,630103),(3068,348,'城西区',3,630104),(3069,348,'城北区',3,630105),(3070,348,'大通回族土族自治县',3,630121),(3071,348,'湟中县',3,630122),(3072,348,'湟源县',3,630123),(3073,349,'乐都区',3,630202),(3074,349,'平安区',3,630203),(3075,349,'民和回族土族自治县',3,630222),(3076,349,'互助土族自治县',3,630223),(3077,349,'化隆回族自治县',3,630224),(3078,349,'循化撒拉族自治县',3,630225),(3079,350,'门源回族自治县',3,632221),(3080,350,'祁连县',3,632222),(3081,350,'海晏县',3,632223),(3082,350,'刚察县',3,632224),(3083,351,'同仁县',3,632321),(3084,351,'尖扎县',3,632322),(3085,351,'泽库县',3,632323),(3086,351,'河南蒙古族自治县',3,632324),(3087,352,'共和县',3,632521),(3088,352,'同德县',3,632522),(3089,352,'贵德县',3,632523),(3090,352,'兴海县',3,632524),(3091,352,'贵南县',3,632525),(3092,353,'玛沁县',3,632621),(3093,353,'班玛县',3,632622),(3094,353,'甘德县',3,632623),(3095,353,'达日县',3,632624),(3096,353,'久治县',3,632625),(3097,353,'玛多县',3,632626),(3098,354,'玉树市',3,632701),(3099,354,'杂多县',3,632722),(3100,354,'称多县',3,632723),(3101,354,'治多县',3,632724),(3102,354,'囊谦县',3,632725),(3103,354,'曲麻莱县',3,632726),(3104,355,'格尔木市',3,632801),(3105,355,'德令哈市',3,632802),(3106,355,'乌兰县',3,632821),(3107,355,'都兰县',3,632822),(3108,355,'天峻县',3,632823),(3109,356,'兴庆区',3,640104),(3110,356,'西夏区',3,640105),(3111,356,'金凤区',3,640106),(3112,356,'永宁县',3,640121),(3113,356,'贺兰县',3,640122),(3114,356,'灵武市',3,640181),(3115,357,'大武口区',3,640202),(3116,357,'惠农区',3,640205),(3117,357,'平罗县',3,640221),(3118,358,'利通区',3,640302),(3119,358,'红寺堡区',3,640303),(3120,358,'盐池县',3,640323),(3121,358,'同心县',3,640324),(3122,358,'青铜峡市',3,640381),(3123,359,'原州区',3,640402),(3124,359,'西吉县',3,640422),(3125,359,'隆德县',3,640423),(3126,359,'泾源县',3,640424),(3127,359,'彭阳县',3,640425),(3128,360,'沙坡头区',3,640502),(3129,360,'中宁县',3,640521),(3130,360,'海原县',3,640522),(3131,361,'天山区',3,650102),(3132,361,'沙依巴克区',3,650103),(3133,361,'新市区',3,650104),(3134,361,'水磨沟区',3,650105),(3135,361,'头屯河区',3,650106),(3136,361,'达坂城区',3,650107),(3137,361,'米东区',3,650109),(3138,361,'乌鲁木齐县',3,650121),(3139,362,'独山子区',3,650202),(3140,362,'克拉玛依区',3,650203),(3141,362,'白碱滩区',3,650204),(3142,362,'乌尔禾区',3,650205),(3143,363,'高昌区',3,650402),(3144,363,'鄯善县',3,650421),(3145,363,'托克逊县',3,650422),(3146,364,'伊州区',3,650502),(3147,364,'巴里坤哈萨克自治县',3,650521),(3148,364,'伊吾县',3,650522),(3149,365,'昌吉市',3,652301),(3150,365,'阜康市',3,652302),(3151,365,'呼图壁县',3,652323),(3152,365,'玛纳斯县',3,652324),(3153,365,'奇台县',3,652325),(3154,365,'吉木萨尔县',3,652327),(3155,365,'木垒哈萨克自治县',3,652328),(3156,366,'博乐市',3,652701),(3157,366,'阿拉山口市',3,652702),(3158,366,'精河县',3,652722),(3159,366,'温泉县',3,652723),(3160,367,'库尔勒市',3,652801),(3161,367,'轮台县',3,652822),(3162,367,'尉犁县',3,652823),(3163,367,'若羌县',3,652824),(3164,367,'且末县',3,652825),(3165,367,'焉耆回族自治县',3,652826),(3166,367,'和静县',3,652827),(3167,367,'和硕县',3,652828),(3168,367,'博湖县',3,652829),(3169,368,'阿克苏市',3,652901),(3170,368,'温宿县',3,652922),(3171,368,'库车县',3,652923),(3172,368,'沙雅县',3,652924),(3173,368,'新和县',3,652925),(3174,368,'拜城县',3,652926),(3175,368,'乌什县',3,652927),(3176,368,'阿瓦提县',3,652928),(3177,368,'柯坪县',3,652929),(3178,369,'阿图什市',3,653001),(3179,369,'阿克陶县',3,653022),(3180,369,'阿合奇县',3,653023),(3181,369,'乌恰县',3,653024),(3182,370,'喀什市',3,653101),(3183,370,'疏附县',3,653121),(3184,370,'疏勒县',3,653122),(3185,370,'英吉沙县',3,653123),(3186,370,'泽普县',3,653124),(3187,370,'莎车县',3,653125),(3188,370,'叶城县',3,653126),(3189,370,'麦盖提县',3,653127),(3190,370,'岳普湖县',3,653128),(3191,370,'伽师县',3,653129),(3192,370,'巴楚县',3,653130),(3193,370,'塔什库尔干塔吉克自治县',3,653131),(3194,371,'和田市',3,653201),(3195,371,'和田县',3,653221),(3196,371,'墨玉县',3,653222),(3197,371,'皮山县',3,653223),(3198,371,'洛浦县',3,653224),(3199,371,'策勒县',3,653225),(3200,371,'于田县',3,653226),(3201,371,'民丰县',3,653227),(3202,372,'伊宁市',3,654002),(3203,372,'奎屯市',3,654003),(3204,372,'霍尔果斯市',3,654004),(3205,372,'伊宁县',3,654021),(3206,372,'察布查尔锡伯自治县',3,654022),(3207,372,'霍城县',3,654023),(3208,372,'巩留县',3,654024),(3209,372,'新源县',3,654025),(3210,372,'昭苏县',3,654026),(3211,372,'特克斯县',3,654027),(3212,372,'尼勒克县',3,654028),(3213,373,'塔城市',3,654201),(3214,373,'乌苏市',3,654202),(3215,373,'额敏县',3,654221),(3216,373,'沙湾县',3,654223),(3217,373,'托里县',3,654224),(3218,373,'裕民县',3,654225),(3219,373,'和布克赛尔蒙古自治县',3,654226),(3220,374,'阿勒泰市',3,654301),(3221,374,'布尔津县',3,654321),(3222,374,'富蕴县',3,654322),(3223,374,'福海县',3,654323),(3224,374,'哈巴河县',3,654324),(3225,374,'青河县',3,654325),(3226,374,'吉木乃县',3,654326),(3227,375,'石河子市',3,659001),(3228,375,'阿拉尔市',3,659002),(3229,375,'图木舒克市',3,659003),(3230,375,'五家渠市',3,659004),(3231,375,'铁门关市',3,659006); /*!40000 ALTER TABLE `litemall_region` ENABLE KEYS */; UNLOCK TABLES; diff --git a/litemall-db/sql/litemall_table.sql b/litemall-db/sql/litemall_table.sql index a4572912..90d911df 100644 --- a/litemall-db/sql/litemall_table.sql +++ b/litemall-db/sql/litemall_table.sql @@ -191,7 +191,7 @@ CREATE TABLE `litemall_comment` ( `id` int(11) NOT NULL AUTO_INCREMENT, `value_id` int(11) NOT NULL DEFAULT '0' COMMENT '如果type=0,则是商品评论;如果是type=1,则是专题评论。', `type` tinyint(3) NOT NULL DEFAULT '0' COMMENT '评论类型,如果type=0,则是商品评论;如果是type=1,则是专题评论;如果type=3,则是订单商品评论。', - `content` varchar(1023) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '评论内容', + `content` varchar(1023) NOT NULL COMMENT '评论内容', `user_id` int(11) NOT NULL DEFAULT '0' COMMENT '用户表的用户ID', `has_picture` tinyint(1) DEFAULT '0' COMMENT '是否含有图片', `pic_urls` varchar(1023) DEFAULT NULL COMMENT '图片地址列表,采用JSON数组格式', @@ -201,7 +201,7 @@ CREATE TABLE `litemall_comment` ( `deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除', PRIMARY KEY (`id`), KEY `id_value` (`value_id`) -) ENGINE=InnoDB AUTO_INCREMENT=1012 DEFAULT CHARSET=utf8 COMMENT='评论表'; +) ENGINE=InnoDB AUTO_INCREMENT=1012 DEFAULT CHARSET=utf8mb4 COMMENT='评论表'; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -233,7 +233,7 @@ CREATE TABLE `litemall_coupon` ( `update_time` datetime DEFAULT NULL COMMENT '更新时间', `deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除', PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='优惠券信息及规则表'; +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COMMENT='优惠券信息及规则表'; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -256,7 +256,7 @@ CREATE TABLE `litemall_coupon_user` ( `update_time` datetime DEFAULT NULL COMMENT '更新时间', `deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除', PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='优惠券用户使用表'; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COMMENT='优惠券用户使用表'; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -269,19 +269,19 @@ DROP TABLE IF EXISTS `litemall_feedback`; CREATE TABLE `litemall_feedback` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL DEFAULT '0' COMMENT '用户表的用户ID', - `username` varchar(63) CHARACTER SET utf8mb4 NOT NULL DEFAULT '' COMMENT '用户名称', - `mobile` varchar(20) CHARACTER SET utf8mb4 NOT NULL DEFAULT '' COMMENT '手机号', + `username` varchar(63) NOT NULL DEFAULT '' COMMENT '用户名称', + `mobile` varchar(20) NOT NULL DEFAULT '' COMMENT '手机号', `feed_type` varchar(63) NOT NULL DEFAULT '' COMMENT '反馈类型', - `content` varchar(1023) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '反馈内容', + `content` varchar(1023) NOT NULL COMMENT '反馈内容', `status` int(3) NOT NULL DEFAULT '0' COMMENT '状态', `has_picture` tinyint(1) DEFAULT '0' COMMENT '是否含有图片', - `pic_urls` varchar(1023) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '图片地址列表,采用JSON数组格式', + `pic_urls` varchar(1023) DEFAULT NULL COMMENT '图片地址列表,采用JSON数组格式', `add_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除', PRIMARY KEY (`id`), KEY `id_value` (`status`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='意见反馈表'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='意见反馈表'; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -543,7 +543,7 @@ CREATE TABLE `litemall_order` ( `update_time` datetime DEFAULT NULL COMMENT '更新时间', `deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除', PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='订单表'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表'; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -669,7 +669,7 @@ CREATE TABLE `litemall_storage` ( `update_time` datetime DEFAULT NULL COMMENT '更新时间', `deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除', PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文件存储表'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文件存储表'; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -741,7 +741,7 @@ CREATE TABLE `litemall_user` ( `deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除', PRIMARY KEY (`id`), UNIQUE KEY `user_name` (`username`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='用户表'; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COMMENT='用户表'; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Gitee From 41d2f24509eca48200b5959fd28de4c61353503e Mon Sep 17 00:00:00 2001 From: Farahani Date: Tue, 30 Apr 2019 17:05:14 +0800 Subject: [PATCH 106/391] =?UTF-8?q?fix[litemall-wx-api]:=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E9=A6=96=E9=A1=B5=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=20=E5=A6=82=E6=9E=9C=E5=87=BA=E7=8E=B0=E5=BC=82=E5=B8=B8=20?= =?UTF-8?q?=E4=BC=9A=E5=AF=BC=E8=87=B4=E7=BC=93=E5=AD=98=E9=87=8C=E9=9D=A2?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E6=8D=AE=E4=B8=8D=E5=85=A8=EF=BC=8C=E5=A6=82?= =?UTF-8?q?=E6=9E=9C=E5=87=BA=E7=8E=B0=E5=BC=82=E5=B8=B8=E5=BA=94=E8=AF=A5?= =?UTF-8?q?=E4=B8=8D=E8=BF=9B=E8=A1=8C=E7=BC=93=E5=AD=98=20(#170)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/linlinjava/litemall/wx/web/WxHomeController.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxHomeController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxHomeController.java index 21ddba92..6b393a14 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxHomeController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxHomeController.java @@ -132,13 +132,14 @@ public class WxHomeController { data.put("topicList", topicListTask.get()); data.put("grouponList", grouponListTask.get()); data.put("floorGoodsList", floorGoodsListTask.get()); + //缓存数据 + HomeCacheManager.loadData(HomeCacheManager.INDEX, data); } catch (Exception e) { e.printStackTrace(); + }finally { + executorService.shutdown(); } - //缓存数据 - HomeCacheManager.loadData(HomeCacheManager.INDEX, data); - executorService.shutdown(); return ResponseUtil.ok(data); } -- Gitee From faaf94b77ac55694d816ae7145264240d7442e0f Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Tue, 30 Apr 2019 19:24:23 +0800 Subject: [PATCH 107/391] =?UTF-8?q?=E5=8C=BA=E5=9F=9F=E5=9C=B0=E5=9D=80?= =?UTF-8?q?=E5=92=8C=E6=94=B6=E8=B4=A7=E5=9C=B0=E5=9D=80=E8=B0=83=E6=95=B4?= =?UTF-8?q?=EF=BC=8C=E5=8F=82=E8=80=83=E4=BA=86vant=E6=A1=86=E6=9E=B6?= =?UTF-8?q?=E7=9A=84Area=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/web/AdminAddressController.java | 27 +- .../litemall/db/domain/LitemallAddress.java | 214 +- .../db/domain/LitemallAddressExample.java | 690 +- .../db/service/LitemallRegionService.java | 6 - .../litemall/db/dao/LitemallAddressMapper.xml | 174 +- .../db/dao/LitemallPermissionMapper.xml | 6 +- litemall-vue/src/api/api.js | 2 +- .../views/user/module-address-edit/area.json | 6846 ++++++++--------- .../litemall/wx/service/WxOrderService.java | 16 +- .../litemall/wx/web/WxAddressController.java | 91 +- .../litemall/wx/web/WxCartController.java | 3 +- .../litemall/wx/web/WxRegionController.java | 43 - .../pages/ucenter/address/address.wxml | 4 +- .../pages/ucenter/addressAdd/addressAdd.js | 243 +- .../pages/ucenter/addressAdd/addressAdd.wxml | 10 +- litemall-wx/utils/area.js | 3296 ++++++++ renard-wx/pages/ucenter/address/address.wxml | 4 +- .../pages/ucenter/addressAdd/addressAdd.js | 279 +- .../pages/ucenter/addressAdd/addressAdd.wxml | 10 +- renard-wx/utils/area.js | 3295 ++++++++ 20 files changed, 10882 insertions(+), 4377 deletions(-) delete mode 100644 litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxRegionController.java create mode 100644 litemall-wx/utils/area.js create mode 100644 renard-wx/utils/area.js diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAddressController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAddressController.java index c07261b9..c6ace8d8 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAddressController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminAddressController.java @@ -34,26 +34,6 @@ public class AdminAddressController { @Autowired private LitemallRegionService regionService; - private Map toVo(LitemallAddress address) { - Map addressVo = new HashMap<>(); - addressVo.put("id", address.getId()); - addressVo.put("userId", address.getUserId()); - addressVo.put("name", address.getName()); - addressVo.put("mobile", address.getMobile()); - addressVo.put("isDefault", address.getIsDefault()); - addressVo.put("provinceId", address.getProvinceId()); - addressVo.put("cityId", address.getCityId()); - addressVo.put("areaId", address.getAreaId()); - addressVo.put("address", address.getAddress()); - String province = regionService.findById(address.getProvinceId()).getName(); - String city = regionService.findById(address.getCityId()).getName(); - String area = regionService.findById(address.getAreaId()).getName(); - addressVo.put("province", province); - addressVo.put("city", city); - addressVo.put("area", area); - return addressVo; - } - @RequiresPermissions("admin:address:list") @RequiresPermissionsDesc(menu={"用户管理" , "收货地址"}, button="查询") @GetMapping("/list") @@ -66,15 +46,10 @@ public class AdminAddressController { List addressList = addressService.querySelective(userId, name, page, limit, sort, order); long total = PageInfo.of(addressList).getTotal(); - List> addressVoList = new ArrayList<>(addressList.size()); - for (LitemallAddress address : addressList) { - Map addressVo = toVo(address); - addressVoList.add(addressVo); - } Map data = new HashMap<>(); data.put("total", total); - data.put("items", addressVoList); + data.put("items", addressList); return ResponseUtil.ok(data); } diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/domain/LitemallAddress.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/domain/LitemallAddress.java index 989cd569..dd1b080f 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/domain/LitemallAddress.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/domain/LitemallAddress.java @@ -53,47 +53,65 @@ public class LitemallAddress { /** * * This field was generated by MyBatis Generator. - * This field corresponds to the database column litemall_address.province_id + * This field corresponds to the database column litemall_address.province * * @mbg.generated */ - private Integer provinceId; + private String province; /** * * This field was generated by MyBatis Generator. - * This field corresponds to the database column litemall_address.city_id + * This field corresponds to the database column litemall_address.city * * @mbg.generated */ - private Integer cityId; + private String city; /** * * This field was generated by MyBatis Generator. - * This field corresponds to the database column litemall_address.area_id + * This field corresponds to the database column litemall_address.county * * @mbg.generated */ - private Integer areaId; + private String county; /** * * This field was generated by MyBatis Generator. - * This field corresponds to the database column litemall_address.address + * This field corresponds to the database column litemall_address.address_detail * * @mbg.generated */ - private String address; + private String addressDetail; /** * * This field was generated by MyBatis Generator. - * This field corresponds to the database column litemall_address.mobile + * This field corresponds to the database column litemall_address.area_code * * @mbg.generated */ - private String mobile; + private String areaCode; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column litemall_address.postal_code + * + * @mbg.generated + */ + private String postalCode; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column litemall_address.tel + * + * @mbg.generated + */ + private String tel; /** * @@ -205,122 +223,170 @@ public class LitemallAddress { /** * This method was generated by MyBatis Generator. - * This method returns the value of the database column litemall_address.province_id + * This method returns the value of the database column litemall_address.province + * + * @return the value of litemall_address.province + * + * @mbg.generated + */ + public String getProvince() { + return province; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column litemall_address.province + * + * @param province the value for litemall_address.province + * + * @mbg.generated + */ + public void setProvince(String province) { + this.province = province; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column litemall_address.city + * + * @return the value of litemall_address.city + * + * @mbg.generated + */ + public String getCity() { + return city; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column litemall_address.city + * + * @param city the value for litemall_address.city + * + * @mbg.generated + */ + public void setCity(String city) { + this.city = city; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column litemall_address.county * - * @return the value of litemall_address.province_id + * @return the value of litemall_address.county * * @mbg.generated */ - public Integer getProvinceId() { - return provinceId; + public String getCounty() { + return county; } /** * This method was generated by MyBatis Generator. - * This method sets the value of the database column litemall_address.province_id + * This method sets the value of the database column litemall_address.county * - * @param provinceId the value for litemall_address.province_id + * @param county the value for litemall_address.county * * @mbg.generated */ - public void setProvinceId(Integer provinceId) { - this.provinceId = provinceId; + public void setCounty(String county) { + this.county = county; } /** * This method was generated by MyBatis Generator. - * This method returns the value of the database column litemall_address.city_id + * This method returns the value of the database column litemall_address.address_detail * - * @return the value of litemall_address.city_id + * @return the value of litemall_address.address_detail * * @mbg.generated */ - public Integer getCityId() { - return cityId; + public String getAddressDetail() { + return addressDetail; } /** * This method was generated by MyBatis Generator. - * This method sets the value of the database column litemall_address.city_id + * This method sets the value of the database column litemall_address.address_detail * - * @param cityId the value for litemall_address.city_id + * @param addressDetail the value for litemall_address.address_detail * * @mbg.generated */ - public void setCityId(Integer cityId) { - this.cityId = cityId; + public void setAddressDetail(String addressDetail) { + this.addressDetail = addressDetail; } /** * This method was generated by MyBatis Generator. - * This method returns the value of the database column litemall_address.area_id + * This method returns the value of the database column litemall_address.area_code * - * @return the value of litemall_address.area_id + * @return the value of litemall_address.area_code * * @mbg.generated */ - public Integer getAreaId() { - return areaId; + public String getAreaCode() { + return areaCode; } /** * This method was generated by MyBatis Generator. - * This method sets the value of the database column litemall_address.area_id + * This method sets the value of the database column litemall_address.area_code * - * @param areaId the value for litemall_address.area_id + * @param areaCode the value for litemall_address.area_code * * @mbg.generated */ - public void setAreaId(Integer areaId) { - this.areaId = areaId; + public void setAreaCode(String areaCode) { + this.areaCode = areaCode; } /** * This method was generated by MyBatis Generator. - * This method returns the value of the database column litemall_address.address + * This method returns the value of the database column litemall_address.postal_code * - * @return the value of litemall_address.address + * @return the value of litemall_address.postal_code * * @mbg.generated */ - public String getAddress() { - return address; + public String getPostalCode() { + return postalCode; } /** * This method was generated by MyBatis Generator. - * This method sets the value of the database column litemall_address.address + * This method sets the value of the database column litemall_address.postal_code * - * @param address the value for litemall_address.address + * @param postalCode the value for litemall_address.postal_code * * @mbg.generated */ - public void setAddress(String address) { - this.address = address; + public void setPostalCode(String postalCode) { + this.postalCode = postalCode; } /** * This method was generated by MyBatis Generator. - * This method returns the value of the database column litemall_address.mobile + * This method returns the value of the database column litemall_address.tel * - * @return the value of litemall_address.mobile + * @return the value of litemall_address.tel * * @mbg.generated */ - public String getMobile() { - return mobile; + public String getTel() { + return tel; } /** * This method was generated by MyBatis Generator. - * This method sets the value of the database column litemall_address.mobile + * This method sets the value of the database column litemall_address.tel * - * @param mobile the value for litemall_address.mobile + * @param tel the value for litemall_address.tel * * @mbg.generated */ - public void setMobile(String mobile) { - this.mobile = mobile; + public void setTel(String tel) { + this.tel = tel; } /** @@ -434,11 +500,13 @@ public class LitemallAddress { sb.append(", id=").append(id); sb.append(", name=").append(name); sb.append(", userId=").append(userId); - sb.append(", provinceId=").append(provinceId); - sb.append(", cityId=").append(cityId); - sb.append(", areaId=").append(areaId); - sb.append(", address=").append(address); - sb.append(", mobile=").append(mobile); + sb.append(", province=").append(province); + sb.append(", city=").append(city); + sb.append(", county=").append(county); + sb.append(", addressDetail=").append(addressDetail); + sb.append(", areaCode=").append(areaCode); + sb.append(", postalCode=").append(postalCode); + sb.append(", tel=").append(tel); sb.append(", isDefault=").append(isDefault); sb.append(", addTime=").append(addTime); sb.append(", updateTime=").append(updateTime); @@ -468,11 +536,13 @@ public class LitemallAddress { return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) && (this.getName() == null ? other.getName() == null : this.getName().equals(other.getName())) && (this.getUserId() == null ? other.getUserId() == null : this.getUserId().equals(other.getUserId())) - && (this.getProvinceId() == null ? other.getProvinceId() == null : this.getProvinceId().equals(other.getProvinceId())) - && (this.getCityId() == null ? other.getCityId() == null : this.getCityId().equals(other.getCityId())) - && (this.getAreaId() == null ? other.getAreaId() == null : this.getAreaId().equals(other.getAreaId())) - && (this.getAddress() == null ? other.getAddress() == null : this.getAddress().equals(other.getAddress())) - && (this.getMobile() == null ? other.getMobile() == null : this.getMobile().equals(other.getMobile())) + && (this.getProvince() == null ? other.getProvince() == null : this.getProvince().equals(other.getProvince())) + && (this.getCity() == null ? other.getCity() == null : this.getCity().equals(other.getCity())) + && (this.getCounty() == null ? other.getCounty() == null : this.getCounty().equals(other.getCounty())) + && (this.getAddressDetail() == null ? other.getAddressDetail() == null : this.getAddressDetail().equals(other.getAddressDetail())) + && (this.getAreaCode() == null ? other.getAreaCode() == null : this.getAreaCode().equals(other.getAreaCode())) + && (this.getPostalCode() == null ? other.getPostalCode() == null : this.getPostalCode().equals(other.getPostalCode())) + && (this.getTel() == null ? other.getTel() == null : this.getTel().equals(other.getTel())) && (this.getIsDefault() == null ? other.getIsDefault() == null : this.getIsDefault().equals(other.getIsDefault())) && (this.getAddTime() == null ? other.getAddTime() == null : this.getAddTime().equals(other.getAddTime())) && (this.getUpdateTime() == null ? other.getUpdateTime() == null : this.getUpdateTime().equals(other.getUpdateTime())) @@ -492,11 +562,13 @@ public class LitemallAddress { result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); result = prime * result + ((getName() == null) ? 0 : getName().hashCode()); result = prime * result + ((getUserId() == null) ? 0 : getUserId().hashCode()); - result = prime * result + ((getProvinceId() == null) ? 0 : getProvinceId().hashCode()); - result = prime * result + ((getCityId() == null) ? 0 : getCityId().hashCode()); - result = prime * result + ((getAreaId() == null) ? 0 : getAreaId().hashCode()); - result = prime * result + ((getAddress() == null) ? 0 : getAddress().hashCode()); - result = prime * result + ((getMobile() == null) ? 0 : getMobile().hashCode()); + result = prime * result + ((getProvince() == null) ? 0 : getProvince().hashCode()); + result = prime * result + ((getCity() == null) ? 0 : getCity().hashCode()); + result = prime * result + ((getCounty() == null) ? 0 : getCounty().hashCode()); + result = prime * result + ((getAddressDetail() == null) ? 0 : getAddressDetail().hashCode()); + result = prime * result + ((getAreaCode() == null) ? 0 : getAreaCode().hashCode()); + result = prime * result + ((getPostalCode() == null) ? 0 : getPostalCode().hashCode()); + result = prime * result + ((getTel() == null) ? 0 : getTel().hashCode()); result = prime * result + ((getIsDefault() == null) ? 0 : getIsDefault().hashCode()); result = prime * result + ((getAddTime() == null) ? 0 : getAddTime().hashCode()); result = prime * result + ((getUpdateTime() == null) ? 0 : getUpdateTime().hashCode()); @@ -526,11 +598,13 @@ public class LitemallAddress { id("id", "id", "INTEGER", false), name("name", "name", "VARCHAR", true), userId("user_id", "userId", "INTEGER", false), - provinceId("province_id", "provinceId", "INTEGER", false), - cityId("city_id", "cityId", "INTEGER", false), - areaId("area_id", "areaId", "INTEGER", false), - address("address", "address", "VARCHAR", false), - mobile("mobile", "mobile", "VARCHAR", false), + province("province", "province", "VARCHAR", false), + city("city", "city", "VARCHAR", false), + county("county", "county", "VARCHAR", false), + addressDetail("address_detail", "addressDetail", "VARCHAR", false), + areaCode("area_code", "areaCode", "CHAR", false), + postalCode("postal_code", "postalCode", "CHAR", false), + tel("tel", "tel", "VARCHAR", false), isDefault("is_default", "isDefault", "BIT", false), addTime("add_time", "addTime", "TIMESTAMP", false), updateTime("update_time", "updateTime", "TIMESTAMP", false), diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/domain/LitemallAddressExample.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/domain/LitemallAddressExample.java index 57773c46..b9bf44d9 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/domain/LitemallAddressExample.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/domain/LitemallAddressExample.java @@ -644,18 +644,18 @@ public class LitemallAddressExample { return (Criteria) this; } - public Criteria andProvinceIdIsNull() { - addCriterion("province_id is null"); + public Criteria andProvinceIsNull() { + addCriterion("province is null"); return (Criteria) this; } - public Criteria andProvinceIdIsNotNull() { - addCriterion("province_id is not null"); + public Criteria andProvinceIsNotNull() { + addCriterion("province is not null"); return (Criteria) this; } - public Criteria andProvinceIdEqualTo(Integer value) { - addCriterion("province_id =", value, "provinceId"); + public Criteria andProvinceEqualTo(String value) { + addCriterion("province =", value, "province"); return (Criteria) this; } @@ -666,13 +666,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andProvinceIdEqualToColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("province_id = ").append(column.getEscapedColumnName()).toString()); + public Criteria andProvinceEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("province = ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andProvinceIdNotEqualTo(Integer value) { - addCriterion("province_id <>", value, "provinceId"); + public Criteria andProvinceNotEqualTo(String value) { + addCriterion("province <>", value, "province"); return (Criteria) this; } @@ -683,13 +683,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andProvinceIdNotEqualToColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("province_id <> ").append(column.getEscapedColumnName()).toString()); + public Criteria andProvinceNotEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("province <> ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andProvinceIdGreaterThan(Integer value) { - addCriterion("province_id >", value, "provinceId"); + public Criteria andProvinceGreaterThan(String value) { + addCriterion("province >", value, "province"); return (Criteria) this; } @@ -700,13 +700,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andProvinceIdGreaterThanColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("province_id > ").append(column.getEscapedColumnName()).toString()); + public Criteria andProvinceGreaterThanColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("province > ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andProvinceIdGreaterThanOrEqualTo(Integer value) { - addCriterion("province_id >=", value, "provinceId"); + public Criteria andProvinceGreaterThanOrEqualTo(String value) { + addCriterion("province >=", value, "province"); return (Criteria) this; } @@ -717,13 +717,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andProvinceIdGreaterThanOrEqualToColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("province_id >= ").append(column.getEscapedColumnName()).toString()); + public Criteria andProvinceGreaterThanOrEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("province >= ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andProvinceIdLessThan(Integer value) { - addCriterion("province_id <", value, "provinceId"); + public Criteria andProvinceLessThan(String value) { + addCriterion("province <", value, "province"); return (Criteria) this; } @@ -734,13 +734,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andProvinceIdLessThanColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("province_id < ").append(column.getEscapedColumnName()).toString()); + public Criteria andProvinceLessThanColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("province < ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andProvinceIdLessThanOrEqualTo(Integer value) { - addCriterion("province_id <=", value, "provinceId"); + public Criteria andProvinceLessThanOrEqualTo(String value) { + addCriterion("province <=", value, "province"); return (Criteria) this; } @@ -751,43 +751,212 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andProvinceIdLessThanOrEqualToColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("province_id <= ").append(column.getEscapedColumnName()).toString()); + public Criteria andProvinceLessThanOrEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("province <= ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andProvinceIdIn(List values) { - addCriterion("province_id in", values, "provinceId"); + public Criteria andProvinceLike(String value) { + addCriterion("province like", value, "province"); return (Criteria) this; } - public Criteria andProvinceIdNotIn(List values) { - addCriterion("province_id not in", values, "provinceId"); + public Criteria andProvinceNotLike(String value) { + addCriterion("province not like", value, "province"); return (Criteria) this; } - public Criteria andProvinceIdBetween(Integer value1, Integer value2) { - addCriterion("province_id between", value1, value2, "provinceId"); + public Criteria andProvinceIn(List values) { + addCriterion("province in", values, "province"); return (Criteria) this; } - public Criteria andProvinceIdNotBetween(Integer value1, Integer value2) { - addCriterion("province_id not between", value1, value2, "provinceId"); + public Criteria andProvinceNotIn(List values) { + addCriterion("province not in", values, "province"); return (Criteria) this; } - public Criteria andCityIdIsNull() { - addCriterion("city_id is null"); + public Criteria andProvinceBetween(String value1, String value2) { + addCriterion("province between", value1, value2, "province"); return (Criteria) this; } - public Criteria andCityIdIsNotNull() { - addCriterion("city_id is not null"); + public Criteria andProvinceNotBetween(String value1, String value2) { + addCriterion("province not between", value1, value2, "province"); return (Criteria) this; } - public Criteria andCityIdEqualTo(Integer value) { - addCriterion("city_id =", value, "cityId"); + public Criteria andCityIsNull() { + addCriterion("city is null"); + return (Criteria) this; + } + + public Criteria andCityIsNotNull() { + addCriterion("city is not null"); + return (Criteria) this; + } + + public Criteria andCityEqualTo(String value) { + addCriterion("city =", value, "city"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_address + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andCityEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("city = ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andCityNotEqualTo(String value) { + addCriterion("city <>", value, "city"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_address + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andCityNotEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("city <> ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andCityGreaterThan(String value) { + addCriterion("city >", value, "city"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_address + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andCityGreaterThanColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("city > ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andCityGreaterThanOrEqualTo(String value) { + addCriterion("city >=", value, "city"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_address + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andCityGreaterThanOrEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("city >= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andCityLessThan(String value) { + addCriterion("city <", value, "city"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_address + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andCityLessThanColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("city < ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andCityLessThanOrEqualTo(String value) { + addCriterion("city <=", value, "city"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_address + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andCityLessThanOrEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("city <= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andCityLike(String value) { + addCriterion("city like", value, "city"); + return (Criteria) this; + } + + public Criteria andCityNotLike(String value) { + addCriterion("city not like", value, "city"); + return (Criteria) this; + } + + public Criteria andCityIn(List values) { + addCriterion("city in", values, "city"); + return (Criteria) this; + } + + public Criteria andCityNotIn(List values) { + addCriterion("city not in", values, "city"); + return (Criteria) this; + } + + public Criteria andCityBetween(String value1, String value2) { + addCriterion("city between", value1, value2, "city"); + return (Criteria) this; + } + + public Criteria andCityNotBetween(String value1, String value2) { + addCriterion("city not between", value1, value2, "city"); + return (Criteria) this; + } + + public Criteria andCountyIsNull() { + addCriterion("county is null"); + return (Criteria) this; + } + + public Criteria andCountyIsNotNull() { + addCriterion("county is not null"); + return (Criteria) this; + } + + public Criteria andCountyEqualTo(String value) { + addCriterion("county =", value, "county"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_address + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andCountyEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("county = ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andCountyNotEqualTo(String value) { + addCriterion("county <>", value, "county"); return (Criteria) this; } @@ -798,13 +967,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andCityIdEqualToColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("city_id = ").append(column.getEscapedColumnName()).toString()); + public Criteria andCountyNotEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("county <> ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andCityIdNotEqualTo(Integer value) { - addCriterion("city_id <>", value, "cityId"); + public Criteria andCountyGreaterThan(String value) { + addCriterion("county >", value, "county"); return (Criteria) this; } @@ -815,13 +984,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andCityIdNotEqualToColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("city_id <> ").append(column.getEscapedColumnName()).toString()); + public Criteria andCountyGreaterThanColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("county > ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andCityIdGreaterThan(Integer value) { - addCriterion("city_id >", value, "cityId"); + public Criteria andCountyGreaterThanOrEqualTo(String value) { + addCriterion("county >=", value, "county"); return (Criteria) this; } @@ -832,13 +1001,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andCityIdGreaterThanColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("city_id > ").append(column.getEscapedColumnName()).toString()); + public Criteria andCountyGreaterThanOrEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("county >= ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andCityIdGreaterThanOrEqualTo(Integer value) { - addCriterion("city_id >=", value, "cityId"); + public Criteria andCountyLessThan(String value) { + addCriterion("county <", value, "county"); return (Criteria) this; } @@ -849,13 +1018,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andCityIdGreaterThanOrEqualToColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("city_id >= ").append(column.getEscapedColumnName()).toString()); + public Criteria andCountyLessThanColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("county < ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andCityIdLessThan(Integer value) { - addCriterion("city_id <", value, "cityId"); + public Criteria andCountyLessThanOrEqualTo(String value) { + addCriterion("county <=", value, "county"); return (Criteria) this; } @@ -866,13 +1035,53 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andCityIdLessThanColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("city_id < ").append(column.getEscapedColumnName()).toString()); + public Criteria andCountyLessThanOrEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("county <= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andCountyLike(String value) { + addCriterion("county like", value, "county"); + return (Criteria) this; + } + + public Criteria andCountyNotLike(String value) { + addCriterion("county not like", value, "county"); + return (Criteria) this; + } + + public Criteria andCountyIn(List values) { + addCriterion("county in", values, "county"); + return (Criteria) this; + } + + public Criteria andCountyNotIn(List values) { + addCriterion("county not in", values, "county"); + return (Criteria) this; + } + + public Criteria andCountyBetween(String value1, String value2) { + addCriterion("county between", value1, value2, "county"); + return (Criteria) this; + } + + public Criteria andCountyNotBetween(String value1, String value2) { + addCriterion("county not between", value1, value2, "county"); return (Criteria) this; } - public Criteria andCityIdLessThanOrEqualTo(Integer value) { - addCriterion("city_id <=", value, "cityId"); + public Criteria andAddressDetailIsNull() { + addCriterion("address_detail is null"); + return (Criteria) this; + } + + public Criteria andAddressDetailIsNotNull() { + addCriterion("address_detail is not null"); + return (Criteria) this; + } + + public Criteria andAddressDetailEqualTo(String value) { + addCriterion("address_detail =", value, "addressDetail"); return (Criteria) this; } @@ -883,43 +1092,64 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andCityIdLessThanOrEqualToColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("city_id <= ").append(column.getEscapedColumnName()).toString()); + public Criteria andAddressDetailEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("address_detail = ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andCityIdIn(List values) { - addCriterion("city_id in", values, "cityId"); + public Criteria andAddressDetailNotEqualTo(String value) { + addCriterion("address_detail <>", value, "addressDetail"); return (Criteria) this; } - public Criteria andCityIdNotIn(List values) { - addCriterion("city_id not in", values, "cityId"); + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_address + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andAddressDetailNotEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("address_detail <> ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andCityIdBetween(Integer value1, Integer value2) { - addCriterion("city_id between", value1, value2, "cityId"); + public Criteria andAddressDetailGreaterThan(String value) { + addCriterion("address_detail >", value, "addressDetail"); return (Criteria) this; } - public Criteria andCityIdNotBetween(Integer value1, Integer value2) { - addCriterion("city_id not between", value1, value2, "cityId"); + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_address + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andAddressDetailGreaterThanColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("address_detail > ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andAreaIdIsNull() { - addCriterion("area_id is null"); + public Criteria andAddressDetailGreaterThanOrEqualTo(String value) { + addCriterion("address_detail >=", value, "addressDetail"); return (Criteria) this; } - public Criteria andAreaIdIsNotNull() { - addCriterion("area_id is not null"); + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_address + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andAddressDetailGreaterThanOrEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("address_detail >= ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andAreaIdEqualTo(Integer value) { - addCriterion("area_id =", value, "areaId"); + public Criteria andAddressDetailLessThan(String value) { + addCriterion("address_detail <", value, "addressDetail"); return (Criteria) this; } @@ -930,13 +1160,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andAreaIdEqualToColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("area_id = ").append(column.getEscapedColumnName()).toString()); + public Criteria andAddressDetailLessThanColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("address_detail < ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andAreaIdNotEqualTo(Integer value) { - addCriterion("area_id <>", value, "areaId"); + public Criteria andAddressDetailLessThanOrEqualTo(String value) { + addCriterion("address_detail <=", value, "addressDetail"); return (Criteria) this; } @@ -947,13 +1177,53 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andAreaIdNotEqualToColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("area_id <> ").append(column.getEscapedColumnName()).toString()); + public Criteria andAddressDetailLessThanOrEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("address_detail <= ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andAreaIdGreaterThan(Integer value) { - addCriterion("area_id >", value, "areaId"); + public Criteria andAddressDetailLike(String value) { + addCriterion("address_detail like", value, "addressDetail"); + return (Criteria) this; + } + + public Criteria andAddressDetailNotLike(String value) { + addCriterion("address_detail not like", value, "addressDetail"); + return (Criteria) this; + } + + public Criteria andAddressDetailIn(List values) { + addCriterion("address_detail in", values, "addressDetail"); + return (Criteria) this; + } + + public Criteria andAddressDetailNotIn(List values) { + addCriterion("address_detail not in", values, "addressDetail"); + return (Criteria) this; + } + + public Criteria andAddressDetailBetween(String value1, String value2) { + addCriterion("address_detail between", value1, value2, "addressDetail"); + return (Criteria) this; + } + + public Criteria andAddressDetailNotBetween(String value1, String value2) { + addCriterion("address_detail not between", value1, value2, "addressDetail"); + return (Criteria) this; + } + + public Criteria andAreaCodeIsNull() { + addCriterion("area_code is null"); + return (Criteria) this; + } + + public Criteria andAreaCodeIsNotNull() { + addCriterion("area_code is not null"); + return (Criteria) this; + } + + public Criteria andAreaCodeEqualTo(String value) { + addCriterion("area_code =", value, "areaCode"); return (Criteria) this; } @@ -964,13 +1234,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andAreaIdGreaterThanColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("area_id > ").append(column.getEscapedColumnName()).toString()); + public Criteria andAreaCodeEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("area_code = ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andAreaIdGreaterThanOrEqualTo(Integer value) { - addCriterion("area_id >=", value, "areaId"); + public Criteria andAreaCodeNotEqualTo(String value) { + addCriterion("area_code <>", value, "areaCode"); return (Criteria) this; } @@ -981,13 +1251,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andAreaIdGreaterThanOrEqualToColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("area_id >= ").append(column.getEscapedColumnName()).toString()); + public Criteria andAreaCodeNotEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("area_code <> ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andAreaIdLessThan(Integer value) { - addCriterion("area_id <", value, "areaId"); + public Criteria andAreaCodeGreaterThan(String value) { + addCriterion("area_code >", value, "areaCode"); return (Criteria) this; } @@ -998,13 +1268,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andAreaIdLessThanColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("area_id < ").append(column.getEscapedColumnName()).toString()); + public Criteria andAreaCodeGreaterThanColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("area_code > ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andAreaIdLessThanOrEqualTo(Integer value) { - addCriterion("area_id <=", value, "areaId"); + public Criteria andAreaCodeGreaterThanOrEqualTo(String value) { + addCriterion("area_code >=", value, "areaCode"); return (Criteria) this; } @@ -1015,43 +1285,87 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andAreaIdLessThanOrEqualToColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("area_id <= ").append(column.getEscapedColumnName()).toString()); + public Criteria andAreaCodeGreaterThanOrEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("area_code >= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andAreaCodeLessThan(String value) { + addCriterion("area_code <", value, "areaCode"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_address + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andAreaCodeLessThanColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("area_code < ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andAreaCodeLessThanOrEqualTo(String value) { + addCriterion("area_code <=", value, "areaCode"); + return (Criteria) this; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table litemall_address + * + * @mbg.generated + * @project https://github.com/itfsw/mybatis-generator-plugin + */ + public Criteria andAreaCodeLessThanOrEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("area_code <= ").append(column.getEscapedColumnName()).toString()); + return (Criteria) this; + } + + public Criteria andAreaCodeLike(String value) { + addCriterion("area_code like", value, "areaCode"); + return (Criteria) this; + } + + public Criteria andAreaCodeNotLike(String value) { + addCriterion("area_code not like", value, "areaCode"); return (Criteria) this; } - public Criteria andAreaIdIn(List values) { - addCriterion("area_id in", values, "areaId"); + public Criteria andAreaCodeIn(List values) { + addCriterion("area_code in", values, "areaCode"); return (Criteria) this; } - public Criteria andAreaIdNotIn(List values) { - addCriterion("area_id not in", values, "areaId"); + public Criteria andAreaCodeNotIn(List values) { + addCriterion("area_code not in", values, "areaCode"); return (Criteria) this; } - public Criteria andAreaIdBetween(Integer value1, Integer value2) { - addCriterion("area_id between", value1, value2, "areaId"); + public Criteria andAreaCodeBetween(String value1, String value2) { + addCriterion("area_code between", value1, value2, "areaCode"); return (Criteria) this; } - public Criteria andAreaIdNotBetween(Integer value1, Integer value2) { - addCriterion("area_id not between", value1, value2, "areaId"); + public Criteria andAreaCodeNotBetween(String value1, String value2) { + addCriterion("area_code not between", value1, value2, "areaCode"); return (Criteria) this; } - public Criteria andAddressIsNull() { - addCriterion("address is null"); + public Criteria andPostalCodeIsNull() { + addCriterion("postal_code is null"); return (Criteria) this; } - public Criteria andAddressIsNotNull() { - addCriterion("address is not null"); + public Criteria andPostalCodeIsNotNull() { + addCriterion("postal_code is not null"); return (Criteria) this; } - public Criteria andAddressEqualTo(String value) { - addCriterion("address =", value, "address"); + public Criteria andPostalCodeEqualTo(String value) { + addCriterion("postal_code =", value, "postalCode"); return (Criteria) this; } @@ -1062,13 +1376,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andAddressEqualToColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("address = ").append(column.getEscapedColumnName()).toString()); + public Criteria andPostalCodeEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("postal_code = ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andAddressNotEqualTo(String value) { - addCriterion("address <>", value, "address"); + public Criteria andPostalCodeNotEqualTo(String value) { + addCriterion("postal_code <>", value, "postalCode"); return (Criteria) this; } @@ -1079,13 +1393,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andAddressNotEqualToColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("address <> ").append(column.getEscapedColumnName()).toString()); + public Criteria andPostalCodeNotEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("postal_code <> ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andAddressGreaterThan(String value) { - addCriterion("address >", value, "address"); + public Criteria andPostalCodeGreaterThan(String value) { + addCriterion("postal_code >", value, "postalCode"); return (Criteria) this; } @@ -1096,13 +1410,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andAddressGreaterThanColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("address > ").append(column.getEscapedColumnName()).toString()); + public Criteria andPostalCodeGreaterThanColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("postal_code > ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andAddressGreaterThanOrEqualTo(String value) { - addCriterion("address >=", value, "address"); + public Criteria andPostalCodeGreaterThanOrEqualTo(String value) { + addCriterion("postal_code >=", value, "postalCode"); return (Criteria) this; } @@ -1113,13 +1427,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andAddressGreaterThanOrEqualToColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("address >= ").append(column.getEscapedColumnName()).toString()); + public Criteria andPostalCodeGreaterThanOrEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("postal_code >= ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andAddressLessThan(String value) { - addCriterion("address <", value, "address"); + public Criteria andPostalCodeLessThan(String value) { + addCriterion("postal_code <", value, "postalCode"); return (Criteria) this; } @@ -1130,13 +1444,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andAddressLessThanColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("address < ").append(column.getEscapedColumnName()).toString()); + public Criteria andPostalCodeLessThanColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("postal_code < ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andAddressLessThanOrEqualTo(String value) { - addCriterion("address <=", value, "address"); + public Criteria andPostalCodeLessThanOrEqualTo(String value) { + addCriterion("postal_code <=", value, "postalCode"); return (Criteria) this; } @@ -1147,53 +1461,53 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andAddressLessThanOrEqualToColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("address <= ").append(column.getEscapedColumnName()).toString()); + public Criteria andPostalCodeLessThanOrEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("postal_code <= ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andAddressLike(String value) { - addCriterion("address like", value, "address"); + public Criteria andPostalCodeLike(String value) { + addCriterion("postal_code like", value, "postalCode"); return (Criteria) this; } - public Criteria andAddressNotLike(String value) { - addCriterion("address not like", value, "address"); + public Criteria andPostalCodeNotLike(String value) { + addCriterion("postal_code not like", value, "postalCode"); return (Criteria) this; } - public Criteria andAddressIn(List values) { - addCriterion("address in", values, "address"); + public Criteria andPostalCodeIn(List values) { + addCriterion("postal_code in", values, "postalCode"); return (Criteria) this; } - public Criteria andAddressNotIn(List values) { - addCriterion("address not in", values, "address"); + public Criteria andPostalCodeNotIn(List values) { + addCriterion("postal_code not in", values, "postalCode"); return (Criteria) this; } - public Criteria andAddressBetween(String value1, String value2) { - addCriterion("address between", value1, value2, "address"); + public Criteria andPostalCodeBetween(String value1, String value2) { + addCriterion("postal_code between", value1, value2, "postalCode"); return (Criteria) this; } - public Criteria andAddressNotBetween(String value1, String value2) { - addCriterion("address not between", value1, value2, "address"); + public Criteria andPostalCodeNotBetween(String value1, String value2) { + addCriterion("postal_code not between", value1, value2, "postalCode"); return (Criteria) this; } - public Criteria andMobileIsNull() { - addCriterion("mobile is null"); + public Criteria andTelIsNull() { + addCriterion("tel is null"); return (Criteria) this; } - public Criteria andMobileIsNotNull() { - addCriterion("mobile is not null"); + public Criteria andTelIsNotNull() { + addCriterion("tel is not null"); return (Criteria) this; } - public Criteria andMobileEqualTo(String value) { - addCriterion("mobile =", value, "mobile"); + public Criteria andTelEqualTo(String value) { + addCriterion("tel =", value, "tel"); return (Criteria) this; } @@ -1204,13 +1518,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andMobileEqualToColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("mobile = ").append(column.getEscapedColumnName()).toString()); + public Criteria andTelEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("tel = ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andMobileNotEqualTo(String value) { - addCriterion("mobile <>", value, "mobile"); + public Criteria andTelNotEqualTo(String value) { + addCriterion("tel <>", value, "tel"); return (Criteria) this; } @@ -1221,13 +1535,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andMobileNotEqualToColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("mobile <> ").append(column.getEscapedColumnName()).toString()); + public Criteria andTelNotEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("tel <> ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andMobileGreaterThan(String value) { - addCriterion("mobile >", value, "mobile"); + public Criteria andTelGreaterThan(String value) { + addCriterion("tel >", value, "tel"); return (Criteria) this; } @@ -1238,13 +1552,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andMobileGreaterThanColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("mobile > ").append(column.getEscapedColumnName()).toString()); + public Criteria andTelGreaterThanColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("tel > ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andMobileGreaterThanOrEqualTo(String value) { - addCriterion("mobile >=", value, "mobile"); + public Criteria andTelGreaterThanOrEqualTo(String value) { + addCriterion("tel >=", value, "tel"); return (Criteria) this; } @@ -1255,13 +1569,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andMobileGreaterThanOrEqualToColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("mobile >= ").append(column.getEscapedColumnName()).toString()); + public Criteria andTelGreaterThanOrEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("tel >= ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andMobileLessThan(String value) { - addCriterion("mobile <", value, "mobile"); + public Criteria andTelLessThan(String value) { + addCriterion("tel <", value, "tel"); return (Criteria) this; } @@ -1272,13 +1586,13 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andMobileLessThanColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("mobile < ").append(column.getEscapedColumnName()).toString()); + public Criteria andTelLessThanColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("tel < ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andMobileLessThanOrEqualTo(String value) { - addCriterion("mobile <=", value, "mobile"); + public Criteria andTelLessThanOrEqualTo(String value) { + addCriterion("tel <=", value, "tel"); return (Criteria) this; } @@ -1289,38 +1603,38 @@ public class LitemallAddressExample { * @mbg.generated * @project https://github.com/itfsw/mybatis-generator-plugin */ - public Criteria andMobileLessThanOrEqualToColumn(LitemallAddress.Column column) { - addCriterion(new StringBuilder("mobile <= ").append(column.getEscapedColumnName()).toString()); + public Criteria andTelLessThanOrEqualToColumn(LitemallAddress.Column column) { + addCriterion(new StringBuilder("tel <= ").append(column.getEscapedColumnName()).toString()); return (Criteria) this; } - public Criteria andMobileLike(String value) { - addCriterion("mobile like", value, "mobile"); + public Criteria andTelLike(String value) { + addCriterion("tel like", value, "tel"); return (Criteria) this; } - public Criteria andMobileNotLike(String value) { - addCriterion("mobile not like", value, "mobile"); + public Criteria andTelNotLike(String value) { + addCriterion("tel not like", value, "tel"); return (Criteria) this; } - public Criteria andMobileIn(List values) { - addCriterion("mobile in", values, "mobile"); + public Criteria andTelIn(List values) { + addCriterion("tel in", values, "tel"); return (Criteria) this; } - public Criteria andMobileNotIn(List values) { - addCriterion("mobile not in", values, "mobile"); + public Criteria andTelNotIn(List values) { + addCriterion("tel not in", values, "tel"); return (Criteria) this; } - public Criteria andMobileBetween(String value1, String value2) { - addCriterion("mobile between", value1, value2, "mobile"); + public Criteria andTelBetween(String value1, String value2) { + addCriterion("tel between", value1, value2, "tel"); return (Criteria) this; } - public Criteria andMobileNotBetween(String value1, String value2) { - addCriterion("mobile not between", value1, value2, "mobile"); + public Criteria andTelNotBetween(String value1, String value2) { + addCriterion("tel not between", value1, value2, "tel"); return (Criteria) this; } diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallRegionService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallRegionService.java index 9c0f31c8..137f7b71 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallRegionService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallRegionService.java @@ -52,10 +52,4 @@ public class LitemallRegionService { return regionMapper.selectByExample(example); } - - public List queryChildren(Integer id) { - LitemallRegionExample example = new LitemallRegionExample(); - example.or().andPidEqualTo(id); - return regionMapper.selectByExample(example); - } } diff --git a/litemall-db/src/main/resources/org/linlinjava/litemall/db/dao/LitemallAddressMapper.xml b/litemall-db/src/main/resources/org/linlinjava/litemall/db/dao/LitemallAddressMapper.xml index fff7cef8..260fd261 100644 --- a/litemall-db/src/main/resources/org/linlinjava/litemall/db/dao/LitemallAddressMapper.xml +++ b/litemall-db/src/main/resources/org/linlinjava/litemall/db/dao/LitemallAddressMapper.xml @@ -9,11 +9,13 @@ - - - - - + + + + + + + @@ -90,8 +92,8 @@ WARNING - @mbg.generated This element is automatically generated by MyBatis Generator, do not modify. --> - id, `name`, user_id, province_id, city_id, area_id, address, mobile, is_default, - add_time, update_time, deleted + id, `name`, user_id, province, city, county, address_detail, area_code, postal_code, + tel, is_default, add_time, update_time, deleted - + - + - + 设为默认地址 @@ -25,13 +25,13 @@ - {{item.name}} + {{item.name}} 确定 - {{item.name}} + {{item.name}} diff --git a/litemall-wx/utils/area.js b/litemall-wx/utils/area.js new file mode 100644 index 00000000..83f41a8d --- /dev/null +++ b/litemall-wx/utils/area.js @@ -0,0 +1,3296 @@ +var areaList = +{ + "province_list": { + "110000": "北京市", + "120000": "天津市", + "130000": "河北省", + "140000": "山西省", + "150000": "内蒙古自治区", + "210000": "辽宁省", + "220000": "吉林省", + "230000": "黑龙江省", + "310000": "上海市", + "320000": "江苏省", + "330000": "浙江省", + "340000": "安徽省", + "350000": "福建省", + "360000": "江西省", + "370000": "山东省", + "410000": "河南省", + "420000": "湖北省", + "430000": "湖南省", + "440000": "广东省", + "450000": "广西壮族自治区", + "460000": "海南省", + "500000": "重庆市", + "510000": "四川省", + "520000": "贵州省", + "530000": "云南省", + "540000": "西藏自治区", + "610000": "陕西省", + "620000": "甘肃省", + "630000": "青海省", + "640000": "宁夏回族自治区", + "650000": "新疆维吾尔自治区" + }, + "city_list": { + "110100": "市辖区", + "120100": "市辖区", + "130100": "石家庄市", + "130200": "唐山市", + "130300": "秦皇岛市", + "130400": "邯郸市", + "130500": "邢台市", + "130600": "保定市", + "130700": "张家口市", + "130800": "承德市", + "130900": "沧州市", + "131000": "廊坊市", + "131100": "衡水市", + "139000": "省直辖县级行政区划", + "140100": "太原市", + "140200": "大同市", + "140300": "阳泉市", + "140400": "长治市", + "140500": "晋城市", + "140600": "朔州市", + "140700": "晋中市", + "140800": "运城市", + "140900": "忻州市", + "141000": "临汾市", + "141100": "吕梁市", + "150100": "呼和浩特市", + "150200": "包头市", + "150300": "乌海市", + "150400": "赤峰市", + "150500": "通辽市", + "150600": "鄂尔多斯市", + "150700": "呼伦贝尔市", + "150800": "巴彦淖尔市", + "150900": "乌兰察布市", + "152200": "兴安盟", + "152500": "锡林郭勒盟", + "152900": "阿拉善盟", + "210100": "沈阳市", + "210200": "大连市", + "210300": "鞍山市", + "210400": "抚顺市", + "210500": "本溪市", + "210600": "丹东市", + "210700": "锦州市", + "210800": "营口市", + "210900": "阜新市", + "211000": "辽阳市", + "211100": "盘锦市", + "211200": "铁岭市", + "211300": "朝阳市", + "211400": "葫芦岛市", + "220100": "长春市", + "220200": "吉林市", + "220300": "四平市", + "220400": "辽源市", + "220500": "通化市", + "220600": "白山市", + "220700": "松原市", + "220800": "白城市", + "222400": "延边朝鲜族自治州", + "230100": "哈尔滨市", + "230200": "齐齐哈尔市", + "230300": "鸡西市", + "230400": "鹤岗市", + "230500": "双鸭山市", + "230600": "大庆市", + "230700": "伊春市", + "230800": "佳木斯市", + "230900": "七台河市", + "231000": "牡丹江市", + "231100": "黑河市", + "231200": "绥化市", + "232700": "大兴安岭地区", + "310100": "市辖区", + "320100": "南京市", + "320200": "无锡市", + "320300": "徐州市", + "320400": "常州市", + "320500": "苏州市", + "320600": "南通市", + "320700": "连云港市", + "320800": "淮安市", + "320900": "盐城市", + "321000": "扬州市", + "321100": "镇江市", + "321200": "泰州市", + "321300": "宿迁市", + "330100": "杭州市", + "330200": "宁波市", + "330300": "温州市", + "330400": "嘉兴市", + "330500": "湖州市", + "330600": "绍兴市", + "330700": "金华市", + "330800": "衢州市", + "330900": "舟山市", + "331000": "台州市", + "331100": "丽水市", + "340100": "合肥市", + "340200": "芜湖市", + "340300": "蚌埠市", + "340400": "淮南市", + "340500": "马鞍山市", + "340600": "淮北市", + "340700": "铜陵市", + "340800": "安庆市", + "341000": "黄山市", + "341100": "滁州市", + "341200": "阜阳市", + "341300": "宿州市", + "341500": "六安市", + "341600": "亳州市", + "341700": "池州市", + "341800": "宣城市", + "350100": "福州市", + "350200": "厦门市", + "350300": "莆田市", + "350400": "三明市", + "350500": "泉州市", + "350600": "漳州市", + "350700": "南平市", + "350800": "龙岩市", + "350900": "宁德市", + "360100": "南昌市", + "360200": "景德镇市", + "360300": "萍乡市", + "360400": "九江市", + "360500": "新余市", + "360600": "鹰潭市", + "360700": "赣州市", + "360800": "吉安市", + "360900": "宜春市", + "361000": "抚州市", + "361100": "上饶市", + "370100": "济南市", + "370200": "青岛市", + "370300": "淄博市", + "370400": "枣庄市", + "370500": "东营市", + "370600": "烟台市", + "370700": "潍坊市", + "370800": "济宁市", + "370900": "泰安市", + "371000": "威海市", + "371100": "日照市", + "371200": "莱芜市", + "371300": "临沂市", + "371400": "德州市", + "371500": "聊城市", + "371600": "滨州市", + "371700": "菏泽市", + "410100": "郑州市", + "410200": "开封市", + "410300": "洛阳市", + "410400": "平顶山市", + "410500": "安阳市", + "410600": "鹤壁市", + "410700": "新乡市", + "410800": "焦作市", + "410900": "濮阳市", + "411000": "许昌市", + "411100": "漯河市", + "411200": "三门峡市", + "411300": "南阳市", + "411400": "商丘市", + "411500": "信阳市", + "411600": "周口市", + "411700": "驻马店市", + "419000": "省直辖县级行政区划", + "420100": "武汉市", + "420200": "黄石市", + "420300": "十堰市", + "420500": "宜昌市", + "420600": "襄阳市", + "420700": "鄂州市", + "420800": "荆门市", + "420900": "孝感市", + "421000": "荆州市", + "421100": "黄冈市", + "421200": "咸宁市", + "421300": "随州市", + "422800": "恩施土家族苗族自治州", + "429000": "省直辖县级行政区划", + "430100": "长沙市", + "430200": "株洲市", + "430300": "湘潭市", + "430400": "衡阳市", + "430500": "邵阳市", + "430600": "岳阳市", + "430700": "常德市", + "430800": "张家界市", + "430900": "益阳市", + "431000": "郴州市", + "431100": "永州市", + "431200": "怀化市", + "431300": "娄底市", + "433100": "湘西土家族苗族自治州", + "440100": "广州市", + "440200": "韶关市", + "440300": "深圳市", + "440400": "珠海市", + "440500": "汕头市", + "440600": "佛山市", + "440700": "江门市", + "440800": "湛江市", + "440900": "茂名市", + "441200": "肇庆市", + "441300": "惠州市", + "441400": "梅州市", + "441500": "汕尾市", + "441600": "河源市", + "441700": "阳江市", + "441800": "清远市", + "441900": "东莞市", + "442000": "中山市", + "445100": "潮州市", + "445200": "揭阳市", + "445300": "云浮市", + "450100": "南宁市", + "450200": "柳州市", + "450300": "桂林市", + "450400": "梧州市", + "450500": "北海市", + "450600": "防城港市", + "450700": "钦州市", + "450800": "贵港市", + "450900": "玉林市", + "451000": "百色市", + "451100": "贺州市", + "451200": "河池市", + "451300": "来宾市", + "451400": "崇左市", + "460100": "海口市", + "460200": "三亚市", + "460300": "三沙市", + "460400": "儋州市", + "469000": "省直辖县级行政区划", + "500100": "市辖区", + "500200": "县", + "510100": "成都市", + "510300": "自贡市", + "510400": "攀枝花市", + "510500": "泸州市", + "510600": "德阳市", + "510700": "绵阳市", + "510800": "广元市", + "510900": "遂宁市", + "511000": "内江市", + "511100": "乐山市", + "511300": "南充市", + "511400": "眉山市", + "511500": "宜宾市", + "511600": "广安市", + "511700": "达州市", + "511800": "雅安市", + "511900": "巴中市", + "512000": "资阳市", + "513200": "阿坝藏族羌族自治州", + "513300": "甘孜藏族自治州", + "513400": "凉山彝族自治州", + "520100": "贵阳市", + "520200": "六盘水市", + "520300": "遵义市", + "520400": "安顺市", + "520500": "毕节市", + "520600": "铜仁市", + "522300": "黔西南布依族苗族自治州", + "522600": "黔东南苗族侗族自治州", + "522700": "黔南布依族苗族自治州", + "530100": "昆明市", + "530300": "曲靖市", + "530400": "玉溪市", + "530500": "保山市", + "530600": "昭通市", + "530700": "丽江市", + "530800": "普洱市", + "530900": "临沧市", + "532300": "楚雄彝族自治州", + "532500": "红河哈尼族彝族自治州", + "532600": "文山壮族苗族自治州", + "532800": "西双版纳傣族自治州", + "532900": "大理白族自治州", + "533100": "德宏傣族景颇族自治州", + "533300": "怒江傈僳族自治州", + "533400": "迪庆藏族自治州", + "540100": "拉萨市", + "540200": "日喀则市", + "540300": "昌都市", + "540400": "林芝市", + "540500": "山南市", + "542400": "那曲地区", + "542500": "阿里地区", + "610100": "西安市", + "610200": "铜川市", + "610300": "宝鸡市", + "610400": "咸阳市", + "610500": "渭南市", + "610600": "延安市", + "610700": "汉中市", + "610800": "榆林市", + "610900": "安康市", + "611000": "商洛市", + "620100": "兰州市", + "620200": "嘉峪关市", + "620300": "金昌市", + "620400": "白银市", + "620500": "天水市", + "620600": "武威市", + "620700": "张掖市", + "620800": "平凉市", + "620900": "酒泉市", + "621000": "庆阳市", + "621100": "定西市", + "621200": "陇南市", + "622900": "临夏回族自治州", + "623000": "甘南藏族自治州", + "630100": "西宁市", + "630200": "海东市", + "632200": "海北藏族自治州", + "632300": "黄南藏族自治州", + "632500": "海南藏族自治州", + "632600": "果洛藏族自治州", + "632700": "玉树藏族自治州", + "632800": "海西蒙古族藏族自治州", + "640100": "银川市", + "640200": "石嘴山市", + "640300": "吴忠市", + "640400": "固原市", + "640500": "中卫市", + "650100": "乌鲁木齐市", + "650200": "克拉玛依市", + "650400": "吐鲁番市", + "650500": "哈密市", + "652300": "昌吉回族自治州", + "652700": "博尔塔拉蒙古自治州", + "652800": "巴音郭楞蒙古自治州", + "652900": "阿克苏地区", + "653000": "克孜勒苏柯尔克孜自治州", + "653100": "喀什地区", + "653200": "和田地区", + "654000": "伊犁哈萨克自治州", + "654200": "塔城地区", + "654300": "阿勒泰地区", + "659000": "自治区直辖县级行政区划" + }, + "county_list": { + "110101": "东城区", + "110102": "西城区", + "110105": "朝阳区", + "110106": "丰台区", + "110107": "石景山区", + "110108": "海淀区", + "110109": "门头沟区", + "110111": "房山区", + "110112": "通州区", + "110113": "顺义区", + "110114": "昌平区", + "110115": "大兴区", + "110116": "怀柔区", + "110117": "平谷区", + "110118": "密云区", + "110119": "延庆区", + "120101": "和平区", + "120102": "河东区", + "120103": "河西区", + "120104": "南开区", + "120105": "河北区", + "120106": "红桥区", + "120110": "东丽区", + "120111": "西青区", + "120112": "津南区", + "120113": "北辰区", + "120114": "武清区", + "120115": "宝坻区", + "120116": "滨海新区", + "120117": "宁河区", + "120118": "静海区", + "120119": "蓟州区", + "130102": "长安区", + "130104": "桥西区", + "130105": "新华区", + "130107": "井陉矿区", + "130108": "裕华区", + "130109": "藁城区", + "130110": "鹿泉区", + "130111": "栾城区", + "130121": "井陉县", + "130123": "正定县", + "130125": "行唐县", + "130126": "灵寿县", + "130127": "高邑县", + "130128": "深泽县", + "130129": "赞皇县", + "130130": "无极县", + "130131": "平山县", + "130132": "元氏县", + "130133": "赵县", + "130183": "晋州市", + "130184": "新乐市", + "130202": "路南区", + "130203": "路北区", + "130204": "古冶区", + "130205": "开平区", + "130207": "丰南区", + "130208": "丰润区", + "130209": "曹妃甸区", + "130223": "滦县", + "130224": "滦南县", + "130225": "乐亭县", + "130227": "迁西县", + "130229": "玉田县", + "130281": "遵化市", + "130283": "迁安市", + "130302": "海港区", + "130303": "山海关区", + "130304": "北戴河区", + "130306": "抚宁区", + "130321": "青龙满族自治县", + "130322": "昌黎县", + "130324": "卢龙县", + "130402": "邯山区", + "130403": "丛台区", + "130404": "复兴区", + "130406": "峰峰矿区", + "130421": "邯郸县", + "130423": "临漳县", + "130424": "成安县", + "130425": "大名县", + "130426": "涉县", + "130427": "磁县", + "130428": "肥乡县", + "130429": "永年县", + "130430": "邱县", + "130431": "鸡泽县", + "130432": "广平县", + "130433": "馆陶县", + "130434": "魏县", + "130435": "曲周县", + "130481": "武安市", + "130502": "桥东区", + "130503": "桥西区", + "130521": "邢台县", + "130522": "临城县", + "130523": "内丘县", + "130524": "柏乡县", + "130525": "隆尧县", + "130526": "任县", + "130527": "南和县", + "130528": "宁晋县", + "130529": "巨鹿县", + "130530": "新河县", + "130531": "广宗县", + "130532": "平乡县", + "130533": "威县", + "130534": "清河县", + "130535": "临西县", + "130581": "南宫市", + "130582": "沙河市", + "130602": "竞秀区", + "130606": "莲池区", + "130607": "满城区", + "130608": "清苑区", + "130609": "徐水区", + "130623": "涞水县", + "130624": "阜平县", + "130626": "定兴县", + "130627": "唐县", + "130628": "高阳县", + "130629": "容城县", + "130630": "涞源县", + "130631": "望都县", + "130632": "安新县", + "130633": "易县", + "130634": "曲阳县", + "130635": "蠡县", + "130636": "顺平县", + "130637": "博野县", + "130638": "雄县", + "130681": "涿州市", + "130683": "安国市", + "130684": "高碑店市", + "130702": "桥东区", + "130703": "桥西区", + "130705": "宣化区", + "130706": "下花园区", + "130708": "万全区", + "130709": "崇礼区", + "130722": "张北县", + "130723": "康保县", + "130724": "沽源县", + "130725": "尚义县", + "130726": "蔚县", + "130727": "阳原县", + "130728": "怀安县", + "130730": "怀来县", + "130731": "涿鹿县", + "130732": "赤城县", + "130802": "双桥区", + "130803": "双滦区", + "130804": "鹰手营子矿区", + "130821": "承德县", + "130822": "兴隆县", + "130823": "平泉县", + "130824": "滦平县", + "130825": "隆化县", + "130826": "丰宁满族自治县", + "130827": "宽城满族自治县", + "130828": "围场满族蒙古族自治县", + "130902": "新华区", + "130903": "运河区", + "130921": "沧县", + "130922": "青县", + "130923": "东光县", + "130924": "海兴县", + "130925": "盐山县", + "130926": "肃宁县", + "130927": "南皮县", + "130928": "吴桥县", + "130929": "献县", + "130930": "孟村回族自治县", + "130981": "泊头市", + "130982": "任丘市", + "130983": "黄骅市", + "130984": "河间市", + "131002": "安次区", + "131003": "广阳区", + "131022": "固安县", + "131023": "永清县", + "131024": "香河县", + "131025": "大城县", + "131026": "文安县", + "131028": "大厂回族自治县", + "131081": "霸州市", + "131082": "三河市", + "131102": "桃城区", + "131103": "冀州区", + "131121": "枣强县", + "131122": "武邑县", + "131123": "武强县", + "131124": "饶阳县", + "131125": "安平县", + "131126": "故城县", + "131127": "景县", + "131128": "阜城县", + "131182": "深州市", + "139001": "定州市", + "139002": "辛集市", + "140105": "小店区", + "140106": "迎泽区", + "140107": "杏花岭区", + "140108": "尖草坪区", + "140109": "万柏林区", + "140110": "晋源区", + "140121": "清徐县", + "140122": "阳曲县", + "140123": "娄烦县", + "140181": "古交市", + "140202": "城区", + "140203": "矿区", + "140211": "南郊区", + "140212": "新荣区", + "140221": "阳高县", + "140222": "天镇县", + "140223": "广灵县", + "140224": "灵丘县", + "140225": "浑源县", + "140226": "左云县", + "140227": "大同县", + "140302": "城区", + "140303": "矿区", + "140311": "郊区", + "140321": "平定县", + "140322": "盂县", + "140402": "城区", + "140411": "郊区", + "140421": "长治县", + "140423": "襄垣县", + "140424": "屯留县", + "140425": "平顺县", + "140426": "黎城县", + "140427": "壶关县", + "140428": "长子县", + "140429": "武乡县", + "140430": "沁县", + "140431": "沁源县", + "140481": "潞城市", + "140502": "城区", + "140521": "沁水县", + "140522": "阳城县", + "140524": "陵川县", + "140525": "泽州县", + "140581": "高平市", + "140602": "朔城区", + "140603": "平鲁区", + "140621": "山阴县", + "140622": "应县", + "140623": "右玉县", + "140624": "怀仁县", + "140702": "榆次区", + "140721": "榆社县", + "140722": "左权县", + "140723": "和顺县", + "140724": "昔阳县", + "140725": "寿阳县", + "140726": "太谷县", + "140727": "祁县", + "140728": "平遥县", + "140729": "灵石县", + "140781": "介休市", + "140802": "盐湖区", + "140821": "临猗县", + "140822": "万荣县", + "140823": "闻喜县", + "140824": "稷山县", + "140825": "新绛县", + "140826": "绛县", + "140827": "垣曲县", + "140828": "夏县", + "140829": "平陆县", + "140830": "芮城县", + "140881": "永济市", + "140882": "河津市", + "140902": "忻府区", + "140921": "定襄县", + "140922": "五台县", + "140923": "代县", + "140924": "繁峙县", + "140925": "宁武县", + "140926": "静乐县", + "140927": "神池县", + "140928": "五寨县", + "140929": "岢岚县", + "140930": "河曲县", + "140931": "保德县", + "140932": "偏关县", + "140981": "原平市", + "141002": "尧都区", + "141021": "曲沃县", + "141022": "翼城县", + "141023": "襄汾县", + "141024": "洪洞县", + "141025": "古县", + "141026": "安泽县", + "141027": "浮山县", + "141028": "吉县", + "141029": "乡宁县", + "141030": "大宁县", + "141031": "隰县", + "141032": "永和县", + "141033": "蒲县", + "141034": "汾西县", + "141081": "侯马市", + "141082": "霍州市", + "141102": "离石区", + "141121": "文水县", + "141122": "交城县", + "141123": "兴县", + "141124": "临县", + "141125": "柳林县", + "141126": "石楼县", + "141127": "岚县", + "141128": "方山县", + "141129": "中阳县", + "141130": "交口县", + "141181": "孝义市", + "141182": "汾阳市", + "150102": "新城区", + "150103": "回民区", + "150104": "玉泉区", + "150105": "赛罕区", + "150121": "土默特左旗", + "150122": "托克托县", + "150123": "和林格尔县", + "150124": "清水河县", + "150125": "武川县", + "150202": "东河区", + "150203": "昆都仑区", + "150204": "青山区", + "150205": "石拐区", + "150206": "白云鄂博矿区", + "150207": "九原区", + "150221": "土默特右旗", + "150222": "固阳县", + "150223": "达尔罕茂明安联合旗", + "150302": "海勃湾区", + "150303": "海南区", + "150304": "乌达区", + "150402": "红山区", + "150403": "元宝山区", + "150404": "松山区", + "150421": "阿鲁科尔沁旗", + "150422": "巴林左旗", + "150423": "巴林右旗", + "150424": "林西县", + "150425": "克什克腾旗", + "150426": "翁牛特旗", + "150428": "喀喇沁旗", + "150429": "宁城县", + "150430": "敖汉旗", + "150502": "科尔沁区", + "150521": "科尔沁左翼中旗", + "150522": "科尔沁左翼后旗", + "150523": "开鲁县", + "150524": "库伦旗", + "150525": "奈曼旗", + "150526": "扎鲁特旗", + "150581": "霍林郭勒市", + "150602": "东胜区", + "150603": "康巴什区", + "150621": "达拉特旗", + "150622": "准格尔旗", + "150623": "鄂托克前旗", + "150624": "鄂托克旗", + "150625": "杭锦旗", + "150626": "乌审旗", + "150627": "伊金霍洛旗", + "150702": "海拉尔区", + "150703": "扎赉诺尔区", + "150721": "阿荣旗", + "150722": "莫力达瓦达斡尔族自治旗", + "150723": "鄂伦春自治旗", + "150724": "鄂温克族自治旗", + "150725": "陈巴尔虎旗", + "150726": "新巴尔虎左旗", + "150727": "新巴尔虎右旗", + "150781": "满洲里市", + "150782": "牙克石市", + "150783": "扎兰屯市", + "150784": "额尔古纳市", + "150785": "根河市", + "150802": "临河区", + "150821": "五原县", + "150822": "磴口县", + "150823": "乌拉特前旗", + "150824": "乌拉特中旗", + "150825": "乌拉特后旗", + "150826": "杭锦后旗", + "150902": "集宁区", + "150921": "卓资县", + "150922": "化德县", + "150923": "商都县", + "150924": "兴和县", + "150925": "凉城县", + "150926": "察哈尔右翼前旗", + "150927": "察哈尔右翼中旗", + "150928": "察哈尔右翼后旗", + "150929": "四子王旗", + "150981": "丰镇市", + "152201": "乌兰浩特市", + "152202": "阿尔山市", + "152221": "科尔沁右翼前旗", + "152222": "科尔沁右翼中旗", + "152223": "扎赉特旗", + "152224": "突泉县", + "152501": "二连浩特市", + "152502": "锡林浩特市", + "152522": "阿巴嘎旗", + "152523": "苏尼特左旗", + "152524": "苏尼特右旗", + "152525": "东乌珠穆沁旗", + "152526": "西乌珠穆沁旗", + "152527": "太仆寺旗", + "152528": "镶黄旗", + "152529": "正镶白旗", + "152530": "正蓝旗", + "152531": "多伦县", + "152921": "阿拉善左旗", + "152922": "阿拉善右旗", + "152923": "额济纳旗", + "210102": "和平区", + "210103": "沈河区", + "210104": "大东区", + "210105": "皇姑区", + "210106": "铁西区", + "210111": "苏家屯区", + "210112": "浑南区", + "210113": "沈北新区", + "210114": "于洪区", + "210115": "辽中区", + "210123": "康平县", + "210124": "法库县", + "210181": "新民市", + "210202": "中山区", + "210203": "西岗区", + "210204": "沙河口区", + "210211": "甘井子区", + "210212": "旅顺口区", + "210213": "金州区", + "210214": "普兰店区", + "210224": "长海县", + "210281": "瓦房店市", + "210283": "庄河市", + "210302": "铁东区", + "210303": "铁西区", + "210304": "立山区", + "210311": "千山区", + "210321": "台安县", + "210323": "岫岩满族自治县", + "210381": "海城市", + "210402": "新抚区", + "210403": "东洲区", + "210404": "望花区", + "210411": "顺城区", + "210421": "抚顺县", + "210422": "新宾满族自治县", + "210423": "清原满族自治县", + "210502": "平山区", + "210503": "溪湖区", + "210504": "明山区", + "210505": "南芬区", + "210521": "本溪满族自治县", + "210522": "桓仁满族自治县", + "210602": "元宝区", + "210603": "振兴区", + "210604": "振安区", + "210624": "宽甸满族自治县", + "210681": "东港市", + "210682": "凤城市", + "210702": "古塔区", + "210703": "凌河区", + "210711": "太和区", + "210726": "黑山县", + "210727": "义县", + "210781": "凌海市", + "210782": "北镇市", + "210802": "站前区", + "210803": "西市区", + "210804": "鲅鱼圈区", + "210811": "老边区", + "210881": "盖州市", + "210882": "大石桥市", + "210902": "海州区", + "210903": "新邱区", + "210904": "太平区", + "210905": "清河门区", + "210911": "细河区", + "210921": "阜新蒙古族自治县", + "210922": "彰武县", + "211002": "白塔区", + "211003": "文圣区", + "211004": "宏伟区", + "211005": "弓长岭区", + "211011": "太子河区", + "211021": "辽阳县", + "211081": "灯塔市", + "211102": "双台子区", + "211103": "兴隆台区", + "211104": "大洼区", + "211122": "盘山县", + "211202": "银州区", + "211204": "清河区", + "211221": "铁岭县", + "211223": "西丰县", + "211224": "昌图县", + "211281": "调兵山市", + "211282": "开原市", + "211302": "双塔区", + "211303": "龙城区", + "211321": "朝阳县", + "211322": "建平县", + "211324": "喀喇沁左翼蒙古族自治县", + "211381": "北票市", + "211382": "凌源市", + "211402": "连山区", + "211403": "龙港区", + "211404": "南票区", + "211421": "绥中县", + "211422": "建昌县", + "211481": "兴城市", + "220102": "南关区", + "220103": "宽城区", + "220104": "朝阳区", + "220105": "二道区", + "220106": "绿园区", + "220112": "双阳区", + "220113": "九台区", + "220122": "农安县", + "220182": "榆树市", + "220183": "德惠市", + "220202": "昌邑区", + "220203": "龙潭区", + "220204": "船营区", + "220211": "丰满区", + "220221": "永吉县", + "220281": "蛟河市", + "220282": "桦甸市", + "220283": "舒兰市", + "220284": "磐石市", + "220302": "铁西区", + "220303": "铁东区", + "220322": "梨树县", + "220323": "伊通满族自治县", + "220381": "公主岭市", + "220382": "双辽市", + "220402": "龙山区", + "220403": "西安区", + "220421": "东丰县", + "220422": "东辽县", + "220502": "东昌区", + "220503": "二道江区", + "220521": "通化县", + "220523": "辉南县", + "220524": "柳河县", + "220581": "梅河口市", + "220582": "集安市", + "220602": "浑江区", + "220605": "江源区", + "220621": "抚松县", + "220622": "靖宇县", + "220623": "长白朝鲜族自治县", + "220681": "临江市", + "220702": "宁江区", + "220721": "前郭尔罗斯蒙古族自治县", + "220722": "长岭县", + "220723": "乾安县", + "220781": "扶余市", + "220802": "洮北区", + "220821": "镇赉县", + "220822": "通榆县", + "220881": "洮南市", + "220882": "大安市", + "222401": "延吉市", + "222402": "图们市", + "222403": "敦化市", + "222404": "珲春市", + "222405": "龙井市", + "222406": "和龙市", + "222424": "汪清县", + "222426": "安图县", + "230102": "道里区", + "230103": "南岗区", + "230104": "道外区", + "230108": "平房区", + "230109": "松北区", + "230110": "香坊区", + "230111": "呼兰区", + "230112": "阿城区", + "230113": "双城区", + "230123": "依兰县", + "230124": "方正县", + "230125": "宾县", + "230126": "巴彦县", + "230127": "木兰县", + "230128": "通河县", + "230129": "延寿县", + "230183": "尚志市", + "230184": "五常市", + "230202": "龙沙区", + "230203": "建华区", + "230204": "铁锋区", + "230205": "昂昂溪区", + "230206": "富拉尔基区", + "230207": "碾子山区", + "230208": "梅里斯达斡尔族区", + "230221": "龙江县", + "230223": "依安县", + "230224": "泰来县", + "230225": "甘南县", + "230227": "富裕县", + "230229": "克山县", + "230230": "克东县", + "230231": "拜泉县", + "230281": "讷河市", + "230302": "鸡冠区", + "230303": "恒山区", + "230304": "滴道区", + "230305": "梨树区", + "230306": "城子河区", + "230307": "麻山区", + "230321": "鸡东县", + "230381": "虎林市", + "230382": "密山市", + "230402": "向阳区", + "230403": "工农区", + "230404": "南山区", + "230405": "兴安区", + "230406": "东山区", + "230407": "兴山区", + "230421": "萝北县", + "230422": "绥滨县", + "230502": "尖山区", + "230503": "岭东区", + "230505": "四方台区", + "230506": "宝山区", + "230521": "集贤县", + "230522": "友谊县", + "230523": "宝清县", + "230524": "饶河县", + "230602": "萨尔图区", + "230603": "龙凤区", + "230604": "让胡路区", + "230605": "红岗区", + "230606": "大同区", + "230621": "肇州县", + "230622": "肇源县", + "230623": "林甸县", + "230624": "杜尔伯特蒙古族自治县", + "230702": "伊春区", + "230703": "南岔区", + "230704": "友好区", + "230705": "西林区", + "230706": "翠峦区", + "230707": "新青区", + "230708": "美溪区", + "230709": "金山屯区", + "230710": "五营区", + "230711": "乌马河区", + "230712": "汤旺河区", + "230713": "带岭区", + "230714": "乌伊岭区", + "230715": "红星区", + "230716": "上甘岭区", + "230722": "嘉荫县", + "230781": "铁力市", + "230803": "向阳区", + "230804": "前进区", + "230805": "东风区", + "230811": "郊区", + "230822": "桦南县", + "230826": "桦川县", + "230828": "汤原县", + "230881": "同江市", + "230882": "富锦市", + "230883": "抚远市", + "230902": "新兴区", + "230903": "桃山区", + "230904": "茄子河区", + "230921": "勃利县", + "231002": "东安区", + "231003": "阳明区", + "231004": "爱民区", + "231005": "西安区", + "231025": "林口县", + "231081": "绥芬河市", + "231083": "海林市", + "231084": "宁安市", + "231085": "穆棱市", + "231086": "东宁市", + "231102": "爱辉区", + "231121": "嫩江县", + "231123": "逊克县", + "231124": "孙吴县", + "231181": "北安市", + "231182": "五大连池市", + "231202": "北林区", + "231221": "望奎县", + "231222": "兰西县", + "231223": "青冈县", + "231224": "庆安县", + "231225": "明水县", + "231226": "绥棱县", + "231281": "安达市", + "231282": "肇东市", + "231283": "海伦市", + "232721": "呼玛县", + "232722": "塔河县", + "232723": "漠河县", + "310101": "黄浦区", + "310104": "徐汇区", + "310105": "长宁区", + "310106": "静安区", + "310107": "普陀区", + "310109": "虹口区", + "310110": "杨浦区", + "310112": "闵行区", + "310113": "宝山区", + "310114": "嘉定区", + "310115": "浦东新区", + "310116": "金山区", + "310117": "松江区", + "310118": "青浦区", + "310120": "奉贤区", + "310151": "崇明区", + "320102": "玄武区", + "320104": "秦淮区", + "320105": "建邺区", + "320106": "鼓楼区", + "320111": "浦口区", + "320113": "栖霞区", + "320114": "雨花台区", + "320115": "江宁区", + "320116": "六合区", + "320117": "溧水区", + "320118": "高淳区", + "320205": "锡山区", + "320206": "惠山区", + "320211": "滨湖区", + "320213": "梁溪区", + "320214": "新吴区", + "320281": "江阴市", + "320282": "宜兴市", + "320302": "鼓楼区", + "320303": "云龙区", + "320305": "贾汪区", + "320311": "泉山区", + "320312": "铜山区", + "320321": "丰县", + "320322": "沛县", + "320324": "睢宁县", + "320381": "新沂市", + "320382": "邳州市", + "320402": "天宁区", + "320404": "钟楼区", + "320411": "新北区", + "320412": "武进区", + "320413": "金坛区", + "320481": "溧阳市", + "320505": "虎丘区", + "320506": "吴中区", + "320507": "相城区", + "320508": "姑苏区", + "320509": "吴江区", + "320581": "常熟市", + "320582": "张家港市", + "320583": "昆山市", + "320585": "太仓市", + "320602": "崇川区", + "320611": "港闸区", + "320612": "通州区", + "320621": "海安县", + "320623": "如东县", + "320681": "启东市", + "320682": "如皋市", + "320684": "海门市", + "320703": "连云区", + "320706": "海州区", + "320707": "赣榆区", + "320722": "东海县", + "320723": "灌云县", + "320724": "灌南县", + "320803": "淮安区", + "320804": "淮阴区", + "320812": "清江浦区", + "320813": "洪泽区", + "320826": "涟水县", + "320830": "盱眙县", + "320831": "金湖县", + "320902": "亭湖区", + "320903": "盐都区", + "320904": "大丰区", + "320921": "响水县", + "320922": "滨海县", + "320923": "阜宁县", + "320924": "射阳县", + "320925": "建湖县", + "320981": "东台市", + "321002": "广陵区", + "321003": "邗江区", + "321012": "江都区", + "321023": "宝应县", + "321081": "仪征市", + "321084": "高邮市", + "321102": "京口区", + "321111": "润州区", + "321112": "丹徒区", + "321181": "丹阳市", + "321182": "扬中市", + "321183": "句容市", + "321202": "海陵区", + "321203": "高港区", + "321204": "姜堰区", + "321281": "兴化市", + "321282": "靖江市", + "321283": "泰兴市", + "321302": "宿城区", + "321311": "宿豫区", + "321322": "沭阳县", + "321323": "泗阳县", + "321324": "泗洪县", + "330102": "上城区", + "330103": "下城区", + "330104": "江干区", + "330105": "拱墅区", + "330106": "西湖区", + "330108": "滨江区", + "330109": "萧山区", + "330110": "余杭区", + "330111": "富阳区", + "330122": "桐庐县", + "330127": "淳安县", + "330182": "建德市", + "330185": "临安市", + "330203": "海曙区", + "330204": "江东区", + "330205": "江北区", + "330206": "北仑区", + "330211": "镇海区", + "330212": "鄞州区", + "330225": "象山县", + "330226": "宁海县", + "330281": "余姚市", + "330282": "慈溪市", + "330283": "奉化市", + "330302": "鹿城区", + "330303": "龙湾区", + "330304": "瓯海区", + "330305": "洞头区", + "330324": "永嘉县", + "330326": "平阳县", + "330327": "苍南县", + "330328": "文成县", + "330329": "泰顺县", + "330381": "瑞安市", + "330382": "乐清市", + "330402": "南湖区", + "330411": "秀洲区", + "330421": "嘉善县", + "330424": "海盐县", + "330481": "海宁市", + "330482": "平湖市", + "330483": "桐乡市", + "330502": "吴兴区", + "330503": "南浔区", + "330521": "德清县", + "330522": "长兴县", + "330523": "安吉县", + "330602": "越城区", + "330603": "柯桥区", + "330604": "上虞区", + "330624": "新昌县", + "330681": "诸暨市", + "330683": "嵊州市", + "330702": "婺城区", + "330703": "金东区", + "330723": "武义县", + "330726": "浦江县", + "330727": "磐安县", + "330781": "兰溪市", + "330782": "义乌市", + "330783": "东阳市", + "330784": "永康市", + "330802": "柯城区", + "330803": "衢江区", + "330822": "常山县", + "330824": "开化县", + "330825": "龙游县", + "330881": "江山市", + "330902": "定海区", + "330903": "普陀区", + "330921": "岱山县", + "330922": "嵊泗县", + "331002": "椒江区", + "331003": "黄岩区", + "331004": "路桥区", + "331021": "玉环县", + "331022": "三门县", + "331023": "天台县", + "331024": "仙居县", + "331081": "温岭市", + "331082": "临海市", + "331102": "莲都区", + "331121": "青田县", + "331122": "缙云县", + "331123": "遂昌县", + "331124": "松阳县", + "331125": "云和县", + "331126": "庆元县", + "331127": "景宁畲族自治县", + "331181": "龙泉市", + "340102": "瑶海区", + "340103": "庐阳区", + "340104": "蜀山区", + "340111": "包河区", + "340121": "长丰县", + "340122": "肥东县", + "340123": "肥西县", + "340124": "庐江县", + "340181": "巢湖市", + "340202": "镜湖区", + "340203": "弋江区", + "340207": "鸠江区", + "340208": "三山区", + "340221": "芜湖县", + "340222": "繁昌县", + "340223": "南陵县", + "340225": "无为县", + "340302": "龙子湖区", + "340303": "蚌山区", + "340304": "禹会区", + "340311": "淮上区", + "340321": "怀远县", + "340322": "五河县", + "340323": "固镇县", + "340402": "大通区", + "340403": "田家庵区", + "340404": "谢家集区", + "340405": "八公山区", + "340406": "潘集区", + "340421": "凤台县", + "340422": "寿县", + "340503": "花山区", + "340504": "雨山区", + "340506": "博望区", + "340521": "当涂县", + "340522": "含山县", + "340523": "和县", + "340602": "杜集区", + "340603": "相山区", + "340604": "烈山区", + "340621": "濉溪县", + "340705": "铜官区", + "340706": "义安区", + "340711": "郊区", + "340722": "枞阳县", + "340802": "迎江区", + "340803": "大观区", + "340811": "宜秀区", + "340822": "怀宁县", + "340824": "潜山县", + "340825": "太湖县", + "340826": "宿松县", + "340827": "望江县", + "340828": "岳西县", + "340881": "桐城市", + "341002": "屯溪区", + "341003": "黄山区", + "341004": "徽州区", + "341021": "歙县", + "341022": "休宁县", + "341023": "黟县", + "341024": "祁门县", + "341102": "琅琊区", + "341103": "南谯区", + "341122": "来安县", + "341124": "全椒县", + "341125": "定远县", + "341126": "凤阳县", + "341181": "天长市", + "341182": "明光市", + "341202": "颍州区", + "341203": "颍东区", + "341204": "颍泉区", + "341221": "临泉县", + "341222": "太和县", + "341225": "阜南县", + "341226": "颍上县", + "341282": "界首市", + "341302": "埇桥区", + "341321": "砀山县", + "341322": "萧县", + "341323": "灵璧县", + "341324": "泗县", + "341502": "金安区", + "341503": "裕安区", + "341504": "叶集区", + "341522": "霍邱县", + "341523": "舒城县", + "341524": "金寨县", + "341525": "霍山县", + "341602": "谯城区", + "341621": "涡阳县", + "341622": "蒙城县", + "341623": "利辛县", + "341702": "贵池区", + "341721": "东至县", + "341722": "石台县", + "341723": "青阳县", + "341802": "宣州区", + "341821": "郎溪县", + "341822": "广德县", + "341823": "泾县", + "341824": "绩溪县", + "341825": "旌德县", + "341881": "宁国市", + "350102": "鼓楼区", + "350103": "台江区", + "350104": "仓山区", + "350105": "马尾区", + "350111": "晋安区", + "350121": "闽侯县", + "350122": "连江县", + "350123": "罗源县", + "350124": "闽清县", + "350125": "永泰县", + "350128": "平潭县", + "350181": "福清市", + "350182": "长乐市", + "350203": "思明区", + "350205": "海沧区", + "350206": "湖里区", + "350211": "集美区", + "350212": "同安区", + "350213": "翔安区", + "350302": "城厢区", + "350303": "涵江区", + "350304": "荔城区", + "350305": "秀屿区", + "350322": "仙游县", + "350402": "梅列区", + "350403": "三元区", + "350421": "明溪县", + "350423": "清流县", + "350424": "宁化县", + "350425": "大田县", + "350426": "尤溪县", + "350427": "沙县", + "350428": "将乐县", + "350429": "泰宁县", + "350430": "建宁县", + "350481": "永安市", + "350502": "鲤城区", + "350503": "丰泽区", + "350504": "洛江区", + "350505": "泉港区", + "350521": "惠安县", + "350524": "安溪县", + "350525": "永春县", + "350526": "德化县", + "350527": "金门县", + "350581": "石狮市", + "350582": "晋江市", + "350583": "南安市", + "350602": "芗城区", + "350603": "龙文区", + "350622": "云霄县", + "350623": "漳浦县", + "350624": "诏安县", + "350625": "长泰县", + "350626": "东山县", + "350627": "南靖县", + "350628": "平和县", + "350629": "华安县", + "350681": "龙海市", + "350702": "延平区", + "350703": "建阳区", + "350721": "顺昌县", + "350722": "浦城县", + "350723": "光泽县", + "350724": "松溪县", + "350725": "政和县", + "350781": "邵武市", + "350782": "武夷山市", + "350783": "建瓯市", + "350802": "新罗区", + "350803": "永定区", + "350821": "长汀县", + "350823": "上杭县", + "350824": "武平县", + "350825": "连城县", + "350881": "漳平市", + "350902": "蕉城区", + "350921": "霞浦县", + "350922": "古田县", + "350923": "屏南县", + "350924": "寿宁县", + "350925": "周宁县", + "350926": "柘荣县", + "350981": "福安市", + "350982": "福鼎市", + "360102": "东湖区", + "360103": "西湖区", + "360104": "青云谱区", + "360105": "湾里区", + "360111": "青山湖区", + "360112": "新建区", + "360121": "南昌县", + "360123": "安义县", + "360124": "进贤县", + "360202": "昌江区", + "360203": "珠山区", + "360222": "浮梁县", + "360281": "乐平市", + "360302": "安源区", + "360313": "湘东区", + "360321": "莲花县", + "360322": "上栗县", + "360323": "芦溪县", + "360402": "濂溪区", + "360403": "浔阳区", + "360421": "九江县", + "360423": "武宁县", + "360424": "修水县", + "360425": "永修县", + "360426": "德安县", + "360428": "都昌县", + "360429": "湖口县", + "360430": "彭泽县", + "360481": "瑞昌市", + "360482": "共青城市", + "360483": "庐山市", + "360502": "渝水区", + "360521": "分宜县", + "360602": "月湖区", + "360622": "余江县", + "360681": "贵溪市", + "360702": "章贡区", + "360703": "南康区", + "360721": "赣县", + "360722": "信丰县", + "360723": "大余县", + "360724": "上犹县", + "360725": "崇义县", + "360726": "安远县", + "360727": "龙南县", + "360728": "定南县", + "360729": "全南县", + "360730": "宁都县", + "360731": "于都县", + "360732": "兴国县", + "360733": "会昌县", + "360734": "寻乌县", + "360735": "石城县", + "360781": "瑞金市", + "360802": "吉州区", + "360803": "青原区", + "360821": "吉安县", + "360822": "吉水县", + "360823": "峡江县", + "360824": "新干县", + "360825": "永丰县", + "360826": "泰和县", + "360827": "遂川县", + "360828": "万安县", + "360829": "安福县", + "360830": "永新县", + "360881": "井冈山市", + "360902": "袁州区", + "360921": "奉新县", + "360922": "万载县", + "360923": "上高县", + "360924": "宜丰县", + "360925": "靖安县", + "360926": "铜鼓县", + "360981": "丰城市", + "360982": "樟树市", + "360983": "高安市", + "361002": "临川区", + "361021": "南城县", + "361022": "黎川县", + "361023": "南丰县", + "361024": "崇仁县", + "361025": "乐安县", + "361026": "宜黄县", + "361027": "金溪县", + "361028": "资溪县", + "361029": "东乡县", + "361030": "广昌县", + "361102": "信州区", + "361103": "广丰区", + "361121": "上饶县", + "361123": "玉山县", + "361124": "铅山县", + "361125": "横峰县", + "361126": "弋阳县", + "361127": "余干县", + "361128": "鄱阳县", + "361129": "万年县", + "361130": "婺源县", + "361181": "德兴市", + "370102": "历下区", + "370103": "市中区", + "370104": "槐荫区", + "370105": "天桥区", + "370112": "历城区", + "370113": "长清区", + "370124": "平阴县", + "370125": "济阳县", + "370126": "商河县", + "370181": "章丘市", + "370202": "市南区", + "370203": "市北区", + "370211": "黄岛区", + "370212": "崂山区", + "370213": "李沧区", + "370214": "城阳区", + "370281": "胶州市", + "370282": "即墨市", + "370283": "平度市", + "370285": "莱西市", + "370302": "淄川区", + "370303": "张店区", + "370304": "博山区", + "370305": "临淄区", + "370306": "周村区", + "370321": "桓台县", + "370322": "高青县", + "370323": "沂源县", + "370402": "市中区", + "370403": "薛城区", + "370404": "峄城区", + "370405": "台儿庄区", + "370406": "山亭区", + "370481": "滕州市", + "370502": "东营区", + "370503": "河口区", + "370505": "垦利区", + "370522": "利津县", + "370523": "广饶县", + "370602": "芝罘区", + "370611": "福山区", + "370612": "牟平区", + "370613": "莱山区", + "370634": "长岛县", + "370681": "龙口市", + "370682": "莱阳市", + "370683": "莱州市", + "370684": "蓬莱市", + "370685": "招远市", + "370686": "栖霞市", + "370687": "海阳市", + "370702": "潍城区", + "370703": "寒亭区", + "370704": "坊子区", + "370705": "奎文区", + "370724": "临朐县", + "370725": "昌乐县", + "370781": "青州市", + "370782": "诸城市", + "370783": "寿光市", + "370784": "安丘市", + "370785": "高密市", + "370786": "昌邑市", + "370811": "任城区", + "370812": "兖州区", + "370826": "微山县", + "370827": "鱼台县", + "370828": "金乡县", + "370829": "嘉祥县", + "370830": "汶上县", + "370831": "泗水县", + "370832": "梁山县", + "370881": "曲阜市", + "370883": "邹城市", + "370902": "泰山区", + "370911": "岱岳区", + "370921": "宁阳县", + "370923": "东平县", + "370982": "新泰市", + "370983": "肥城市", + "371002": "环翠区", + "371003": "文登区", + "371082": "荣成市", + "371083": "乳山市", + "371102": "东港区", + "371103": "岚山区", + "371121": "五莲县", + "371122": "莒县", + "371202": "莱城区", + "371203": "钢城区", + "371302": "兰山区", + "371311": "罗庄区", + "371312": "河东区", + "371321": "沂南县", + "371322": "郯城县", + "371323": "沂水县", + "371324": "兰陵县", + "371325": "费县", + "371326": "平邑县", + "371327": "莒南县", + "371328": "蒙阴县", + "371329": "临沭县", + "371402": "德城区", + "371403": "陵城区", + "371422": "宁津县", + "371423": "庆云县", + "371424": "临邑县", + "371425": "齐河县", + "371426": "平原县", + "371427": "夏津县", + "371428": "武城县", + "371481": "乐陵市", + "371482": "禹城市", + "371502": "东昌府区", + "371521": "阳谷县", + "371522": "莘县", + "371523": "茌平县", + "371524": "东阿县", + "371525": "冠县", + "371526": "高唐县", + "371581": "临清市", + "371602": "滨城区", + "371603": "沾化区", + "371621": "惠民县", + "371622": "阳信县", + "371623": "无棣县", + "371625": "博兴县", + "371626": "邹平县", + "371702": "牡丹区", + "371703": "定陶区", + "371721": "曹县", + "371722": "单县", + "371723": "成武县", + "371724": "巨野县", + "371725": "郓城县", + "371726": "鄄城县", + "371728": "东明县", + "410102": "中原区", + "410103": "二七区", + "410104": "管城回族区", + "410105": "金水区", + "410106": "上街区", + "410108": "惠济区", + "410122": "中牟县", + "410181": "巩义市", + "410182": "荥阳市", + "410183": "新密市", + "410184": "新郑市", + "410185": "登封市", + "410202": "龙亭区", + "410203": "顺河回族区", + "410204": "鼓楼区", + "410205": "禹王台区", + "410211": "金明区", + "410212": "祥符区", + "410221": "杞县", + "410222": "通许县", + "410223": "尉氏县", + "410225": "兰考县", + "410302": "老城区", + "410303": "西工区", + "410304": "瀍河回族区", + "410305": "涧西区", + "410306": "吉利区", + "410311": "洛龙区", + "410322": "孟津县", + "410323": "新安县", + "410324": "栾川县", + "410325": "嵩县", + "410326": "汝阳县", + "410327": "宜阳县", + "410328": "洛宁县", + "410329": "伊川县", + "410381": "偃师市", + "410402": "新华区", + "410403": "卫东区", + "410404": "石龙区", + "410411": "湛河区", + "410421": "宝丰县", + "410422": "叶县", + "410423": "鲁山县", + "410425": "郏县", + "410481": "舞钢市", + "410482": "汝州市", + "410502": "文峰区", + "410503": "北关区", + "410505": "殷都区", + "410506": "龙安区", + "410522": "安阳县", + "410523": "汤阴县", + "410526": "滑县", + "410527": "内黄县", + "410581": "林州市", + "410602": "鹤山区", + "410603": "山城区", + "410611": "淇滨区", + "410621": "浚县", + "410622": "淇县", + "410702": "红旗区", + "410703": "卫滨区", + "410704": "凤泉区", + "410711": "牧野区", + "410721": "新乡县", + "410724": "获嘉县", + "410725": "原阳县", + "410726": "延津县", + "410727": "封丘县", + "410728": "长垣县", + "410781": "卫辉市", + "410782": "辉县市", + "410802": "解放区", + "410803": "中站区", + "410804": "马村区", + "410811": "山阳区", + "410821": "修武县", + "410822": "博爱县", + "410823": "武陟县", + "410825": "温县", + "410882": "沁阳市", + "410883": "孟州市", + "410902": "华龙区", + "410922": "清丰县", + "410923": "南乐县", + "410926": "范县", + "410927": "台前县", + "410928": "濮阳县", + "411002": "魏都区", + "411023": "许昌县", + "411024": "鄢陵县", + "411025": "襄城县", + "411081": "禹州市", + "411082": "长葛市", + "411102": "源汇区", + "411103": "郾城区", + "411104": "召陵区", + "411121": "舞阳县", + "411122": "临颍县", + "411202": "湖滨区", + "411203": "陕州区", + "411221": "渑池县", + "411224": "卢氏县", + "411281": "义马市", + "411282": "灵宝市", + "411302": "宛城区", + "411303": "卧龙区", + "411321": "南召县", + "411322": "方城县", + "411323": "西峡县", + "411324": "镇平县", + "411325": "内乡县", + "411326": "淅川县", + "411327": "社旗县", + "411328": "唐河县", + "411329": "新野县", + "411330": "桐柏县", + "411381": "邓州市", + "411402": "梁园区", + "411403": "睢阳区", + "411421": "民权县", + "411422": "睢县", + "411423": "宁陵县", + "411424": "柘城县", + "411425": "虞城县", + "411426": "夏邑县", + "411481": "永城市", + "411502": "浉河区", + "411503": "平桥区", + "411521": "罗山县", + "411522": "光山县", + "411523": "新县", + "411524": "商城县", + "411525": "固始县", + "411526": "潢川县", + "411527": "淮滨县", + "411528": "息县", + "411602": "川汇区", + "411621": "扶沟县", + "411622": "西华县", + "411623": "商水县", + "411624": "沈丘县", + "411625": "郸城县", + "411626": "淮阳县", + "411627": "太康县", + "411628": "鹿邑县", + "411681": "项城市", + "411702": "驿城区", + "411721": "西平县", + "411722": "上蔡县", + "411723": "平舆县", + "411724": "正阳县", + "411725": "确山县", + "411726": "泌阳县", + "411727": "汝南县", + "411728": "遂平县", + "411729": "新蔡县", + "419001": "济源市", + "420102": "江岸区", + "420103": "江汉区", + "420104": "硚口区", + "420105": "汉阳区", + "420106": "武昌区", + "420107": "青山区", + "420111": "洪山区", + "420112": "东西湖区", + "420113": "汉南区", + "420114": "蔡甸区", + "420115": "江夏区", + "420116": "黄陂区", + "420117": "新洲区", + "420202": "黄石港区", + "420203": "西塞山区", + "420204": "下陆区", + "420205": "铁山区", + "420222": "阳新县", + "420281": "大冶市", + "420302": "茅箭区", + "420303": "张湾区", + "420304": "郧阳区", + "420322": "郧西县", + "420323": "竹山县", + "420324": "竹溪县", + "420325": "房县", + "420381": "丹江口市", + "420502": "西陵区", + "420503": "伍家岗区", + "420504": "点军区", + "420505": "猇亭区", + "420506": "夷陵区", + "420525": "远安县", + "420526": "兴山县", + "420527": "秭归县", + "420528": "长阳土家族自治县", + "420529": "五峰土家族自治县", + "420581": "宜都市", + "420582": "当阳市", + "420583": "枝江市", + "420602": "襄城区", + "420606": "樊城区", + "420607": "襄州区", + "420624": "南漳县", + "420625": "谷城县", + "420626": "保康县", + "420682": "老河口市", + "420683": "枣阳市", + "420684": "宜城市", + "420702": "梁子湖区", + "420703": "华容区", + "420704": "鄂城区", + "420802": "东宝区", + "420804": "掇刀区", + "420821": "京山县", + "420822": "沙洋县", + "420881": "钟祥市", + "420902": "孝南区", + "420921": "孝昌县", + "420922": "大悟县", + "420923": "云梦县", + "420981": "应城市", + "420982": "安陆市", + "420984": "汉川市", + "421002": "沙市区", + "421003": "荆州区", + "421022": "公安县", + "421023": "监利县", + "421024": "江陵县", + "421081": "石首市", + "421083": "洪湖市", + "421087": "松滋市", + "421102": "黄州区", + "421121": "团风县", + "421122": "红安县", + "421123": "罗田县", + "421124": "英山县", + "421125": "浠水县", + "421126": "蕲春县", + "421127": "黄梅县", + "421181": "麻城市", + "421182": "武穴市", + "421202": "咸安区", + "421221": "嘉鱼县", + "421222": "通城县", + "421223": "崇阳县", + "421224": "通山县", + "421281": "赤壁市", + "421303": "曾都区", + "421321": "随县", + "421381": "广水市", + "422801": "恩施市", + "422802": "利川市", + "422822": "建始县", + "422823": "巴东县", + "422825": "宣恩县", + "422826": "咸丰县", + "422827": "来凤县", + "422828": "鹤峰县", + "429004": "仙桃市", + "429005": "潜江市", + "429006": "天门市", + "429021": "神农架林区", + "430102": "芙蓉区", + "430103": "天心区", + "430104": "岳麓区", + "430105": "开福区", + "430111": "雨花区", + "430112": "望城区", + "430121": "长沙县", + "430124": "宁乡县", + "430181": "浏阳市", + "430202": "荷塘区", + "430203": "芦淞区", + "430204": "石峰区", + "430211": "天元区", + "430221": "株洲县", + "430223": "攸县", + "430224": "茶陵县", + "430225": "炎陵县", + "430281": "醴陵市", + "430302": "雨湖区", + "430304": "岳塘区", + "430321": "湘潭县", + "430381": "湘乡市", + "430382": "韶山市", + "430405": "珠晖区", + "430406": "雁峰区", + "430407": "石鼓区", + "430408": "蒸湘区", + "430412": "南岳区", + "430421": "衡阳县", + "430422": "衡南县", + "430423": "衡山县", + "430424": "衡东县", + "430426": "祁东县", + "430481": "耒阳市", + "430482": "常宁市", + "430502": "双清区", + "430503": "大祥区", + "430511": "北塔区", + "430521": "邵东县", + "430522": "新邵县", + "430523": "邵阳县", + "430524": "隆回县", + "430525": "洞口县", + "430527": "绥宁县", + "430528": "新宁县", + "430529": "城步苗族自治县", + "430581": "武冈市", + "430602": "岳阳楼区", + "430603": "云溪区", + "430611": "君山区", + "430621": "岳阳县", + "430623": "华容县", + "430624": "湘阴县", + "430626": "平江县", + "430681": "汨罗市", + "430682": "临湘市", + "430702": "武陵区", + "430703": "鼎城区", + "430721": "安乡县", + "430722": "汉寿县", + "430723": "澧县", + "430724": "临澧县", + "430725": "桃源县", + "430726": "石门县", + "430781": "津市市", + "430802": "永定区", + "430811": "武陵源区", + "430821": "慈利县", + "430822": "桑植县", + "430902": "资阳区", + "430903": "赫山区", + "430921": "南县", + "430922": "桃江县", + "430923": "安化县", + "430981": "沅江市", + "431002": "北湖区", + "431003": "苏仙区", + "431021": "桂阳县", + "431022": "宜章县", + "431023": "永兴县", + "431024": "嘉禾县", + "431025": "临武县", + "431026": "汝城县", + "431027": "桂东县", + "431028": "安仁县", + "431081": "资兴市", + "431102": "零陵区", + "431103": "冷水滩区", + "431121": "祁阳县", + "431122": "东安县", + "431123": "双牌县", + "431124": "道县", + "431125": "江永县", + "431126": "宁远县", + "431127": "蓝山县", + "431128": "新田县", + "431129": "江华瑶族自治县", + "431202": "鹤城区", + "431221": "中方县", + "431222": "沅陵县", + "431223": "辰溪县", + "431224": "溆浦县", + "431225": "会同县", + "431226": "麻阳苗族自治县", + "431227": "新晃侗族自治县", + "431228": "芷江侗族自治县", + "431229": "靖州苗族侗族自治县", + "431230": "通道侗族自治县", + "431281": "洪江市", + "431302": "娄星区", + "431321": "双峰县", + "431322": "新化县", + "431381": "冷水江市", + "431382": "涟源市", + "433101": "吉首市", + "433122": "泸溪县", + "433123": "凤凰县", + "433124": "花垣县", + "433125": "保靖县", + "433126": "古丈县", + "433127": "永顺县", + "433130": "龙山县", + "440103": "荔湾区", + "440104": "越秀区", + "440105": "海珠区", + "440106": "天河区", + "440111": "白云区", + "440112": "黄埔区", + "440113": "番禺区", + "440114": "花都区", + "440115": "南沙区", + "440117": "从化区", + "440118": "增城区", + "440203": "武江区", + "440204": "浈江区", + "440205": "曲江区", + "440222": "始兴县", + "440224": "仁化县", + "440229": "翁源县", + "440232": "乳源瑶族自治县", + "440233": "新丰县", + "440281": "乐昌市", + "440282": "南雄市", + "440303": "罗湖区", + "440304": "福田区", + "440305": "南山区", + "440306": "宝安区", + "440307": "龙岗区", + "440308": "盐田区", + "440402": "香洲区", + "440403": "斗门区", + "440404": "金湾区", + "440507": "龙湖区", + "440511": "金平区", + "440512": "濠江区", + "440513": "潮阳区", + "440514": "潮南区", + "440515": "澄海区", + "440523": "南澳县", + "440604": "禅城区", + "440605": "南海区", + "440606": "顺德区", + "440607": "三水区", + "440608": "高明区", + "440703": "蓬江区", + "440704": "江海区", + "440705": "新会区", + "440781": "台山市", + "440783": "开平市", + "440784": "鹤山市", + "440785": "恩平市", + "440802": "赤坎区", + "440803": "霞山区", + "440804": "坡头区", + "440811": "麻章区", + "440823": "遂溪县", + "440825": "徐闻县", + "440881": "廉江市", + "440882": "雷州市", + "440883": "吴川市", + "440902": "茂南区", + "440904": "电白区", + "440981": "高州市", + "440982": "化州市", + "440983": "信宜市", + "441202": "端州区", + "441203": "鼎湖区", + "441204": "高要区", + "441223": "广宁县", + "441224": "怀集县", + "441225": "封开县", + "441226": "德庆县", + "441284": "四会市", + "441302": "惠城区", + "441303": "惠阳区", + "441322": "博罗县", + "441323": "惠东县", + "441324": "龙门县", + "441402": "梅江区", + "441403": "梅县区", + "441422": "大埔县", + "441423": "丰顺县", + "441424": "五华县", + "441426": "平远县", + "441427": "蕉岭县", + "441481": "兴宁市", + "441502": "城区", + "441521": "海丰县", + "441523": "陆河县", + "441581": "陆丰市", + "441602": "源城区", + "441621": "紫金县", + "441622": "龙川县", + "441623": "连平县", + "441624": "和平县", + "441625": "东源县", + "441702": "江城区", + "441704": "阳东区", + "441721": "阳西县", + "441781": "阳春市", + "441802": "清城区", + "441803": "清新区", + "441821": "佛冈县", + "441823": "阳山县", + "441825": "连山壮族瑶族自治县", + "441826": "连南瑶族自治县", + "441881": "英德市", + "441882": "连州市", + "441900": "东莞市", + "442000": "中山市", + "445102": "湘桥区", + "445103": "潮安区", + "445122": "饶平县", + "445202": "榕城区", + "445203": "揭东区", + "445222": "揭西县", + "445224": "惠来县", + "445281": "普宁市", + "445302": "云城区", + "445303": "云安区", + "445321": "新兴县", + "445322": "郁南县", + "445381": "罗定市", + "450102": "兴宁区", + "450103": "青秀区", + "450105": "江南区", + "450107": "西乡塘区", + "450108": "良庆区", + "450109": "邕宁区", + "450110": "武鸣区", + "450123": "隆安县", + "450124": "马山县", + "450125": "上林县", + "450126": "宾阳县", + "450127": "横县", + "450202": "城中区", + "450203": "鱼峰区", + "450204": "柳南区", + "450205": "柳北区", + "450206": "柳江区", + "450222": "柳城县", + "450223": "鹿寨县", + "450224": "融安县", + "450225": "融水苗族自治县", + "450226": "三江侗族自治县", + "450302": "秀峰区", + "450303": "叠彩区", + "450304": "象山区", + "450305": "七星区", + "450311": "雁山区", + "450312": "临桂区", + "450321": "阳朔县", + "450323": "灵川县", + "450324": "全州县", + "450325": "兴安县", + "450326": "永福县", + "450327": "灌阳县", + "450328": "龙胜各族自治县", + "450329": "资源县", + "450330": "平乐县", + "450331": "荔浦县", + "450332": "恭城瑶族自治县", + "450403": "万秀区", + "450405": "长洲区", + "450406": "龙圩区", + "450421": "苍梧县", + "450422": "藤县", + "450423": "蒙山县", + "450481": "岑溪市", + "450502": "海城区", + "450503": "银海区", + "450512": "铁山港区", + "450521": "合浦县", + "450602": "港口区", + "450603": "防城区", + "450621": "上思县", + "450681": "东兴市", + "450702": "钦南区", + "450703": "钦北区", + "450721": "灵山县", + "450722": "浦北县", + "450802": "港北区", + "450803": "港南区", + "450804": "覃塘区", + "450821": "平南县", + "450881": "桂平市", + "450902": "玉州区", + "450903": "福绵区", + "450921": "容县", + "450922": "陆川县", + "450923": "博白县", + "450924": "兴业县", + "450981": "北流市", + "451002": "右江区", + "451021": "田阳县", + "451022": "田东县", + "451023": "平果县", + "451024": "德保县", + "451026": "那坡县", + "451027": "凌云县", + "451028": "乐业县", + "451029": "田林县", + "451030": "西林县", + "451031": "隆林各族自治县", + "451081": "靖西市", + "451102": "八步区", + "451103": "平桂区", + "451121": "昭平县", + "451122": "钟山县", + "451123": "富川瑶族自治县", + "451202": "金城江区", + "451221": "南丹县", + "451222": "天峨县", + "451223": "凤山县", + "451224": "东兰县", + "451225": "罗城仫佬族自治县", + "451226": "环江毛南族自治县", + "451227": "巴马瑶族自治县", + "451228": "都安瑶族自治县", + "451229": "大化瑶族自治县", + "451281": "宜州市", + "451302": "兴宾区", + "451321": "忻城县", + "451322": "象州县", + "451323": "武宣县", + "451324": "金秀瑶族自治县", + "451381": "合山市", + "451402": "江州区", + "451421": "扶绥县", + "451422": "宁明县", + "451423": "龙州县", + "451424": "大新县", + "451425": "天等县", + "451481": "凭祥市", + "460105": "秀英区", + "460106": "龙华区", + "460107": "琼山区", + "460108": "美兰区", + "460201": "市辖区", + "460202": "海棠区", + "460203": "吉阳区", + "460204": "天涯区", + "460205": "崖州区", + "460321": "西沙群岛", + "460322": "南沙群岛", + "460323": "中沙群岛的岛礁及其海域", + "460400": "儋州市", + "469001": "五指山市", + "469002": "琼海市", + "469005": "文昌市", + "469006": "万宁市", + "469007": "东方市", + "469021": "定安县", + "469022": "屯昌县", + "469023": "澄迈县", + "469024": "临高县", + "469025": "白沙黎族自治县", + "469026": "昌江黎族自治县", + "469027": "乐东黎族自治县", + "469028": "陵水黎族自治县", + "469029": "保亭黎族苗族自治县", + "469030": "琼中黎族苗族自治县", + "500101": "万州区", + "500102": "涪陵区", + "500103": "渝中区", + "500104": "大渡口区", + "500105": "江北区", + "500106": "沙坪坝区", + "500107": "九龙坡区", + "500108": "南岸区", + "500109": "北碚区", + "500110": "綦江区", + "500111": "大足区", + "500112": "渝北区", + "500113": "巴南区", + "500114": "黔江区", + "500115": "长寿区", + "500116": "江津区", + "500117": "合川区", + "500118": "永川区", + "500119": "南川区", + "500120": "璧山区", + "500151": "铜梁区", + "500152": "潼南区", + "500153": "荣昌区", + "500154": "开州区", + "500228": "梁平县", + "500229": "城口县", + "500230": "丰都县", + "500231": "垫江县", + "500232": "武隆县", + "500233": "忠县", + "500235": "云阳县", + "500236": "奉节县", + "500237": "巫山县", + "500238": "巫溪县", + "500240": "石柱土家族自治县", + "500241": "秀山土家族苗族自治县", + "500242": "酉阳土家族苗族自治县", + "500243": "彭水苗族土家族自治县", + "510104": "锦江区", + "510105": "青羊区", + "510106": "金牛区", + "510107": "武侯区", + "510108": "成华区", + "510112": "龙泉驿区", + "510113": "青白江区", + "510114": "新都区", + "510115": "温江区", + "510116": "双流区", + "510121": "金堂县", + "510124": "郫县", + "510129": "大邑县", + "510131": "蒲江县", + "510132": "新津县", + "510181": "都江堰市", + "510182": "彭州市", + "510183": "邛崃市", + "510184": "崇州市", + "510185": "简阳市", + "510302": "自流井区", + "510303": "贡井区", + "510304": "大安区", + "510311": "沿滩区", + "510321": "荣县", + "510322": "富顺县", + "510402": "东区", + "510403": "西区", + "510411": "仁和区", + "510421": "米易县", + "510422": "盐边县", + "510502": "江阳区", + "510503": "纳溪区", + "510504": "龙马潭区", + "510521": "泸县", + "510522": "合江县", + "510524": "叙永县", + "510525": "古蔺县", + "510603": "旌阳区", + "510623": "中江县", + "510626": "罗江县", + "510681": "广汉市", + "510682": "什邡市", + "510683": "绵竹市", + "510703": "涪城区", + "510704": "游仙区", + "510705": "安州区", + "510722": "三台县", + "510723": "盐亭县", + "510725": "梓潼县", + "510726": "北川羌族自治县", + "510727": "平武县", + "510781": "江油市", + "510802": "利州区", + "510811": "昭化区", + "510812": "朝天区", + "510821": "旺苍县", + "510822": "青川县", + "510823": "剑阁县", + "510824": "苍溪县", + "510903": "船山区", + "510904": "安居区", + "510921": "蓬溪县", + "510922": "射洪县", + "510923": "大英县", + "511002": "市中区", + "511011": "东兴区", + "511024": "威远县", + "511025": "资中县", + "511028": "隆昌县", + "511102": "市中区", + "511111": "沙湾区", + "511112": "五通桥区", + "511113": "金口河区", + "511123": "犍为县", + "511124": "井研县", + "511126": "夹江县", + "511129": "沐川县", + "511132": "峨边彝族自治县", + "511133": "马边彝族自治县", + "511181": "峨眉山市", + "511302": "顺庆区", + "511303": "高坪区", + "511304": "嘉陵区", + "511321": "南部县", + "511322": "营山县", + "511323": "蓬安县", + "511324": "仪陇县", + "511325": "西充县", + "511381": "阆中市", + "511402": "东坡区", + "511403": "彭山区", + "511421": "仁寿县", + "511423": "洪雅县", + "511424": "丹棱县", + "511425": "青神县", + "511502": "翠屏区", + "511503": "南溪区", + "511521": "宜宾县", + "511523": "江安县", + "511524": "长宁县", + "511525": "高县", + "511526": "珙县", + "511527": "筠连县", + "511528": "兴文县", + "511529": "屏山县", + "511602": "广安区", + "511603": "前锋区", + "511621": "岳池县", + "511622": "武胜县", + "511623": "邻水县", + "511681": "华蓥市", + "511702": "通川区", + "511703": "达川区", + "511722": "宣汉县", + "511723": "开江县", + "511724": "大竹县", + "511725": "渠县", + "511781": "万源市", + "511802": "雨城区", + "511803": "名山区", + "511822": "荥经县", + "511823": "汉源县", + "511824": "石棉县", + "511825": "天全县", + "511826": "芦山县", + "511827": "宝兴县", + "511902": "巴州区", + "511903": "恩阳区", + "511921": "通江县", + "511922": "南江县", + "511923": "平昌县", + "512002": "雁江区", + "512021": "安岳县", + "512022": "乐至县", + "513201": "马尔康市", + "513221": "汶川县", + "513222": "理县", + "513223": "茂县", + "513224": "松潘县", + "513225": "九寨沟县", + "513226": "金川县", + "513227": "小金县", + "513228": "黑水县", + "513230": "壤塘县", + "513231": "阿坝县", + "513232": "若尔盖县", + "513233": "红原县", + "513301": "康定市", + "513322": "泸定县", + "513323": "丹巴县", + "513324": "九龙县", + "513325": "雅江县", + "513326": "道孚县", + "513327": "炉霍县", + "513328": "甘孜县", + "513329": "新龙县", + "513330": "德格县", + "513331": "白玉县", + "513332": "石渠县", + "513333": "色达县", + "513334": "理塘县", + "513335": "巴塘县", + "513336": "乡城县", + "513337": "稻城县", + "513338": "得荣县", + "513401": "西昌市", + "513422": "木里藏族自治县", + "513423": "盐源县", + "513424": "德昌县", + "513425": "会理县", + "513426": "会东县", + "513427": "宁南县", + "513428": "普格县", + "513429": "布拖县", + "513430": "金阳县", + "513431": "昭觉县", + "513432": "喜德县", + "513433": "冕宁县", + "513434": "越西县", + "513435": "甘洛县", + "513436": "美姑县", + "513437": "雷波县", + "520102": "南明区", + "520103": "云岩区", + "520111": "花溪区", + "520112": "乌当区", + "520113": "白云区", + "520115": "观山湖区", + "520121": "开阳县", + "520122": "息烽县", + "520123": "修文县", + "520181": "清镇市", + "520201": "钟山区", + "520203": "六枝特区", + "520221": "水城县", + "520222": "盘县", + "520302": "红花岗区", + "520303": "汇川区", + "520304": "播州区", + "520322": "桐梓县", + "520323": "绥阳县", + "520324": "正安县", + "520325": "道真仡佬族苗族自治县", + "520326": "务川仡佬族苗族自治县", + "520327": "凤冈县", + "520328": "湄潭县", + "520329": "余庆县", + "520330": "习水县", + "520381": "赤水市", + "520382": "仁怀市", + "520402": "西秀区", + "520403": "平坝区", + "520422": "普定县", + "520423": "镇宁布依族苗族自治县", + "520424": "关岭布依族苗族自治县", + "520425": "紫云苗族布依族自治县", + "520502": "七星关区", + "520521": "大方县", + "520522": "黔西县", + "520523": "金沙县", + "520524": "织金县", + "520525": "纳雍县", + "520526": "威宁彝族回族苗族自治县", + "520527": "赫章县", + "520602": "碧江区", + "520603": "万山区", + "520621": "江口县", + "520622": "玉屏侗族自治县", + "520623": "石阡县", + "520624": "思南县", + "520625": "印江土家族苗族自治县", + "520626": "德江县", + "520627": "沿河土家族自治县", + "520628": "松桃苗族自治县", + "522301": "兴义市", + "522322": "兴仁县", + "522323": "普安县", + "522324": "晴隆县", + "522325": "贞丰县", + "522326": "望谟县", + "522327": "册亨县", + "522328": "安龙县", + "522601": "凯里市", + "522622": "黄平县", + "522623": "施秉县", + "522624": "三穗县", + "522625": "镇远县", + "522626": "岑巩县", + "522627": "天柱县", + "522628": "锦屏县", + "522629": "剑河县", + "522630": "台江县", + "522631": "黎平县", + "522632": "榕江县", + "522633": "从江县", + "522634": "雷山县", + "522635": "麻江县", + "522636": "丹寨县", + "522701": "都匀市", + "522702": "福泉市", + "522722": "荔波县", + "522723": "贵定县", + "522725": "瓮安县", + "522726": "独山县", + "522727": "平塘县", + "522728": "罗甸县", + "522729": "长顺县", + "522730": "龙里县", + "522731": "惠水县", + "522732": "三都水族自治县", + "530102": "五华区", + "530103": "盘龙区", + "530111": "官渡区", + "530112": "西山区", + "530113": "东川区", + "530114": "呈贡区", + "530122": "晋宁县", + "530124": "富民县", + "530125": "宜良县", + "530126": "石林彝族自治县", + "530127": "嵩明县", + "530128": "禄劝彝族苗族自治县", + "530129": "寻甸回族彝族自治县", + "530181": "安宁市", + "530302": "麒麟区", + "530303": "沾益区", + "530321": "马龙县", + "530322": "陆良县", + "530323": "师宗县", + "530324": "罗平县", + "530325": "富源县", + "530326": "会泽县", + "530381": "宣威市", + "530402": "红塔区", + "530403": "江川区", + "530422": "澄江县", + "530423": "通海县", + "530424": "华宁县", + "530425": "易门县", + "530426": "峨山彝族自治县", + "530427": "新平彝族傣族自治县", + "530428": "元江哈尼族彝族傣族自治县", + "530502": "隆阳区", + "530521": "施甸县", + "530523": "龙陵县", + "530524": "昌宁县", + "530581": "腾冲市", + "530602": "昭阳区", + "530621": "鲁甸县", + "530622": "巧家县", + "530623": "盐津县", + "530624": "大关县", + "530625": "永善县", + "530626": "绥江县", + "530627": "镇雄县", + "530628": "彝良县", + "530629": "威信县", + "530630": "水富县", + "530702": "古城区", + "530721": "玉龙纳西族自治县", + "530722": "永胜县", + "530723": "华坪县", + "530724": "宁蒗彝族自治县", + "530802": "思茅区", + "530821": "宁洱哈尼族彝族自治县", + "530822": "墨江哈尼族自治县", + "530823": "景东彝族自治县", + "530824": "景谷傣族彝族自治县", + "530825": "镇沅彝族哈尼族拉祜族自治县", + "530826": "江城哈尼族彝族自治县", + "530827": "孟连傣族拉祜族佤族自治县", + "530828": "澜沧拉祜族自治县", + "530829": "西盟佤族自治县", + "530902": "临翔区", + "530921": "凤庆县", + "530922": "云县", + "530923": "永德县", + "530924": "镇康县", + "530925": "双江拉祜族佤族布朗族傣族自治县", + "530926": "耿马傣族佤族自治县", + "530927": "沧源佤族自治县", + "532301": "楚雄市", + "532322": "双柏县", + "532323": "牟定县", + "532324": "南华县", + "532325": "姚安县", + "532326": "大姚县", + "532327": "永仁县", + "532328": "元谋县", + "532329": "武定县", + "532331": "禄丰县", + "532501": "个旧市", + "532502": "开远市", + "532503": "蒙自市", + "532504": "弥勒市", + "532523": "屏边苗族自治县", + "532524": "建水县", + "532525": "石屏县", + "532527": "泸西县", + "532528": "元阳县", + "532529": "红河县", + "532530": "金平苗族瑶族傣族自治县", + "532531": "绿春县", + "532532": "河口瑶族自治县", + "532601": "文山市", + "532622": "砚山县", + "532623": "西畴县", + "532624": "麻栗坡县", + "532625": "马关县", + "532626": "丘北县", + "532627": "广南县", + "532628": "富宁县", + "532801": "景洪市", + "532822": "勐海县", + "532823": "勐腊县", + "532901": "大理市", + "532922": "漾濞彝族自治县", + "532923": "祥云县", + "532924": "宾川县", + "532925": "弥渡县", + "532926": "南涧彝族自治县", + "532927": "巍山彝族回族自治县", + "532928": "永平县", + "532929": "云龙县", + "532930": "洱源县", + "532931": "剑川县", + "532932": "鹤庆县", + "533102": "瑞丽市", + "533103": "芒市", + "533122": "梁河县", + "533123": "盈江县", + "533124": "陇川县", + "533301": "泸水市", + "533323": "福贡县", + "533324": "贡山独龙族怒族自治县", + "533325": "兰坪白族普米族自治县", + "533401": "香格里拉市", + "533422": "德钦县", + "533423": "维西傈僳族自治县", + "540102": "城关区", + "540103": "堆龙德庆区", + "540121": "林周县", + "540122": "当雄县", + "540123": "尼木县", + "540124": "曲水县", + "540126": "达孜县", + "540127": "墨竹工卡县", + "540202": "桑珠孜区", + "540221": "南木林县", + "540222": "江孜县", + "540223": "定日县", + "540224": "萨迦县", + "540225": "拉孜县", + "540226": "昂仁县", + "540227": "谢通门县", + "540228": "白朗县", + "540229": "仁布县", + "540230": "康马县", + "540231": "定结县", + "540232": "仲巴县", + "540233": "亚东县", + "540234": "吉隆县", + "540235": "聂拉木县", + "540236": "萨嘎县", + "540237": "岗巴县", + "540302": "卡若区", + "540321": "江达县", + "540322": "贡觉县", + "540323": "类乌齐县", + "540324": "丁青县", + "540325": "察雅县", + "540326": "八宿县", + "540327": "左贡县", + "540328": "芒康县", + "540329": "洛隆县", + "540330": "边坝县", + "540402": "巴宜区", + "540421": "工布江达县", + "540422": "米林县", + "540423": "墨脱县", + "540424": "波密县", + "540425": "察隅县", + "540426": "朗县", + "540502": "乃东区", + "540521": "扎囊县", + "540522": "贡嘎县", + "540523": "桑日县", + "540524": "琼结县", + "540525": "曲松县", + "540526": "措美县", + "540527": "洛扎县", + "540528": "加查县", + "540529": "隆子县", + "540530": "错那县", + "540531": "浪卡子县", + "542421": "那曲县", + "542422": "嘉黎县", + "542423": "比如县", + "542424": "聂荣县", + "542425": "安多县", + "542426": "申扎县", + "542427": "索县", + "542428": "班戈县", + "542429": "巴青县", + "542430": "尼玛县", + "542431": "双湖县", + "542521": "普兰县", + "542522": "札达县", + "542523": "噶尔县", + "542524": "日土县", + "542525": "革吉县", + "542526": "改则县", + "542527": "措勤县", + "610102": "新城区", + "610103": "碑林区", + "610104": "莲湖区", + "610111": "灞桥区", + "610112": "未央区", + "610113": "雁塔区", + "610114": "阎良区", + "610115": "临潼区", + "610116": "长安区", + "610117": "高陵区", + "610122": "蓝田县", + "610124": "周至县", + "610125": "户县", + "610202": "王益区", + "610203": "印台区", + "610204": "耀州区", + "610222": "宜君县", + "610302": "渭滨区", + "610303": "金台区", + "610304": "陈仓区", + "610322": "凤翔县", + "610323": "岐山县", + "610324": "扶风县", + "610326": "眉县", + "610327": "陇县", + "610328": "千阳县", + "610329": "麟游县", + "610330": "凤县", + "610331": "太白县", + "610402": "秦都区", + "610403": "杨陵区", + "610404": "渭城区", + "610422": "三原县", + "610423": "泾阳县", + "610424": "乾县", + "610425": "礼泉县", + "610426": "永寿县", + "610427": "彬县", + "610428": "长武县", + "610429": "旬邑县", + "610430": "淳化县", + "610431": "武功县", + "610481": "兴平市", + "610502": "临渭区", + "610503": "华州区", + "610522": "潼关县", + "610523": "大荔县", + "610524": "合阳县", + "610525": "澄城县", + "610526": "蒲城县", + "610527": "白水县", + "610528": "富平县", + "610581": "韩城市", + "610582": "华阴市", + "610602": "宝塔区", + "610603": "安塞区", + "610621": "延长县", + "610622": "延川县", + "610623": "子长县", + "610625": "志丹县", + "610626": "吴起县", + "610627": "甘泉县", + "610628": "富县", + "610629": "洛川县", + "610630": "宜川县", + "610631": "黄龙县", + "610632": "黄陵县", + "610702": "汉台区", + "610721": "南郑县", + "610722": "城固县", + "610723": "洋县", + "610724": "西乡县", + "610725": "勉县", + "610726": "宁强县", + "610727": "略阳县", + "610728": "镇巴县", + "610729": "留坝县", + "610730": "佛坪县", + "610802": "榆阳区", + "610803": "横山区", + "610821": "神木县", + "610822": "府谷县", + "610824": "靖边县", + "610825": "定边县", + "610826": "绥德县", + "610827": "米脂县", + "610828": "佳县", + "610829": "吴堡县", + "610830": "清涧县", + "610831": "子洲县", + "610902": "汉滨区", + "610921": "汉阴县", + "610922": "石泉县", + "610923": "宁陕县", + "610924": "紫阳县", + "610925": "岚皋县", + "610926": "平利县", + "610927": "镇坪县", + "610928": "旬阳县", + "610929": "白河县", + "611002": "商州区", + "611021": "洛南县", + "611022": "丹凤县", + "611023": "商南县", + "611024": "山阳县", + "611025": "镇安县", + "611026": "柞水县", + "620102": "城关区", + "620103": "七里河区", + "620104": "西固区", + "620105": "安宁区", + "620111": "红古区", + "620121": "永登县", + "620122": "皋兰县", + "620123": "榆中县", + "620201": "嘉峪关市", + "620302": "金川区", + "620321": "永昌县", + "620402": "白银区", + "620403": "平川区", + "620421": "靖远县", + "620422": "会宁县", + "620423": "景泰县", + "620502": "秦州区", + "620503": "麦积区", + "620521": "清水县", + "620522": "秦安县", + "620523": "甘谷县", + "620524": "武山县", + "620525": "张家川回族自治县", + "620602": "凉州区", + "620621": "民勤县", + "620622": "古浪县", + "620623": "天祝藏族自治县", + "620702": "甘州区", + "620721": "肃南裕固族自治县", + "620722": "民乐县", + "620723": "临泽县", + "620724": "高台县", + "620725": "山丹县", + "620802": "崆峒区", + "620821": "泾川县", + "620822": "灵台县", + "620823": "崇信县", + "620824": "华亭县", + "620825": "庄浪县", + "620826": "静宁县", + "620902": "肃州区", + "620921": "金塔县", + "620922": "瓜州县", + "620923": "肃北蒙古族自治县", + "620924": "阿克塞哈萨克族自治县", + "620981": "玉门市", + "620982": "敦煌市", + "621002": "西峰区", + "621021": "庆城县", + "621022": "环县", + "621023": "华池县", + "621024": "合水县", + "621025": "正宁县", + "621026": "宁县", + "621027": "镇原县", + "621102": "安定区", + "621121": "通渭县", + "621122": "陇西县", + "621123": "渭源县", + "621124": "临洮县", + "621125": "漳县", + "621126": "岷县", + "621202": "武都区", + "621221": "成县", + "621222": "文县", + "621223": "宕昌县", + "621224": "康县", + "621225": "西和县", + "621226": "礼县", + "621227": "徽县", + "621228": "两当县", + "622901": "临夏市", + "622921": "临夏县", + "622922": "康乐县", + "622923": "永靖县", + "622924": "广河县", + "622925": "和政县", + "622926": "东乡族自治县", + "622927": "积石山保安族东乡族撒拉族自治县", + "623001": "合作市", + "623021": "临潭县", + "623022": "卓尼县", + "623023": "舟曲县", + "623024": "迭部县", + "623025": "玛曲县", + "623026": "碌曲县", + "623027": "夏河县", + "630102": "城东区", + "630103": "城中区", + "630104": "城西区", + "630105": "城北区", + "630121": "大通回族土族自治县", + "630122": "湟中县", + "630123": "湟源县", + "630202": "乐都区", + "630203": "平安区", + "630222": "民和回族土族自治县", + "630223": "互助土族自治县", + "630224": "化隆回族自治县", + "630225": "循化撒拉族自治县", + "632221": "门源回族自治县", + "632222": "祁连县", + "632223": "海晏县", + "632224": "刚察县", + "632321": "同仁县", + "632322": "尖扎县", + "632323": "泽库县", + "632324": "河南蒙古族自治县", + "632521": "共和县", + "632522": "同德县", + "632523": "贵德县", + "632524": "兴海县", + "632525": "贵南县", + "632621": "玛沁县", + "632622": "班玛县", + "632623": "甘德县", + "632624": "达日县", + "632625": "久治县", + "632626": "玛多县", + "632701": "玉树市", + "632722": "杂多县", + "632723": "称多县", + "632724": "治多县", + "632725": "囊谦县", + "632726": "曲麻莱县", + "632801": "格尔木市", + "632802": "德令哈市", + "632821": "乌兰县", + "632822": "都兰县", + "632823": "天峻县", + "640104": "兴庆区", + "640105": "西夏区", + "640106": "金凤区", + "640121": "永宁县", + "640122": "贺兰县", + "640181": "灵武市", + "640202": "大武口区", + "640205": "惠农区", + "640221": "平罗县", + "640302": "利通区", + "640303": "红寺堡区", + "640323": "盐池县", + "640324": "同心县", + "640381": "青铜峡市", + "640402": "原州区", + "640422": "西吉县", + "640423": "隆德县", + "640424": "泾源县", + "640425": "彭阳县", + "640502": "沙坡头区", + "640521": "中宁县", + "640522": "海原县", + "650102": "天山区", + "650103": "沙依巴克区", + "650104": "新市区", + "650105": "水磨沟区", + "650106": "头屯河区", + "650107": "达坂城区", + "650109": "米东区", + "650121": "乌鲁木齐县", + "650202": "独山子区", + "650203": "克拉玛依区", + "650204": "白碱滩区", + "650205": "乌尔禾区", + "650402": "高昌区", + "650421": "鄯善县", + "650422": "托克逊县", + "650502": "伊州区", + "650521": "巴里坤哈萨克自治县", + "650522": "伊吾县", + "652301": "昌吉市", + "652302": "阜康市", + "652323": "呼图壁县", + "652324": "玛纳斯县", + "652325": "奇台县", + "652327": "吉木萨尔县", + "652328": "木垒哈萨克自治县", + "652701": "博乐市", + "652702": "阿拉山口市", + "652722": "精河县", + "652723": "温泉县", + "652801": "库尔勒市", + "652822": "轮台县", + "652823": "尉犁县", + "652824": "若羌县", + "652825": "且末县", + "652826": "焉耆回族自治县", + "652827": "和静县", + "652828": "和硕县", + "652829": "博湖县", + "652901": "阿克苏市", + "652922": "温宿县", + "652923": "库车县", + "652924": "沙雅县", + "652925": "新和县", + "652926": "拜城县", + "652927": "乌什县", + "652928": "阿瓦提县", + "652929": "柯坪县", + "653001": "阿图什市", + "653022": "阿克陶县", + "653023": "阿合奇县", + "653024": "乌恰县", + "653101": "喀什市", + "653121": "疏附县", + "653122": "疏勒县", + "653123": "英吉沙县", + "653124": "泽普县", + "653125": "莎车县", + "653126": "叶城县", + "653127": "麦盖提县", + "653128": "岳普湖县", + "653129": "伽师县", + "653130": "巴楚县", + "653131": "塔什库尔干塔吉克自治县", + "653201": "和田市", + "653221": "和田县", + "653222": "墨玉县", + "653223": "皮山县", + "653224": "洛浦县", + "653225": "策勒县", + "653226": "于田县", + "653227": "民丰县", + "654002": "伊宁市", + "654003": "奎屯市", + "654004": "霍尔果斯市", + "654021": "伊宁县", + "654022": "察布查尔锡伯自治县", + "654023": "霍城县", + "654024": "巩留县", + "654025": "新源县", + "654026": "昭苏县", + "654027": "特克斯县", + "654028": "尼勒克县", + "654201": "塔城市", + "654202": "乌苏市", + "654221": "额敏县", + "654223": "沙湾县", + "654224": "托里县", + "654225": "裕民县", + "654226": "和布克赛尔蒙古自治县", + "654301": "阿勒泰市", + "654321": "布尔津县", + "654322": "富蕴县", + "654323": "福海县", + "654324": "哈巴河县", + "654325": "青河县", + "654326": "吉木乃县", + "659001": "石河子市", + "659002": "阿拉尔市", + "659003": "图木舒克市", + "659004": "五家渠市", + "659006": "铁门关市" + } +} + +function getConfig(type) { + return (areaList && areaList[`${type}_list`]) || {}; +} + +function getList(type, code) { + let result = []; + if (type !== 'province' && !code) { + return result; + } + + const list = getConfig(type); + result = Object.keys(list).map(code => ({ + code, + name: list[code] + })); + + if (code) { + // oversea code + if (code[0] === '9' && type === 'city') { + code = '9'; + } + + result = result.filter(item => item.code.indexOf(code) === 0); + } + + return result; +} + +// get index by code +function getIndex(type, code) { + let compareNum = type === 'province' ? 2 : type === 'city' ? 4 : 6; + const list = getList(type, code.slice(0, compareNum - 2)); + + // oversea code + if (code[0] === '9' && type === 'province') { + compareNum = 1; + } + + code = code.slice(0, compareNum); + for (let i = 0; i < list.length; i++) { + if (list[i].code.slice(0, compareNum) === code) { + return i; + } + } + + return 0; +} + +// 参考 https://github.com/youzan/vant-weapp/blob/dev/packages/area/index.ts +// 定义数据出口 +module.exports = { + areaList: areaList, + getList: getList, + getIndex: getIndex +} \ No newline at end of file diff --git a/renard-wx/pages/ucenter/address/address.wxml b/renard-wx/pages/ucenter/address/address.wxml index 12a29164..7078b5b1 100644 --- a/renard-wx/pages/ucenter/address/address.wxml +++ b/renard-wx/pages/ucenter/address/address.wxml @@ -6,8 +6,8 @@ 默认 - {{item.mobile}} - {{item.detailedAddress}} + {{item.tel}} + {{item.addressDetail}} diff --git a/renard-wx/pages/ucenter/addressAdd/addressAdd.js b/renard-wx/pages/ucenter/addressAdd/addressAdd.js index fbbb29b0..6dacb885 100644 --- a/renard-wx/pages/ucenter/addressAdd/addressAdd.js +++ b/renard-wx/pages/ucenter/addressAdd/addressAdd.js @@ -1,43 +1,36 @@ var util = require('../../../utils/util.js'); var api = require('../../../config/api.js'); var check = require('../../../utils/check.js'); +var area = require('../../../utils/area.js'); var app = getApp(); Page({ data: { address: { id: 0, - provinceId: 0, - cityId: 0, - areaId: 0, + areaCode: 0, address: '', name: '', - mobile: '', + tel: '', isDefault: 0, - provinceName: '', - cityName: '', - areaName: '' + province: '', + city: '', + county: '' }, addressId: 0, openSelectRegion: false, selectRegionList: [{ - id: 0, - name: '省份', - pid: 1, - type: 1 - }, - { - id: 0, - name: '城市', - pid: 1, - type: 2 - }, - { - id: 0, - name: '区县', - pid: 1, - type: 3 - } + code: 0, + name: '省份' + }, + { + code: 0, + name: '城市' + }, + { + code: 0, + name: '区县' + } ], regionType: 1, regionList: [], @@ -45,7 +38,7 @@ Page({ }, bindinputMobile(event) { let address = this.data.address; - address.mobile = event.detail.value; + address.tel = event.detail.value; this.setData({ address: address }); @@ -59,7 +52,7 @@ Page({ }, bindinputAddress(event) { let address = this.data.address; - address.address = event.detail.value; + address.addressDetail = event.detail.value; this.setData({ address: address }); @@ -75,7 +68,7 @@ Page({ let that = this; util.request(api.AddressDetail, { id: that.data.addressId - }).then(function(res) { + }).then(function (res) { if (res.errno === 0) { if (res.data) { that.setData({ @@ -88,7 +81,7 @@ Page({ setRegionDoneStatus() { let that = this; let doneStatus = that.data.selectRegionList.every(item => { - return item.id != 0; + return item.code != 0; }); that.setData({ @@ -104,56 +97,60 @@ Page({ //设置区域选择数据 let address = this.data.address; - if (address.provinceId > 0 && address.cityId > 0 && address.areaId > 0) { + if (address.areaCode > 0) { let selectRegionList = this.data.selectRegionList; - selectRegionList[0].id = address.provinceId; - selectRegionList[0].name = address.provinceName; - selectRegionList[0].pid = 0; + selectRegionList[0].code = address.areaCode.slice(0, 2) + '0000'; + selectRegionList[0].name = address.province; - selectRegionList[1].id = address.cityId; - selectRegionList[1].name = address.cityName; - selectRegionList[1].pid = address.provinceId; + selectRegionList[1].code = address.areaCode.slice(0, 4) + '00'; + selectRegionList[1].name = address.city; - selectRegionList[2].id = address.areaId; - selectRegionList[2].name = address.areaName; - selectRegionList[2].pid = address.cityId; + selectRegionList[2].code = address.areaCode; + selectRegionList[2].name = address.county; + + let regionList = area.getList('county', address.areaCode.slice(0, 4)); + regionList = regionList.map(item => { + //标记已选择的 + if (address.areaCode === item.code) { + item.selected = true; + } else { + item.selected = false; + } + return item; + }) this.setData({ selectRegionList: selectRegionList, - regionType: 3 + regionType: 3, + regionList: regionList }); - this.getRegionList(address.cityId); } else { + let selectRegionList = [{ + code: 0, + name: '省份', + }, + { + code: 0, + name: '城市', + }, + { + code: 0, + name: '区县', + } + ]; + this.setData({ - selectRegionList: [{ - id: 0, - name: '省份', - pid: 0, - type: 1 - }, - { - id: 0, - name: '城市', - pid: 0, - type: 2 - }, - { - id: 0, - name: '区县', - pid: 0, - type: 3 - } - ], - regionType: 1 - }) - this.getRegionList(0); + selectRegionList: selectRegionList, + regionType: 1, + regionList: area.getList('province') + }); } this.setRegionDoneStatus(); }, - onLoad: function(options) { + onLoad: function (options) { // 页面初始化 options为页面跳转所带来的参数 console.log(options) if (options.id && options.id != 0) { @@ -163,7 +160,7 @@ Page({ this.getAddressDetail(); } }, - onReady: function() { + onReady: function () { }, selectRegionType(event) { @@ -172,73 +169,104 @@ Page({ let selectRegionList = that.data.selectRegionList; //判断是否可点击 - if (regionTypeIndex + 1 == this.data.regionType || (regionTypeIndex - 1 >= 0 && selectRegionList[regionTypeIndex - 1].id <= 0)) { + if (regionTypeIndex + 1 == this.data.regionType || (regionTypeIndex - 1 >= 0 && selectRegionList[regionTypeIndex - 1].code <= 0)) { return false; } + let selectRegionItem = selectRegionList[regionTypeIndex]; + let code = selectRegionItem.code; + let regionList; + if (regionTypeIndex === 0) { + // 点击省级,取省级 + regionList = area.getList('province'); + } + else if (regionTypeIndex === 1) { + // 点击市级,取市级 + regionList = area.getList('city', code.slice(0, 2)); + } + else { + // 点击县级,取县级 + regionList = area.getList('county', code.slice(0, 4)); + } + + regionList = regionList.map(item => { + //标记已选择的 + if (that.data.selectRegionList[regionTypeIndex].code == item.code) { + item.selected = true; + } else { + item.selected = false; + } + return item; + }) + this.setData({ + regionList: regionList, regionType: regionTypeIndex + 1 }) - let selectRegionItem = selectRegionList[regionTypeIndex]; - - this.getRegionList(selectRegionItem.pid); - this.setRegionDoneStatus(); - }, selectRegion(event) { let that = this; let regionIndex = event.target.dataset.regionIndex; let regionItem = this.data.regionList[regionIndex]; - let regionType = regionItem.type; + let regionType = this.data.regionType; let selectRegionList = this.data.selectRegionList; selectRegionList[regionType - 1] = regionItem; - - if (regionType != 3) { + if (regionType == 3) { this.setData({ - selectRegionList: selectRegionList, - regionType: regionType + 1 + selectRegionList: selectRegionList }) - this.getRegionList(regionItem.id); - } else { + + let regionList = that.data.regionList.map(item => { + //标记已选择的 + if (that.data.selectRegionList[that.data.regionType - 1].code == item.code) { + item.selected = true; + } else { + item.selected = false; + } + return item; + }) + this.setData({ - selectRegionList: selectRegionList + regionList: regionList }) + + this.setRegionDoneStatus(); + return } //重置下级区域为空 selectRegionList.map((item, index) => { if (index > regionType - 1) { - item.id = 0; + item.code = 0; item.name = index == 1 ? '城市' : '区县'; - item.pid = 0; } return item; }); this.setData({ - selectRegionList: selectRegionList + selectRegionList: selectRegionList, + regionType: regionType + 1 }) + let code = regionItem.code; + let regionList = []; + if (regionType === 1) { + // 点击省级,取市级 + regionList = area.getList('city', code.slice(0, 2)) + } + else { + // 点击市级,取县级 + regionList = area.getList('county', code.slice(0, 4)) + } - that.setData({ - regionList: that.data.regionList.map(item => { - - //标记已选择的 - if (that.data.regionType == item.type && that.data.selectRegionList[that.data.regionType - 1].id == item.id) { - item.selected = true; - } else { - item.selected = false; - } - - return item; - }) - }); + this.setData({ + regionList: regionList + }) this.setRegionDoneStatus(); - }, doneSelectRegion() { if (this.data.selectRegionDone === false) { @@ -247,12 +275,10 @@ Page({ let address = this.data.address; let selectRegionList = this.data.selectRegionList; - address.provinceId = selectRegionList[0].id; - address.cityId = selectRegionList[1].id; - address.areaId = selectRegionList[2].id; - address.provinceName = selectRegionList[0].name; - address.cityName = selectRegionList[1].name; - address.areaName = selectRegionList[2].name; + address.province = selectRegionList[0].name; + address.city = selectRegionList[1].name; + address.county = selectRegionList[2].name; + address.areaCode = selectRegionList[2].code; this.setData({ address: address, @@ -267,29 +293,6 @@ Page({ }); }, - getRegionList(regionId) { - let that = this; - let regionType = that.data.regionType; - util.request(api.RegionList, { - pid: regionId - }).then(function(res) { - if (res.errno === 0) { - that.setData({ - regionList: res.data.map(item => { - - //标记已选择的 - if (regionType == item.type && that.data.selectRegionList[regionType - 1].id == item.id) { - item.selected = true; - } else { - item.selected = false; - } - - return item; - }) - }); - } - }); - }, cancelAddress() { wx.navigateBack(); }, @@ -303,23 +306,23 @@ Page({ return false; } - if (address.mobile == '') { + if (address.tel == '') { util.showErrorToast('请输入手机号码'); return false; } - if (address.areaId == 0) { + if (address.areaCode == 0) { util.showErrorToast('请输入省市区'); return false; } - if (address.address == '') { + if (address.addressDetail == '') { util.showErrorToast('请输入详细地址'); return false; } - if (!check.isValidPhone(address.mobile)) { + if (!check.isValidPhone(address.tel)) { util.showErrorToast('手机号不正确'); return false; } @@ -328,13 +331,14 @@ Page({ util.request(api.AddressSave, { id: address.id, name: address.name, - mobile: address.mobile, - provinceId: address.provinceId, - cityId: address.cityId, - areaId: address.areaId, - address: address.address, + tel: address.tel, + province: address.province, + city: address.city, + county: address.county, + areaCode: address.areaCode, + addressDetail: address.addressDetail, isDefault: address.isDefault - }, 'POST').then(function(res) { + }, 'POST').then(function (res) { if (res.errno === 0) { //返回之前,先取出上一页对象,并设置addressId var pages = getCurrentPages(); @@ -357,15 +361,14 @@ Page({ }); }, - onShow: function() { + onShow: function () { // 页面显示 - }, - onHide: function() { + onHide: function () { // 页面隐藏 }, - onUnload: function() { + onUnload: function () { // 页面关闭 } diff --git a/renard-wx/pages/ucenter/addressAdd/addressAdd.wxml b/renard-wx/pages/ucenter/addressAdd/addressAdd.wxml index faa714e9..ec5d436e 100644 --- a/renard-wx/pages/ucenter/addressAdd/addressAdd.wxml +++ b/renard-wx/pages/ucenter/addressAdd/addressAdd.wxml @@ -4,13 +4,13 @@ - + - + - + 设为默认地址 @@ -25,13 +25,13 @@ - {{item.name}} + {{item.name}} 确定 - {{item.name}} + {{item.name}} diff --git a/renard-wx/utils/area.js b/renard-wx/utils/area.js new file mode 100644 index 00000000..e2d034f3 --- /dev/null +++ b/renard-wx/utils/area.js @@ -0,0 +1,3295 @@ +var areaList = +{ + "province_list": { + "110000": "北京市", + "120000": "天津市", + "130000": "河北省", + "140000": "山西省", + "150000": "内蒙古自治区", + "210000": "辽宁省", + "220000": "吉林省", + "230000": "黑龙江省", + "310000": "上海市", + "320000": "江苏省", + "330000": "浙江省", + "340000": "安徽省", + "350000": "福建省", + "360000": "江西省", + "370000": "山东省", + "410000": "河南省", + "420000": "湖北省", + "430000": "湖南省", + "440000": "广东省", + "450000": "广西壮族自治区", + "460000": "海南省", + "500000": "重庆市", + "510000": "四川省", + "520000": "贵州省", + "530000": "云南省", + "540000": "西藏自治区", + "610000": "陕西省", + "620000": "甘肃省", + "630000": "青海省", + "640000": "宁夏回族自治区", + "650000": "新疆维吾尔自治区" + }, + "city_list": { + "110100": "市辖区", + "120100": "市辖区", + "130100": "石家庄市", + "130200": "唐山市", + "130300": "秦皇岛市", + "130400": "邯郸市", + "130500": "邢台市", + "130600": "保定市", + "130700": "张家口市", + "130800": "承德市", + "130900": "沧州市", + "131000": "廊坊市", + "131100": "衡水市", + "139000": "省直辖县级行政区划", + "140100": "太原市", + "140200": "大同市", + "140300": "阳泉市", + "140400": "长治市", + "140500": "晋城市", + "140600": "朔州市", + "140700": "晋中市", + "140800": "运城市", + "140900": "忻州市", + "141000": "临汾市", + "141100": "吕梁市", + "150100": "呼和浩特市", + "150200": "包头市", + "150300": "乌海市", + "150400": "赤峰市", + "150500": "通辽市", + "150600": "鄂尔多斯市", + "150700": "呼伦贝尔市", + "150800": "巴彦淖尔市", + "150900": "乌兰察布市", + "152200": "兴安盟", + "152500": "锡林郭勒盟", + "152900": "阿拉善盟", + "210100": "沈阳市", + "210200": "大连市", + "210300": "鞍山市", + "210400": "抚顺市", + "210500": "本溪市", + "210600": "丹东市", + "210700": "锦州市", + "210800": "营口市", + "210900": "阜新市", + "211000": "辽阳市", + "211100": "盘锦市", + "211200": "铁岭市", + "211300": "朝阳市", + "211400": "葫芦岛市", + "220100": "长春市", + "220200": "吉林市", + "220300": "四平市", + "220400": "辽源市", + "220500": "通化市", + "220600": "白山市", + "220700": "松原市", + "220800": "白城市", + "222400": "延边朝鲜族自治州", + "230100": "哈尔滨市", + "230200": "齐齐哈尔市", + "230300": "鸡西市", + "230400": "鹤岗市", + "230500": "双鸭山市", + "230600": "大庆市", + "230700": "伊春市", + "230800": "佳木斯市", + "230900": "七台河市", + "231000": "牡丹江市", + "231100": "黑河市", + "231200": "绥化市", + "232700": "大兴安岭地区", + "310100": "市辖区", + "320100": "南京市", + "320200": "无锡市", + "320300": "徐州市", + "320400": "常州市", + "320500": "苏州市", + "320600": "南通市", + "320700": "连云港市", + "320800": "淮安市", + "320900": "盐城市", + "321000": "扬州市", + "321100": "镇江市", + "321200": "泰州市", + "321300": "宿迁市", + "330100": "杭州市", + "330200": "宁波市", + "330300": "温州市", + "330400": "嘉兴市", + "330500": "湖州市", + "330600": "绍兴市", + "330700": "金华市", + "330800": "衢州市", + "330900": "舟山市", + "331000": "台州市", + "331100": "丽水市", + "340100": "合肥市", + "340200": "芜湖市", + "340300": "蚌埠市", + "340400": "淮南市", + "340500": "马鞍山市", + "340600": "淮北市", + "340700": "铜陵市", + "340800": "安庆市", + "341000": "黄山市", + "341100": "滁州市", + "341200": "阜阳市", + "341300": "宿州市", + "341500": "六安市", + "341600": "亳州市", + "341700": "池州市", + "341800": "宣城市", + "350100": "福州市", + "350200": "厦门市", + "350300": "莆田市", + "350400": "三明市", + "350500": "泉州市", + "350600": "漳州市", + "350700": "南平市", + "350800": "龙岩市", + "350900": "宁德市", + "360100": "南昌市", + "360200": "景德镇市", + "360300": "萍乡市", + "360400": "九江市", + "360500": "新余市", + "360600": "鹰潭市", + "360700": "赣州市", + "360800": "吉安市", + "360900": "宜春市", + "361000": "抚州市", + "361100": "上饶市", + "370100": "济南市", + "370200": "青岛市", + "370300": "淄博市", + "370400": "枣庄市", + "370500": "东营市", + "370600": "烟台市", + "370700": "潍坊市", + "370800": "济宁市", + "370900": "泰安市", + "371000": "威海市", + "371100": "日照市", + "371200": "莱芜市", + "371300": "临沂市", + "371400": "德州市", + "371500": "聊城市", + "371600": "滨州市", + "371700": "菏泽市", + "410100": "郑州市", + "410200": "开封市", + "410300": "洛阳市", + "410400": "平顶山市", + "410500": "安阳市", + "410600": "鹤壁市", + "410700": "新乡市", + "410800": "焦作市", + "410900": "濮阳市", + "411000": "许昌市", + "411100": "漯河市", + "411200": "三门峡市", + "411300": "南阳市", + "411400": "商丘市", + "411500": "信阳市", + "411600": "周口市", + "411700": "驻马店市", + "419000": "省直辖县级行政区划", + "420100": "武汉市", + "420200": "黄石市", + "420300": "十堰市", + "420500": "宜昌市", + "420600": "襄阳市", + "420700": "鄂州市", + "420800": "荆门市", + "420900": "孝感市", + "421000": "荆州市", + "421100": "黄冈市", + "421200": "咸宁市", + "421300": "随州市", + "422800": "恩施土家族苗族自治州", + "429000": "省直辖县级行政区划", + "430100": "长沙市", + "430200": "株洲市", + "430300": "湘潭市", + "430400": "衡阳市", + "430500": "邵阳市", + "430600": "岳阳市", + "430700": "常德市", + "430800": "张家界市", + "430900": "益阳市", + "431000": "郴州市", + "431100": "永州市", + "431200": "怀化市", + "431300": "娄底市", + "433100": "湘西土家族苗族自治州", + "440100": "广州市", + "440200": "韶关市", + "440300": "深圳市", + "440400": "珠海市", + "440500": "汕头市", + "440600": "佛山市", + "440700": "江门市", + "440800": "湛江市", + "440900": "茂名市", + "441200": "肇庆市", + "441300": "惠州市", + "441400": "梅州市", + "441500": "汕尾市", + "441600": "河源市", + "441700": "阳江市", + "441800": "清远市", + "441900": "东莞市", + "442000": "中山市", + "445100": "潮州市", + "445200": "揭阳市", + "445300": "云浮市", + "450100": "南宁市", + "450200": "柳州市", + "450300": "桂林市", + "450400": "梧州市", + "450500": "北海市", + "450600": "防城港市", + "450700": "钦州市", + "450800": "贵港市", + "450900": "玉林市", + "451000": "百色市", + "451100": "贺州市", + "451200": "河池市", + "451300": "来宾市", + "451400": "崇左市", + "460100": "海口市", + "460200": "三亚市", + "460300": "三沙市", + "460400": "儋州市", + "469000": "省直辖县级行政区划", + "500100": "市辖区", + "500200": "县", + "510100": "成都市", + "510300": "自贡市", + "510400": "攀枝花市", + "510500": "泸州市", + "510600": "德阳市", + "510700": "绵阳市", + "510800": "广元市", + "510900": "遂宁市", + "511000": "内江市", + "511100": "乐山市", + "511300": "南充市", + "511400": "眉山市", + "511500": "宜宾市", + "511600": "广安市", + "511700": "达州市", + "511800": "雅安市", + "511900": "巴中市", + "512000": "资阳市", + "513200": "阿坝藏族羌族自治州", + "513300": "甘孜藏族自治州", + "513400": "凉山彝族自治州", + "520100": "贵阳市", + "520200": "六盘水市", + "520300": "遵义市", + "520400": "安顺市", + "520500": "毕节市", + "520600": "铜仁市", + "522300": "黔西南布依族苗族自治州", + "522600": "黔东南苗族侗族自治州", + "522700": "黔南布依族苗族自治州", + "530100": "昆明市", + "530300": "曲靖市", + "530400": "玉溪市", + "530500": "保山市", + "530600": "昭通市", + "530700": "丽江市", + "530800": "普洱市", + "530900": "临沧市", + "532300": "楚雄彝族自治州", + "532500": "红河哈尼族彝族自治州", + "532600": "文山壮族苗族自治州", + "532800": "西双版纳傣族自治州", + "532900": "大理白族自治州", + "533100": "德宏傣族景颇族自治州", + "533300": "怒江傈僳族自治州", + "533400": "迪庆藏族自治州", + "540100": "拉萨市", + "540200": "日喀则市", + "540300": "昌都市", + "540400": "林芝市", + "540500": "山南市", + "542400": "那曲地区", + "542500": "阿里地区", + "610100": "西安市", + "610200": "铜川市", + "610300": "宝鸡市", + "610400": "咸阳市", + "610500": "渭南市", + "610600": "延安市", + "610700": "汉中市", + "610800": "榆林市", + "610900": "安康市", + "611000": "商洛市", + "620100": "兰州市", + "620200": "嘉峪关市", + "620300": "金昌市", + "620400": "白银市", + "620500": "天水市", + "620600": "武威市", + "620700": "张掖市", + "620800": "平凉市", + "620900": "酒泉市", + "621000": "庆阳市", + "621100": "定西市", + "621200": "陇南市", + "622900": "临夏回族自治州", + "623000": "甘南藏族自治州", + "630100": "西宁市", + "630200": "海东市", + "632200": "海北藏族自治州", + "632300": "黄南藏族自治州", + "632500": "海南藏族自治州", + "632600": "果洛藏族自治州", + "632700": "玉树藏族自治州", + "632800": "海西蒙古族藏族自治州", + "640100": "银川市", + "640200": "石嘴山市", + "640300": "吴忠市", + "640400": "固原市", + "640500": "中卫市", + "650100": "乌鲁木齐市", + "650200": "克拉玛依市", + "650400": "吐鲁番市", + "650500": "哈密市", + "652300": "昌吉回族自治州", + "652700": "博尔塔拉蒙古自治州", + "652800": "巴音郭楞蒙古自治州", + "652900": "阿克苏地区", + "653000": "克孜勒苏柯尔克孜自治州", + "653100": "喀什地区", + "653200": "和田地区", + "654000": "伊犁哈萨克自治州", + "654200": "塔城地区", + "654300": "阿勒泰地区", + "659000": "自治区直辖县级行政区划" + }, + "county_list": { + "110101": "东城区", + "110102": "西城区", + "110105": "朝阳区", + "110106": "丰台区", + "110107": "石景山区", + "110108": "海淀区", + "110109": "门头沟区", + "110111": "房山区", + "110112": "通州区", + "110113": "顺义区", + "110114": "昌平区", + "110115": "大兴区", + "110116": "怀柔区", + "110117": "平谷区", + "110118": "密云区", + "110119": "延庆区", + "120101": "和平区", + "120102": "河东区", + "120103": "河西区", + "120104": "南开区", + "120105": "河北区", + "120106": "红桥区", + "120110": "东丽区", + "120111": "西青区", + "120112": "津南区", + "120113": "北辰区", + "120114": "武清区", + "120115": "宝坻区", + "120116": "滨海新区", + "120117": "宁河区", + "120118": "静海区", + "120119": "蓟州区", + "130102": "长安区", + "130104": "桥西区", + "130105": "新华区", + "130107": "井陉矿区", + "130108": "裕华区", + "130109": "藁城区", + "130110": "鹿泉区", + "130111": "栾城区", + "130121": "井陉县", + "130123": "正定县", + "130125": "行唐县", + "130126": "灵寿县", + "130127": "高邑县", + "130128": "深泽县", + "130129": "赞皇县", + "130130": "无极县", + "130131": "平山县", + "130132": "元氏县", + "130133": "赵县", + "130183": "晋州市", + "130184": "新乐市", + "130202": "路南区", + "130203": "路北区", + "130204": "古冶区", + "130205": "开平区", + "130207": "丰南区", + "130208": "丰润区", + "130209": "曹妃甸区", + "130223": "滦县", + "130224": "滦南县", + "130225": "乐亭县", + "130227": "迁西县", + "130229": "玉田县", + "130281": "遵化市", + "130283": "迁安市", + "130302": "海港区", + "130303": "山海关区", + "130304": "北戴河区", + "130306": "抚宁区", + "130321": "青龙满族自治县", + "130322": "昌黎县", + "130324": "卢龙县", + "130402": "邯山区", + "130403": "丛台区", + "130404": "复兴区", + "130406": "峰峰矿区", + "130421": "邯郸县", + "130423": "临漳县", + "130424": "成安县", + "130425": "大名县", + "130426": "涉县", + "130427": "磁县", + "130428": "肥乡县", + "130429": "永年县", + "130430": "邱县", + "130431": "鸡泽县", + "130432": "广平县", + "130433": "馆陶县", + "130434": "魏县", + "130435": "曲周县", + "130481": "武安市", + "130502": "桥东区", + "130503": "桥西区", + "130521": "邢台县", + "130522": "临城县", + "130523": "内丘县", + "130524": "柏乡县", + "130525": "隆尧县", + "130526": "任县", + "130527": "南和县", + "130528": "宁晋县", + "130529": "巨鹿县", + "130530": "新河县", + "130531": "广宗县", + "130532": "平乡县", + "130533": "威县", + "130534": "清河县", + "130535": "临西县", + "130581": "南宫市", + "130582": "沙河市", + "130602": "竞秀区", + "130606": "莲池区", + "130607": "满城区", + "130608": "清苑区", + "130609": "徐水区", + "130623": "涞水县", + "130624": "阜平县", + "130626": "定兴县", + "130627": "唐县", + "130628": "高阳县", + "130629": "容城县", + "130630": "涞源县", + "130631": "望都县", + "130632": "安新县", + "130633": "易县", + "130634": "曲阳县", + "130635": "蠡县", + "130636": "顺平县", + "130637": "博野县", + "130638": "雄县", + "130681": "涿州市", + "130683": "安国市", + "130684": "高碑店市", + "130702": "桥东区", + "130703": "桥西区", + "130705": "宣化区", + "130706": "下花园区", + "130708": "万全区", + "130709": "崇礼区", + "130722": "张北县", + "130723": "康保县", + "130724": "沽源县", + "130725": "尚义县", + "130726": "蔚县", + "130727": "阳原县", + "130728": "怀安县", + "130730": "怀来县", + "130731": "涿鹿县", + "130732": "赤城县", + "130802": "双桥区", + "130803": "双滦区", + "130804": "鹰手营子矿区", + "130821": "承德县", + "130822": "兴隆县", + "130823": "平泉县", + "130824": "滦平县", + "130825": "隆化县", + "130826": "丰宁满族自治县", + "130827": "宽城满族自治县", + "130828": "围场满族蒙古族自治县", + "130902": "新华区", + "130903": "运河区", + "130921": "沧县", + "130922": "青县", + "130923": "东光县", + "130924": "海兴县", + "130925": "盐山县", + "130926": "肃宁县", + "130927": "南皮县", + "130928": "吴桥县", + "130929": "献县", + "130930": "孟村回族自治县", + "130981": "泊头市", + "130982": "任丘市", + "130983": "黄骅市", + "130984": "河间市", + "131002": "安次区", + "131003": "广阳区", + "131022": "固安县", + "131023": "永清县", + "131024": "香河县", + "131025": "大城县", + "131026": "文安县", + "131028": "大厂回族自治县", + "131081": "霸州市", + "131082": "三河市", + "131102": "桃城区", + "131103": "冀州区", + "131121": "枣强县", + "131122": "武邑县", + "131123": "武强县", + "131124": "饶阳县", + "131125": "安平县", + "131126": "故城县", + "131127": "景县", + "131128": "阜城县", + "131182": "深州市", + "139001": "定州市", + "139002": "辛集市", + "140105": "小店区", + "140106": "迎泽区", + "140107": "杏花岭区", + "140108": "尖草坪区", + "140109": "万柏林区", + "140110": "晋源区", + "140121": "清徐县", + "140122": "阳曲县", + "140123": "娄烦县", + "140181": "古交市", + "140202": "城区", + "140203": "矿区", + "140211": "南郊区", + "140212": "新荣区", + "140221": "阳高县", + "140222": "天镇县", + "140223": "广灵县", + "140224": "灵丘县", + "140225": "浑源县", + "140226": "左云县", + "140227": "大同县", + "140302": "城区", + "140303": "矿区", + "140311": "郊区", + "140321": "平定县", + "140322": "盂县", + "140402": "城区", + "140411": "郊区", + "140421": "长治县", + "140423": "襄垣县", + "140424": "屯留县", + "140425": "平顺县", + "140426": "黎城县", + "140427": "壶关县", + "140428": "长子县", + "140429": "武乡县", + "140430": "沁县", + "140431": "沁源县", + "140481": "潞城市", + "140502": "城区", + "140521": "沁水县", + "140522": "阳城县", + "140524": "陵川县", + "140525": "泽州县", + "140581": "高平市", + "140602": "朔城区", + "140603": "平鲁区", + "140621": "山阴县", + "140622": "应县", + "140623": "右玉县", + "140624": "怀仁县", + "140702": "榆次区", + "140721": "榆社县", + "140722": "左权县", + "140723": "和顺县", + "140724": "昔阳县", + "140725": "寿阳县", + "140726": "太谷县", + "140727": "祁县", + "140728": "平遥县", + "140729": "灵石县", + "140781": "介休市", + "140802": "盐湖区", + "140821": "临猗县", + "140822": "万荣县", + "140823": "闻喜县", + "140824": "稷山县", + "140825": "新绛县", + "140826": "绛县", + "140827": "垣曲县", + "140828": "夏县", + "140829": "平陆县", + "140830": "芮城县", + "140881": "永济市", + "140882": "河津市", + "140902": "忻府区", + "140921": "定襄县", + "140922": "五台县", + "140923": "代县", + "140924": "繁峙县", + "140925": "宁武县", + "140926": "静乐县", + "140927": "神池县", + "140928": "五寨县", + "140929": "岢岚县", + "140930": "河曲县", + "140931": "保德县", + "140932": "偏关县", + "140981": "原平市", + "141002": "尧都区", + "141021": "曲沃县", + "141022": "翼城县", + "141023": "襄汾县", + "141024": "洪洞县", + "141025": "古县", + "141026": "安泽县", + "141027": "浮山县", + "141028": "吉县", + "141029": "乡宁县", + "141030": "大宁县", + "141031": "隰县", + "141032": "永和县", + "141033": "蒲县", + "141034": "汾西县", + "141081": "侯马市", + "141082": "霍州市", + "141102": "离石区", + "141121": "文水县", + "141122": "交城县", + "141123": "兴县", + "141124": "临县", + "141125": "柳林县", + "141126": "石楼县", + "141127": "岚县", + "141128": "方山县", + "141129": "中阳县", + "141130": "交口县", + "141181": "孝义市", + "141182": "汾阳市", + "150102": "新城区", + "150103": "回民区", + "150104": "玉泉区", + "150105": "赛罕区", + "150121": "土默特左旗", + "150122": "托克托县", + "150123": "和林格尔县", + "150124": "清水河县", + "150125": "武川县", + "150202": "东河区", + "150203": "昆都仑区", + "150204": "青山区", + "150205": "石拐区", + "150206": "白云鄂博矿区", + "150207": "九原区", + "150221": "土默特右旗", + "150222": "固阳县", + "150223": "达尔罕茂明安联合旗", + "150302": "海勃湾区", + "150303": "海南区", + "150304": "乌达区", + "150402": "红山区", + "150403": "元宝山区", + "150404": "松山区", + "150421": "阿鲁科尔沁旗", + "150422": "巴林左旗", + "150423": "巴林右旗", + "150424": "林西县", + "150425": "克什克腾旗", + "150426": "翁牛特旗", + "150428": "喀喇沁旗", + "150429": "宁城县", + "150430": "敖汉旗", + "150502": "科尔沁区", + "150521": "科尔沁左翼中旗", + "150522": "科尔沁左翼后旗", + "150523": "开鲁县", + "150524": "库伦旗", + "150525": "奈曼旗", + "150526": "扎鲁特旗", + "150581": "霍林郭勒市", + "150602": "东胜区", + "150603": "康巴什区", + "150621": "达拉特旗", + "150622": "准格尔旗", + "150623": "鄂托克前旗", + "150624": "鄂托克旗", + "150625": "杭锦旗", + "150626": "乌审旗", + "150627": "伊金霍洛旗", + "150702": "海拉尔区", + "150703": "扎赉诺尔区", + "150721": "阿荣旗", + "150722": "莫力达瓦达斡尔族自治旗", + "150723": "鄂伦春自治旗", + "150724": "鄂温克族自治旗", + "150725": "陈巴尔虎旗", + "150726": "新巴尔虎左旗", + "150727": "新巴尔虎右旗", + "150781": "满洲里市", + "150782": "牙克石市", + "150783": "扎兰屯市", + "150784": "额尔古纳市", + "150785": "根河市", + "150802": "临河区", + "150821": "五原县", + "150822": "磴口县", + "150823": "乌拉特前旗", + "150824": "乌拉特中旗", + "150825": "乌拉特后旗", + "150826": "杭锦后旗", + "150902": "集宁区", + "150921": "卓资县", + "150922": "化德县", + "150923": "商都县", + "150924": "兴和县", + "150925": "凉城县", + "150926": "察哈尔右翼前旗", + "150927": "察哈尔右翼中旗", + "150928": "察哈尔右翼后旗", + "150929": "四子王旗", + "150981": "丰镇市", + "152201": "乌兰浩特市", + "152202": "阿尔山市", + "152221": "科尔沁右翼前旗", + "152222": "科尔沁右翼中旗", + "152223": "扎赉特旗", + "152224": "突泉县", + "152501": "二连浩特市", + "152502": "锡林浩特市", + "152522": "阿巴嘎旗", + "152523": "苏尼特左旗", + "152524": "苏尼特右旗", + "152525": "东乌珠穆沁旗", + "152526": "西乌珠穆沁旗", + "152527": "太仆寺旗", + "152528": "镶黄旗", + "152529": "正镶白旗", + "152530": "正蓝旗", + "152531": "多伦县", + "152921": "阿拉善左旗", + "152922": "阿拉善右旗", + "152923": "额济纳旗", + "210102": "和平区", + "210103": "沈河区", + "210104": "大东区", + "210105": "皇姑区", + "210106": "铁西区", + "210111": "苏家屯区", + "210112": "浑南区", + "210113": "沈北新区", + "210114": "于洪区", + "210115": "辽中区", + "210123": "康平县", + "210124": "法库县", + "210181": "新民市", + "210202": "中山区", + "210203": "西岗区", + "210204": "沙河口区", + "210211": "甘井子区", + "210212": "旅顺口区", + "210213": "金州区", + "210214": "普兰店区", + "210224": "长海县", + "210281": "瓦房店市", + "210283": "庄河市", + "210302": "铁东区", + "210303": "铁西区", + "210304": "立山区", + "210311": "千山区", + "210321": "台安县", + "210323": "岫岩满族自治县", + "210381": "海城市", + "210402": "新抚区", + "210403": "东洲区", + "210404": "望花区", + "210411": "顺城区", + "210421": "抚顺县", + "210422": "新宾满族自治县", + "210423": "清原满族自治县", + "210502": "平山区", + "210503": "溪湖区", + "210504": "明山区", + "210505": "南芬区", + "210521": "本溪满族自治县", + "210522": "桓仁满族自治县", + "210602": "元宝区", + "210603": "振兴区", + "210604": "振安区", + "210624": "宽甸满族自治县", + "210681": "东港市", + "210682": "凤城市", + "210702": "古塔区", + "210703": "凌河区", + "210711": "太和区", + "210726": "黑山县", + "210727": "义县", + "210781": "凌海市", + "210782": "北镇市", + "210802": "站前区", + "210803": "西市区", + "210804": "鲅鱼圈区", + "210811": "老边区", + "210881": "盖州市", + "210882": "大石桥市", + "210902": "海州区", + "210903": "新邱区", + "210904": "太平区", + "210905": "清河门区", + "210911": "细河区", + "210921": "阜新蒙古族自治县", + "210922": "彰武县", + "211002": "白塔区", + "211003": "文圣区", + "211004": "宏伟区", + "211005": "弓长岭区", + "211011": "太子河区", + "211021": "辽阳县", + "211081": "灯塔市", + "211102": "双台子区", + "211103": "兴隆台区", + "211104": "大洼区", + "211122": "盘山县", + "211202": "银州区", + "211204": "清河区", + "211221": "铁岭县", + "211223": "西丰县", + "211224": "昌图县", + "211281": "调兵山市", + "211282": "开原市", + "211302": "双塔区", + "211303": "龙城区", + "211321": "朝阳县", + "211322": "建平县", + "211324": "喀喇沁左翼蒙古族自治县", + "211381": "北票市", + "211382": "凌源市", + "211402": "连山区", + "211403": "龙港区", + "211404": "南票区", + "211421": "绥中县", + "211422": "建昌县", + "211481": "兴城市", + "220102": "南关区", + "220103": "宽城区", + "220104": "朝阳区", + "220105": "二道区", + "220106": "绿园区", + "220112": "双阳区", + "220113": "九台区", + "220122": "农安县", + "220182": "榆树市", + "220183": "德惠市", + "220202": "昌邑区", + "220203": "龙潭区", + "220204": "船营区", + "220211": "丰满区", + "220221": "永吉县", + "220281": "蛟河市", + "220282": "桦甸市", + "220283": "舒兰市", + "220284": "磐石市", + "220302": "铁西区", + "220303": "铁东区", + "220322": "梨树县", + "220323": "伊通满族自治县", + "220381": "公主岭市", + "220382": "双辽市", + "220402": "龙山区", + "220403": "西安区", + "220421": "东丰县", + "220422": "东辽县", + "220502": "东昌区", + "220503": "二道江区", + "220521": "通化县", + "220523": "辉南县", + "220524": "柳河县", + "220581": "梅河口市", + "220582": "集安市", + "220602": "浑江区", + "220605": "江源区", + "220621": "抚松县", + "220622": "靖宇县", + "220623": "长白朝鲜族自治县", + "220681": "临江市", + "220702": "宁江区", + "220721": "前郭尔罗斯蒙古族自治县", + "220722": "长岭县", + "220723": "乾安县", + "220781": "扶余市", + "220802": "洮北区", + "220821": "镇赉县", + "220822": "通榆县", + "220881": "洮南市", + "220882": "大安市", + "222401": "延吉市", + "222402": "图们市", + "222403": "敦化市", + "222404": "珲春市", + "222405": "龙井市", + "222406": "和龙市", + "222424": "汪清县", + "222426": "安图县", + "230102": "道里区", + "230103": "南岗区", + "230104": "道外区", + "230108": "平房区", + "230109": "松北区", + "230110": "香坊区", + "230111": "呼兰区", + "230112": "阿城区", + "230113": "双城区", + "230123": "依兰县", + "230124": "方正县", + "230125": "宾县", + "230126": "巴彦县", + "230127": "木兰县", + "230128": "通河县", + "230129": "延寿县", + "230183": "尚志市", + "230184": "五常市", + "230202": "龙沙区", + "230203": "建华区", + "230204": "铁锋区", + "230205": "昂昂溪区", + "230206": "富拉尔基区", + "230207": "碾子山区", + "230208": "梅里斯达斡尔族区", + "230221": "龙江县", + "230223": "依安县", + "230224": "泰来县", + "230225": "甘南县", + "230227": "富裕县", + "230229": "克山县", + "230230": "克东县", + "230231": "拜泉县", + "230281": "讷河市", + "230302": "鸡冠区", + "230303": "恒山区", + "230304": "滴道区", + "230305": "梨树区", + "230306": "城子河区", + "230307": "麻山区", + "230321": "鸡东县", + "230381": "虎林市", + "230382": "密山市", + "230402": "向阳区", + "230403": "工农区", + "230404": "南山区", + "230405": "兴安区", + "230406": "东山区", + "230407": "兴山区", + "230421": "萝北县", + "230422": "绥滨县", + "230502": "尖山区", + "230503": "岭东区", + "230505": "四方台区", + "230506": "宝山区", + "230521": "集贤县", + "230522": "友谊县", + "230523": "宝清县", + "230524": "饶河县", + "230602": "萨尔图区", + "230603": "龙凤区", + "230604": "让胡路区", + "230605": "红岗区", + "230606": "大同区", + "230621": "肇州县", + "230622": "肇源县", + "230623": "林甸县", + "230624": "杜尔伯特蒙古族自治县", + "230702": "伊春区", + "230703": "南岔区", + "230704": "友好区", + "230705": "西林区", + "230706": "翠峦区", + "230707": "新青区", + "230708": "美溪区", + "230709": "金山屯区", + "230710": "五营区", + "230711": "乌马河区", + "230712": "汤旺河区", + "230713": "带岭区", + "230714": "乌伊岭区", + "230715": "红星区", + "230716": "上甘岭区", + "230722": "嘉荫县", + "230781": "铁力市", + "230803": "向阳区", + "230804": "前进区", + "230805": "东风区", + "230811": "郊区", + "230822": "桦南县", + "230826": "桦川县", + "230828": "汤原县", + "230881": "同江市", + "230882": "富锦市", + "230883": "抚远市", + "230902": "新兴区", + "230903": "桃山区", + "230904": "茄子河区", + "230921": "勃利县", + "231002": "东安区", + "231003": "阳明区", + "231004": "爱民区", + "231005": "西安区", + "231025": "林口县", + "231081": "绥芬河市", + "231083": "海林市", + "231084": "宁安市", + "231085": "穆棱市", + "231086": "东宁市", + "231102": "爱辉区", + "231121": "嫩江县", + "231123": "逊克县", + "231124": "孙吴县", + "231181": "北安市", + "231182": "五大连池市", + "231202": "北林区", + "231221": "望奎县", + "231222": "兰西县", + "231223": "青冈县", + "231224": "庆安县", + "231225": "明水县", + "231226": "绥棱县", + "231281": "安达市", + "231282": "肇东市", + "231283": "海伦市", + "232721": "呼玛县", + "232722": "塔河县", + "232723": "漠河县", + "310101": "黄浦区", + "310104": "徐汇区", + "310105": "长宁区", + "310106": "静安区", + "310107": "普陀区", + "310109": "虹口区", + "310110": "杨浦区", + "310112": "闵行区", + "310113": "宝山区", + "310114": "嘉定区", + "310115": "浦东新区", + "310116": "金山区", + "310117": "松江区", + "310118": "青浦区", + "310120": "奉贤区", + "310151": "崇明区", + "320102": "玄武区", + "320104": "秦淮区", + "320105": "建邺区", + "320106": "鼓楼区", + "320111": "浦口区", + "320113": "栖霞区", + "320114": "雨花台区", + "320115": "江宁区", + "320116": "六合区", + "320117": "溧水区", + "320118": "高淳区", + "320205": "锡山区", + "320206": "惠山区", + "320211": "滨湖区", + "320213": "梁溪区", + "320214": "新吴区", + "320281": "江阴市", + "320282": "宜兴市", + "320302": "鼓楼区", + "320303": "云龙区", + "320305": "贾汪区", + "320311": "泉山区", + "320312": "铜山区", + "320321": "丰县", + "320322": "沛县", + "320324": "睢宁县", + "320381": "新沂市", + "320382": "邳州市", + "320402": "天宁区", + "320404": "钟楼区", + "320411": "新北区", + "320412": "武进区", + "320413": "金坛区", + "320481": "溧阳市", + "320505": "虎丘区", + "320506": "吴中区", + "320507": "相城区", + "320508": "姑苏区", + "320509": "吴江区", + "320581": "常熟市", + "320582": "张家港市", + "320583": "昆山市", + "320585": "太仓市", + "320602": "崇川区", + "320611": "港闸区", + "320612": "通州区", + "320621": "海安县", + "320623": "如东县", + "320681": "启东市", + "320682": "如皋市", + "320684": "海门市", + "320703": "连云区", + "320706": "海州区", + "320707": "赣榆区", + "320722": "东海县", + "320723": "灌云县", + "320724": "灌南县", + "320803": "淮安区", + "320804": "淮阴区", + "320812": "清江浦区", + "320813": "洪泽区", + "320826": "涟水县", + "320830": "盱眙县", + "320831": "金湖县", + "320902": "亭湖区", + "320903": "盐都区", + "320904": "大丰区", + "320921": "响水县", + "320922": "滨海县", + "320923": "阜宁县", + "320924": "射阳县", + "320925": "建湖县", + "320981": "东台市", + "321002": "广陵区", + "321003": "邗江区", + "321012": "江都区", + "321023": "宝应县", + "321081": "仪征市", + "321084": "高邮市", + "321102": "京口区", + "321111": "润州区", + "321112": "丹徒区", + "321181": "丹阳市", + "321182": "扬中市", + "321183": "句容市", + "321202": "海陵区", + "321203": "高港区", + "321204": "姜堰区", + "321281": "兴化市", + "321282": "靖江市", + "321283": "泰兴市", + "321302": "宿城区", + "321311": "宿豫区", + "321322": "沭阳县", + "321323": "泗阳县", + "321324": "泗洪县", + "330102": "上城区", + "330103": "下城区", + "330104": "江干区", + "330105": "拱墅区", + "330106": "西湖区", + "330108": "滨江区", + "330109": "萧山区", + "330110": "余杭区", + "330111": "富阳区", + "330122": "桐庐县", + "330127": "淳安县", + "330182": "建德市", + "330185": "临安市", + "330203": "海曙区", + "330204": "江东区", + "330205": "江北区", + "330206": "北仑区", + "330211": "镇海区", + "330212": "鄞州区", + "330225": "象山县", + "330226": "宁海县", + "330281": "余姚市", + "330282": "慈溪市", + "330283": "奉化市", + "330302": "鹿城区", + "330303": "龙湾区", + "330304": "瓯海区", + "330305": "洞头区", + "330324": "永嘉县", + "330326": "平阳县", + "330327": "苍南县", + "330328": "文成县", + "330329": "泰顺县", + "330381": "瑞安市", + "330382": "乐清市", + "330402": "南湖区", + "330411": "秀洲区", + "330421": "嘉善县", + "330424": "海盐县", + "330481": "海宁市", + "330482": "平湖市", + "330483": "桐乡市", + "330502": "吴兴区", + "330503": "南浔区", + "330521": "德清县", + "330522": "长兴县", + "330523": "安吉县", + "330602": "越城区", + "330603": "柯桥区", + "330604": "上虞区", + "330624": "新昌县", + "330681": "诸暨市", + "330683": "嵊州市", + "330702": "婺城区", + "330703": "金东区", + "330723": "武义县", + "330726": "浦江县", + "330727": "磐安县", + "330781": "兰溪市", + "330782": "义乌市", + "330783": "东阳市", + "330784": "永康市", + "330802": "柯城区", + "330803": "衢江区", + "330822": "常山县", + "330824": "开化县", + "330825": "龙游县", + "330881": "江山市", + "330902": "定海区", + "330903": "普陀区", + "330921": "岱山县", + "330922": "嵊泗县", + "331002": "椒江区", + "331003": "黄岩区", + "331004": "路桥区", + "331021": "玉环县", + "331022": "三门县", + "331023": "天台县", + "331024": "仙居县", + "331081": "温岭市", + "331082": "临海市", + "331102": "莲都区", + "331121": "青田县", + "331122": "缙云县", + "331123": "遂昌县", + "331124": "松阳县", + "331125": "云和县", + "331126": "庆元县", + "331127": "景宁畲族自治县", + "331181": "龙泉市", + "340102": "瑶海区", + "340103": "庐阳区", + "340104": "蜀山区", + "340111": "包河区", + "340121": "长丰县", + "340122": "肥东县", + "340123": "肥西县", + "340124": "庐江县", + "340181": "巢湖市", + "340202": "镜湖区", + "340203": "弋江区", + "340207": "鸠江区", + "340208": "三山区", + "340221": "芜湖县", + "340222": "繁昌县", + "340223": "南陵县", + "340225": "无为县", + "340302": "龙子湖区", + "340303": "蚌山区", + "340304": "禹会区", + "340311": "淮上区", + "340321": "怀远县", + "340322": "五河县", + "340323": "固镇县", + "340402": "大通区", + "340403": "田家庵区", + "340404": "谢家集区", + "340405": "八公山区", + "340406": "潘集区", + "340421": "凤台县", + "340422": "寿县", + "340503": "花山区", + "340504": "雨山区", + "340506": "博望区", + "340521": "当涂县", + "340522": "含山县", + "340523": "和县", + "340602": "杜集区", + "340603": "相山区", + "340604": "烈山区", + "340621": "濉溪县", + "340705": "铜官区", + "340706": "义安区", + "340711": "郊区", + "340722": "枞阳县", + "340802": "迎江区", + "340803": "大观区", + "340811": "宜秀区", + "340822": "怀宁县", + "340824": "潜山县", + "340825": "太湖县", + "340826": "宿松县", + "340827": "望江县", + "340828": "岳西县", + "340881": "桐城市", + "341002": "屯溪区", + "341003": "黄山区", + "341004": "徽州区", + "341021": "歙县", + "341022": "休宁县", + "341023": "黟县", + "341024": "祁门县", + "341102": "琅琊区", + "341103": "南谯区", + "341122": "来安县", + "341124": "全椒县", + "341125": "定远县", + "341126": "凤阳县", + "341181": "天长市", + "341182": "明光市", + "341202": "颍州区", + "341203": "颍东区", + "341204": "颍泉区", + "341221": "临泉县", + "341222": "太和县", + "341225": "阜南县", + "341226": "颍上县", + "341282": "界首市", + "341302": "埇桥区", + "341321": "砀山县", + "341322": "萧县", + "341323": "灵璧县", + "341324": "泗县", + "341502": "金安区", + "341503": "裕安区", + "341504": "叶集区", + "341522": "霍邱县", + "341523": "舒城县", + "341524": "金寨县", + "341525": "霍山县", + "341602": "谯城区", + "341621": "涡阳县", + "341622": "蒙城县", + "341623": "利辛县", + "341702": "贵池区", + "341721": "东至县", + "341722": "石台县", + "341723": "青阳县", + "341802": "宣州区", + "341821": "郎溪县", + "341822": "广德县", + "341823": "泾县", + "341824": "绩溪县", + "341825": "旌德县", + "341881": "宁国市", + "350102": "鼓楼区", + "350103": "台江区", + "350104": "仓山区", + "350105": "马尾区", + "350111": "晋安区", + "350121": "闽侯县", + "350122": "连江县", + "350123": "罗源县", + "350124": "闽清县", + "350125": "永泰县", + "350128": "平潭县", + "350181": "福清市", + "350182": "长乐市", + "350203": "思明区", + "350205": "海沧区", + "350206": "湖里区", + "350211": "集美区", + "350212": "同安区", + "350213": "翔安区", + "350302": "城厢区", + "350303": "涵江区", + "350304": "荔城区", + "350305": "秀屿区", + "350322": "仙游县", + "350402": "梅列区", + "350403": "三元区", + "350421": "明溪县", + "350423": "清流县", + "350424": "宁化县", + "350425": "大田县", + "350426": "尤溪县", + "350427": "沙县", + "350428": "将乐县", + "350429": "泰宁县", + "350430": "建宁县", + "350481": "永安市", + "350502": "鲤城区", + "350503": "丰泽区", + "350504": "洛江区", + "350505": "泉港区", + "350521": "惠安县", + "350524": "安溪县", + "350525": "永春县", + "350526": "德化县", + "350527": "金门县", + "350581": "石狮市", + "350582": "晋江市", + "350583": "南安市", + "350602": "芗城区", + "350603": "龙文区", + "350622": "云霄县", + "350623": "漳浦县", + "350624": "诏安县", + "350625": "长泰县", + "350626": "东山县", + "350627": "南靖县", + "350628": "平和县", + "350629": "华安县", + "350681": "龙海市", + "350702": "延平区", + "350703": "建阳区", + "350721": "顺昌县", + "350722": "浦城县", + "350723": "光泽县", + "350724": "松溪县", + "350725": "政和县", + "350781": "邵武市", + "350782": "武夷山市", + "350783": "建瓯市", + "350802": "新罗区", + "350803": "永定区", + "350821": "长汀县", + "350823": "上杭县", + "350824": "武平县", + "350825": "连城县", + "350881": "漳平市", + "350902": "蕉城区", + "350921": "霞浦县", + "350922": "古田县", + "350923": "屏南县", + "350924": "寿宁县", + "350925": "周宁县", + "350926": "柘荣县", + "350981": "福安市", + "350982": "福鼎市", + "360102": "东湖区", + "360103": "西湖区", + "360104": "青云谱区", + "360105": "湾里区", + "360111": "青山湖区", + "360112": "新建区", + "360121": "南昌县", + "360123": "安义县", + "360124": "进贤县", + "360202": "昌江区", + "360203": "珠山区", + "360222": "浮梁县", + "360281": "乐平市", + "360302": "安源区", + "360313": "湘东区", + "360321": "莲花县", + "360322": "上栗县", + "360323": "芦溪县", + "360402": "濂溪区", + "360403": "浔阳区", + "360421": "九江县", + "360423": "武宁县", + "360424": "修水县", + "360425": "永修县", + "360426": "德安县", + "360428": "都昌县", + "360429": "湖口县", + "360430": "彭泽县", + "360481": "瑞昌市", + "360482": "共青城市", + "360483": "庐山市", + "360502": "渝水区", + "360521": "分宜县", + "360602": "月湖区", + "360622": "余江县", + "360681": "贵溪市", + "360702": "章贡区", + "360703": "南康区", + "360721": "赣县", + "360722": "信丰县", + "360723": "大余县", + "360724": "上犹县", + "360725": "崇义县", + "360726": "安远县", + "360727": "龙南县", + "360728": "定南县", + "360729": "全南县", + "360730": "宁都县", + "360731": "于都县", + "360732": "兴国县", + "360733": "会昌县", + "360734": "寻乌县", + "360735": "石城县", + "360781": "瑞金市", + "360802": "吉州区", + "360803": "青原区", + "360821": "吉安县", + "360822": "吉水县", + "360823": "峡江县", + "360824": "新干县", + "360825": "永丰县", + "360826": "泰和县", + "360827": "遂川县", + "360828": "万安县", + "360829": "安福县", + "360830": "永新县", + "360881": "井冈山市", + "360902": "袁州区", + "360921": "奉新县", + "360922": "万载县", + "360923": "上高县", + "360924": "宜丰县", + "360925": "靖安县", + "360926": "铜鼓县", + "360981": "丰城市", + "360982": "樟树市", + "360983": "高安市", + "361002": "临川区", + "361021": "南城县", + "361022": "黎川县", + "361023": "南丰县", + "361024": "崇仁县", + "361025": "乐安县", + "361026": "宜黄县", + "361027": "金溪县", + "361028": "资溪县", + "361029": "东乡县", + "361030": "广昌县", + "361102": "信州区", + "361103": "广丰区", + "361121": "上饶县", + "361123": "玉山县", + "361124": "铅山县", + "361125": "横峰县", + "361126": "弋阳县", + "361127": "余干县", + "361128": "鄱阳县", + "361129": "万年县", + "361130": "婺源县", + "361181": "德兴市", + "370102": "历下区", + "370103": "市中区", + "370104": "槐荫区", + "370105": "天桥区", + "370112": "历城区", + "370113": "长清区", + "370124": "平阴县", + "370125": "济阳县", + "370126": "商河县", + "370181": "章丘市", + "370202": "市南区", + "370203": "市北区", + "370211": "黄岛区", + "370212": "崂山区", + "370213": "李沧区", + "370214": "城阳区", + "370281": "胶州市", + "370282": "即墨市", + "370283": "平度市", + "370285": "莱西市", + "370302": "淄川区", + "370303": "张店区", + "370304": "博山区", + "370305": "临淄区", + "370306": "周村区", + "370321": "桓台县", + "370322": "高青县", + "370323": "沂源县", + "370402": "市中区", + "370403": "薛城区", + "370404": "峄城区", + "370405": "台儿庄区", + "370406": "山亭区", + "370481": "滕州市", + "370502": "东营区", + "370503": "河口区", + "370505": "垦利区", + "370522": "利津县", + "370523": "广饶县", + "370602": "芝罘区", + "370611": "福山区", + "370612": "牟平区", + "370613": "莱山区", + "370634": "长岛县", + "370681": "龙口市", + "370682": "莱阳市", + "370683": "莱州市", + "370684": "蓬莱市", + "370685": "招远市", + "370686": "栖霞市", + "370687": "海阳市", + "370702": "潍城区", + "370703": "寒亭区", + "370704": "坊子区", + "370705": "奎文区", + "370724": "临朐县", + "370725": "昌乐县", + "370781": "青州市", + "370782": "诸城市", + "370783": "寿光市", + "370784": "安丘市", + "370785": "高密市", + "370786": "昌邑市", + "370811": "任城区", + "370812": "兖州区", + "370826": "微山县", + "370827": "鱼台县", + "370828": "金乡县", + "370829": "嘉祥县", + "370830": "汶上县", + "370831": "泗水县", + "370832": "梁山县", + "370881": "曲阜市", + "370883": "邹城市", + "370902": "泰山区", + "370911": "岱岳区", + "370921": "宁阳县", + "370923": "东平县", + "370982": "新泰市", + "370983": "肥城市", + "371002": "环翠区", + "371003": "文登区", + "371082": "荣成市", + "371083": "乳山市", + "371102": "东港区", + "371103": "岚山区", + "371121": "五莲县", + "371122": "莒县", + "371202": "莱城区", + "371203": "钢城区", + "371302": "兰山区", + "371311": "罗庄区", + "371312": "河东区", + "371321": "沂南县", + "371322": "郯城县", + "371323": "沂水县", + "371324": "兰陵县", + "371325": "费县", + "371326": "平邑县", + "371327": "莒南县", + "371328": "蒙阴县", + "371329": "临沭县", + "371402": "德城区", + "371403": "陵城区", + "371422": "宁津县", + "371423": "庆云县", + "371424": "临邑县", + "371425": "齐河县", + "371426": "平原县", + "371427": "夏津县", + "371428": "武城县", + "371481": "乐陵市", + "371482": "禹城市", + "371502": "东昌府区", + "371521": "阳谷县", + "371522": "莘县", + "371523": "茌平县", + "371524": "东阿县", + "371525": "冠县", + "371526": "高唐县", + "371581": "临清市", + "371602": "滨城区", + "371603": "沾化区", + "371621": "惠民县", + "371622": "阳信县", + "371623": "无棣县", + "371625": "博兴县", + "371626": "邹平县", + "371702": "牡丹区", + "371703": "定陶区", + "371721": "曹县", + "371722": "单县", + "371723": "成武县", + "371724": "巨野县", + "371725": "郓城县", + "371726": "鄄城县", + "371728": "东明县", + "410102": "中原区", + "410103": "二七区", + "410104": "管城回族区", + "410105": "金水区", + "410106": "上街区", + "410108": "惠济区", + "410122": "中牟县", + "410181": "巩义市", + "410182": "荥阳市", + "410183": "新密市", + "410184": "新郑市", + "410185": "登封市", + "410202": "龙亭区", + "410203": "顺河回族区", + "410204": "鼓楼区", + "410205": "禹王台区", + "410211": "金明区", + "410212": "祥符区", + "410221": "杞县", + "410222": "通许县", + "410223": "尉氏县", + "410225": "兰考县", + "410302": "老城区", + "410303": "西工区", + "410304": "瀍河回族区", + "410305": "涧西区", + "410306": "吉利区", + "410311": "洛龙区", + "410322": "孟津县", + "410323": "新安县", + "410324": "栾川县", + "410325": "嵩县", + "410326": "汝阳县", + "410327": "宜阳县", + "410328": "洛宁县", + "410329": "伊川县", + "410381": "偃师市", + "410402": "新华区", + "410403": "卫东区", + "410404": "石龙区", + "410411": "湛河区", + "410421": "宝丰县", + "410422": "叶县", + "410423": "鲁山县", + "410425": "郏县", + "410481": "舞钢市", + "410482": "汝州市", + "410502": "文峰区", + "410503": "北关区", + "410505": "殷都区", + "410506": "龙安区", + "410522": "安阳县", + "410523": "汤阴县", + "410526": "滑县", + "410527": "内黄县", + "410581": "林州市", + "410602": "鹤山区", + "410603": "山城区", + "410611": "淇滨区", + "410621": "浚县", + "410622": "淇县", + "410702": "红旗区", + "410703": "卫滨区", + "410704": "凤泉区", + "410711": "牧野区", + "410721": "新乡县", + "410724": "获嘉县", + "410725": "原阳县", + "410726": "延津县", + "410727": "封丘县", + "410728": "长垣县", + "410781": "卫辉市", + "410782": "辉县市", + "410802": "解放区", + "410803": "中站区", + "410804": "马村区", + "410811": "山阳区", + "410821": "修武县", + "410822": "博爱县", + "410823": "武陟县", + "410825": "温县", + "410882": "沁阳市", + "410883": "孟州市", + "410902": "华龙区", + "410922": "清丰县", + "410923": "南乐县", + "410926": "范县", + "410927": "台前县", + "410928": "濮阳县", + "411002": "魏都区", + "411023": "许昌县", + "411024": "鄢陵县", + "411025": "襄城县", + "411081": "禹州市", + "411082": "长葛市", + "411102": "源汇区", + "411103": "郾城区", + "411104": "召陵区", + "411121": "舞阳县", + "411122": "临颍县", + "411202": "湖滨区", + "411203": "陕州区", + "411221": "渑池县", + "411224": "卢氏县", + "411281": "义马市", + "411282": "灵宝市", + "411302": "宛城区", + "411303": "卧龙区", + "411321": "南召县", + "411322": "方城县", + "411323": "西峡县", + "411324": "镇平县", + "411325": "内乡县", + "411326": "淅川县", + "411327": "社旗县", + "411328": "唐河县", + "411329": "新野县", + "411330": "桐柏县", + "411381": "邓州市", + "411402": "梁园区", + "411403": "睢阳区", + "411421": "民权县", + "411422": "睢县", + "411423": "宁陵县", + "411424": "柘城县", + "411425": "虞城县", + "411426": "夏邑县", + "411481": "永城市", + "411502": "浉河区", + "411503": "平桥区", + "411521": "罗山县", + "411522": "光山县", + "411523": "新县", + "411524": "商城县", + "411525": "固始县", + "411526": "潢川县", + "411527": "淮滨县", + "411528": "息县", + "411602": "川汇区", + "411621": "扶沟县", + "411622": "西华县", + "411623": "商水县", + "411624": "沈丘县", + "411625": "郸城县", + "411626": "淮阳县", + "411627": "太康县", + "411628": "鹿邑县", + "411681": "项城市", + "411702": "驿城区", + "411721": "西平县", + "411722": "上蔡县", + "411723": "平舆县", + "411724": "正阳县", + "411725": "确山县", + "411726": "泌阳县", + "411727": "汝南县", + "411728": "遂平县", + "411729": "新蔡县", + "419001": "济源市", + "420102": "江岸区", + "420103": "江汉区", + "420104": "硚口区", + "420105": "汉阳区", + "420106": "武昌区", + "420107": "青山区", + "420111": "洪山区", + "420112": "东西湖区", + "420113": "汉南区", + "420114": "蔡甸区", + "420115": "江夏区", + "420116": "黄陂区", + "420117": "新洲区", + "420202": "黄石港区", + "420203": "西塞山区", + "420204": "下陆区", + "420205": "铁山区", + "420222": "阳新县", + "420281": "大冶市", + "420302": "茅箭区", + "420303": "张湾区", + "420304": "郧阳区", + "420322": "郧西县", + "420323": "竹山县", + "420324": "竹溪县", + "420325": "房县", + "420381": "丹江口市", + "420502": "西陵区", + "420503": "伍家岗区", + "420504": "点军区", + "420505": "猇亭区", + "420506": "夷陵区", + "420525": "远安县", + "420526": "兴山县", + "420527": "秭归县", + "420528": "长阳土家族自治县", + "420529": "五峰土家族自治县", + "420581": "宜都市", + "420582": "当阳市", + "420583": "枝江市", + "420602": "襄城区", + "420606": "樊城区", + "420607": "襄州区", + "420624": "南漳县", + "420625": "谷城县", + "420626": "保康县", + "420682": "老河口市", + "420683": "枣阳市", + "420684": "宜城市", + "420702": "梁子湖区", + "420703": "华容区", + "420704": "鄂城区", + "420802": "东宝区", + "420804": "掇刀区", + "420821": "京山县", + "420822": "沙洋县", + "420881": "钟祥市", + "420902": "孝南区", + "420921": "孝昌县", + "420922": "大悟县", + "420923": "云梦县", + "420981": "应城市", + "420982": "安陆市", + "420984": "汉川市", + "421002": "沙市区", + "421003": "荆州区", + "421022": "公安县", + "421023": "监利县", + "421024": "江陵县", + "421081": "石首市", + "421083": "洪湖市", + "421087": "松滋市", + "421102": "黄州区", + "421121": "团风县", + "421122": "红安县", + "421123": "罗田县", + "421124": "英山县", + "421125": "浠水县", + "421126": "蕲春县", + "421127": "黄梅县", + "421181": "麻城市", + "421182": "武穴市", + "421202": "咸安区", + "421221": "嘉鱼县", + "421222": "通城县", + "421223": "崇阳县", + "421224": "通山县", + "421281": "赤壁市", + "421303": "曾都区", + "421321": "随县", + "421381": "广水市", + "422801": "恩施市", + "422802": "利川市", + "422822": "建始县", + "422823": "巴东县", + "422825": "宣恩县", + "422826": "咸丰县", + "422827": "来凤县", + "422828": "鹤峰县", + "429004": "仙桃市", + "429005": "潜江市", + "429006": "天门市", + "429021": "神农架林区", + "430102": "芙蓉区", + "430103": "天心区", + "430104": "岳麓区", + "430105": "开福区", + "430111": "雨花区", + "430112": "望城区", + "430121": "长沙县", + "430124": "宁乡县", + "430181": "浏阳市", + "430202": "荷塘区", + "430203": "芦淞区", + "430204": "石峰区", + "430211": "天元区", + "430221": "株洲县", + "430223": "攸县", + "430224": "茶陵县", + "430225": "炎陵县", + "430281": "醴陵市", + "430302": "雨湖区", + "430304": "岳塘区", + "430321": "湘潭县", + "430381": "湘乡市", + "430382": "韶山市", + "430405": "珠晖区", + "430406": "雁峰区", + "430407": "石鼓区", + "430408": "蒸湘区", + "430412": "南岳区", + "430421": "衡阳县", + "430422": "衡南县", + "430423": "衡山县", + "430424": "衡东县", + "430426": "祁东县", + "430481": "耒阳市", + "430482": "常宁市", + "430502": "双清区", + "430503": "大祥区", + "430511": "北塔区", + "430521": "邵东县", + "430522": "新邵县", + "430523": "邵阳县", + "430524": "隆回县", + "430525": "洞口县", + "430527": "绥宁县", + "430528": "新宁县", + "430529": "城步苗族自治县", + "430581": "武冈市", + "430602": "岳阳楼区", + "430603": "云溪区", + "430611": "君山区", + "430621": "岳阳县", + "430623": "华容县", + "430624": "湘阴县", + "430626": "平江县", + "430681": "汨罗市", + "430682": "临湘市", + "430702": "武陵区", + "430703": "鼎城区", + "430721": "安乡县", + "430722": "汉寿县", + "430723": "澧县", + "430724": "临澧县", + "430725": "桃源县", + "430726": "石门县", + "430781": "津市市", + "430802": "永定区", + "430811": "武陵源区", + "430821": "慈利县", + "430822": "桑植县", + "430902": "资阳区", + "430903": "赫山区", + "430921": "南县", + "430922": "桃江县", + "430923": "安化县", + "430981": "沅江市", + "431002": "北湖区", + "431003": "苏仙区", + "431021": "桂阳县", + "431022": "宜章县", + "431023": "永兴县", + "431024": "嘉禾县", + "431025": "临武县", + "431026": "汝城县", + "431027": "桂东县", + "431028": "安仁县", + "431081": "资兴市", + "431102": "零陵区", + "431103": "冷水滩区", + "431121": "祁阳县", + "431122": "东安县", + "431123": "双牌县", + "431124": "道县", + "431125": "江永县", + "431126": "宁远县", + "431127": "蓝山县", + "431128": "新田县", + "431129": "江华瑶族自治县", + "431202": "鹤城区", + "431221": "中方县", + "431222": "沅陵县", + "431223": "辰溪县", + "431224": "溆浦县", + "431225": "会同县", + "431226": "麻阳苗族自治县", + "431227": "新晃侗族自治县", + "431228": "芷江侗族自治县", + "431229": "靖州苗族侗族自治县", + "431230": "通道侗族自治县", + "431281": "洪江市", + "431302": "娄星区", + "431321": "双峰县", + "431322": "新化县", + "431381": "冷水江市", + "431382": "涟源市", + "433101": "吉首市", + "433122": "泸溪县", + "433123": "凤凰县", + "433124": "花垣县", + "433125": "保靖县", + "433126": "古丈县", + "433127": "永顺县", + "433130": "龙山县", + "440103": "荔湾区", + "440104": "越秀区", + "440105": "海珠区", + "440106": "天河区", + "440111": "白云区", + "440112": "黄埔区", + "440113": "番禺区", + "440114": "花都区", + "440115": "南沙区", + "440117": "从化区", + "440118": "增城区", + "440203": "武江区", + "440204": "浈江区", + "440205": "曲江区", + "440222": "始兴县", + "440224": "仁化县", + "440229": "翁源县", + "440232": "乳源瑶族自治县", + "440233": "新丰县", + "440281": "乐昌市", + "440282": "南雄市", + "440303": "罗湖区", + "440304": "福田区", + "440305": "南山区", + "440306": "宝安区", + "440307": "龙岗区", + "440308": "盐田区", + "440402": "香洲区", + "440403": "斗门区", + "440404": "金湾区", + "440507": "龙湖区", + "440511": "金平区", + "440512": "濠江区", + "440513": "潮阳区", + "440514": "潮南区", + "440515": "澄海区", + "440523": "南澳县", + "440604": "禅城区", + "440605": "南海区", + "440606": "顺德区", + "440607": "三水区", + "440608": "高明区", + "440703": "蓬江区", + "440704": "江海区", + "440705": "新会区", + "440781": "台山市", + "440783": "开平市", + "440784": "鹤山市", + "440785": "恩平市", + "440802": "赤坎区", + "440803": "霞山区", + "440804": "坡头区", + "440811": "麻章区", + "440823": "遂溪县", + "440825": "徐闻县", + "440881": "廉江市", + "440882": "雷州市", + "440883": "吴川市", + "440902": "茂南区", + "440904": "电白区", + "440981": "高州市", + "440982": "化州市", + "440983": "信宜市", + "441202": "端州区", + "441203": "鼎湖区", + "441204": "高要区", + "441223": "广宁县", + "441224": "怀集县", + "441225": "封开县", + "441226": "德庆县", + "441284": "四会市", + "441302": "惠城区", + "441303": "惠阳区", + "441322": "博罗县", + "441323": "惠东县", + "441324": "龙门县", + "441402": "梅江区", + "441403": "梅县区", + "441422": "大埔县", + "441423": "丰顺县", + "441424": "五华县", + "441426": "平远县", + "441427": "蕉岭县", + "441481": "兴宁市", + "441502": "城区", + "441521": "海丰县", + "441523": "陆河县", + "441581": "陆丰市", + "441602": "源城区", + "441621": "紫金县", + "441622": "龙川县", + "441623": "连平县", + "441624": "和平县", + "441625": "东源县", + "441702": "江城区", + "441704": "阳东区", + "441721": "阳西县", + "441781": "阳春市", + "441802": "清城区", + "441803": "清新区", + "441821": "佛冈县", + "441823": "阳山县", + "441825": "连山壮族瑶族自治县", + "441826": "连南瑶族自治县", + "441881": "英德市", + "441882": "连州市", + "441900": "东莞市", + "442000": "中山市", + "445102": "湘桥区", + "445103": "潮安区", + "445122": "饶平县", + "445202": "榕城区", + "445203": "揭东区", + "445222": "揭西县", + "445224": "惠来县", + "445281": "普宁市", + "445302": "云城区", + "445303": "云安区", + "445321": "新兴县", + "445322": "郁南县", + "445381": "罗定市", + "450102": "兴宁区", + "450103": "青秀区", + "450105": "江南区", + "450107": "西乡塘区", + "450108": "良庆区", + "450109": "邕宁区", + "450110": "武鸣区", + "450123": "隆安县", + "450124": "马山县", + "450125": "上林县", + "450126": "宾阳县", + "450127": "横县", + "450202": "城中区", + "450203": "鱼峰区", + "450204": "柳南区", + "450205": "柳北区", + "450206": "柳江区", + "450222": "柳城县", + "450223": "鹿寨县", + "450224": "融安县", + "450225": "融水苗族自治县", + "450226": "三江侗族自治县", + "450302": "秀峰区", + "450303": "叠彩区", + "450304": "象山区", + "450305": "七星区", + "450311": "雁山区", + "450312": "临桂区", + "450321": "阳朔县", + "450323": "灵川县", + "450324": "全州县", + "450325": "兴安县", + "450326": "永福县", + "450327": "灌阳县", + "450328": "龙胜各族自治县", + "450329": "资源县", + "450330": "平乐县", + "450331": "荔浦县", + "450332": "恭城瑶族自治县", + "450403": "万秀区", + "450405": "长洲区", + "450406": "龙圩区", + "450421": "苍梧县", + "450422": "藤县", + "450423": "蒙山县", + "450481": "岑溪市", + "450502": "海城区", + "450503": "银海区", + "450512": "铁山港区", + "450521": "合浦县", + "450602": "港口区", + "450603": "防城区", + "450621": "上思县", + "450681": "东兴市", + "450702": "钦南区", + "450703": "钦北区", + "450721": "灵山县", + "450722": "浦北县", + "450802": "港北区", + "450803": "港南区", + "450804": "覃塘区", + "450821": "平南县", + "450881": "桂平市", + "450902": "玉州区", + "450903": "福绵区", + "450921": "容县", + "450922": "陆川县", + "450923": "博白县", + "450924": "兴业县", + "450981": "北流市", + "451002": "右江区", + "451021": "田阳县", + "451022": "田东县", + "451023": "平果县", + "451024": "德保县", + "451026": "那坡县", + "451027": "凌云县", + "451028": "乐业县", + "451029": "田林县", + "451030": "西林县", + "451031": "隆林各族自治县", + "451081": "靖西市", + "451102": "八步区", + "451103": "平桂区", + "451121": "昭平县", + "451122": "钟山县", + "451123": "富川瑶族自治县", + "451202": "金城江区", + "451221": "南丹县", + "451222": "天峨县", + "451223": "凤山县", + "451224": "东兰县", + "451225": "罗城仫佬族自治县", + "451226": "环江毛南族自治县", + "451227": "巴马瑶族自治县", + "451228": "都安瑶族自治县", + "451229": "大化瑶族自治县", + "451281": "宜州市", + "451302": "兴宾区", + "451321": "忻城县", + "451322": "象州县", + "451323": "武宣县", + "451324": "金秀瑶族自治县", + "451381": "合山市", + "451402": "江州区", + "451421": "扶绥县", + "451422": "宁明县", + "451423": "龙州县", + "451424": "大新县", + "451425": "天等县", + "451481": "凭祥市", + "460105": "秀英区", + "460106": "龙华区", + "460107": "琼山区", + "460108": "美兰区", + "460201": "市辖区", + "460202": "海棠区", + "460203": "吉阳区", + "460204": "天涯区", + "460205": "崖州区", + "460321": "西沙群岛", + "460322": "南沙群岛", + "460323": "中沙群岛的岛礁及其海域", + "460400": "儋州市", + "469001": "五指山市", + "469002": "琼海市", + "469005": "文昌市", + "469006": "万宁市", + "469007": "东方市", + "469021": "定安县", + "469022": "屯昌县", + "469023": "澄迈县", + "469024": "临高县", + "469025": "白沙黎族自治县", + "469026": "昌江黎族自治县", + "469027": "乐东黎族自治县", + "469028": "陵水黎族自治县", + "469029": "保亭黎族苗族自治县", + "469030": "琼中黎族苗族自治县", + "500101": "万州区", + "500102": "涪陵区", + "500103": "渝中区", + "500104": "大渡口区", + "500105": "江北区", + "500106": "沙坪坝区", + "500107": "九龙坡区", + "500108": "南岸区", + "500109": "北碚区", + "500110": "綦江区", + "500111": "大足区", + "500112": "渝北区", + "500113": "巴南区", + "500114": "黔江区", + "500115": "长寿区", + "500116": "江津区", + "500117": "合川区", + "500118": "永川区", + "500119": "南川区", + "500120": "璧山区", + "500151": "铜梁区", + "500152": "潼南区", + "500153": "荣昌区", + "500154": "开州区", + "500228": "梁平县", + "500229": "城口县", + "500230": "丰都县", + "500231": "垫江县", + "500232": "武隆县", + "500233": "忠县", + "500235": "云阳县", + "500236": "奉节县", + "500237": "巫山县", + "500238": "巫溪县", + "500240": "石柱土家族自治县", + "500241": "秀山土家族苗族自治县", + "500242": "酉阳土家族苗族自治县", + "500243": "彭水苗族土家族自治县", + "510104": "锦江区", + "510105": "青羊区", + "510106": "金牛区", + "510107": "武侯区", + "510108": "成华区", + "510112": "龙泉驿区", + "510113": "青白江区", + "510114": "新都区", + "510115": "温江区", + "510116": "双流区", + "510121": "金堂县", + "510124": "郫县", + "510129": "大邑县", + "510131": "蒲江县", + "510132": "新津县", + "510181": "都江堰市", + "510182": "彭州市", + "510183": "邛崃市", + "510184": "崇州市", + "510185": "简阳市", + "510302": "自流井区", + "510303": "贡井区", + "510304": "大安区", + "510311": "沿滩区", + "510321": "荣县", + "510322": "富顺县", + "510402": "东区", + "510403": "西区", + "510411": "仁和区", + "510421": "米易县", + "510422": "盐边县", + "510502": "江阳区", + "510503": "纳溪区", + "510504": "龙马潭区", + "510521": "泸县", + "510522": "合江县", + "510524": "叙永县", + "510525": "古蔺县", + "510603": "旌阳区", + "510623": "中江县", + "510626": "罗江县", + "510681": "广汉市", + "510682": "什邡市", + "510683": "绵竹市", + "510703": "涪城区", + "510704": "游仙区", + "510705": "安州区", + "510722": "三台县", + "510723": "盐亭县", + "510725": "梓潼县", + "510726": "北川羌族自治县", + "510727": "平武县", + "510781": "江油市", + "510802": "利州区", + "510811": "昭化区", + "510812": "朝天区", + "510821": "旺苍县", + "510822": "青川县", + "510823": "剑阁县", + "510824": "苍溪县", + "510903": "船山区", + "510904": "安居区", + "510921": "蓬溪县", + "510922": "射洪县", + "510923": "大英县", + "511002": "市中区", + "511011": "东兴区", + "511024": "威远县", + "511025": "资中县", + "511028": "隆昌县", + "511102": "市中区", + "511111": "沙湾区", + "511112": "五通桥区", + "511113": "金口河区", + "511123": "犍为县", + "511124": "井研县", + "511126": "夹江县", + "511129": "沐川县", + "511132": "峨边彝族自治县", + "511133": "马边彝族自治县", + "511181": "峨眉山市", + "511302": "顺庆区", + "511303": "高坪区", + "511304": "嘉陵区", + "511321": "南部县", + "511322": "营山县", + "511323": "蓬安县", + "511324": "仪陇县", + "511325": "西充县", + "511381": "阆中市", + "511402": "东坡区", + "511403": "彭山区", + "511421": "仁寿县", + "511423": "洪雅县", + "511424": "丹棱县", + "511425": "青神县", + "511502": "翠屏区", + "511503": "南溪区", + "511521": "宜宾县", + "511523": "江安县", + "511524": "长宁县", + "511525": "高县", + "511526": "珙县", + "511527": "筠连县", + "511528": "兴文县", + "511529": "屏山县", + "511602": "广安区", + "511603": "前锋区", + "511621": "岳池县", + "511622": "武胜县", + "511623": "邻水县", + "511681": "华蓥市", + "511702": "通川区", + "511703": "达川区", + "511722": "宣汉县", + "511723": "开江县", + "511724": "大竹县", + "511725": "渠县", + "511781": "万源市", + "511802": "雨城区", + "511803": "名山区", + "511822": "荥经县", + "511823": "汉源县", + "511824": "石棉县", + "511825": "天全县", + "511826": "芦山县", + "511827": "宝兴县", + "511902": "巴州区", + "511903": "恩阳区", + "511921": "通江县", + "511922": "南江县", + "511923": "平昌县", + "512002": "雁江区", + "512021": "安岳县", + "512022": "乐至县", + "513201": "马尔康市", + "513221": "汶川县", + "513222": "理县", + "513223": "茂县", + "513224": "松潘县", + "513225": "九寨沟县", + "513226": "金川县", + "513227": "小金县", + "513228": "黑水县", + "513230": "壤塘县", + "513231": "阿坝县", + "513232": "若尔盖县", + "513233": "红原县", + "513301": "康定市", + "513322": "泸定县", + "513323": "丹巴县", + "513324": "九龙县", + "513325": "雅江县", + "513326": "道孚县", + "513327": "炉霍县", + "513328": "甘孜县", + "513329": "新龙县", + "513330": "德格县", + "513331": "白玉县", + "513332": "石渠县", + "513333": "色达县", + "513334": "理塘县", + "513335": "巴塘县", + "513336": "乡城县", + "513337": "稻城县", + "513338": "得荣县", + "513401": "西昌市", + "513422": "木里藏族自治县", + "513423": "盐源县", + "513424": "德昌县", + "513425": "会理县", + "513426": "会东县", + "513427": "宁南县", + "513428": "普格县", + "513429": "布拖县", + "513430": "金阳县", + "513431": "昭觉县", + "513432": "喜德县", + "513433": "冕宁县", + "513434": "越西县", + "513435": "甘洛县", + "513436": "美姑县", + "513437": "雷波县", + "520102": "南明区", + "520103": "云岩区", + "520111": "花溪区", + "520112": "乌当区", + "520113": "白云区", + "520115": "观山湖区", + "520121": "开阳县", + "520122": "息烽县", + "520123": "修文县", + "520181": "清镇市", + "520201": "钟山区", + "520203": "六枝特区", + "520221": "水城县", + "520222": "盘县", + "520302": "红花岗区", + "520303": "汇川区", + "520304": "播州区", + "520322": "桐梓县", + "520323": "绥阳县", + "520324": "正安县", + "520325": "道真仡佬族苗族自治县", + "520326": "务川仡佬族苗族自治县", + "520327": "凤冈县", + "520328": "湄潭县", + "520329": "余庆县", + "520330": "习水县", + "520381": "赤水市", + "520382": "仁怀市", + "520402": "西秀区", + "520403": "平坝区", + "520422": "普定县", + "520423": "镇宁布依族苗族自治县", + "520424": "关岭布依族苗族自治县", + "520425": "紫云苗族布依族自治县", + "520502": "七星关区", + "520521": "大方县", + "520522": "黔西县", + "520523": "金沙县", + "520524": "织金县", + "520525": "纳雍县", + "520526": "威宁彝族回族苗族自治县", + "520527": "赫章县", + "520602": "碧江区", + "520603": "万山区", + "520621": "江口县", + "520622": "玉屏侗族自治县", + "520623": "石阡县", + "520624": "思南县", + "520625": "印江土家族苗族自治县", + "520626": "德江县", + "520627": "沿河土家族自治县", + "520628": "松桃苗族自治县", + "522301": "兴义市", + "522322": "兴仁县", + "522323": "普安县", + "522324": "晴隆县", + "522325": "贞丰县", + "522326": "望谟县", + "522327": "册亨县", + "522328": "安龙县", + "522601": "凯里市", + "522622": "黄平县", + "522623": "施秉县", + "522624": "三穗县", + "522625": "镇远县", + "522626": "岑巩县", + "522627": "天柱县", + "522628": "锦屏县", + "522629": "剑河县", + "522630": "台江县", + "522631": "黎平县", + "522632": "榕江县", + "522633": "从江县", + "522634": "雷山县", + "522635": "麻江县", + "522636": "丹寨县", + "522701": "都匀市", + "522702": "福泉市", + "522722": "荔波县", + "522723": "贵定县", + "522725": "瓮安县", + "522726": "独山县", + "522727": "平塘县", + "522728": "罗甸县", + "522729": "长顺县", + "522730": "龙里县", + "522731": "惠水县", + "522732": "三都水族自治县", + "530102": "五华区", + "530103": "盘龙区", + "530111": "官渡区", + "530112": "西山区", + "530113": "东川区", + "530114": "呈贡区", + "530122": "晋宁县", + "530124": "富民县", + "530125": "宜良县", + "530126": "石林彝族自治县", + "530127": "嵩明县", + "530128": "禄劝彝族苗族自治县", + "530129": "寻甸回族彝族自治县", + "530181": "安宁市", + "530302": "麒麟区", + "530303": "沾益区", + "530321": "马龙县", + "530322": "陆良县", + "530323": "师宗县", + "530324": "罗平县", + "530325": "富源县", + "530326": "会泽县", + "530381": "宣威市", + "530402": "红塔区", + "530403": "江川区", + "530422": "澄江县", + "530423": "通海县", + "530424": "华宁县", + "530425": "易门县", + "530426": "峨山彝族自治县", + "530427": "新平彝族傣族自治县", + "530428": "元江哈尼族彝族傣族自治县", + "530502": "隆阳区", + "530521": "施甸县", + "530523": "龙陵县", + "530524": "昌宁县", + "530581": "腾冲市", + "530602": "昭阳区", + "530621": "鲁甸县", + "530622": "巧家县", + "530623": "盐津县", + "530624": "大关县", + "530625": "永善县", + "530626": "绥江县", + "530627": "镇雄县", + "530628": "彝良县", + "530629": "威信县", + "530630": "水富县", + "530702": "古城区", + "530721": "玉龙纳西族自治县", + "530722": "永胜县", + "530723": "华坪县", + "530724": "宁蒗彝族自治县", + "530802": "思茅区", + "530821": "宁洱哈尼族彝族自治县", + "530822": "墨江哈尼族自治县", + "530823": "景东彝族自治县", + "530824": "景谷傣族彝族自治县", + "530825": "镇沅彝族哈尼族拉祜族自治县", + "530826": "江城哈尼族彝族自治县", + "530827": "孟连傣族拉祜族佤族自治县", + "530828": "澜沧拉祜族自治县", + "530829": "西盟佤族自治县", + "530902": "临翔区", + "530921": "凤庆县", + "530922": "云县", + "530923": "永德县", + "530924": "镇康县", + "530925": "双江拉祜族佤族布朗族傣族自治县", + "530926": "耿马傣族佤族自治县", + "530927": "沧源佤族自治县", + "532301": "楚雄市", + "532322": "双柏县", + "532323": "牟定县", + "532324": "南华县", + "532325": "姚安县", + "532326": "大姚县", + "532327": "永仁县", + "532328": "元谋县", + "532329": "武定县", + "532331": "禄丰县", + "532501": "个旧市", + "532502": "开远市", + "532503": "蒙自市", + "532504": "弥勒市", + "532523": "屏边苗族自治县", + "532524": "建水县", + "532525": "石屏县", + "532527": "泸西县", + "532528": "元阳县", + "532529": "红河县", + "532530": "金平苗族瑶族傣族自治县", + "532531": "绿春县", + "532532": "河口瑶族自治县", + "532601": "文山市", + "532622": "砚山县", + "532623": "西畴县", + "532624": "麻栗坡县", + "532625": "马关县", + "532626": "丘北县", + "532627": "广南县", + "532628": "富宁县", + "532801": "景洪市", + "532822": "勐海县", + "532823": "勐腊县", + "532901": "大理市", + "532922": "漾濞彝族自治县", + "532923": "祥云县", + "532924": "宾川县", + "532925": "弥渡县", + "532926": "南涧彝族自治县", + "532927": "巍山彝族回族自治县", + "532928": "永平县", + "532929": "云龙县", + "532930": "洱源县", + "532931": "剑川县", + "532932": "鹤庆县", + "533102": "瑞丽市", + "533103": "芒市", + "533122": "梁河县", + "533123": "盈江县", + "533124": "陇川县", + "533301": "泸水市", + "533323": "福贡县", + "533324": "贡山独龙族怒族自治县", + "533325": "兰坪白族普米族自治县", + "533401": "香格里拉市", + "533422": "德钦县", + "533423": "维西傈僳族自治县", + "540102": "城关区", + "540103": "堆龙德庆区", + "540121": "林周县", + "540122": "当雄县", + "540123": "尼木县", + "540124": "曲水县", + "540126": "达孜县", + "540127": "墨竹工卡县", + "540202": "桑珠孜区", + "540221": "南木林县", + "540222": "江孜县", + "540223": "定日县", + "540224": "萨迦县", + "540225": "拉孜县", + "540226": "昂仁县", + "540227": "谢通门县", + "540228": "白朗县", + "540229": "仁布县", + "540230": "康马县", + "540231": "定结县", + "540232": "仲巴县", + "540233": "亚东县", + "540234": "吉隆县", + "540235": "聂拉木县", + "540236": "萨嘎县", + "540237": "岗巴县", + "540302": "卡若区", + "540321": "江达县", + "540322": "贡觉县", + "540323": "类乌齐县", + "540324": "丁青县", + "540325": "察雅县", + "540326": "八宿县", + "540327": "左贡县", + "540328": "芒康县", + "540329": "洛隆县", + "540330": "边坝县", + "540402": "巴宜区", + "540421": "工布江达县", + "540422": "米林县", + "540423": "墨脱县", + "540424": "波密县", + "540425": "察隅县", + "540426": "朗县", + "540502": "乃东区", + "540521": "扎囊县", + "540522": "贡嘎县", + "540523": "桑日县", + "540524": "琼结县", + "540525": "曲松县", + "540526": "措美县", + "540527": "洛扎县", + "540528": "加查县", + "540529": "隆子县", + "540530": "错那县", + "540531": "浪卡子县", + "542421": "那曲县", + "542422": "嘉黎县", + "542423": "比如县", + "542424": "聂荣县", + "542425": "安多县", + "542426": "申扎县", + "542427": "索县", + "542428": "班戈县", + "542429": "巴青县", + "542430": "尼玛县", + "542431": "双湖县", + "542521": "普兰县", + "542522": "札达县", + "542523": "噶尔县", + "542524": "日土县", + "542525": "革吉县", + "542526": "改则县", + "542527": "措勤县", + "610102": "新城区", + "610103": "碑林区", + "610104": "莲湖区", + "610111": "灞桥区", + "610112": "未央区", + "610113": "雁塔区", + "610114": "阎良区", + "610115": "临潼区", + "610116": "长安区", + "610117": "高陵区", + "610122": "蓝田县", + "610124": "周至县", + "610125": "户县", + "610202": "王益区", + "610203": "印台区", + "610204": "耀州区", + "610222": "宜君县", + "610302": "渭滨区", + "610303": "金台区", + "610304": "陈仓区", + "610322": "凤翔县", + "610323": "岐山县", + "610324": "扶风县", + "610326": "眉县", + "610327": "陇县", + "610328": "千阳县", + "610329": "麟游县", + "610330": "凤县", + "610331": "太白县", + "610402": "秦都区", + "610403": "杨陵区", + "610404": "渭城区", + "610422": "三原县", + "610423": "泾阳县", + "610424": "乾县", + "610425": "礼泉县", + "610426": "永寿县", + "610427": "彬县", + "610428": "长武县", + "610429": "旬邑县", + "610430": "淳化县", + "610431": "武功县", + "610481": "兴平市", + "610502": "临渭区", + "610503": "华州区", + "610522": "潼关县", + "610523": "大荔县", + "610524": "合阳县", + "610525": "澄城县", + "610526": "蒲城县", + "610527": "白水县", + "610528": "富平县", + "610581": "韩城市", + "610582": "华阴市", + "610602": "宝塔区", + "610603": "安塞区", + "610621": "延长县", + "610622": "延川县", + "610623": "子长县", + "610625": "志丹县", + "610626": "吴起县", + "610627": "甘泉县", + "610628": "富县", + "610629": "洛川县", + "610630": "宜川县", + "610631": "黄龙县", + "610632": "黄陵县", + "610702": "汉台区", + "610721": "南郑县", + "610722": "城固县", + "610723": "洋县", + "610724": "西乡县", + "610725": "勉县", + "610726": "宁强县", + "610727": "略阳县", + "610728": "镇巴县", + "610729": "留坝县", + "610730": "佛坪县", + "610802": "榆阳区", + "610803": "横山区", + "610821": "神木县", + "610822": "府谷县", + "610824": "靖边县", + "610825": "定边县", + "610826": "绥德县", + "610827": "米脂县", + "610828": "佳县", + "610829": "吴堡县", + "610830": "清涧县", + "610831": "子洲县", + "610902": "汉滨区", + "610921": "汉阴县", + "610922": "石泉县", + "610923": "宁陕县", + "610924": "紫阳县", + "610925": "岚皋县", + "610926": "平利县", + "610927": "镇坪县", + "610928": "旬阳县", + "610929": "白河县", + "611002": "商州区", + "611021": "洛南县", + "611022": "丹凤县", + "611023": "商南县", + "611024": "山阳县", + "611025": "镇安县", + "611026": "柞水县", + "620102": "城关区", + "620103": "七里河区", + "620104": "西固区", + "620105": "安宁区", + "620111": "红古区", + "620121": "永登县", + "620122": "皋兰县", + "620123": "榆中县", + "620201": "嘉峪关市", + "620302": "金川区", + "620321": "永昌县", + "620402": "白银区", + "620403": "平川区", + "620421": "靖远县", + "620422": "会宁县", + "620423": "景泰县", + "620502": "秦州区", + "620503": "麦积区", + "620521": "清水县", + "620522": "秦安县", + "620523": "甘谷县", + "620524": "武山县", + "620525": "张家川回族自治县", + "620602": "凉州区", + "620621": "民勤县", + "620622": "古浪县", + "620623": "天祝藏族自治县", + "620702": "甘州区", + "620721": "肃南裕固族自治县", + "620722": "民乐县", + "620723": "临泽县", + "620724": "高台县", + "620725": "山丹县", + "620802": "崆峒区", + "620821": "泾川县", + "620822": "灵台县", + "620823": "崇信县", + "620824": "华亭县", + "620825": "庄浪县", + "620826": "静宁县", + "620902": "肃州区", + "620921": "金塔县", + "620922": "瓜州县", + "620923": "肃北蒙古族自治县", + "620924": "阿克塞哈萨克族自治县", + "620981": "玉门市", + "620982": "敦煌市", + "621002": "西峰区", + "621021": "庆城县", + "621022": "环县", + "621023": "华池县", + "621024": "合水县", + "621025": "正宁县", + "621026": "宁县", + "621027": "镇原县", + "621102": "安定区", + "621121": "通渭县", + "621122": "陇西县", + "621123": "渭源县", + "621124": "临洮县", + "621125": "漳县", + "621126": "岷县", + "621202": "武都区", + "621221": "成县", + "621222": "文县", + "621223": "宕昌县", + "621224": "康县", + "621225": "西和县", + "621226": "礼县", + "621227": "徽县", + "621228": "两当县", + "622901": "临夏市", + "622921": "临夏县", + "622922": "康乐县", + "622923": "永靖县", + "622924": "广河县", + "622925": "和政县", + "622926": "东乡族自治县", + "622927": "积石山保安族东乡族撒拉族自治县", + "623001": "合作市", + "623021": "临潭县", + "623022": "卓尼县", + "623023": "舟曲县", + "623024": "迭部县", + "623025": "玛曲县", + "623026": "碌曲县", + "623027": "夏河县", + "630102": "城东区", + "630103": "城中区", + "630104": "城西区", + "630105": "城北区", + "630121": "大通回族土族自治县", + "630122": "湟中县", + "630123": "湟源县", + "630202": "乐都区", + "630203": "平安区", + "630222": "民和回族土族自治县", + "630223": "互助土族自治县", + "630224": "化隆回族自治县", + "630225": "循化撒拉族自治县", + "632221": "门源回族自治县", + "632222": "祁连县", + "632223": "海晏县", + "632224": "刚察县", + "632321": "同仁县", + "632322": "尖扎县", + "632323": "泽库县", + "632324": "河南蒙古族自治县", + "632521": "共和县", + "632522": "同德县", + "632523": "贵德县", + "632524": "兴海县", + "632525": "贵南县", + "632621": "玛沁县", + "632622": "班玛县", + "632623": "甘德县", + "632624": "达日县", + "632625": "久治县", + "632626": "玛多县", + "632701": "玉树市", + "632722": "杂多县", + "632723": "称多县", + "632724": "治多县", + "632725": "囊谦县", + "632726": "曲麻莱县", + "632801": "格尔木市", + "632802": "德令哈市", + "632821": "乌兰县", + "632822": "都兰县", + "632823": "天峻县", + "640104": "兴庆区", + "640105": "西夏区", + "640106": "金凤区", + "640121": "永宁县", + "640122": "贺兰县", + "640181": "灵武市", + "640202": "大武口区", + "640205": "惠农区", + "640221": "平罗县", + "640302": "利通区", + "640303": "红寺堡区", + "640323": "盐池县", + "640324": "同心县", + "640381": "青铜峡市", + "640402": "原州区", + "640422": "西吉县", + "640423": "隆德县", + "640424": "泾源县", + "640425": "彭阳县", + "640502": "沙坡头区", + "640521": "中宁县", + "640522": "海原县", + "650102": "天山区", + "650103": "沙依巴克区", + "650104": "新市区", + "650105": "水磨沟区", + "650106": "头屯河区", + "650107": "达坂城区", + "650109": "米东区", + "650121": "乌鲁木齐县", + "650202": "独山子区", + "650203": "克拉玛依区", + "650204": "白碱滩区", + "650205": "乌尔禾区", + "650402": "高昌区", + "650421": "鄯善县", + "650422": "托克逊县", + "650502": "伊州区", + "650521": "巴里坤哈萨克自治县", + "650522": "伊吾县", + "652301": "昌吉市", + "652302": "阜康市", + "652323": "呼图壁县", + "652324": "玛纳斯县", + "652325": "奇台县", + "652327": "吉木萨尔县", + "652328": "木垒哈萨克自治县", + "652701": "博乐市", + "652702": "阿拉山口市", + "652722": "精河县", + "652723": "温泉县", + "652801": "库尔勒市", + "652822": "轮台县", + "652823": "尉犁县", + "652824": "若羌县", + "652825": "且末县", + "652826": "焉耆回族自治县", + "652827": "和静县", + "652828": "和硕县", + "652829": "博湖县", + "652901": "阿克苏市", + "652922": "温宿县", + "652923": "库车县", + "652924": "沙雅县", + "652925": "新和县", + "652926": "拜城县", + "652927": "乌什县", + "652928": "阿瓦提县", + "652929": "柯坪县", + "653001": "阿图什市", + "653022": "阿克陶县", + "653023": "阿合奇县", + "653024": "乌恰县", + "653101": "喀什市", + "653121": "疏附县", + "653122": "疏勒县", + "653123": "英吉沙县", + "653124": "泽普县", + "653125": "莎车县", + "653126": "叶城县", + "653127": "麦盖提县", + "653128": "岳普湖县", + "653129": "伽师县", + "653130": "巴楚县", + "653131": "塔什库尔干塔吉克自治县", + "653201": "和田市", + "653221": "和田县", + "653222": "墨玉县", + "653223": "皮山县", + "653224": "洛浦县", + "653225": "策勒县", + "653226": "于田县", + "653227": "民丰县", + "654002": "伊宁市", + "654003": "奎屯市", + "654004": "霍尔果斯市", + "654021": "伊宁县", + "654022": "察布查尔锡伯自治县", + "654023": "霍城县", + "654024": "巩留县", + "654025": "新源县", + "654026": "昭苏县", + "654027": "特克斯县", + "654028": "尼勒克县", + "654201": "塔城市", + "654202": "乌苏市", + "654221": "额敏县", + "654223": "沙湾县", + "654224": "托里县", + "654225": "裕民县", + "654226": "和布克赛尔蒙古自治县", + "654301": "阿勒泰市", + "654321": "布尔津县", + "654322": "富蕴县", + "654323": "福海县", + "654324": "哈巴河县", + "654325": "青河县", + "654326": "吉木乃县", + "659001": "石河子市", + "659002": "阿拉尔市", + "659003": "图木舒克市", + "659004": "五家渠市", + "659006": "铁门关市" + } +} + +function getConfig(type) { + return (areaList && areaList[`${type}_list`]) || {}; +} + +function getList(type, code) { + let result = []; + if (type !== 'province' && !code) { + return result; + } + + const list = getConfig(type); + result = Object.keys(list).map(code => ({ + code, + name: list[code] + })); + + if (code) { + // oversea code + if (code[0] === '9' && type === 'city') { + code = '9'; + } + + result = result.filter(item => item.code.indexOf(code) === 0); + } + + return result; +} + +// get index by code +function getIndex(type, code) { + let compareNum = type === 'province' ? 2 : type === 'city' ? 4 : 6; + const list = getList(type, code.slice(0, compareNum - 2)); + + // oversea code + if (code[0] === '9' && type === 'province') { + compareNum = 1; + } + + code = code.slice(0, compareNum); + for (let i = 0; i < list.length; i++) { + if (list[i].code.slice(0, compareNum) === code) { + return i; + } + } + + return 0; +} + +// 定义数据出口 +module.exports = { + areaList: areaList, + getList: getList, + getIndex: getIndex +} \ No newline at end of file -- Gitee From 4f106f6797668d116c7aaedb43c13246c117b7b8 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Tue, 30 Apr 2019 19:31:57 +0800 Subject: [PATCH 108/391] =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E5=8F=82=E6=95=B0=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-admin/src/views/user/address.vue | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/litemall-admin/src/views/user/address.vue b/litemall-admin/src/views/user/address.vue index 9f204fcf..4578e516 100644 --- a/litemall-admin/src/views/user/address.vue +++ b/litemall-admin/src/views/user/address.vue @@ -17,14 +17,16 @@ - + - + + + + + + diff --git a/litemall-vue/src/views/user/module-help/index.vue b/litemall-vue/src/views/user/module-help/index.vue index 716a006f..bcab93d0 100644 --- a/litemall-vue/src/views/user/module-help/index.vue +++ b/litemall-vue/src/views/user/module-help/index.vue @@ -1,6 +1,6 @@ - - + + + + + + diff --git a/litemall-vue/src/views/user/user-information-set/set-nickname/index.vue b/litemall-vue/src/views/user/user-information-set/set-nickname/index.vue index 1482835d..be5017df 100755 --- a/litemall-vue/src/views/user/user-information-set/set-nickname/index.vue +++ b/litemall-vue/src/views/user/user-information-set/set-nickname/index.vue @@ -1,58 +1,58 @@ - - - - - - - + + + + + + + diff --git a/litemall-vue/src/views/user/user-information-set/set-password/index.vue b/litemall-vue/src/views/user/user-information-set/set-password/index.vue index 0cda89a6..81a7a716 100755 --- a/litemall-vue/src/views/user/user-information-set/set-password/index.vue +++ b/litemall-vue/src/views/user/user-information-set/set-password/index.vue @@ -34,7 +34,7 @@ - - - diff --git a/litemall-vue/src/views/home/tabbar-home-sign-board.vue b/litemall-vue/src/views/home/tabbar-home-sign-board.vue deleted file mode 100755 index 4ea0bec1..00000000 --- a/litemall-vue/src/views/home/tabbar-home-sign-board.vue +++ /dev/null @@ -1,69 +0,0 @@ - - - - - diff --git a/litemall-vue/src/views/login/login.vue b/litemall-vue/src/views/login/login.vue index c4868936..6ff4d9c6 100755 --- a/litemall-vue/src/views/login/login.vue +++ b/litemall-vue/src/views/login/login.vue @@ -13,7 +13,6 @@ icon="username" placeholder="请输入测试账号 user123" right-icon="clear-full" - v-validate="'required'" name="user" data-vv-as="帐号" @right-click="clearText" @@ -25,7 +24,6 @@ placeholder="请输入测试密码 user123" :type="visiblePass ? 'text' : 'password'" :right-icon="visiblePass ? 'eye-open' : 'eye-close'" - v-validate="'required'" data-vv-as="密码" name="password" @right-click="visiblePass = !visiblePass" @@ -82,13 +80,8 @@ export default { this.account = ''; }, - async validate() { - const result = await this.$validator.validate(); - if (!result) { - const errMsg = this.errors.items[0].msg; - Toast(errMsg); - throw new Error(`表单验证: ${errMsg}`); - } + validate() { + }, login() { @@ -96,19 +89,22 @@ export default { authLoginByAccount(loginData).then(res => { this.userInfo = res.data.data.userInfo; setLocalStorage({ - Authorization: res.data.data.token + Authorization: res.data.data.token, + avatar: this.userInfo.avatarUrl, + nickName: this.userInfo.nickName }); - this.getUserProfile(); + + this.routerRedirect(); }).catch(error => { Toast.fail(error.data.errmsg); }); }, - async loginSubmit() { + loginSubmit() { this.isLogining = true; try { - await this.validate(); - await this.login(); + this.validate(); + this.login(); this.isLogining = false; } catch (err) { console.log(err.message); @@ -116,19 +112,6 @@ export default { } }, - getUserProfile() { - // const { - // data: { data } - // } = await this.$reqGet(USER_PROFILE); - setLocalStorage({ - avatar: this.userInfo.avatarUrl, - // background_image: data.background_image, - nickName: this.userInfo.nickName - }); - - this.routerRedirect(); - }, - routerRedirect() { // const { query } = this.$route; // this.$router.replace({ diff --git a/litemall-vue/src/views/order/payment/index.vue b/litemall-vue/src/views/order/payment/index.vue index b51a2b02..8b4f87d6 100755 --- a/litemall-vue/src/views/order/payment/index.vue +++ b/litemall-vue/src/views/order/payment/index.vue @@ -41,7 +41,6 @@ import { Radio, RadioGroup, Dialog } from 'vant'; import { orderDetail, orderPrepay } from '@/api/api'; import _ from 'lodash'; -import md5 from 'js-md5'; export default { name: 'payment', diff --git a/litemall-vue/src/views/user/tabbar-user-header.vue b/litemall-vue/src/views/user/tabbar-user-header.vue index 48303068..185df051 100755 --- a/litemall-vue/src/views/user/tabbar-user-header.vue +++ b/litemall-vue/src/views/user/tabbar-user-header.vue @@ -39,20 +39,14 @@ export default { getUserInfo() { const infoData = getLocalStorage( 'nickName', - 'background_image', 'avatar' ); this.avatar = avatar_default; this.nickName = infoData.nickName || '昵称'; - this.background_image = infoData.background_image || bg_default; }, toSetting() { this.$router.push({ name: 'user-information' }); } - // toLogin() { - // !this.isLogin && - // this.$router.push({ name: 'login', query: { redirect: 'user' } }); - // } } }; diff --git a/litemall-vue/src/views/user/tabbar-user.vue b/litemall-vue/src/views/user/tabbar-user.vue index 2699d72a..1d4eb0ab 100755 --- a/litemall-vue/src/views/user/tabbar-user.vue +++ b/litemall-vue/src/views/user/tabbar-user.vue @@ -31,12 +31,6 @@ export default { methods: { quit() { authLogout(); - removeLocalStorage( - 'Authorization', - 'avatar', - 'background_image', - 'nickName' - ); this.$router.push({ name: 'login' }); }, getLoginStatus() { diff --git a/litemall-vue/src/views/user/user-information-set/index.vue b/litemall-vue/src/views/user/user-information-set/index.vue index 81b9f9fc..127c66c2 100755 --- a/litemall-vue/src/views/user/user-information-set/index.vue +++ b/litemall-vue/src/views/user/user-information-set/index.vue @@ -14,16 +14,10 @@ - - - - - - - - - - + + + + 退出登录 @@ -42,7 +36,7 @@ import { Uploader, Picker, Popup, Button } from 'vant'; import { removeLocalStorage } from '@/utils/local-storage'; import { getLocalStorage } from '@/utils/local-storage'; -import { authLogout } from '@/api/api'; +import { authInfo, authLogout, authProfile } from '@/api/api'; export default { data() { @@ -56,7 +50,7 @@ export default { showSex: false, avatar: '', nickName: '', - gender: -1, + gender: 0, mobile: '' }; }, @@ -77,28 +71,18 @@ export default { console.log(file); }, onSexConfirm(value, index) { - + this.showSex = false; }, getUserInfo() { - const infoData = getLocalStorage( - 'nickName', - 'background_image', - 'avatar' - ); - // debugger; - this.avatar = infoData.avatar; - this.nickName = infoData.nickName; - // this.gender = infoData.gender; - // this.mobile = infoData.mobile; + authInfo().then(res => { + this.avatar = res.data.data.avatar; + this.nickName = res.data.data.nickName; + this.gender = res.data.data.gender; + this.mobile = res.data.data.mobile; + }) }, loginOut() { authLogout(); - removeLocalStorage( - 'Authorization', - 'avatar', - // 'background_image', - 'nickName' - ); this.$router.push({ name: 'home' }); } }, diff --git a/litemall-vue/src/views/user/user-information-set/set-bg/index.vue b/litemall-vue/src/views/user/user-information-set/set-bg/index.vue deleted file mode 100755 index 25d9698a..00000000 --- a/litemall-vue/src/views/user/user-information-set/set-bg/index.vue +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/litemall-vue/src/views/user/user-information-set/set-mobile/index.vue b/litemall-vue/src/views/user/user-information-set/set-mobile/index.vue index 3a5014c3..6b3a8ab1 100755 --- a/litemall-vue/src/views/user/user-information-set/set-mobile/index.vue +++ b/litemall-vue/src/views/user/user-information-set/set-mobile/index.vue @@ -6,13 +6,13 @@ v-model="password" type="password" placeholder="请输入登录密码" - :error="!!$vuelidation.error('password')" /> + /> + /> -import { authRegisterCaptcha } from '@/api/api'; +import { authCaptcha } from '@/api/api'; import { Field } from 'vant'; export default { data: () => ({ password: '', - new_mobile: '', + mobile: '', code: '', counting: false }), - vuelidation: { - data: { - password: { - required: true - }, - new_mobile: { - required: true, - mobile: true - } - } - }, - methods: { getCode() { - if (!this.counting && this.vuelidat()) { - authRegisterCaptcha({ - mobile: this.new_mobile, - operation: 'changeMobile' + if (!this.counting && this.vuelidate()) { + authCaptcha({ + mobile: this.mobile, + type: 'bind-mobile' }).then(() => { this.$toast.success('发送成功'); this.counting = true; - }); + }).catch(error => { + this.$toast.fail(error.data.errmsg); + this.counting = false; + }) + } }, countdownend() { this.counting = false; }, - vuelidat() { - this.$vuelidation.valid(); - if (this.$vuelidation.error('new_mobile')) { - const msg = this.$vuelidation.error('new_mobile'); - this.$toast(msg == 'Required' ? '请输入手机号' : msg); + vuelidate() { + if(this.mobile === ''){ + this.$toast.fail('请输入号码'); return false; } return true; diff --git a/litemall-vue/src/views/user/user-information-set/set-nickname/index.vue b/litemall-vue/src/views/user/user-information-set/set-nickname/index.vue index be5017df..48e1b8f7 100755 --- a/litemall-vue/src/views/user/user-information-set/set-nickname/index.vue +++ b/litemall-vue/src/views/user/user-information-set/set-nickname/index.vue @@ -1,7 +1,7 @@ - - -- Gitee From a756578b4afb08250964ddce7fbd25535f9046ca Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Mon, 1 Jul 2019 14:30:18 +0800 Subject: [PATCH 190/391] =?UTF-8?q?refact[litemall-vue]:=20=E5=88=A0?= =?UTF-8?q?=E9=99=A4infinity-scroll=E8=87=AA=E5=AE=9A=E4=B9=89=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E8=80=8C=E6=98=AF=E9=87=87=E7=94=A8vant=20Li?= =?UTF-8?q?st=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/infinity-scroll/index.vue | 104 ------------ litemall-vue/src/views/items/list/index.vue | 1 - .../src/views/user/coupon-list/index.vue | 120 ++++++++------ .../views/user/order-entity-list/index.vue | 152 ++++++++++-------- .../src/views/user/refund-list/index.vue | 42 ++--- 5 files changed, 170 insertions(+), 249 deletions(-) delete mode 100644 litemall-vue/src/components/infinity-scroll/index.vue diff --git a/litemall-vue/src/components/infinity-scroll/index.vue b/litemall-vue/src/components/infinity-scroll/index.vue deleted file mode 100644 index 87e66b82..00000000 --- a/litemall-vue/src/components/infinity-scroll/index.vue +++ /dev/null @@ -1,104 +0,0 @@ - - - - - diff --git a/litemall-vue/src/views/items/list/index.vue b/litemall-vue/src/views/items/list/index.vue index 9912a50e..fe0654a3 100755 --- a/litemall-vue/src/views/items/list/index.vue +++ b/litemall-vue/src/views/items/list/index.vue @@ -32,7 +32,6 @@ diff --git a/litemall-vue/src/components/item-card-vert/index.vue b/litemall-vue/src/components/item-card-vert/index.vue deleted file mode 100644 index 154ff9e3..00000000 --- a/litemall-vue/src/components/item-card-vert/index.vue +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - diff --git a/litemall-vue/src/components/item-group/index.vue b/litemall-vue/src/components/item-group/index.vue deleted file mode 100644 index 5c0c42ca..00000000 --- a/litemall-vue/src/components/item-group/index.vue +++ /dev/null @@ -1,152 +0,0 @@ - - - - diff --git a/litemall-vue/src/views/items/list/index.vue b/litemall-vue/src/views/items/list/index.vue index fe0654a3..6edd32d4 100755 --- a/litemall-vue/src/views/items/list/index.vue +++ b/litemall-vue/src/views/items/list/index.vue @@ -101,6 +101,9 @@ export default { this.loading = false; this.finished = res.data.data.page >= res.data.data.pages; }); + }, + itemClick(id) { + this.$router.push(`/items/detail/${id}`); } }, diff --git a/litemall-vue/src/views/items/search/index.vue b/litemall-vue/src/views/items/search/index.vue index ce405583..fe0dc69a 100755 --- a/litemall-vue/src/views/items/search/index.vue +++ b/litemall-vue/src/views/items/search/index.vue @@ -1,53 +1,52 @@ diff --git a/litemall-vue/src/views/user/module-collect/index.vue b/litemall-vue/src/views/user/module-collect/index.vue index a6260850..1bd3d3bc 100644 --- a/litemall-vue/src/views/user/module-collect/index.vue +++ b/litemall-vue/src/views/user/module-collect/index.vue @@ -1,28 +1,24 @@ -- Gitee From 272d43a9c313862eb823579f878c42f43ff1aa15 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Thu, 11 Jul 2019 10:14:14 +0800 Subject: [PATCH 203/391] =?UTF-8?q?chore[litemall-admin-api]:=20bean?= =?UTF-8?q?=E9=87=8D=E5=91=BD=E5=90=8D=EF=BC=8C=E5=8F=AF=E8=83=BD=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E6=BD=9C=E5=9C=A8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/linlinjava/litemall/admin/config/ShiroConfig.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/config/ShiroConfig.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/config/ShiroConfig.java index 1495d62a..fb5c124a 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/config/ShiroConfig.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/config/ShiroConfig.java @@ -25,7 +25,7 @@ public class ShiroConfig { } @Bean - public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) { + public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); Map filterChainDefinitionMap = new LinkedHashMap(); @@ -50,7 +50,7 @@ public class ShiroConfig { } @Bean - public DefaultWebSecurityManager securityManager() { + public DefaultWebSecurityManager defaultWebSecurityManager() { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(realm()); securityManager.setSessionManager(sessionManager()); -- Gitee From 36085337d8e7e69138c1d33526087f2190bc51c2 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Thu, 11 Jul 2019 10:28:58 +0800 Subject: [PATCH 204/391] =?UTF-8?q?chore[litemall-vue]:=20=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-vue/src/views/home/tabbar-home.vue | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/litemall-vue/src/views/home/tabbar-home.vue b/litemall-vue/src/views/home/tabbar-home.vue index 33700c71..95191d34 100755 --- a/litemall-vue/src/views/home/tabbar-home.vue +++ b/litemall-vue/src/views/home/tabbar-home.vue @@ -267,17 +267,17 @@ export default { .goods-channel img { display: block; - width: 30px; - height: 30px; + width: 20px; + height: 20px; margin: 0 auto; } .goods-channel span { display: block; - font-size: 15px; + font-size: 14px; text-align: center; - margin: 0 auto; - line-height: 1; + margin-top: 5px; + margin-bottom: 10px; color: #333; } .van-coupon-cell--selected { -- Gitee From 4756f0168f074b437848ec2d8f36f0797a2c9ffc Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Thu, 11 Jul 2019 11:06:39 +0800 Subject: [PATCH 205/391] =?UTF-8?q?chore[litemall-vue]:=20=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-vue/src/views/items/detail/index.vue | 109 ++++++++---------- 1 file changed, 50 insertions(+), 59 deletions(-) diff --git a/litemall-vue/src/views/items/detail/index.vue b/litemall-vue/src/views/items/detail/index.vue index f93b04e2..81e413fc 100755 --- a/litemall-vue/src/views/items/detail/index.vue +++ b/litemall-vue/src/views/items/detail/index.vue @@ -36,7 +36,7 @@ :goods="skuGoods" :goodsId="goods.info.id" @buy-clicked="buyGoods" - @add-cart="addCart" + @add-cart="addCart" /> @@ -83,13 +83,13 @@ export default { goods: { userHasCollect: 0, info: { - gallery:[] + gallery: [] } }, sku: { tree: [], list: [], - price: '1.00', // 默认价格(单位元) + price: '1.00' // 默认价格(单位元) }, skuGoods: { // 商品标题 @@ -109,8 +109,7 @@ export default { }; }, - -computed: { + computed: { props_str() { let props_arr = []; _.each(this.goods.attribute, json => { @@ -129,17 +128,14 @@ computed: { this.showSku = true; }, initData() { - goodsDetail({id: this.itemId}).then( - res => { - this.goods = res.data.data; - this.skuAdapter(); - } - ); + goodsDetail({ id: this.itemId }).then(res => { + this.goods = res.data.data; + this.skuAdapter(); + }); cartGoodsCount().then(res => { this.cartInfo = res.data.data; }); - }, toCart() { this.$router.push({ @@ -147,18 +143,16 @@ computed: { }); }, addCollect() { - collectAddOrDelete({valueId: this.itemId, type: 0}).then(res => { - if(this.goods.userHasCollect === 1){ - this.goods.userHasCollect = 0 - } - else{ - this.goods.userHasCollect = 1 + collectAddOrDelete({ valueId: this.itemId, type: 0 }).then(res => { + if (this.goods.userHasCollect === 1) { + this.goods.userHasCollect = 0; + } else { + this.goods.userHasCollect = 1; this.$toast({ message: '收藏成功', duration: 1500 - }); + }); } - }); }, getProductId(s1, s2) { @@ -169,8 +163,7 @@ computed: { _.each(specification.valueList, specValue => { if (specValue.id === s1) { s1_name = specValue.value; - } - else if (specValue.id === s2) { + } else if (specValue.id === s2) { s2_name = specValue.value; } }); @@ -216,18 +209,16 @@ computed: { message: '目前仅支持两规格', duration: 1500 }); - return - } - else if (_.has(data.selectedSkuComb, 's2')) { + return; + } else if (_.has(data.selectedSkuComb, 's2')) { params.productId = this.getProductId( data.selectedSkuComb.s1, data.selectedSkuComb.s2 ); + } else { + params.productId = this.getProductIdByOne(data.selectedSkuComb.s1); } - else { - params.productId = this.getProductIdByOne(data.selectedSkuComb.s1) - } - cartAdd(params).then(() => { + cartAdd(params).then(() => { this.cartInfo = this.cartInfo + data.selectedNum; this.$toast({ message: '已添加至购物车', @@ -248,22 +239,20 @@ computed: { message: '目前仅支持两规格', duration: 1500 }); - return - } - else if (_.has(data.selectedSkuComb, 's2')) { + return; + } else if (_.has(data.selectedSkuComb, 's2')) { params.productId = this.getProductId( data.selectedSkuComb.s1, data.selectedSkuComb.s2 ); + } else { + params.productId = this.getProductIdByOne(data.selectedSkuComb.s1); } - else { - params.productId = this.getProductIdByOne(data.selectedSkuComb.s1) - } - cartFastAdd(params).then(res => { - let cartId = res.data.data; - setLocalStorage({CartId: cartId}) - that.showSku = false; - this.$router.push({ name: 'placeOrderEntity'}); + cartFastAdd(params).then(res => { + let cartId = res.data.data; + setLocalStorage({ CartId: cartId }); + that.showSku = false; + this.$router.push({ name: 'placeOrderEntity' }); }); }, skuAdapter() { @@ -284,23 +273,23 @@ computed: { this.skuGoods = { title: this.goods.info.name, picture: this.goods.info.picUrl - } + }; }, setSkuList() { var sku_list = []; - _.each(this.goods.productList, v => { - var sku_list_obj = {}; - _.each(v.specifications, (specificationName, index) => { - sku_list_obj[ - 's' + (~~index + 1) - ] = this.findSpecValueIdByName(specificationName); - }); - - sku_list_obj.price = v.price * 100; - sku_list_obj.stock_num = v.number; - sku_list.push(sku_list_obj); + _.each(this.goods.productList, v => { + var sku_list_obj = {}; + _.each(v.specifications, (specificationName, index) => { + sku_list_obj['s' + (~~index + 1)] = this.findSpecValueIdByName( + specificationName + ); }); - + + sku_list_obj.price = v.price * 100; + sku_list_obj.stock_num = v.number; + sku_list.push(sku_list_obj); + }); + return sku_list; }, findSpecValueIdByName(name) { @@ -312,7 +301,7 @@ computed: { return; } }); - if(id !== 0){ + if (id !== 0) { return; } }); @@ -329,7 +318,7 @@ computed: { id: vv.id, name: vv.value, imUrl: vv.picUrl - }) + }); }); specifications.push({ @@ -341,7 +330,7 @@ computed: { return specifications; } - }, + }, components: { [Popup.name]: Popup, @@ -351,9 +340,9 @@ computed: { [GoodsAction.name]: GoodsAction, [GoodsActionButton.name]: GoodsActionButton, [GoodsActionIcon.name]: GoodsActionIcon, - [popupProps.name]: popupProps + [popupProps.name]: popupProps } -} +}; \ No newline at end of file diff --git a/litemall-vue/src/views/items/topic/index.vue b/litemall-vue/src/views/items/topic/index.vue new file mode 100644 index 00000000..665efb28 --- /dev/null +++ b/litemall-vue/src/views/items/topic/index.vue @@ -0,0 +1,87 @@ + + + + + \ No newline at end of file -- Gitee From 8d82b1202a607cebdf5ba32ea1c2322c673d6064 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Thu, 11 Jul 2019 14:30:36 +0800 Subject: [PATCH 207/391] =?UTF-8?q?fix[litemall-vue]:=20=E5=B0=8Fbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-vue/src/views/items/tabbar-catalog.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litemall-vue/src/views/items/tabbar-catalog.vue b/litemall-vue/src/views/items/tabbar-catalog.vue index d5e2ac26..f15cd4da 100644 --- a/litemall-vue/src/views/items/tabbar-catalog.vue +++ b/litemall-vue/src/views/items/tabbar-catalog.vue @@ -71,7 +71,7 @@ export default { }, toItemList(id) { this.$router.push({ - name: 'list', + name: 'category', query: { keyword: '', itemClass: id } }); } -- Gitee From b785a6ff0521c9a89b0cd1d850918088c3b32e4c Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Thu, 11 Jul 2019 15:30:16 +0800 Subject: [PATCH 208/391] fix[litemall-vue]: fix bug --- litemall-vue/src/views/user/coupon-list/index.vue | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/litemall-vue/src/views/user/coupon-list/index.vue b/litemall-vue/src/views/user/coupon-list/index.vue index 465f02f7..a7b2f165 100644 --- a/litemall-vue/src/views/user/coupon-list/index.vue +++ b/litemall-vue/src/views/user/coupon-list/index.vue @@ -89,8 +89,7 @@ export default { this.finished = res.data.data.page >= res.data.data.pages; }); }, - handleTabClick(index) { - this.activeIndex = index; + handleTabClick() { this.page = 0; this.couponList = []; this.getCouponList(); -- Gitee From cc2fb64a6eb61dca6b767886dd18e8b8f1e5618a Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Thu, 11 Jul 2019 15:30:53 +0800 Subject: [PATCH 209/391] =?UTF-8?q?chore[litemall-vue]:=20=E9=80=80?= =?UTF-8?q?=E5=87=BA=E6=8C=89=E9=92=AE=E7=A7=BB=E5=88=B0=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/user/tabbar-user-header.vue | 6 ++---- litemall-vue/src/views/user/tabbar-user.vue | 8 -------- .../views/user/user-information-set/index.vue | 16 +++++++++++++--- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/litemall-vue/src/views/user/tabbar-user-header.vue b/litemall-vue/src/views/user/tabbar-user-header.vue index 185df051..cd633c0a 100755 --- a/litemall-vue/src/views/user/tabbar-user-header.vue +++ b/litemall-vue/src/views/user/tabbar-user-header.vue @@ -41,7 +41,7 @@ export default { 'nickName', 'avatar' ); - this.avatar = avatar_default; + this.avatar = infoData.avatar || avatar_default; this.nickName = infoData.nickName || '昵称'; }, toSetting() { @@ -53,17 +53,15 @@ export default { -- Gitee From 488c7ed80f20391ef6da9c503cffd4c7cfabbc3c Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Fri, 12 Jul 2019 20:05:14 +0800 Subject: [PATCH 210/391] =?UTF-8?q?chore:=20=E9=87=87=E7=94=A8logback?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-all/src/main/resources/application.yml | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/litemall-all/src/main/resources/application.yml b/litemall-all/src/main/resources/application.yml index 3abd1ad5..fad6875d 100644 --- a/litemall-all/src/main/resources/application.yml +++ b/litemall-all/src/main/resources/application.yml @@ -8,12 +8,4 @@ server: port: 8080 logging: - level: - root: ERROR - org.springframework: ERROR - org.mybatis: ERROR - org.linlinjava.litemall.core: INFO - org.linlinjava.litemall.db: INFO - org.linlinjava.litemall.admin: INFO - org.linlinjava.litemall.wx: INFO - org.linlinjava.litemall: INFO \ No newline at end of file + config: classpath:logback-spring.xml \ No newline at end of file -- Gitee From ac15da981fd0544972593796d317f2d414595ceb Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Fri, 12 Jul 2019 20:05:32 +0800 Subject: [PATCH 211/391] =?UTF-8?q?chore:=20=E9=87=87=E7=94=A8logback?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/logback-spring.xml | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 litemall-all/src/main/resources/logback-spring.xml diff --git a/litemall-all/src/main/resources/logback-spring.xml b/litemall-all/src/main/resources/logback-spring.xml new file mode 100644 index 00000000..ff4f67ac --- /dev/null +++ b/litemall-all/src/main/resources/logback-spring.xml @@ -0,0 +1,58 @@ + + + logback + + + + + debug + + + %d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n + + + + + + ${log.path}/log.log + + ${log.path}/log-%d{yyyy-MM-dd}.log + + + + %date %level [%thread] %logger{36} [%file : %line] %msg%n + + + + + + ${log.path}/error.log + + ${log.path}/error-%d{yyyy-MM-dd}.log + + + + %date %level [%thread] %logger{36} [%file : %line] %msg%n + + + + + ERROR + ACCEPT + DENY + + + + + + + + + + + + + + + \ No newline at end of file -- Gitee From 99e8e88151ad57b7bb6bc51ac2c3b81520d80ebf Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Fri, 12 Jul 2019 20:08:42 +0800 Subject: [PATCH 212/391] =?UTF-8?q?chore:=20=E9=87=87=E7=94=A8logback?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/litemall/application-admin.yml | 0 deploy/litemall/application-core.yml | 107 ------------------- deploy/litemall/application-db.yml | 26 ----- deploy/litemall/application-wx.yml | 0 deploy/litemall/application.yml | 144 ++++++++++++++++++++++++-- 5 files changed, 133 insertions(+), 144 deletions(-) delete mode 100644 deploy/litemall/application-admin.yml delete mode 100644 deploy/litemall/application-core.yml delete mode 100644 deploy/litemall/application-db.yml delete mode 100644 deploy/litemall/application-wx.yml diff --git a/deploy/litemall/application-admin.yml b/deploy/litemall/application-admin.yml deleted file mode 100644 index e69de29b..00000000 diff --git a/deploy/litemall/application-core.yml b/deploy/litemall/application-core.yml deleted file mode 100644 index a8140385..00000000 --- a/deploy/litemall/application-core.yml +++ /dev/null @@ -1,107 +0,0 @@ -litemall: - # 开发者应该设置成自己的wx相关信息 - wx: - app-id: wxa5b486c6b918ecfb - app-secret: e04004829d4c383b4db7769d88dfbca1 - mch-id: 111111 - mch-key: xxxxxx - notify-url: http://118.24.0.153:8080/wx/order/pay-notify - # 商户证书文件路径 - # 请参考“商户证书”一节 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_3 - key-path: xxxxx - - #通知相关配置 - notify: - mail: - # 邮件通知配置,邮箱一般用于接收业务通知例如收到新的订单,sendto 定义邮件接收者,通常为商城运营人员 - enable: false - host: smtp.exmail.qq.com - username: ex@ex.com.cn - password: XXXXXXXXXXXXX - sendfrom: ex@ex.com.cn - sendto: ex@qq.com - - # 短消息模版通知配置 - # 短信息用于通知客户,例如发货短信通知,注意配置格式;template-name,template-templateId 请参考 NotifyType 枚举值 - sms: - enable: false - appid: 111111111 - appkey: xxxxxxxxxxxxxx - template: - - name: paySucceed - templateId: 156349 - - name: captcha - templateId: 156433 - - name: ship - templateId: 158002 - - name: refund - templateId: 159447 - - # 微信模版通知配置 - # 微信模版用于通知客户或者运营者,注意配置格式;template-name,template-templateId 请参考 NotifyType 枚举值 - wx: - enable: false - template: - - name: paySucceed - templateId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - - name: captcha - templateId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - - name: ship - templateId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - - name: refund - templateId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - - # 快鸟物流查询配置 - express: - enable: false - appId: "XXXXXXXXX" - appKey: "XXXXXXXXXXXXXXXXXXXXXXXXX" - vendors: - - code: "ZTO" - name: "中通快递" - - code: "YTO" - name: "圆通速递" - - code: "YD" - name: "韵达速递" - - code: "YZPY" - name: "邮政快递包裹" - - code: "EMS" - name: "EMS" - - code: "DBL" - name: "德邦快递" - - code: "FAST" - name: "快捷快递" - - code: "ZJS" - name: "宅急送" - - code: "TNT" - name: "TNT快递" - - code: "UPS" - name: "UPS" - - code: "DHL" - name: "DHL" - - code: "FEDEX" - name: "FEDEX联邦(国内件)" - - code: "FEDEX_GJ" - name: "FEDEX联邦(国际件)" - - # 对象存储配置 - storage: - # 当前工作的对象存储模式,分别是local、aliyun、tencent - active: local - # 本地对象存储配置信息 - local: - storagePath: storage - address: http://118.24.0.153:8080/wx/storage/fetch/ - # 阿里云对象存储配置信息 - aliyun: - endpoint: oss-cn-shenzhen.aliyuncs.com - accessKeyId: 111111 - accessKeySecret: xxxxxx - bucketName: xxxxxx - # 腾讯对象存储配置信息 - # 请参考 https://cloud.tencent.com/document/product/436/6249 - tencent: - secretId: 111111 - secretKey: xxxxxx - region: xxxxxx - bucketName: xxxxxx \ No newline at end of file diff --git a/deploy/litemall/application-db.yml b/deploy/litemall/application-db.yml deleted file mode 100644 index ef526211..00000000 --- a/deploy/litemall/application-db.yml +++ /dev/null @@ -1,26 +0,0 @@ -pagehelper: - helperDialect: mysql - reasonable: true - supportMethodsArguments: true - params: count=countSql - -spring: - datasource: - druid: - url: jdbc:mysql://localhost:3306/litemall?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&verifyServerCertificate=false&useSSL=false - driver-class-name: com.mysql.jdbc.Driver - username: litemall - password: litemall123456 - initial-size: 10 - max-active: 50 - min-idle: 10 - max-wait: 60000 - pool-prepared-statements: true - max-pool-prepared-statement-per-connection-size: 20 - validation-query: SELECT 1 FROM DUAL - test-on-borrow: false - test-on-return: false - test-while-idle: true - time-between-eviction-runs-millis: 60000 - filters: stat,wall - diff --git a/deploy/litemall/application-wx.yml b/deploy/litemall/application-wx.yml deleted file mode 100644 index e69de29b..00000000 diff --git a/deploy/litemall/application.yml b/deploy/litemall/application.yml index 3802b74f..cf216d00 100644 --- a/deploy/litemall/application.yml +++ b/deploy/litemall/application.yml @@ -1,19 +1,141 @@ spring: - profiles: - active: db, core, admin, wx message: encoding: UTF-8 + datasource: + druid: + url: jdbc:mysql://localhost:3306/litemall?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&verifyServerCertificate=false&useSSL=false + driver-class-name: com.mysql.jdbc.Driver + username: litemall + password: litemall123456 + initial-size: 10 + max-active: 50 + min-idle: 10 + max-wait: 60000 + pool-prepared-statements: true + max-pool-prepared-statement-per-connection-size: 20 + validation-query: SELECT 1 FROM DUAL + test-on-borrow: false + test-on-return: false + test-while-idle: true + time-between-eviction-runs-millis: 60000 + filters: stat,wall server: port: 8080 logging: - level: - root: ERROR - org.springframework: ERROR - org.mybatis: ERROR - org.linlinjava.litemall.core: ERROR - org.linlinjava.litemall.db: ERROR - org.linlinjava.litemall.admin: ERROR - org.linlinjava.litemall.wx: ERROR - org.linlinjava.litemall: ERROR \ No newline at end of file + config: classpath:logback-spring.xml + +pagehelper: + helperDialect: mysql + reasonable: true + supportMethodsArguments: true + params: count=countSql + +litemall: + # 开发者应该设置成自己的wx相关信息 + wx: + app-id: wxa5b486c6b918ecfb + app-secret: e04004829d4c383b4db7769d88dfbca1 + mch-id: 111111 + mch-key: xxxxxx + notify-url: http://118.24.0.153:8080/wx/order/pay-notify + # 商户证书文件路径 + # 请参考“商户证书”一节 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_3 + key-path: xxxxx + + #通知相关配置 + notify: + mail: + # 邮件通知配置,邮箱一般用于接收业务通知例如收到新的订单,sendto 定义邮件接收者,通常为商城运营人员 + enable: false + host: smtp.exmail.qq.com + username: ex@ex.com.cn + password: XXXXXXXXXXXXX + sendfrom: ex@ex.com.cn + sendto: ex@qq.com + + # 短消息模版通知配置 + # 短信息用于通知客户,例如发货短信通知,注意配置格式;template-name,template-templateId 请参考 NotifyType 枚举值 + sms: + enable: false + appid: 111111111 + appkey: xxxxxxxxxxxxxx + template: + - name: paySucceed + templateId: 156349 + - name: captcha + templateId: 156433 + - name: ship + templateId: 158002 + - name: refund + templateId: 159447 + + # 微信模版通知配置 + # 微信模版用于通知客户或者运营者,注意配置格式;template-name,template-templateId 请参考 NotifyType 枚举值 + wx: + enable: false + template: + - name: paySucceed + templateId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + - name: captcha + templateId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + - name: ship + templateId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + - name: refund + templateId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + + # 快鸟物流查询配置 + express: + enable: false + appId: "XXXXXXXXX" + appKey: "XXXXXXXXXXXXXXXXXXXXXXXXX" + vendors: + - code: "ZTO" + name: "中通快递" + - code: "YTO" + name: "圆通速递" + - code: "YD" + name: "韵达速递" + - code: "YZPY" + name: "邮政快递包裹" + - code: "EMS" + name: "EMS" + - code: "DBL" + name: "德邦快递" + - code: "FAST" + name: "快捷快递" + - code: "ZJS" + name: "宅急送" + - code: "TNT" + name: "TNT快递" + - code: "UPS" + name: "UPS" + - code: "DHL" + name: "DHL" + - code: "FEDEX" + name: "FEDEX联邦(国内件)" + - code: "FEDEX_GJ" + name: "FEDEX联邦(国际件)" + + # 对象存储配置 + storage: + # 当前工作的对象存储模式,分别是local、aliyun、tencent + active: local + # 本地对象存储配置信息 + local: + storagePath: storage + address: http://118.24.0.153:8080/wx/storage/fetch/ + # 阿里云对象存储配置信息 + aliyun: + endpoint: oss-cn-shenzhen.aliyuncs.com + accessKeyId: 111111 + accessKeySecret: xxxxxx + bucketName: xxxxxx + # 腾讯对象存储配置信息 + # 请参考 https://cloud.tencent.com/document/product/436/6249 + tencent: + secretId: 111111 + secretKey: xxxxxx + region: xxxxxx + bucketName: xxxxxx \ No newline at end of file -- Gitee From d2dc7345d1b0fbb47fc4b48b9476ee89c7eb5e95 Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Fri, 12 Jul 2019 20:20:37 +0800 Subject: [PATCH 213/391] =?UTF-8?q?chore:=20=E9=87=87=E7=94=A8logback?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-all/src/main/resources/logback-spring.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litemall-all/src/main/resources/logback-spring.xml b/litemall-all/src/main/resources/logback-spring.xml index ff4f67ac..e7e9e3c5 100644 --- a/litemall-all/src/main/resources/logback-spring.xml +++ b/litemall-all/src/main/resources/logback-spring.xml @@ -1,7 +1,7 @@ logback - + -- Gitee From f6bb713bc09e5421342c7c961f71b69c1f14511a Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Sat, 13 Jul 2019 20:04:04 +0800 Subject: [PATCH 214/391] fix[litemall-core]: #230 --- .../org/linlinjava/litemall/core/storage/TencentStorage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litemall-core/src/main/java/org/linlinjava/litemall/core/storage/TencentStorage.java b/litemall-core/src/main/java/org/linlinjava/litemall/core/storage/TencentStorage.java index c5f9b023..d899f671 100644 --- a/litemall-core/src/main/java/org/linlinjava/litemall/core/storage/TencentStorage.java +++ b/litemall-core/src/main/java/org/linlinjava/litemall/core/storage/TencentStorage.java @@ -77,7 +77,7 @@ public class TencentStorage implements Storage { } private String getBaseUrl() { - return "https://" + bucketName + ".cos-website." + region + ".myqcloud.com/"; + return "https://" + bucketName + ".cos." + region + ".myqcloud.com/"; } @Override -- Gitee From d10336db6469bbc00555558461175ca78563b94d Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Sat, 13 Jul 2019 20:22:00 +0800 Subject: [PATCH 215/391] fix[litemall-vue]: fix bug --- .../src/views/user/coupon-list/index.vue | 22 +++---------------- .../views/user/order-entity-list/index.vue | 2 +- 2 files changed, 4 insertions(+), 20 deletions(-) diff --git a/litemall-vue/src/views/user/coupon-list/index.vue b/litemall-vue/src/views/user/coupon-list/index.vue index a7b2f165..c63a0bf3 100644 --- a/litemall-vue/src/views/user/coupon-list/index.vue +++ b/litemall-vue/src/views/user/coupon-list/index.vue @@ -1,7 +1,8 @@ diff --git a/litemall-vue/src/views/login/register-submit/index.vue b/litemall-vue/src/views/login/register-submit/index.vue index 7089b89e..b4b541ff 100755 --- a/litemall-vue/src/views/login/register-submit/index.vue +++ b/litemall-vue/src/views/login/register-submit/index.vue @@ -2,12 +2,13 @@
- + 获取验证码
+ @@ -20,29 +21,83 @@ - + + diff --git a/litemall-admin/src/components/Screenfull/index.vue b/litemall-admin/src/components/Screenfull/index.vue index f2ac0b8e..3a3a03db 100644 --- a/litemall-admin/src/components/Screenfull/index.vue +++ b/litemall-admin/src/components/Screenfull/index.vue @@ -1,29 +1,6 @@ @@ -67,12 +44,12 @@ export default { diff --git a/litemall-admin/src/components/SizeSelect/index.vue b/litemall-admin/src/components/SizeSelect/index.vue index b3ebe5ac..2b4ab9f5 100644 --- a/litemall-admin/src/components/SizeSelect/index.vue +++ b/litemall-admin/src/components/SizeSelect/index.vue @@ -1,7 +1,7 @@