Просмотр исходного кода

Merge branch 'dev' of ssh://10.10.101.21/source/platform-b2c into bug_0913

yujia 8 лет назад
Родитель
Сommit
8e3a8955ad
86 измененных файлов с 1278 добавлено и 303 удалено
  1. 10 0
      src/main/java/com/uas/platform/b2c/advertise/ad/api/StoreRecommendController.java
  2. 8 0
      src/main/java/com/uas/platform/b2c/advertise/ad/service/RecommendProductService.java
  3. 48 3
      src/main/java/com/uas/platform/b2c/advertise/ad/service/impl/RecommendProductServiceImpl.java
  4. 3 0
      src/main/java/com/uas/platform/b2c/common/account/controller/UserController.java
  5. 1 1
      src/main/java/com/uas/platform/b2c/common/account/model/User.java
  6. 41 0
      src/main/java/com/uas/platform/b2c/core/config/MicroServicesConfMulti.java
  7. 13 1
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java
  8. 2 1
      src/main/java/com/uas/platform/b2c/prod/product/brand/api/BrandController.java
  9. 10 1
      src/main/java/com/uas/platform/b2c/prod/product/brand/controller/BrandController.java
  10. 1 1
      src/main/java/com/uas/platform/b2c/prod/product/brand/controller/BrandSubmitController.java
  11. 1 1
      src/main/java/com/uas/platform/b2c/prod/product/brand/controller/BrandVersionController.java
  12. 8 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/dao/BrandInfoDao.java
  13. 27 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/dao/BrandMostSimpleInfoDao.java
  14. 14 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/modal/Brand.java
  15. 14 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/modal/BrandInfo.java
  16. 93 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/modal/BrandMostSimpleInfo.java
  17. 8 1
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/BrandService.java
  18. 47 14
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/BrandServiceImpl.java
  19. 2 2
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/BrandSubmitServiceImpl.java
  20. 1 1
      src/main/java/com/uas/platform/b2c/prod/product/component/controller/ComponentController.java
  21. 1 1
      src/main/java/com/uas/platform/b2c/prod/product/component/controller/ComponentCrawlTaskController.java
  22. 1 1
      src/main/java/com/uas/platform/b2c/prod/product/component/controller/ComponentSubmitController.java
  23. 1 1
      src/main/java/com/uas/platform/b2c/prod/product/component/controller/ComponentVersionController.java
  24. 1 1
      src/main/java/com/uas/platform/b2c/prod/product/kind/controller/KindAdviceController.java
  25. 1 1
      src/main/java/com/uas/platform/b2c/prod/product/kind/controller/KindContrastController.java
  26. 1 1
      src/main/java/com/uas/platform/b2c/prod/product/kind/controller/KindController.java
  27. 1 1
      src/main/java/com/uas/platform/b2c/prod/product/property/controller/PropertyController.java
  28. 1 1
      src/main/java/com/uas/platform/b2c/prod/product/property/controller/PropertySubmitController.java
  29. 17 0
      src/main/java/com/uas/platform/b2c/prod/store/controller/StoreInformationController.java
  30. 15 0
      src/main/java/com/uas/platform/b2c/prod/store/model/EnterpriseSimple.java
  31. 3 0
      src/main/java/com/uas/platform/b2c/prod/store/service/StoreInService.java
  32. 53 14
      src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreInServiceImpl.java
  33. 1 1
      src/main/java/com/uas/platform/b2c/trade/order/status/PurchaseStatus.java
  34. 24 15
      src/main/java/com/uas/platform/b2c/trade/presale/controller/CollectionController.java
  35. 11 0
      src/main/java/com/uas/platform/b2c/trade/presale/dao/CollectionDao.java
  36. 3 2
      src/main/java/com/uas/platform/b2c/trade/presale/service/impl/CartServiceImpl.java
  37. 7 3
      src/main/java/com/uas/platform/b2c/trade/presale/service/impl/CollectionServiceImpl.java
  38. 2 0
      src/main/resources/dev/sys.properties
  39. 2 0
      src/main/resources/prod/sys.properties
  40. 2 0
      src/main/resources/test/sys.properties
  41. 1 1
      src/main/webapp/resources/js/admin/controllers/product/KindContrastDetailCtrl.js
  42. 2 2
      src/main/webapp/resources/js/admin/controllers/product/UploadComponentCrawlCtrl.js
  43. 1 1
      src/main/webapp/resources/js/common/module/store_recommend_product.js
  44. 17 17
      src/main/webapp/resources/js/common/query/brand.js
  45. 37 37
      src/main/webapp/resources/js/common/query/component.js
  46. 12 12
      src/main/webapp/resources/js/common/query/crawlTask.js
  47. 11 11
      src/main/webapp/resources/js/common/query/kind.js
  48. 1 1
      src/main/webapp/resources/js/common/query/kindAdvice.js
  49. 12 12
      src/main/webapp/resources/js/common/query/kindContrast.js
  50. 11 11
      src/main/webapp/resources/js/common/query/property.js
  51. 1 1
      src/main/webapp/resources/js/common/query/propertyAdvice.js
  52. 1 1
      src/main/webapp/resources/js/prod/controllers/InfoCtrl.js
  53. 4 4
      src/main/webapp/resources/js/prod/controllers/MgrCtrl.js
  54. 4 0
      src/main/webapp/resources/js/usercenter/controllers/forstore/account_manager_ctrl.js
  55. 61 33
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_home_ctrl.js
  56. 11 1
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_order_ctrl.js
  57. 13 0
      src/main/webapp/resources/js/usercenter/controllers/forstore/order_detail_ctrl.js
  58. 17 7
      src/main/webapp/resources/js/usercenter/controllers/forstore/order_pay_ctrl.js
  59. 8 1
      src/main/webapp/resources/js/usercenter/controllers/forstore/query_logistics_ctrl.js
  60. 12 1
      src/main/webapp/resources/js/usercenter/controllers/forstore/store_focus_ctrl.js
  61. 2 2
      src/main/webapp/resources/js/vendor/controllers/ComponentBatchCreateCtrl.js
  62. 1 1
      src/main/webapp/resources/js/vendor/controllers/PutOnCtrl.js
  63. 8 1
      src/main/webapp/resources/js/vendor/controllers/forstore/purchase_detail.js
  64. 8 1
      src/main/webapp/resources/js/vendor/controllers/forstore/query_logistics_ctrl.js
  65. 4 0
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_account_management_ctrl.js
  66. 2 2
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_component_batchapply_ctrl.js
  67. 13 1
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_order_ctrl.js
  68. 8 7
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_standard_putOn_ctrl.js
  69. 2 2
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_store_maintain_ctrl.js
  70. 1 1
      src/main/webapp/resources/view/admin/store/store_info_detail.html
  71. 3 2
      src/main/webapp/resources/view/admin/trade/trade_order_detail.html
  72. 2 2
      src/main/webapp/resources/view/common/site-nav.html
  73. 3 3
      src/main/webapp/resources/view/usercenter/forstore/buyer_cart.html
  74. 11 11
      src/main/webapp/resources/view/usercenter/forstore/buyer_order.html
  75. 4 1
      src/main/webapp/resources/view/usercenter/forstore/buyer_transfer.html
  76. 71 3
      src/main/webapp/resources/view/usercenter/forstore/order_detail.html
  77. 73 3
      src/main/webapp/resources/view/usercenter/forstore/order_pay.html
  78. 73 2
      src/main/webapp/resources/view/usercenter/forstore/query_logistics.html
  79. 75 3
      src/main/webapp/resources/view/usercenter/forstore/store_focus.html
  80. 8 7
      src/main/webapp/resources/view/usercenter/modal/cancelOrder_modal.html
  81. 72 2
      src/main/webapp/resources/view/vendor/forstore/purchase_detail.html
  82. 69 2
      src/main/webapp/resources/view/vendor/forstore/query_logistics.html
  83. 9 9
      src/main/webapp/resources/view/vendor/forstore/vendor_account_management.html
  84. 11 6
      src/main/webapp/resources/view/vendor/forstore/vendor_order.html
  85. 6 3
      src/main/webapp/resources/view/vendor/forstore/vendor_store_info.html
  86. 2 2
      src/main/webapp/resources/view/vendor/forstore/vendor_store_maintain.html

+ 10 - 0
src/main/java/com/uas/platform/b2c/advertise/ad/api/StoreRecommendController.java

@@ -5,6 +5,7 @@ import com.uas.platform.b2c.advertise.ad.service.RecommendProductService;
 import com.uas.platform.b2c.core.utils.JacksonUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
@@ -43,6 +44,15 @@ public class StoreRecommendController {
 		return recommendProductService.findProductsWhenUserVisitStore(uuid);
 	}
 
+	/**
+	 * 当卖家新增或修改产品推荐时,创建或更新产品推荐信息
+	 */
+	@RequestMapping(method = RequestMethod.POST, value = "/products//update_batch")
+	public List<RecommendProduct> saveProductsWhenSellerUpdate(String uuid,
+   			@RequestBody List<RecommendProduct> productList) {
+		return recommendProductService.saveProductsWhenSellerUpdate(uuid, productList);
+	}
+
 	@RequestMapping(value = "/products/{uuid}", method = RequestMethod.DELETE)
 	public String deleteProductsWhenUserVisitStore(@PathVariable("uuid") String uuid, String batchCode) {
 		Map<String, String> map = new HashMap<>();

+ 8 - 0
src/main/java/com/uas/platform/b2c/advertise/ad/service/RecommendProductService.java

@@ -29,4 +29,12 @@ public interface RecommendProductService {
 	 * @return the string
 	 */
 	List<RecommendProduct> findProductsWhenUserVisitStore(String uuid);
+
+	/**
+	 * 当卖家新增或修改产品推荐时,创建或更新产品推荐信息
+	 *
+	 * @param uuid			店铺UUID
+	 * @param productList	推荐产品列表
+	 */
+	List<RecommendProduct> saveProductsWhenSellerUpdate(String uuid, List<RecommendProduct> productList);
 }

+ 48 - 3
src/main/java/com/uas/platform/b2c/advertise/ad/service/impl/RecommendProductServiceImpl.java

@@ -4,10 +4,12 @@ import com.uas.platform.b2c.advertise.ad.model.Message;
 import com.uas.platform.b2c.advertise.ad.model.RecommendProduct;
 import com.uas.platform.b2c.advertise.ad.service.RecommendProductService;
 import com.uas.platform.b2c.advertise.ad.utils.RecommendProductsUtils;
+import com.uas.platform.b2c.core.config.MicroServicesConfMulti;
 import com.uas.platform.b2c.core.utils.JacksonUtils;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
 import com.uas.platform.b2c.prod.commodity.model.Goods;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.kafka.core.KafkaTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -30,17 +32,23 @@ import java.util.Set;
 @Service
 public class RecommendProductServiceImpl implements RecommendProductService {
 
+	@Value("#{sys.profile}")
+	private String profile;
+
 	private final RestTemplate restTemplate;
 
 	private final GoodsDao goodsDao;
 
 	private final KafkaTemplate<String, String> kafkaTemplate;
 
+	private final MicroServicesConfMulti conf;
+
 	@Autowired
-	public RecommendProductServiceImpl(RestTemplate restTemplate, GoodsDao goodsDao, KafkaTemplate<String, String> kafkaTemplate) {
+	public RecommendProductServiceImpl(RestTemplate restTemplate, GoodsDao goodsDao, KafkaTemplate<String, String> kafkaTemplate, MicroServicesConfMulti conf) {
 		this.restTemplate = restTemplate;
 		this.goodsDao = goodsDao;
 		this.kafkaTemplate = kafkaTemplate;
+		this.conf = conf;
 	}
 
 	@Override
@@ -49,6 +57,10 @@ public class RecommendProductServiceImpl implements RecommendProductService {
 			return;
 		}
 
+		if (StringUtils.isEmpty(profile)) {
+			throw new IllegalStateException("无法获取配置文件属性值");
+		}
+
 		Date date = new Date();
 
 		Message message = new Message();
@@ -58,14 +70,17 @@ public class RecommendProductServiceImpl implements RecommendProductService {
 		message.setBatchCodes(batchCodes);
 		System.out.println(JacksonUtils.toJson(message));
 
-		kafkaTemplate.send("recommend-products-delete", "batchCode", JacksonUtils.toJson(message));
+		String topic = "recommend-products-delete" + "-" + ("prod".equals(profile) ? "prod" : "test");
+
+		kafkaTemplate.send(topic, "batchCode", JacksonUtils.toJson(message));
 	}
 
 	@Override
 	public List<RecommendProduct> findProductsWhenUserVisitStore(String uuid) {
 		Map<String, String> map = new HashMap<>();
 		map.put("uuid", uuid);
-		String content = restTemplate.getForObject("http://api.ubtob.com/api/recommend/products?condition=store_uuid&uuid={uuid}", String.class, map);
+		String url = conf.getRecommendUrl("/api/recommend/products?condition=store_uuid&uuid={uuid}");
+		String content = restTemplate.getForObject(url, String.class, map);
 		if (StringUtils.isEmpty(content)) {
 			return Collections.emptyList();
 		}
@@ -80,4 +95,34 @@ public class RecommendProductServiceImpl implements RecommendProductService {
 		}
 		return recommendProducts;
 	}
+
+	@Override
+	public List<RecommendProduct> saveProductsWhenSellerUpdate(String uuid, List<RecommendProduct> productList) {
+		if (StringUtils.isEmpty(uuid)) {
+			return Collections.emptyList();
+		}
+
+		if (CollectionUtils.isEmpty(productList)) {
+			productList = Collections.emptyList();
+		}
+
+		String url = conf.getRecommendUrl("/api/recommend/products?uuid=" + uuid);
+
+		String content;
+		try {
+			content = restTemplate.postForObject(url, productList, String.class);
+		} catch (Exception e) {
+			content = "[]";
+		}
+
+		List<RecommendProduct> recommendProducts = JacksonUtils.fromJsonArray(content, RecommendProduct.class);
+
+		for (RecommendProduct product : recommendProducts) {
+			Goods commodity = goodsDao.findByBatchCode(product.getBatchCode());
+			if (commodity != null) {
+				RecommendProductsUtils.fillCommodityInfo(product, commodity);
+			}
+		}
+		return recommendProducts;
+	}
 }

+ 3 - 0
src/main/java/com/uas/platform/b2c/common/account/controller/UserController.java

@@ -101,6 +101,9 @@ public class UserController {
 	 */
 	@RequestMapping(value = "/updatePassword", method = RequestMethod.POST)
 	public ResponseEntity<String> updatePassword(HttpSession session, String password, String newPassword) {
+		if (password.equals(newPassword)){
+			throw new IllegalOperatorException("新密码与旧密码相同");
+		}
 		User sysUser = SystemSession.getUser();
 		User user = userService.findUserPwdByUserUU(sysUser.getUserUU());
 		Enterprise enterprise = user.getEnterprise();

+ 1 - 1
src/main/java/com/uas/platform/b2c/common/account/model/User.java

@@ -63,7 +63,7 @@ public class User implements Serializable {
 	/**
 	 * 邮箱
 	 */
-	@Column(name = "user_email", length = 50, nullable = false)
+	@Column(name = "user_email", length = 50)
 	@NotNull
 	private String userEmail;
 

+ 41 - 0
src/main/java/com/uas/platform/b2c/core/config/MicroServicesConfMulti.java

@@ -0,0 +1,41 @@
+package com.uas.platform.b2c.core.config;
+
+import com.uas.platform.core.model.PageParams;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+/**
+ * 微服务相关配置
+ */
+@Component
+public class MicroServicesConfMulti {
+
+	/**
+	 * 微服务Docker swarm的主机地址
+	 */
+	@Value("#{sys.endpointUri ?: '10.10.101.23'}")
+	private String microServiceIp;
+
+	@Value("#{sys.recommendPort ?: '20102'}")
+	private String recommendPort;
+
+	public String getMicroServiceIp() {
+		return microServiceIp;
+	}
+
+	public void setMicroServiceIp(String microServiceIp) {
+		this.microServiceIp = microServiceIp;
+	}
+
+	public String getRequestUrl(int port, String requestUrl) {
+		return String.format("http://%s:%d%s", this.microServiceIp, port, requestUrl);
+	}
+
+	public String getRequestUrl(int port, String requestUrl, PageParams pageable) {
+		return String.format("http://%s:%d%s%s", this.microServiceIp, port, requestUrl, "&count=" + pageable.getCount() + "&page=" + pageable.getPage() + "&filter=" + pageable.getFilter());
+	}
+
+	public String getRecommendUrl(String requestUrl) {
+		return String.format("http://%s:%s%s", this.microServiceIp, this.recommendPort, requestUrl);
+	}
+}

+ 13 - 1
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java

@@ -1873,17 +1873,29 @@ public class GoodsServiceImpl implements GoodsService {
 		}
 		Set<String> uuids = new HashSet<>();
 		List<String> batchCodeList = new ArrayList<>();
+
+		String storeUuid = "";
+
 		for (String batchCode : batchCodeArr) {
 			ResultMap resultMap = offShelfOneGoodsByProvider(batchCode);
 			if (resultMap.isSuccess()) {
 				Goods goods = (Goods) resultMap.getData();
 				uuids.add(goods.getUuid());
 				batchCodeList.add(goods.getBatchCode());
+
+				storeUuid = goods.getStoreid();
 			}
 		}
 		for (String uuid : uuids) {
 			updateComponentTradeInfos(uuid);
 		}
+
+		if (!StringUtils.isEmpty(storeUuid)) {
+			List<String> list = Arrays.asList(batchCodeArr);
+			Set<String> batchCodeSet = new HashSet<>(list);
+			recommendProductService.deleteProductsWhenSellerUpdateReserve(storeUuid, batchCodeSet);
+		}
+
 		if (batchCodeList.size() == 0) {
 			return new ResultMap(CodeType.ERROR_STATE.code(), "下架商品失败");
 		} else {
@@ -1897,7 +1909,7 @@ public class GoodsServiceImpl implements GoodsService {
 	 * @param batchCode		商品批次号
 	 */
 	@Transactional
-	private ResultMap offShelfOneGoodsByProvider(String batchCode) {
+	public ResultMap offShelfOneGoodsByProvider(String batchCode) {
 		if (StringUtils.isEmpty(batchCode)) {
 			return new ResultMap(CodeType.NO_INFO.code(), "待下架批次号不能为空");
 		}

+ 2 - 1
src/main/java/com/uas/platform/b2c/prod/product/brand/api/BrandController.java

@@ -2,6 +2,7 @@ package com.uas.platform.b2c.prod.product.brand.api;
 
 import com.uas.platform.b2c.prod.product.brand.modal.Brand;
 import com.uas.platform.b2c.prod.product.brand.modal.BrandInfo;
+import com.uas.platform.b2c.prod.product.brand.modal.BrandMostSimpleInfo;
 import com.uas.platform.b2c.prod.product.kind.model.Kind;
 import com.uas.platform.b2c.prod.product.brand.service.BrandService;
 import com.uas.platform.b2c.prod.product.kind.service.KindService;
@@ -61,7 +62,7 @@ public class BrandController {
 	 * @return map(首字母,品牌简易信息)
 	 */
 	@RequestMapping(value = "/initial/{keyword}", method = RequestMethod.GET)
-	public Map<String, List<BrandInfo>>  getInitialSimpleInfo(@PathVariable String keyword) {
+	public Map<String, List<BrandMostSimpleInfo>>  getInitialSimpleInfo(@PathVariable String keyword) {
 		if (StringUtils.isEmpty(keyword))
 			keyword = "ABC";
 		return brandService.getInitialSimpleInfo(keyword);

+ 10 - 1
src/main/java/com/uas/platform/b2c/prod/product/brand/controller/BrandController.java

@@ -19,7 +19,7 @@ import java.util.Map;
  * 品牌相关接口
  */
 @RestController
-@RequestMapping("/product/brand")
+@RequestMapping("/produce/brand")
 public class BrandController {
 
 	@Autowired
@@ -62,4 +62,13 @@ public class BrandController {
 	public List<Map<String, Object>> findCountIncreaseBrandByMonth() {
 		return brandService.findCountIncreaseBrandByMonth();
 	}
+
+	/**
+	 * 初始化首字母
+	 * @return
+	 */
+	@RequestMapping(value = "/init", method = RequestMethod.GET)
+	public String initBrandNameInital() {
+		return brandService.initBrandNameInital();
+	}
 }

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/product/brand/controller/BrandSubmitController.java

@@ -23,7 +23,7 @@ import org.springframework.web.bind.annotation.*;
  * @version 2017年8月2日17:01:38 wangyc 完善注释
  */
 @RestController
-@RequestMapping("/product/brandSubmit")
+@RequestMapping("/produce/brandSubmit")
 public class BrandSubmitController {
 
 	@Autowired

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/product/brand/controller/BrandVersionController.java

@@ -19,7 +19,7 @@ import java.util.List;
  * @version 2017年8月2日17:01:38 wangyc 完善注释
  */
 @RestController
-@RequestMapping("/product/brandVersion")
+@RequestMapping("/produce/brandVersion")
 public class BrandVersionController {
 
 	@Autowired

+ 8 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/dao/BrandInfoDao.java

@@ -58,4 +58,12 @@ public interface BrandInfoDao extends JpaSpecificationExecutor<BrandInfo>, JpaRe
 	 */
 	@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value = "true") })
 	public List<BrandInfo> findByNameEn(String nameEn);
+
+	/**
+	 * 根据首字母获取品牌信息
+	 * @param initals
+	 * @return
+	 */
+	@Query(nativeQuery = true, value = "select * from product$brand where br_inital in :initals")
+	public List<BrandInfo> findInInitals(@Param("initals") String[] initals);
 }

+ 27 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/dao/BrandMostSimpleInfoDao.java

@@ -0,0 +1,27 @@
+package com.uas.platform.b2c.prod.product.brand.dao;
+
+import com.uas.platform.b2c.prod.product.brand.modal.BrandMostSimpleInfo;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * Created by wangyc on 2017/9/19.
+ *
+ * @version 2017/9/19 10:29 wangyc
+ */
+@Repository
+public interface BrandMostSimpleInfoDao extends JpaSpecificationExecutor<BrandMostSimpleInfo>, JpaRepository<BrandMostSimpleInfo, Long> {
+
+    /**
+     * 根据首字母获取品牌信息
+     * @param initals
+     * @return
+     */
+    @Query(nativeQuery = true, value = "select * from product$brand where br_inital in :initals")
+    public List<BrandMostSimpleInfo> findInInitals(@Param("initals") String[] initals);
+}

+ 14 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/modal/Brand.java

@@ -140,6 +140,12 @@ public class Brand implements Serializable {
 	@Column(name = "br_version")
 	private Short version;
 
+	/**
+	 * 英文品牌名首字母
+	 */
+	@Column(name = "br_inital")
+	private String inital;
+
 	/**
 	 * 权重,可用于排序
 	 */
@@ -306,6 +312,14 @@ public class Brand implements Serializable {
 		this.version = version;
 	}
 
+	public String getInital() {
+		return inital;
+	}
+
+	public void setInital(String inital) {
+		this.inital = inital;
+	}
+
 	public Brand() {
 
 	}

+ 14 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/modal/BrandInfo.java

@@ -73,6 +73,12 @@ public class BrandInfo {
 	@Column(name = "br_createtime")
 	private Date createTime;
 
+	/**
+	 * 英文品牌名首字母
+	 */
+	@Column(name = "br_inital")
+	private String inital;
+
 	public Long getId() {
 		return id;
 	}
@@ -145,6 +151,14 @@ public class BrandInfo {
 		this.createTime = createTime;
 	}
 
+	public String getInital() {
+		return inital;
+	}
+
+	public void setInital(String inital) {
+		this.inital = inital;
+	}
+
 	public BrandInfo() {
 
 	}

+ 93 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/modal/BrandMostSimpleInfo.java

@@ -0,0 +1,93 @@
+package com.uas.platform.b2c.prod.product.brand.modal;
+
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+import org.springframework.cache.annotation.Cacheable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * 超简易品牌信息
+ *
+ * @version 2017/9/19 10:24 wangyc
+ */
+@Entity
+@Table(name = "product$brand")
+@Cacheable
+@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "com.uas.platform.b2c.prod.product.brand.modal.BrandMostSimpleInfo")
+public class BrandMostSimpleInfo {
+
+    /**
+     * id
+     */
+    @Id
+    @Column(name = "br_id")
+    private Long id;
+
+    /**
+     * uuid
+     */
+    @Column(name = "br_uuid", unique = true)
+    private String uuid;
+
+    /**
+     * 品牌中文名称
+     */
+    @Column(name = "br_name_cn")
+    private String nameCn;
+
+    /**
+     * 品牌英文名称
+     */
+    @Column(name = "br_name_en")
+    private String nameEn;
+
+    /**
+     * 英文品牌名首字母
+     */
+    @Column(name = "br_inital")
+    private String inital;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getUuid() {
+        return uuid;
+    }
+
+    public void setUuid(String uuid) {
+        this.uuid = uuid;
+    }
+
+    public String getNameCn() {
+        return nameCn;
+    }
+
+    public void setNameCn(String nameCn) {
+        this.nameCn = nameCn;
+    }
+
+    public String getNameEn() {
+        return nameEn;
+    }
+
+    public void setNameEn(String nameEn) {
+        this.nameEn = nameEn;
+    }
+
+    public String getInital() {
+        return inital;
+    }
+
+    public void setInital(String inital) {
+        this.inital = inital;
+    }
+}

+ 8 - 1
src/main/java/com/uas/platform/b2c/prod/product/brand/service/BrandService.java

@@ -2,6 +2,7 @@ package com.uas.platform.b2c.prod.product.brand.service;
 
 import com.uas.platform.b2c.prod.product.brand.modal.Brand;
 import com.uas.platform.b2c.prod.product.brand.modal.BrandInfo;
+import com.uas.platform.b2c.prod.product.brand.modal.BrandMostSimpleInfo;
 import com.uas.platform.b2c.prod.product.brand.modal.BrandVersion;
 import com.uas.platform.core.model.PageInfo;
 import org.springframework.data.domain.Page;
@@ -19,6 +20,12 @@ public interface BrandService {
 	 */
 	public List<Brand> init(List<Brand> brands);
 
+	/**
+	 * 初始化首字母名
+	 * @return
+	 */
+	public String initBrandNameInital();
+
 	/**
 	 * 保存品牌
 	 * 
@@ -45,7 +52,7 @@ public interface BrandService {
 	 * @param keyword 关键词
 	 * @return 品牌简易信息
 	 */
-	public Map<String, List<BrandInfo>> getInitialSimpleInfo(String keyword);
+	public Map<String, List<BrandMostSimpleInfo>> getInitialSimpleInfo(String keyword);
 
 	/**
 	 * 获取BrandInfo分页数据

+ 47 - 14
src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/BrandServiceImpl.java

@@ -3,8 +3,10 @@ package com.uas.platform.b2c.prod.product.brand.service.impl;
 import com.uas.platform.b2c.core.utils.PinyinUtils;
 import com.uas.platform.b2c.prod.product.brand.dao.BrandDao;
 import com.uas.platform.b2c.prod.product.brand.dao.BrandInfoDao;
+import com.uas.platform.b2c.prod.product.brand.dao.BrandMostSimpleInfoDao;
 import com.uas.platform.b2c.prod.product.brand.modal.Brand;
 import com.uas.platform.b2c.prod.product.brand.modal.BrandInfo;
+import com.uas.platform.b2c.prod.product.brand.modal.BrandMostSimpleInfo;
 import com.uas.platform.b2c.prod.product.brand.modal.BrandVersion;
 import com.uas.platform.b2c.prod.product.brand.service.BrandService;
 import com.uas.platform.b2c.prod.product.component.dao.ComponentDao;
@@ -44,6 +46,9 @@ public class BrandServiceImpl implements BrandService {
 	@Autowired
 	private JdbcTemplate jdbcTemplate;
 
+	@Autowired
+	private BrandMostSimpleInfoDao brandMostSimpleInfoDao;
+
 	@Override
 	public List<Brand> init(List<Brand> brands) {
 		return brandDao.save(brands);
@@ -95,21 +100,19 @@ public class BrandServiceImpl implements BrandService {
 	}
 
 	@Override
-	public Map<String, List<BrandInfo>> getInitialSimpleInfo(String keyword) {
-		Map<String, List<BrandInfo>> brands = getInitialSimpleInfo();
-		Map<String, List<BrandInfo>> map = new HashMap<String, List<BrandInfo>>();
+	public Map<String, List<BrandMostSimpleInfo>> getInitialSimpleInfo(String keyword) {
+		Map<String, List<BrandMostSimpleInfo>> map = new HashMap<String, List<BrandMostSimpleInfo>>();
 		if ("0~9".equals(keyword)) {
-			map.put("0~9", brands.get("0~9"));
-			return map;
-		}
-		String[] arr = new String[3];
-		for (int i = 0; i < keyword.length(); i++) {
-			arr[i] = keyword.substring(i, i+1);
-		}
-
-		for (String initial : arr) {
-			if (StringUtils.hasText(initial))
-				map.put(initial.toUpperCase(), brands.get(initial.toUpperCase()));
+			String[] initals = new String[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
+			List<BrandMostSimpleInfo> brandInfos = brandMostSimpleInfoDao.findInInitals(initals);
+			map.put(keyword, brandInfos);
+		} else {
+			char[] initals = keyword.toCharArray();
+			for (char inital : initals) {
+				String str = String.valueOf(inital).toUpperCase();
+				List<BrandMostSimpleInfo> brandInfos = brandMostSimpleInfoDao.findInInitals(new String[]{str});
+				map.put(str, brandInfos);
+			}
 		}
 		return map;
 	}
@@ -159,6 +162,16 @@ public class BrandServiceImpl implements BrandService {
 		if (brand.getNameCn() == null) {
 			brand.setNameCn(brand.getNameEn());
 		}
+
+        String initialName = "";
+        if (isChinese(brand.getNameEn())) {
+            initialName = PinyinUtils.chineseToPinyin(brand.getNameEn());
+        } else {
+            initialName = brand.getNameEn();
+        }
+        String initial = initialName.substring(0,1).toUpperCase();
+        brand.setInital(initial);
+
 		// 根据version判断是新增还是更新
 		if (brand.getVersion() != 1) {
 			Brand exsitBrand = brandDao.findByUuid(brand.getUuid());
@@ -290,4 +303,24 @@ public class BrandServiceImpl implements BrandService {
 		List<Map<String, Object>> map = jdbcTemplate.queryForList(sql);
 		return map;
 	}
+
+	@Override
+	public String initBrandNameInital() {
+		List<BrandInfo> brandInfos = brandInfoDao.findAll();
+		// 将品牌按首字母分组
+		for (BrandInfo brand : brandInfos) {
+			String initialName = "";
+			if (isChinese(brand.getNameEn())) {
+				initialName = PinyinUtils.chineseToPinyin(brand.getNameEn());
+			} else {
+				initialName = brand.getNameEn();
+			}
+			String initial = initialName.substring(0,1).toUpperCase();
+			brand.setInital(initial);
+			System.err.println("品牌名:" + brand.getNameEn() + " 首字母:" + initial);
+		}
+		brandInfoDao.save(brandInfos);
+
+		return "success";
+	}
 }

+ 2 - 2
src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/BrandSubmitServiceImpl.java

@@ -275,13 +275,13 @@ public class BrandSubmitServiceImpl implements BrandSubmitService {
 			if (CollectionUtils.isNotEmpty(existBrandCn)) {
 				for (Brand existBrand : existBrandCn) {
 					brandSubmit.setUuid(existBrand.getUuid());
-					brandSubmit.setVersion(existBrand.getVersion());
+					brandSubmit.setVersion((short) (existBrand.getVersion() + 1));
 				}
 			}
 			if (CollectionUtils.isNotEmpty(existBrandEn)) {
 				for (Brand existBrand : existBrandEn) {
 					brandSubmit.setUuid(existBrand.getUuid());
-					brandSubmit.setVersion(existBrand.getVersion());
+					brandSubmit.setVersion((short) (existBrand.getVersion() + 1));
 				}
 			}
 			brandSubmit.setDefinetime(brandSubmit.getLastModifyDate());

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/product/component/controller/ComponentController.java

@@ -24,7 +24,7 @@ import java.util.Map;
  * 器件接口
  */
 @RestController
-@RequestMapping("/product/component")
+@RequestMapping("/produce/component")
 public class ComponentController {
 
 	@Autowired

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/product/component/controller/ComponentCrawlTaskController.java

@@ -17,7 +17,7 @@ import javax.transaction.Transactional;
  * 器件爬取任务接口
  */
 @RestController
-@RequestMapping("/product/crawlTask")
+@RequestMapping("/produce/crawlTask")
 public class ComponentCrawlTaskController {
 
 	@Autowired

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/product/component/controller/ComponentSubmitController.java

@@ -36,7 +36,7 @@ import java.util.List;
  * @version 2017年8月2日17:41:00 wangyc 完善注释
  */
 @RestController
-@RequestMapping("/product/componentSubmit")
+@RequestMapping("/produce/componentSubmit")
 public class ComponentSubmitController {
 
 	@Autowired

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/product/component/controller/ComponentVersionController.java

@@ -18,7 +18,7 @@ import java.util.List;
  * @version 2017年8月2日17:49:02 wangyc 创建
  */
 @RestController
-@RequestMapping("/product/componentVersion")
+@RequestMapping("/produce/componentVersion")
 public class ComponentVersionController {
 
 	@Autowired

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/product/kind/controller/KindAdviceController.java

@@ -22,7 +22,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
  * @version  2015年12月21日上午9:54:55 suntg 创建
  */
 @Controller
-@RequestMapping("/product/kindAdvice")
+@RequestMapping("/produce/kindAdvice")
 public class KindAdviceController {
 
 	@Autowired

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/product/kind/controller/KindContrastController.java

@@ -20,7 +20,7 @@ import org.springframework.web.bind.annotation.RestController;
  * @version 2017年8月2日19:12:07 wangyc 创建
  */
 @RestController
-@RequestMapping("/product/kindContrast")
+@RequestMapping("/produce/kindContrast")
 public class KindContrastController {
 
 	@Autowired

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/product/kind/controller/KindController.java

@@ -25,7 +25,7 @@ import java.util.List;
  * @version 2017年8月2日19:17:14 wangyc 创建
  */
 @RestController("product.KindController")
-@RequestMapping("/product/kind")
+@RequestMapping("/produce/kind")
 public class KindController {
 	@Autowired
 	private KindService kindService;

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/product/property/controller/PropertyController.java

@@ -20,7 +20,7 @@ import java.util.List;
  * @version 2017年8月2日19:39:19 wangyc 完善注释
  */
 @Controller
-@RequestMapping("/product/property")
+@RequestMapping("/produce/property")
 public class PropertyController {
 
 	@Autowired

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/product/property/controller/PropertySubmitController.java

@@ -18,7 +18,7 @@ import java.util.List;
  * @version 2017年8月2日19:40:12 wangyc 完善注释
  */
 @RestController
-@RequestMapping("/product/propertySubmit")
+@RequestMapping("/produce/propertySubmit")
 public class PropertySubmitController {
 
 	@Autowired

+ 17 - 0
src/main/java/com/uas/platform/b2c/prod/store/controller/StoreInformationController.java

@@ -4,6 +4,8 @@ import com.uas.platform.b2c.advertise.ad.model.StoreAdsType;
 import com.uas.platform.b2c.prod.store.model.StoreIn;
 import com.uas.platform.b2c.prod.store.model.StoreStatus;
 import com.uas.platform.b2c.prod.store.service.StoreInService;
+import com.uas.platform.b2c.trade.support.CodeType;
+import com.uas.platform.b2c.trade.support.ResultMap;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -79,4 +81,19 @@ public class StoreInformationController {
 		return storeService.cancelStoreTagsWhenAdminCancel(type, store);
 	}
 
+	/**
+	 * TODO 正式系统店铺企业信息同步之后,弃用
+	 */
+	@Deprecated
+	@ResponseBody
+	@RequestMapping(method = RequestMethod.GET, value = "/auth/api/store//syncEnterprise")
+	public ResultMap syncStoreEnterpriseInfo() {
+		try {
+			storeService.syncStoreEnterpriseInfo();
+		} catch (Exception e) {
+			return new ResultMap(CodeType.ERROR_STATE, e.getMessage());
+		}
+		return ResultMap.success("finished");
+	}
+
 }

+ 15 - 0
src/main/java/com/uas/platform/b2c/prod/store/model/EnterpriseSimple.java

@@ -2,6 +2,7 @@ package com.uas.platform.b2c.prod.store.model;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.fa.payment.utils.StringUtils;
 
 import java.util.Date;
 
@@ -54,6 +55,11 @@ public class EnterpriseSimple {
 	 */
 	private String enFax;
 
+	/**
+	 * 公司邮箱
+	 */
+	private String enEmail;
+
 	/**
 	 * 商业登记证号
 	 */
@@ -133,6 +139,14 @@ public class EnterpriseSimple {
 		this.enType = enType;
 	}
 
+	public String getEnEmail() {
+		return enEmail;
+	}
+
+	public void setEnEmail(String enEmail) {
+		this.enEmail = enEmail;
+	}
+
 	public String getEnBusinessCode() {
 		return enBusinessCode;
 	}
@@ -187,6 +201,7 @@ public class EnterpriseSimple {
 		simple.enDate = enterprise.getEnDate();
 		simple.enUrl = enterprise.getEnUrl();
 		simple.enLogoUrl = enterprise.getEnLogoUrl();
+		simple.enEmail = StringUtils.isEmpty(enterprise.getEnEmail()) ? " " : enterprise.getEnEmail();
 		return simple;
 	}
 

+ 3 - 0
src/main/java/com/uas/platform/b2c/prod/store/service/StoreInService.java

@@ -160,4 +160,7 @@ public interface StoreInService {
 	 * @param store		店铺信息
 	 */
 	StoreIn cancelStoreTagsWhenAdminCancel(StoreAdsType type, StoreIn store);
+
+	@Deprecated
+    void syncStoreEnterpriseInfo();
 }

+ 53 - 14
src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreInServiceImpl.java

@@ -3,6 +3,8 @@ package com.uas.platform.b2c.prod.store.service.impl;
 import com.uas.platform.b2c.advertise.ad.model.StoreAds;
 import com.uas.platform.b2c.advertise.ad.model.StoreAdsType;
 import com.uas.platform.b2c.advertise.ad.service.StoreAdsService;
+import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
+import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.platform.b2c.core.config.SysConf;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.JacksonUtils;
@@ -11,15 +13,11 @@ import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
 import com.uas.platform.b2c.prod.product.component.dao.ComponentDao;
 import com.uas.platform.b2c.prod.product.component.modal.Component;
 import com.uas.platform.b2c.prod.store.dao.QualificationDao;
+import com.uas.platform.b2c.prod.store.dao.StoreApplyDao;
 import com.uas.platform.b2c.prod.store.dao.StoreBrandInfoDao;
 import com.uas.platform.b2c.prod.store.dao.StoreInDao;
 import com.uas.platform.b2c.prod.store.exception.EmptyParameterException;
-import com.uas.platform.b2c.prod.store.model.Qualification;
-import com.uas.platform.b2c.prod.store.model.StoreApply;
-import com.uas.platform.b2c.prod.store.model.StoreBrandInfo;
-import com.uas.platform.b2c.prod.store.model.StoreIn;
-import com.uas.platform.b2c.prod.store.model.StoreStatus;
-import com.uas.platform.b2c.prod.store.model.StoreType;
+import com.uas.platform.b2c.prod.store.model.*;
 import com.uas.platform.b2c.prod.store.service.StoreInService;
 import com.uas.platform.b2c.trade.order.dao.PurchaseDao;
 import com.uas.platform.b2c.trade.support.ResultMap;
@@ -44,13 +42,7 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 /**
  * 店铺业务实现类
@@ -481,7 +473,54 @@ public class StoreInServiceImpl implements StoreInService {
 		return store;
 	}
 
-	@Override
+	// Deprecated: on
+	@Autowired
+	private StoreApplyDao applyDao;
+
+	@Autowired
+	private EnterpriseDao enterpriseDao;
+
+	@Deprecated
+    @Override
+    public void syncStoreEnterpriseInfo() {
+		// 同步店铺申请信息
+		List<StoreApply> applies = applyDao.findAll();
+		if (!CollectionUtils.isEmpty(applies)) {
+			for (StoreApply apply : applies) {
+				apply.setEnterprise(syncEnterpriseInfo(apply.getEnUU(), apply.getEnterprise()));
+			}
+			applyDao.save(applies);
+		}
+
+
+		// 同步店铺信息
+		List<StoreIn> storeIns = storeDao.findAll();
+		if (!CollectionUtils.isEmpty(storeIns)) {
+			for (StoreIn store : storeIns) {
+				store.setEnterprise(syncEnterpriseInfo(store.getEnUU(), store.getEnterprise()));
+			}
+			storeDao.save(storeIns);
+		}
+	}
+
+	private EnterpriseSimple syncEnterpriseInfo(Long enUU, EnterpriseSimple tmp) {
+		Enterprise enterprise = enterpriseDao.findByUu(enUU);
+
+		if (tmp != null) {
+			if (enterprise != null && !StringUtils.isEmpty(enterprise.getEnEmail())) {
+				tmp.setEnEmail(enterprise.getEnEmail());
+			} else {
+				tmp.setEnEmail(" ");
+			}
+		} else {
+			tmp = EnterpriseSimple.translateSimple(enterprise);
+		}
+
+		return tmp;
+	}
+	// Deprecated: off
+
+    @Override
 	public List<StoreIn> findFiveStores(String types, Integer num) {
 		String[] typeArray = types.split("-");
 		List<String> typeList = Arrays.asList(typeArray);

+ 1 - 1
src/main/java/com/uas/platform/b2c/trade/order/status/PurchaseStatus.java

@@ -34,7 +34,7 @@ public enum PurchaseStatus {
 	/**
 	 * {@code unavailable 售后中}
 	 */
-	TOBEREVIEWED("toBeReviewed","404-503-520");
+	TOBEREVIEWED("toBeReviewed","404-503");
 
 	/**
 	 * 状态名称

+ 24 - 15
src/main/java/com/uas/platform/b2c/trade/presale/controller/CollectionController.java

@@ -136,13 +136,20 @@ public class CollectionController {
 		while (it.hasNext()){
 			String uuid = it.next();
 			ComponentInfo componentInfo = componentInfoDao.findByUuid(uuid);
-			Collection store = new Collection();
-			store.setComponentid(componentInfo.getId());
-			store.setUseruu(SystemSession.getUser().getUserUU());
-			store.setEnuu(SystemSession.getUser().getEnterprise().getUu());
-			store.setCreatetime(new Date());
-			store.setKind(2);
-			storeList.add(store);
+			if (componentInfo != null){
+				Collection store = new Collection();
+				store.setComponentid(componentInfo.getId());
+				store.setUseruu(SystemSession.getUser().getUserUU());
+				if (SystemSession.getUser().getEnterprise() != null){
+					store.setDissociative(Type.ENTERPRISING.value());
+					store.setEnuu(SystemSession.getUser().getEnterprise().getUu());
+				}else {
+					store.setDissociative(Type.PERSONAL.value());
+				}
+				store.setCreatetime(new Date());
+				store.setKind(2);
+				storeList.add(store);
+			}
 		}
 		collectionService.save(storeList);
 		return "success";
@@ -160,15 +167,17 @@ public class CollectionController {
 		String result = "success";
 		if (StringUtils.hasText(str)) {
 			Collection store = FastjsonUtils.fromJson(str, Collection.class);
-			store.setUseruu(SystemSession.getUser().getUserUU());
-			if (SystemSession.getUser().getEnterprise() != null) {
-				store.setDissociative(Type.ENTERPRISING.value());
-				store.setEnuu(SystemSession.getUser().getEnterprise().getUu());
-			} else {
-				store.setDissociative(Type.PERSONAL.value());
+			if (store.getComponentid() != null){
+				store.setUseruu(SystemSession.getUser().getUserUU());
+				if (SystemSession.getUser().getEnterprise() != null) {
+					store.setDissociative(Type.ENTERPRISING.value());
+					store.setEnuu(SystemSession.getUser().getEnterprise().getUu());
+				} else {
+					store.setDissociative(Type.PERSONAL.value());
+				}
+				store.setCreatetime(new Date());
+				result = collectionService.save(store);
 			}
-			store.setCreatetime(new Date());
-			result = collectionService.save(store);
 		}
 		System.out.println("result = " + result);
 		return result;

+ 11 - 0
src/main/java/com/uas/platform/b2c/trade/presale/dao/CollectionDao.java

@@ -85,4 +85,15 @@ public interface CollectionDao extends JpaRepository<Collection, Long>, JpaSpeci
 	 * List<Collection> 返回收藏记录列表
 	 */
 	List<Collection> findStoreByUseruuAndEnuuAndKindAndComponentid(Long useruu, Long enuu, int kind, Long componentid);
+
+	/**
+	 * 获取指定的store 判断器件是否存在
+	 *
+	 * @param useruu 个人uu
+	 * @param dissociative 是否为个人用户
+	 * @param kind 收藏类型,品牌或者器件
+	 * @param componentid 器件id
+	 * @return
+	 */
+	List<Collection> findStoreByUseruuAndDissociativeAndKindAndComponentid(Long useruu, Integer dissociative, int kind, Long componentid);
 }

+ 3 - 2
src/main/java/com/uas/platform/b2c/trade/presale/service/impl/CartServiceImpl.java

@@ -396,8 +396,9 @@ public class CartServiceImpl implements CartService {
 
 		Map<String, Object> map = new HashMap<String, Object>();
 		Map<String, List<Cart>> contentMap = new HashMap<>();
-		info.sorting("storeUuid", Sort.Direction.DESC);
-		info.sorting("id", Sort.Direction.DESC);
+//		info.sorting("storeUuid", Sort.Direction.DESC);
+//		info.sorting("id", Sort.Direction.DESC);
+		info.sorting(Sort.Direction.DESC, "storeUuid", "id");
 		// 获取当前页的购物车记录信息
 		Page<Cart> carts = cartDao.findAll(new Specification<Cart>() {
 			@Override

+ 7 - 3
src/main/java/com/uas/platform/b2c/trade/presale/service/impl/CollectionServiceImpl.java

@@ -79,9 +79,13 @@ public class CollectionServiceImpl implements CollectionService {
 				return "repeat";
 			}
 		} else if (store.getKind() == 2) {
-			List<Collection> storelist = collectionDao.findStoreByUseruuAndEnuuAndKindAndComponentid(
-					SystemSession.getUser().getUserUU(), SystemSession.getUser().getEnterprise().getUu(), 2, store.getComponentid());
-			if (storelist.size() == 0) {
+			if (SystemSession.getUser().getEnterprise() != null){
+				storeList = collectionDao
+						.findStoreByUseruuAndEnuuAndKindAndComponentid(SystemSession.getUser().getUserUU(), SystemSession.getUser().getEnterprise().getUu(), 2, store.getComponentid());
+			} else {
+				storeList = collectionDao.findStoreByUseruuAndDissociativeAndKindAndComponentid(SystemSession.getUser().getUserUU(), Type.PERSONAL.value(), 2, store.getComponentid());
+			}
+			if (storeList.size() == 0) {
 				collectionDao.save(store);
 			}else {
 				return "repeat";

+ 2 - 0
src/main/resources/dev/sys.properties

@@ -23,6 +23,8 @@ reportPrintUrl=http://print.ubtob.com/report/print?userName=B2C&profile=${profil
 reportUploadUrl=http://print.ubtob.com/report/fileUpload?userName=B2C
 # micro service IP(Swarm Manager IP)
 microServiceIp=10.10.101.23
+endpointUri=10.10.101.23
+recommendPort=20102
 
 # Kafka
 kafka-bootstrap-servers=10.10.100.11:9292,10.10.100.12:9292,10.10.100.13:9292,10.10.100.14:9292,10.10.100.15:9292,10.10.100.16:9292

+ 2 - 0
src/main/resources/prod/sys.properties

@@ -24,6 +24,8 @@ reportPrintUrl=http://print.ubtob.com/report/print?userName=B2C&profile=${profil
 reportUploadUrl=http://print.ubtob.com/report/fileUpload?userName=B2C
 # micro service IP(Swarm Manager IP)
 microServiceIp=10.10.100.23
+endpointUri=10.10.100.23
+recommendPort=20100
 
 # Kafka
 kafka-bootstrap-servers=10.10.100.11:9292,10.10.100.12:9292,10.10.100.13:9292,10.10.100.14:9292,10.10.100.15:9292,10.10.100.16:9292

+ 2 - 0
src/main/resources/test/sys.properties

@@ -23,6 +23,8 @@ reportPrintUrl=http://print.ubtob.com/report/print?userName=B2C&profile=${profil
 reportUploadUrl=http://print.ubtob.com/report/fileUpload?userName=B2C
 # micro service IP(Swarm Manager IP)
 microServiceIp=10.10.101.23
+endpointUri=10.10.101.23
+recommendPort=20102
 
 # Kafka
 kafka-bootstrap-servers=10.10.100.11:9292,10.10.100.12:9292,10.10.100.13:9292,10.10.100.14:9292,10.10.100.15:9292,10.10.100.16:9292

+ 1 - 1
src/main/webapp/resources/js/admin/controllers/product/KindContrastDetailCtrl.js

@@ -127,7 +127,7 @@ define(['app/app'], function(app) {
 		$scope.upload = function() {
 			var file = $scope.myFiles[0];
 			$upload.upload({
-				url: 'product/componentSubmit/upload/componentCrawlsWithSame/' + $scope.kindContrast.id,
+				url: 'produce/componentSubmit/upload/componentCrawlsWithSame/' + $scope.kindContrast.id,
 				file: file,
 				method: 'POST'
 			}).success(function(data) {

+ 2 - 2
src/main/webapp/resources/js/admin/controllers/product/UploadComponentCrawlCtrl.js

@@ -91,7 +91,7 @@ define(['app/app'], function(app) {
 		$scope.upload = function() {
 			var file = $scope.myFiles[0];
 			$upload.upload({
-				url: 'product/componentSubmit/upload/componentCrawls',
+				url: 'produce/componentSubmit/upload/componentCrawls',
 				file: file,
 				method: 'POST'
 			}).success(function(data) {
@@ -126,7 +126,7 @@ define(['app/app'], function(app) {
 		// 确认继续上传数据
 		var uploadToSame = function(myFile, kindContrastId) {
 			$upload.upload({
-				url: 'product/componentSubmit/upload/componentCrawlsWithSame/' + kindContrastId,
+				url: 'produce/componentSubmit/upload/componentCrawlsWithSame/' + kindContrastId,
 				file: myFile,
 				method: 'POST'
 			}).success(function(data) {

+ 1 - 1
src/main/webapp/resources/js/common/module/store_recommend_product.js

@@ -39,7 +39,7 @@ define([ 'ngResource', 'common/query/commodity' ], function() {
 			 * @param uuid
 			 */
 			saveProductsWhenSellerUpdate: {
-				url: address + 'api/recommend/products',
+				url: 'api/store/recommend/products//update_batch',
 				method: 'POST',
 				isArray: true
 			},

+ 17 - 17
src/main/webapp/resources/js/common/query/brand.js

@@ -1,7 +1,7 @@
 define([ 'ngResource' ], function() {
 	angular.module('brandServices', [ 'ngResource' ]).factory('BrandsSubmit', ['$resource', function($resource) {
 		//获取BrandSubmit的分页数据
-		return $resource('product/brandSubmit', {}, {
+		return $resource('produce/brandSubmit', {}, {
 			//未审核
 			getUnAudited : {
 				params : { _state : 'unAudited'}
@@ -17,15 +17,15 @@ define([ 'ngResource' ], function() {
 		});
 	}]).factory('BrandSubmit', ['$resource', function($resource) {
 		//对单个BrandSubmit的操作
-		return $resource('product/brandSubmit/:id', {}, {
+		return $resource('produce/brandSubmit/:id', {}, {
 			//提交(保存)
 			submit : {
-				url : 'product/brandSubmit/saveBrandSubmit',
+				url : 'produce/brandSubmit/saveBrandSubmit',
 				method : 'POST'
 			},
 			//审核通过
 			valid : {
-				url : 'product/brandSubmit/audit',
+				url : 'produce/brandSubmit/audit',
 				method : 'PUT',
 				params : {
 					valid : true
@@ -33,7 +33,7 @@ define([ 'ngResource' ], function() {
 			},
 			//审核不通过
 			invalid : {
-				url : 'product/brandSubmit/audit/:id',
+				url : 'produce/brandSubmit/audit/:id',
 				method : 'PUT',
 				params : {
 					valid : false
@@ -41,34 +41,34 @@ define([ 'ngResource' ], function() {
 			},
 			// 审核通过信息冲突的更新申请
 			validUpdate : {
-				url : 'product/brandSubmit/audituUpdate',
+				url : 'produce/brandSubmit/audituUpdate',
 				method : 'PUT'
 			}
 		});
 	}]).factory('BrandVersion', ['$resource', function($resource) {
 		//获取根据uuid获取BrandVersion列表
-		return $resource('product/brandVersion/:uuid', {}, {
+		return $resource('produce/brandVersion/:uuid', {}, {
 			/*
 			 * get,根据uuid,version获取BrandVersion对象
 			 */
 			//根据uuid获取BrandVersion列表
 			getList : {
-				url : 'product/brandVersion/list/:uuid',
+				url : 'produce/brandVersion/list/:uuid',
 				method : 'GET',
 				isArray : true
 			},
 			//根据uuid获取BrandVersion名称
 			getCount : {
-				url : 'product/brandVersion/count/:uuid',
+				url : 'produce/brandVersion/count/:uuid',
 				method : 'GET'
 			}
 		});
 	}]).factory('BrandActive', ['$resource', function($resource) {
 		//对单个BrandActive对象操作
-		return $resource('product/brand/:uuid', {}, {
+		return $resource('produce/brand/:uuid', {}, {
 			//禁用BrandActive
 			disable : {
-				url : 'product/brand/disable/:uuid',
+				url : 'produce/brand/disable/:uuid',
 				method : 'PUT',
 				isArray : true
 			},
@@ -96,18 +96,18 @@ define([ 'ngResource' ], function() {
 			},
 			// 验证品牌名是否存在
 			nameExist : {
-				url: 'product/brand/nameExist',
+				url: 'produce/brand/nameExist',
 				method: 'GET',
 				isArray: true
 			},
 			// 更新与修改
 			update : {
-				url: 'product/brand/saveBrandActive',
+				url: 'produce/brand/saveBrandActive',
 				method: 'POST'
 			},
 			// 获取各月新增品牌数量
 			getIncreaseCount : {
-				url: 'product/brand/increaseCount',
+				url: 'produce/brand/increaseCount',
 				method: 'GET',
 				isArray: true
 			}
@@ -185,19 +185,19 @@ define([ 'ngResource' ], function() {
 		})
 	}]).factory('BrandDisable', ['$resource', function($resource) {
 		//对BrandDisable禁用品牌的操作
-		return $resource('product/brandDisable/:uuid', {}, {
+		return $resource('produce/brandDisable/:uuid', {}, {
 			/**
 			 * get, 根据uuid获取BrandDisable
 			 */
 			// 获取全部已禁用品牌的简要信息
 			getSimpleInfo : {
-				url: 'product/brandDisable/info',
+				url: 'produce/brandDisable/info',
 				method: 'GET',
 				isArray: true
 			},
 			// 分页获取全部已禁用品牌的简要信息
 			getSimpleInfoPage : {
-				url: 'product/brandDisable/info/ByPage',
+				url: 'produce/brandDisable/info/ByPage',
 				method: 'GET'
 			}
 		});

+ 37 - 37
src/main/webapp/resources/js/common/query/component.js

@@ -1,7 +1,7 @@
 define([ 'ngResource' ], function() {
 	angular.module('componentServices', [ 'ngResource' ]).factory('ComponentsSubmit', ['$resource', function($resource) {
 		//获取ComponentSubmit的分页数据
-		return $resource('product/componentSubmit', {}, {
+		return $resource('produce/componentSubmit', {}, {
 			//未审核
 			getUnAudited : {
 				params : { _state : 'unAudited'}
@@ -17,13 +17,13 @@ define([ 'ngResource' ], function() {
 		});
 	}]).factory('ComponentSubmit', ['$resource', function($resource) {
 		//对单个ComponentSubmit的操作
-		return $resource('product/componentSubmit/:id', {}, {
+		return $resource('produce/componentSubmit/:id', {}, {
 			/**
 			 * get,根据uuid查找ComponentSubmit详细信息
 			 */
 			//审核通过
 			valid : {
-				url : 'product/componentSubmit/audit',
+				url : 'produce/componentSubmit/audit',
 				method : 'PUT',
 				params : {
 					valid : true
@@ -31,7 +31,7 @@ define([ 'ngResource' ], function() {
 			},
 			//审核不通过
 			invalid : {
-				url : 'product/componentSubmit/audit/:id',
+				url : 'produce/componentSubmit/audit/:id',
 				method : 'PUT',
 				params : {
 					valid : false
@@ -39,122 +39,122 @@ define([ 'ngResource' ], function() {
 			},
 			// 下载批量器件建档模板
 			downloadExcel : {
-				url : 'product/componentSubmit/template',
+				url : 'produce/componentSubmit/template',
 				method : 'POST'
 			},
 			// 未审核批量申请(用户)
 			unAuditedBatch : {
-				url : 'product/componentSubmit/batch',
+				url : 'produce/componentSubmit/batch',
 				method : 'GET',
 				params : { _status : 'unAudited'}
 			},
 			// 已通过批量申请(用户)
 			passBatch : {
-				url : 'product/componentSubmit/batch',
+				url : 'produce/componentSubmit/batch',
 				method : 'GET',
 				params : { _status : 'pass'}
 			},
 			// 全部批量申请(用户)
 			allBatch : {
-				url : 'product/componentSubmit/batch',
+				url : 'produce/componentSubmit/batch',
 				method : 'GET',
 				params : { _status : 'all'}
 			},
 			// 未通过批量申请(用户)
 			forbiddenBatch : {
-				url : 'product/componentSubmit/batch',
+				url : 'produce/componentSubmit/batch',
 				method : 'GET',
 				params : { _status : 'forbidden'}
 			},
 			// 全部批量申请(后台)
 			allBatchManage : {
-				url : 'product/componentSubmit/manage/batch',
+				url : 'produce/componentSubmit/manage/batch',
 				method : 'GET',
 				params : { _status : 'all'}
 			},
 			// 未审核批量申请(后台)
 			unAuditedBatchManage : {
-				url : 'product/componentSubmit/manage/batch',
+				url : 'produce/componentSubmit/manage/batch',
 				method : 'GET',
 				params : { _status : 'unAudited'}
 			},
 			// 已通过批量申请(后台)
 			passBatchManage : {
-				url : 'product/componentSubmit/manage/batch',
+				url : 'produce/componentSubmit/manage/batch',
 				method : 'GET',
 				params : { _status : 'pass'}
 			},
 			// 未通过批量申请(后台)
 			forbiddenBatchManage : {
-				url : 'product/componentSubmit/manage/batch',
+				url : 'produce/componentSubmit/manage/batch',
 				method : 'GET',
 				params : { _status : 'forbidden'}
 			},
 			// 获取批量申请详情
 			getBatchDetails : {
-				url : 'product/componentSubmit/batch/:submitId',
+				url : 'produce/componentSubmit/batch/:submitId',
 				method : 'GET'
 			},
 			// 批量器件建档审核通过
 			auditBatch : {
-				url : 'product/componentSubmit/audit/batch',
+				url : 'produce/componentSubmit/audit/batch',
 				method : 'PUT'
 			},
 			// 批量器件建档审核不通过
 			unAuditBatch : {
-				url : 'product/componentSubmit/unAudit/batch',
+				url : 'produce/componentSubmit/unAudit/batch',
 				method : 'PUT'
 			},
 			// 获取尚未处理的建档申请
 			tobe_handleTask : {
-				url : 'product/componentSubmit/getDetail/batch',
+				url : 'produce/componentSubmit/getDetail/batch',
 				method : 'GET',
 				params : {_status : 'tobe_handle'}
 			},
 			// 获取任务中的建档申请
 			pendingTask : {
-				url : 'product/componentSubmit/getDetail/batch',
+				url : 'produce/componentSubmit/getDetail/batch',
 				method : 'GET',
 				params : {_status : 'pending'}
 			},
 			// 获取已完成的建档申请
 			completeTask : {
-				url : 'product/componentSubmit/getDetail/batch',
+				url : 'produce/componentSubmit/getDetail/batch',
 				method : 'GET',
 				params : {_status : 'complete'}
 			},
 			// 获取爬取失败的建档申请
 			failedTask : {
-				url : 'product/componentSubmit/getDetail/batch',
+				url : 'produce/componentSubmit/getDetail/batch',
 				method : 'GET',
 				params : {_status : 'failed'}
 			},
 			// 选取用户申请发起任务
 			saveTask : {
-				url : 'product/componentSubmit/task',
+				url : 'produce/componentSubmit/task',
 				method : 'POST'
 			},
 			// 用户直接提交批量建档申请
 			saveSubmits : {
-				url : 'product/componentSubmit/submitBatch',
+				url : 'produce/componentSubmit/submitBatch',
 				method : 'POST'
 			}
 		});
 	}]).factory('ComponentVersion', ['$resource', function($resource) {
 		//获取根据uuid获取ComponentVersion列表
-		return $resource('product/componentVersion/:uuid', {}, {
+		return $resource('produce/componentVersion/:uuid', {}, {
 			/**
 			 * get,根据uuid,version获取ComponentVersion对象
 			 */
 			//根据uuid获取ComponentVersion列表
 			getList : {
-				url : 'product/componentVersion/list/:uuid',
+				url : 'produce/componentVersion/list/:uuid',
 				method : 'GET',
 				isArray : true
 			},
 			//根据uuid获取ComponentVersion数量
 			getCount : {
-				url : 'product/componentVersion/count/:uuid',
+				url : 'produce/componentVersion/count/:uuid',
 				method : 'GET'
 			}
 		});
@@ -171,7 +171,7 @@ define([ 'ngResource' ], function() {
 			},
 			//获取ComponentInfo的分页数据
 			getInfoPage: {
-				url: 'product/component/list',
+				url: 'produce/component/list',
 				method: 'GET'
 			},
 			// 根据UUid获取单个器件的简要信息
@@ -193,7 +193,7 @@ define([ 'ngResource' ], function() {
 			},
 			// 禁用ComponentActive
 			disable : {
-				url : 'product/component/:uuid/disable',
+				url : 'produce/component/:uuid/disable',
 				method : 'PUT'
 			},
 			// 根据UUid 获取列表
@@ -204,16 +204,16 @@ define([ 'ngResource' ], function() {
 			},
 			//根据批次号获取器件信息
 			getByBatchCode: {
-				url : 'product/component/:batchCode/detail',
+				url : 'produce/component/:batchCode/detail',
 				method : 'GET'
 			},//根据原厂型号和品牌获取器件信息
 			getByCodeAndBrandId: {
-				url: 'product/component/codeAndBrandId/:code',
+				url: 'produce/component/codeAndBrandId/:code',
 				method: 'GET',
 				isArray: true
 			},//根据原厂型号和类目获取器件信息
 			getByCodeAndKindId: {
-				url: 'product/component/codeAndKindId/:code',
+				url: 'produce/component/codeAndKindId/:code',
 				method: 'GET',
 				isArray: true
 			},
@@ -243,31 +243,31 @@ define([ 'ngResource' ], function() {
 			},
 			// 根据类目id获取封装规格
 			getPackagingByKindid: {
-				url: 'product/component/packaging/:kindid',
+				url: 'produce/component/packaging/:kindid',
 				method: 'GET',
 				isArray: true
 			},
 			// 批量修改器件类目
 			moveCmp: {
-				url: 'product/component/moveCmp',
+				url: 'produce/component/moveCmp',
 				method: 'PUT',
 				isArray : true
 			},
 			// 获取每月器件增长数量
 			getIncreaseCount: {
-				url: 'product/component/increaseCount',
+				url: 'produce/component/increaseCount',
 				method: 'GET',
 				isArray: true
 			}
 		});
 	}]).factory('ComponentDisable', ['$resource', function($resource) {
-		return $resource('product/componentDisable/:uuid', {}, {
+		return $resource('produce/componentDisable/:uuid', {}, {
 			/*
 			 * get 根据uuid获得ComponentDisable
 			 */
 			// 分页获取全部已禁用器件的简要信息
 			getSimpleInfoPage : {
-				url: 'product/componentDisable/info/ByPage',
+				url: 'produce/componentDisable/info/ByPage',
 				method: 'GET'
 			}
 		})
@@ -296,13 +296,13 @@ define([ 'ngResource' ], function() {
 			}
 		});
 	}]).factory('ComponentTest', ['$resource', function($resource) {
-		return $resource('product/component/:uuid', {}, {
+		return $resource('produce/component/:uuid', {}, {
 			/*
 			 * get 获ComponentsActive的分页数据,根据uuid获得ComponentActive
 			 */
 			//获取ComponentActive的分页数据
 			getInfoPage: {
-				url: 'product/component/info',
+				url: 'produce/component/info',
 				method: 'GET'
 			}
 		});

+ 12 - 12
src/main/webapp/resources/js/common/query/crawlTask.js

@@ -1,67 +1,67 @@
 define([ 'ngResource' ], function() {
 	angular.module('crawlTaskServices', [ 'ngResource' ]).factory('CrawlTask', ['$resource', function($resource) {
 		//获取数据爬取的分页数据
-		return $resource('product/crawlTask', {}, {
+		return $resource('produce/crawlTask', {}, {
 			// 获取未完成的任务
 			to_crawl : {
-				url : 'product/crawlTask',
+				url : 'produce/crawlTask',
 				method : 'GET',
 				params : {_status : 'to_crawl'}
 			},
 			// 获取进行中的任务
 			running : {
-				url : 'product/crawlTask',
+				url : 'produce/crawlTask',
 				method : 'GET',
 				params : {_status : 'running'}
 			},
 			// 获取已完成的任务
 			crawled : {
-				url : 'product/crawlTask',
+				url : 'produce/crawlTask',
 				method : 'GET',
 				params : {_status : 'crawled'}
 			},
 			// 获取失败的任务
 			failed : {
-				url : 'product/crawlTask',
+				url : 'produce/crawlTask',
 				method : 'GET',
 				params : {_status : 'failed'}
 			},
 			// 新增任务(来自参数对应关系)
 			save : {
-				url : 'product/crawlTask/:id',
+				url : 'produce/crawlTask/:id',
 				method : 'POST'
 			},
 			// 新增任务(来自用户申请列表)
 			saveBySubmit : {
-				url : 'product/crawlTask/saveBySubmit/:ids',
+				url : 'produce/crawlTask/saveBySubmit/:ids',
 				method : 'POST'
 			},
 			// 根据id获取任务详情
 			getOne : {
-				url : 'product/crawlTask/:id',
+				url : 'produce/crawlTask/:id',
 				method : 'GET'
 			},
 			// 任务开启
 			crawlStart : {
-				url : 'product/crawlTask/crawl',
+				url : 'produce/crawlTask/crawl',
 				params : { _status : 'start'},
 				method : 'PUT'
 			},
 			// 任务完成
 			crawlSuccess : {
-				url : 'product/crawlTask/crawl',
+				url : 'produce/crawlTask/crawl',
 				params : { _status : 'success'},
 				method : 'PUT'
 			},
 			// 任务异常
 			crawlFail : {
-				url : 'product/crawlTask/crawl',
+				url : 'produce/crawlTask/crawl',
 				params : { _status : 'fail'},
 				method : 'PUT'
 			},
 			// 获取已完成任务的维护器件列表
 			getCmpList : {
-				url : 'product/crawlTask/cmpList',
+				url : 'produce/crawlTask/cmpList',
 				method : 'GET'
 			}
 		});

+ 11 - 11
src/main/webapp/resources/js/common/query/kind.js

@@ -1,31 +1,31 @@
 define([ 'ngResource'], function() {
 	angular.module('common.query.kind', [ 'ngResource' ]).factory('Kind', ['$resource', '$cacheFactory', function($resource, $cacheFactory) {
 		var cache = $cacheFactory('Kind');
-		return $resource('product/kind/:kindIds', {}, {
+		return $resource('produce/kind/:kindIds', {}, {
 			// 修改分类的属性
 			updateProperties: {
-				url: 'product/kind/:kindId/properties',
+				url: 'produce/kind/:kindId/properties',
 				method: 'POST',
 				isArray: true
 			},
 			//重置类属性值
 			resetKindPropertyValues: {
-				url: 'product/kind/kindPropertyValues/reset',
+				url: 'produce/kind/kindPropertyValues/reset',
 				method:  'GET'
 			},
 			// 编辑修改
 			update: {
-				url: 'product/kind/:kindId',
+				url: 'produce/kind/:kindId',
 				method: 'POST'
 			},
 			// 新增保存
 			save: {
-				url: 'product/kind',
+				url: 'produce/kind',
 				method: 'POST'
 			},
 			// 交换序号
 			exchangeNumber: {
-				url: 'product/kind/number',
+				url: 'produce/kind/number',
 				method: 'POST',
 				params: {
 					operate: 'exchange'
@@ -33,28 +33,28 @@ define([ 'ngResource'], function() {
 			},
 			// 删除类目属性
 			deleteKindProperty: {
-				url: 'product/kind/kindProperty/:kindPropertyId',
+				url: 'produce/kind/kindProperty/:kindPropertyId',
 				method: 'DELETE',
 			},
 			// 添加类目属性
 			addKindProperty: {
-				url: 'product/kind/kindProperty/add',
+				url: 'produce/kind/kindProperty/add',
 				method: 'PUT'
 			},
 			// 修改类目属性具体值
 			updateKindProperty: {
-				url: 'product/kind/kindProperty/update',
+				url: 'produce/kind/kindProperty/update',
 				method: 'PUT'
 			},
 			// 改变类目属性顺序
 			changeDetno: {
-				url: 'product/kind/kindProperty/changeDetno',
+				url: 'produce/kind/kindProperty/changeDetno',
 				method: 'PUT',
 				isArray: true
 			},
 			// 更换类目属性
 			changeKindProperty: {
-				url: 'product/kind/kindProperty/changeKindProperty',
+				url: 'produce/kind/kindProperty/changeKindProperty',
 				method: 'PUT'
 			}
 		});

+ 1 - 1
src/main/webapp/resources/js/common/query/kindAdvice.js

@@ -5,7 +5,7 @@ define([ 'ngResource'], function() {
 	angular.module('common.query.kindAdvice', [ 'ngResource'
 	]).factory('KindAdvice', ['$resource', '$cacheFactory', function($resource, $cacheFactory) {
 		var cache = $cacheFactory('KindAdvice');
-		return $resource('product/kindAdvice/:id', {}, {
+		return $resource('produce/kindAdvice/:id', {}, {
 			
 		});
 	}]);

+ 12 - 12
src/main/webapp/resources/js/common/query/kindContrast.js

@@ -1,66 +1,66 @@
 define([ 'ngResource' ], function() {
 	angular.module('kindContrastServices', [ 'ngResource' ]).factory('KindContrast', ['$resource', function($resource) {
 		//获取属性对应关系的分页数据
-		return $resource('product/kindContrast', {}, {
+		return $resource('produce/kindContrast', {}, {
 			// 获取全部参数对照规则
 			all: {
-				url : 'product/kindContrast',
+				url : 'produce/kindContrast',
 				method : 'GET',
 				params : {_status : 'all'}
 			},
 			// 获取待发起参数对照规则
 			outTask: {
-				url : 'product/kindContrast',
+				url : 'produce/kindContrast',
 				method : 'GET',
 				params : {_status : 'outTask'}
 			},
 			// 获取全部参数对照规则
 			inTask: {
-				url : 'product/kindContrast',
+				url : 'produce/kindContrast',
 				method : 'GET',
 				params : {_status : 'inTask'}
 			},
 			// 获取任务进行中的参数对应规则
 			running : {
-				url : 'product/kindContrast',
+				url : 'produce/kindContrast',
 				method : 'GET',
 				params : {_status : 'running'}
 			},
 			// 获取已结案的参数对应规则
 			concluded : {
-				url : 'product/kindContrast',
+				url : 'produce/kindContrast',
 				method : 'GET',
 				params : {_status : 'concluded'}
 			},
 			// 获取异常参数对应关系规则
 			failed : {
-				url : 'product/kindContrast',
+				url : 'produce/kindContrast',
 				method : 'GET',
 				params : {_status : 'failed'}
 			},
  			// 获取参数对照规则详情
 			getOne : {
-				url : 'product/kindContrast/:id',
+				url : 'produce/kindContrast/:id',
 				method : 'GET'
 			},
 			// 更新基础属性
 			updateBasic : {
-				url : 'product/kindContrast/update/basic',
+				url : 'produce/kindContrast/update/basic',
 				method : 'PUT'
 			},
 			// 更新参数对照
 			updateProperty : {
-				url : 'product/kindContrast/update/property',
+				url : 'produce/kindContrast/update/property',
 				method : 'PUT'
 			},
 			// 新增参数对照明细
 			newProperty : {
-				url : 'product/kindContrast/create/property',
+				url : 'produce/kindContrast/create/property',
 				method : 'PUT'
 			},
 			// 删除参数对照
 			deleteOne : {
-				url : 'product/kindContrast/:id',
+				url : 'produce/kindContrast/:id',
 				method : 'DELETE'
 			}
 		});

+ 11 - 11
src/main/webapp/resources/js/common/query/property.js

@@ -1,53 +1,53 @@
 define([ 'ngResource' ], function() {
 	angular.module('propertyServices', [ 'ngResource' ]).factory('Property', ['$resource', function($resource) {
-		return $resource('product/property/:id', {}, {
+		return $resource('produce/property/:id', {}, {
 			// 根据id获取属性信息
 			get : {
-				url : 'product/property/:id',
+				url : 'produce/property/:id',
 				method : 'GET'
 			},
 			//获得所有属性数据
 			getProperties : {
-				url : 'product/property',
+				url : 'produce/property',
 				method : 'GET',
 				isArray: true
 			},
 			// 分页获取所有属性
 			getPropertiesPage : {
-				url : 'product/property/pageInfo',
+				url : 'produce/property/pageInfo',
 				method : 'GET'
 			},
 			// 添加属性
 			add : {
-				url : 'product/property',
+				url : 'produce/property',
 				method : 'POST'
 			},
 			// 更新属性
 			update : {
-				url : 'product/property/update',
+				url : 'produce/property/update',
 				method : 'POST'
 			}
 		});
 	}]).factory('propertiesSubmit', ['$resource', function($resource) {
 		//获取ComponentSubmit的数据
-		return $resource('product/propertySubmit', {}, {
+		return $resource('produce/propertySubmit', {}, {
 			//根据ComponentSubmit.id查找对应的propertiesSubmit
 			getList : {
-				url : 'product/propertySubmit/:id',
+				url : 'produce/propertySubmit/:id',
 				method : 'GET',
 				isArray : true
 			},
 			getPropertySubmit : {
-				url : 'product/propertySubmit/property',
+				url : 'produce/propertySubmit/property',
 				method : 'GET'
 			}
 		});
 	}]).factory('propertiesActive', ['$resource', function($resource) {
 		//获取propertiesActive的数据
-		return $resource('product/propertyActive', {}, {
+		return $resource('produce/propertyActive', {}, {
 			//根据ComponentActive.id查找对应的propertiesActive
 			getList : {
-				url : 'product/propertyActive/:id',
+				url : 'produce/propertyActive/:id',
 				method : 'GET',
 				isArray : true
 			}

+ 1 - 1
src/main/webapp/resources/js/common/query/propertyAdvice.js

@@ -5,7 +5,7 @@ define([ 'ngResource'], function() {
 	angular.module('common.query.propertyAdvice', [ 'ngResource'
 	]).factory('PropertyAdvice', ['$resource', '$cacheFactory', function($resource, $cacheFactory) {
 		var cache = $cacheFactory('PropertyAdvice');
-		return $resource('product/propertyAdvice/:id', {}, {
+		return $resource('produce/propertyAdvice/:id', {}, {
 			
 		});
 	}]);

+ 1 - 1
src/main/webapp/resources/js/prod/controllers/InfoCtrl.js

@@ -80,7 +80,7 @@ define([ 'app/app', 'jquery-summernote' ], function(app) {
 				
 				// 不是通过路由过来的,再检查地址栏的参数kindIds
 				if($location.search().kindIds && /^(\d{1,}_)*(\d){1,}$/.test($location.search().kindIds)) {
-					$http.get('product/kinds/' + $location.search().kindIds.replace(/_/g, ','), {
+					$http.get('produce/kinds/' + $location.search().kindIds.replace(/_/g, ','), {
 						cache: $templateCache
 					}).success(function(kinds){
 						if(kinds.length > 0 && kinds.last().isLeaf) {

+ 4 - 4
src/main/webapp/resources/js/prod/controllers/MgrCtrl.js

@@ -6,7 +6,7 @@ define(['app/app'], function(app) {
 		// 不是通过路由过来的,再检查地址栏的参数kindIds
 		if(!$scope.productKinds && $stateParams.kindIds && 
 				/^(\d{1,}_)*(\d){1,}$/.test($stateParams.kindIds)) {
-			$http.get('product/kinds/' + $stateParams.kindIds.replace(/_/g, ','), {
+			$http.get('produce/kinds/' + $stateParams.kindIds.replace(/_/g, ','), {
 				cache: $templateCache
 			}).success(function(kinds){
 				if(kinds.length > 0 && kinds.last().isLeaf) {
@@ -33,7 +33,7 @@ define(['app/app'], function(app) {
 		 */
 		var getKindProperties = function(kindId) {
 			setLoading(true);
-			$http.get('product/kinds/' + kindId + '/properties').success(function(response){
+			$http.get('produce/kinds/' + kindId + '/properties').success(function(response){
 				$scope.properties = response;
 				setLoading(false);
 			});
@@ -140,7 +140,7 @@ define(['app/app'], function(app) {
 					data.push(_p);
 				});
 				setLoading(true);
-				$http.post('product/kinds/' + kindId + '/properties', data).success(function(response){
+				$http.post('produce/kinds/' + kindId + '/properties', data).success(function(response){
 					setLoading(false);
 					toaster.pop('success', '提示', '保存成功!');
 					$scope.properties = response;
@@ -237,7 +237,7 @@ define(['app/app'], function(app) {
 			} ]
 		} ];
 		var getCategories = function(parentId) {
-			return $http.get('product/kinds/' + parentId + '/children_all');
+			return $http.get('produce/kinds/' + parentId + '/children_all');
 		};
 		getCategories(0).success(function(response) {
 			var cates = [];

+ 4 - 0
src/main/webapp/resources/js/usercenter/controllers/forstore/account_manager_ctrl.js

@@ -439,6 +439,10 @@ define(['app/app'], function(app) {
 
 		//修改密码
 		$scope.ok = function () {
+			if($scope.user.newPassword == $scope.user.password){
+				toaster.pop('error', '错误', '新密码与原密码相同');
+				return;
+			}
 			if($scope.user.newPassword == $scope.user.newPassword1) {//验证重复密码相等
 				User.updatePassword({password: $scope.user.password, newPassword: $scope.user.newPassword}, {}, function(){
 					toaster.pop('success', '成功', '修改密码成功,请牢记您的新密码。');

+ 61 - 33
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_home_ctrl.js

@@ -86,8 +86,8 @@ define(['app/app', 'calendar'], function(app) {
         $scope.editAddr = function(isSetTop, addr) {
             $scope.isnotCheck = true;
             $modal.open({
-                templateUrl : $rootScope.rootPath + '/static/view/prod/modal/editAddr_modal.html',
-                controller : 'editAddrCtrl',
+                templateUrl : $rootScope.rootPath + '/static/view/common/modal/edit_address_modal.html',
+                controller : 'editAddrHomeCtrl',
                 size : 'lg',
                 resolve : {
                     isSetTop : function(){
@@ -194,46 +194,61 @@ define(['app/app', 'calendar'], function(app) {
     }]);
 
     //地址编辑模态框
-    app.register.controller('editAddrCtrl', ['$scope', 'isSetTop', 'addr', '$modalInstance', 'toaster', '$http', 'ShippingAddress', function($scope, isSetTop, addr, $modalInstance, toaster, $http, ShippingAddress){
-        $scope.isSetTop = isSetTop;
+    app.register.controller('editAddrHomeCtrl', ['$scope', 'isSetTop', 'addr', '$modalInstance', 'toaster', '$http', 'ShippingAddress', function($scope, isSetTop, addr, $modalInstance, toaster, $http, ShippingAddress){
+        if (addr){
+            $scope.isSetTop = addr.num == 1;
+        }else {
+            $scope.isSetTop = isSetTop;
+        }
         //验证数据
         $scope.checkeds = {};
-        $scope.checkform = function(name,num) {
+
+        $scope.checkForm = function(num) {
             var size;
             if(num == 1) {
-                size = document.getElementById("muserName").value.length;
-                console.log(size);
-                if (size > 10) {
-                    $scope.userError = true;
-                    console.log($scope.linkError);
-                    return;
+                if ($scope.address.name){
+                    size = $scope.address.name.replace(/[^x00-xFF]/g,'**').length;
+                    if (size > 20) {
+                        console.log(size);
+                        $scope.userError = true;
+                        return;
+                    }
+                    $scope.userError = false;
                 }
-                $scope.userError = false;
-                // console.log($scope.userError);
             } else if(num == 2) {
-                size = document.getElementById("maddr").value.length;
-                console.log(size);
-                if (size > 30) {
-                    $scope.addrError = true;
-                    console.log($scope.linkError);
-                    return;
+                if ($scope.address.tel){
+                    size = $scope.address.tel.replace(/[^x00-xFF]/g,'**').length;
+                    if (size < 8 || size > 11) {
+                        $scope.telError = true;
+                        return;
+                    }
+                    $scope.telError = false;
+                    var telPatt = new RegExp("^[0-9]+$");
+                    if (telPatt.test($scope.address.tel)){
+                        $scope.telPatternError = false;
+                    }else {
+                        $scope.telPatternError = true;
+                    }
                 }
-                $scope.addrError = false;
-                console.log($scope.userError);
             } else if(num == 3) {
-                if(angular.isUndefined(name)) {
-                    $scope.checkeds.tel = false;
-                } else {
-                    $scope.checkeds.tel = true;
+                if ($scope.address.detailAddress){
+                    size = $scope.address.detailAddress.replace(/[^x00-xFF]/g,'**').length;
+                    if (size > 60) {
+                        $scope.addrError = true;
+                        return;
+                    }
+                    $scope.addrError = false;
                 }
             } else if(num == 4) {
-                if(angular.isUndefined(name)) {
-                    $scope.checkeds.landlineNumber = false;
-                } else {
-                    $scope.checkeds.landlineNumber = true;
+                var emailPatt = new RegExp("^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$");
+                if ($scope.address.email.length > 0 && !emailPatt.test($scope.address.email)){
+                    $scope.emailPatternError = true;
+                }else {
+                    $scope.emailPatternError = false;
                 }
             }
         };
+
         $http.get('static/js/prod/data/city.json').success(function(data) {
             $scope.division = data;
             if(addr){
@@ -246,16 +261,29 @@ define(['app/app', 'calendar'], function(app) {
                 $scope.address = addr;
                 $scope.addr = true;
             }
-        }).error(function(e) {
+        }).error(function() {
             toaster.pop('error', '系统错误 ' + '加载城市信息失败');
         });
 
         $scope.save = function () {
             var address = $scope.address;
+
+            if (!address){
+                toaster.pop('error', '请补充未填写的信息');
+                return ;
+            }
+            if (!address.name || !address.province || !address.city || !address.district ||
+                !address.detailAddress || !address.tel){
+                toaster.pop('error', '请补充未填写的信息');
+                return ;
+            }
+            if ($scope.userError || $scope.telError || $scope.addrError || $scope.telPatternError ||
+                $scope.emailPatternError){
+                toaster.pop('error', '请修改红色框内的信息');
+                return ;
+            }
+
             //拼装地区
-            /**
-             * TODO 这里没做校验
-             */
             var strAres = address.province + ',' + address.city + ',' + address.district;
             address.area = strAres;
 

+ 11 - 1
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_order_ctrl.js

@@ -351,7 +351,7 @@ define(['app/app'], function (app) {
 		};
 
 		// 选择查找日期
-		$scope.onDateCondition = function(){
+		$scope.onDateCondition = function(isStart){
 			if(typeof $scope.startDate == 'undefined' || typeof $scope.endDate == 'undefined'){
 				alert("日期格式错误,请重新输入!");
 				$scope.startDate = null;
@@ -362,6 +362,16 @@ define(['app/app'], function (app) {
 				$scope.endDate = $scope.endDate.toString().replace(/[0-9]{2}:[0-9]{2}:[0-9]{2}/g, '23:59:59');//;'23.59';//DateUtil.yyyyMmDd($scope.endDate.getTime() + 86399000);
 				$scope.endDate = new Date(formatDateTime(new Date($scope.endDate.toString())));
 			}
+			if ($scope.endDate !== null && $scope.startDate>$scope.endDate){
+				if (isStart){
+					alert("开始日期大于结束日期,请重新输入!");
+					$scope.startDate = null;
+				} else {
+					alert("开始日期大于结束日期,请重新输入!");
+					$scope.endDate = null;
+				}
+				return;
+			}
 			$scope.param.startDate = $scope.startDate ? $scope.startDate.getTime() : null;
 			$scope.param.endDate = $scope.endDate ? $scope.endDate.getTime()  : null;
 

+ 13 - 0
src/main/webapp/resources/js/usercenter/controllers/forstore/order_detail_ctrl.js

@@ -60,6 +60,14 @@ define(['app/app'], function(app) {
 		/**
 		 * 确认当前订单所属状态
 		 */
+		// 联系卖家弹框
+		$scope.contactBNox = false;
+		$scope.contactSeller = function () {
+			$scope.contactBNox = !$scope.contactBNox;
+		};
+		$scope.closeBox = function () {
+			$scope.contactBNox = false;
+		};
 		$scope.stepStyle = function (status) {
 			if (!status || status == '') {
 				$scope.error('订单状态不能为空');
@@ -185,6 +193,11 @@ define(['app/app'], function(app) {
 				// 查询店铺信息
 				$scope.findStoreInfoByStoreUuid($scope.order.storeid);
 
+				//订单备注
+				if ($scope.order.orderRemark){
+					$scope.remarkList = angular.fromJson($scope.order.orderRemark);
+				}
+
 				//发票信息
 				$scope.order.invoiceInfo = angular.fromJson($scope.order.invoiceAddress);
 

+ 17 - 7
src/main/webapp/resources/js/usercenter/controllers/forstore/order_pay_ctrl.js

@@ -74,7 +74,6 @@ define(['app/app'], function(app) {
         $scope.togglePrice = function (detail) {
             detail.display = detail.display == 'block' ? 'none' : 'block';
         };
-
 		//获取订单的信息
 		var getOrderData = function() {
 			return Order.findStatusByOrderid({enOrderid : $stateParams.orderid}, function (response) {
@@ -134,7 +133,19 @@ define(['app/app'], function(app) {
 		};
 
 		getOrderData();
-
+		// 联系卖家弹框
+		$scope.contactBNox = false;
+		$scope.contactSeller = function (details) {
+			details.contactSeller = !details.contactSeller;
+			angular.forEach($scope.order.orderDetails, function (order) {
+				if(order.id != details.id) {
+					order.contactSeller = false;
+				}
+			});
+		};
+		$scope.closeBox = function () {
+			$scope.contactBNox = false;
+		};
 
 		/**
 		 * 获取买家收货地址信息
@@ -142,11 +153,9 @@ define(['app/app'], function(app) {
 		$scope.loadShippingAddress = function () {
 			return ShippingAddress.get({send : false}, function(data) {
 				$scope.sendAddress = data;
-				angular.forEach($scope.sendAddress, function (shippingAddress) {
-					if (shippingAddress.num == 1) {
-						$scope.selectAdd(shippingAddress);
-					}
-				})
+				if (data.length != 0){
+					$scope.selectAdd($scope.sendAddress[0]);
+				}
 			}, function(response) {
 				toaster.pop("error", "获取收货地址信息失败 "  + response.data);
 			});
@@ -482,6 +491,7 @@ define(['app/app'], function(app) {
 					}
 				}
 				$scope.payment.address = address;
+				$scope.formatArea = $scope.payment.address.area.replace(/,/g,' ');
 			}, function(){
 				toaster.pop('info', '提示 ' + '您已取消收货地址的编辑');
 			});

+ 8 - 1
src/main/webapp/resources/js/usercenter/controllers/forstore/query_logistics_ctrl.js

@@ -65,7 +65,14 @@ define(['app/app', 'calendar'], function(app) {
                 $scope.status = "signin";
             }
         }
-
+        // 联系卖家弹框
+        $scope.contactBNox = false;
+        $scope.contactSeller = function () {
+            $scope.contactBNox = !$scope.contactBNox;
+        };
+        $scope.closeBox = function () {
+            $scope.contactBNox = false;
+        };
         /**
          *  日历组件
          *

+ 12 - 1
src/main/webapp/resources/js/usercenter/controllers/forstore/store_focus_ctrl.js

@@ -30,7 +30,18 @@ define(['app/app'], function(app) {
 			});
 		}
 		loadData();
-				
+        // 联系卖家弹框
+        $scope.contactSeller = function (item) {
+            item.contactBNox = !item.contactBNox;
+            angular.forEach($scope.store, function (store) {
+                if (store.id != item.id){
+                    store.contactBNox = false;
+                }
+            })
+        };
+        $scope.closeBox = function () {
+            $scope.contactBNox = false;
+        };
 		$scope.isBatch = false;	 // 是否批量标识
 		$scope.isChooseAll = false; // 是否全选标识
 		

+ 2 - 2
src/main/webapp/resources/js/vendor/controllers/ComponentBatchCreateCtrl.js

@@ -282,14 +282,14 @@ define(['app/app'], function(app) {
 					return;
 				}
 			}
-			downloadByJs('product/componentSubmit/template', $scope.submits);
+			downloadByJs('produce/componentSubmit/template', $scope.submits);
 		};
 		
 		// 上传Excel批量发布(大量)
 		$scope.upload = function() {
 			var file = $scope.myFiles[0];
 			$upload.upload({
-				url: 'product/componentSubmit/upload/excel',
+				url: 'produce/componentSubmit/upload/excel',
 				file: file,
 				method: 'POST'
 			}).success(function(data) {

+ 1 - 1
src/main/webapp/resources/js/vendor/controllers/PutOnCtrl.js

@@ -134,7 +134,7 @@ define([ 'app/app'], function(app) {
 			}).result.then(function(data){
 				$scope.active = data.active;
 				/*$scope.actives = data.actives;*/
-				window.location.href = 'product/kind/' + $scope.active.id + '/putOn';
+				window.location.href = 'produce/kind/' + $scope.active.id + '/putOn';
 			}, function(){
 
 			});

+ 8 - 1
src/main/webapp/resources/js/vendor/controllers/forstore/purchase_detail.js

@@ -45,7 +45,14 @@ define(['app/app'], function(app) {
 			});
 			return time;
 		};
-
+		// 联系卖家弹框
+		$scope.contactBNox = false;
+		$scope.contactSeller = function () {
+			$scope.contactBNox = !$scope.contactBNox;
+		};
+		$scope.closeBox = function () {
+			$scope.contactBNox = false;
+		};
 		/**
 		 * 确认当前采购单所属状态
 		 */

+ 8 - 1
src/main/webapp/resources/js/vendor/controllers/forstore/query_logistics_ctrl.js

@@ -65,7 +65,14 @@ define(['app/app', 'calendar'], function(app) {
                 $scope.status = "signin";
             }
         }
-
+        // 联系卖家弹框
+        $scope.contactBNox = false;
+        $scope.contactSeller = function () {
+            $scope.contactBNox = !$scope.contactBNox;
+        };
+        $scope.closeBox = function () {
+            $scope.contactBNox = false;
+        };
         /**
          *  日历组件
          *

+ 4 - 0
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_account_management_ctrl.js

@@ -365,6 +365,10 @@ define(['app/app'], function(app) {
 
 		//修改密码
 		$scope.ok = function () {
+			if($scope.user.newPassword == $scope.user.password){
+				toaster.pop('error', '错误', '新密码与原密码相同');
+				return;
+			}
 			if($scope.user.newPassword == $scope.user.newPassword1) {//验证重复密码相等
 				User.updatePassword({password: $scope.user.password, newPassword: $scope.user.newPassword}, {}, function(){
 					toaster.pop('success', '成功', '修改密码成功,请牢记您的新密码。');

+ 2 - 2
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_component_batchapply_ctrl.js

@@ -280,14 +280,14 @@ define(['app/app'], function(app) {
                     return;
                 }
             }
-            downloadByJs('product/componentSubmit/template', $scope.submits);
+            downloadByJs('produce/componentSubmit/template', $scope.submits);
         };
 
         // 上传Excel批量发布(大量)
         $scope.upload = function() {
             var file = $scope.myFiles[0];
             $upload.upload({
-                url: 'product/componentSubmit/upload/excel',
+                url: 'produce/componentSubmit/upload/excel',
                 file: file,
                 method: 'POST'
             }).success(function(data) {

+ 13 - 1
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_order_ctrl.js

@@ -120,7 +120,7 @@ define(['app/app'], function (app) {
                     state = '602-603-315-604-605-606';
                     break;
                 case 'toBeReviewed':
-                    state = '404-503-520';
+                    state = '404-503';
                     break;
                 //下面的状态栏新增的状态
                 case 'tobepay':
@@ -576,6 +576,18 @@ define(['app/app'], function (app) {
                 $scope.endDate = $scope.endDate.toString().replace(/[0-9]{2}:[0-9]{2}:[0-9]{2}/g, '23:59:59');//;'23.59';//DateUtil.yyyyMmDd($scope.endDate.getTime() + 86399000);
                 $scope.endDate = new Date(formatDateTime(new Date($scope.endDate.toString())));
             }
+            $scope.vaildDate(false);
+        };
+        $scope.vaildDate = function (isStart) {
+            if ($scope.endDate !== null && $scope.startDate>$scope.endDate){
+                if (isStart){
+                    alert("开始日期大于结束日期,请重新输入!");
+                    $scope.startDate = null;
+                } else {
+                    alert("开始日期大于结束日期,请重新输入!");
+                    $scope.endDate = null;
+                }
+            }
         };
         var formatDateTime = function (date) {
             var y = date.getFullYear();

+ 8 - 7
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_standard_putOn_ctrl.js

@@ -323,8 +323,8 @@ define(['app/app'], function (app) {
 			if(!$scope.checkGoodsInfo(standard)) {
 				return ;
 			}
-
-            // 如果没有开启店铺,第一次寄售时则弹出寄售协议
+            productStandardPutOnInfoPutOn(standard, index);
+            /*// 如果没有开启店铺,第一次寄售时则弹出寄售协议
             if (!$scope.$$putOn.isSelfStore) {
 				ConsignmentAgreementRecord.findRecordOfUser({}, {}, function (record) {
 					if (!record.id) {
@@ -347,7 +347,7 @@ define(['app/app'], function (app) {
 				});
             } else {
 				productStandardPutOnInfoPutOn(standard, index);
-            }
+            }*/
         };
 
         function productStandardPutOnInfoPutOn(standard, index) {
@@ -375,9 +375,10 @@ define(['app/app'], function (app) {
 			    console.log('AVSSC');
 				return ;
 			}
+			updateProductStandardPutOnInfo(standard, index);
 
 			// 如果没有开启店铺,第一次寄售时则弹出寄售协议
-			if (!$scope.$$putOn.isSelfStore) {
+			/*if (!$scope.$$putOn.isSelfStore) {
 				ConsignmentAgreementRecord.findRecordOfUser({}, {}, function (record) {
 					if (!record.id) {
 						// 弹出寄售协议弹窗
@@ -399,7 +400,7 @@ define(['app/app'], function (app) {
 				});
 			} else {
 				updateProductStandardPutOnInfo(standard, index);
-			}
+			}*/
         };
 
         function updateProductStandardPutOnInfo(standard, index) {
@@ -421,9 +422,9 @@ define(['app/app'], function (app) {
         $scope.changeSale = function (standard) {
             standard.editIsSelfSale = standard.editSelfSaleNum == 0;
 
-            if (!standard.editIsSelfSale) {
+            /*if (!standard.editIsSelfSale) {
 				checkAndShowConsignmentAgreement(standard);
-            }
+            }*/
         };
 
 		/**

+ 2 - 2
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_store_maintain_ctrl.js

@@ -228,11 +228,11 @@ define(['app/app'], function (app) {
 				return false;
 			}
 			if (!$scope.sampleStore.enterprise.enTel || $scope.sampleStore.enterprise.enTel == '') {
-				toaster.pop('error', '企业电话不能为空');
+				toaster.pop('error', '请输入正确的电话号码');
 				return false;
 			}
 			if (!$scope.sampleStore.enterprise.enFax || $scope.sampleStore.enterprise.enFax == '') {
-				toaster.pop('error', '企业传真不能为空');
+				toaster.pop('error', '请输入正确的企业传真');
 				return false;
 			}
 			var store = {};

+ 1 - 1
src/main/webapp/resources/view/admin/store/store_info_detail.html

@@ -107,7 +107,7 @@
 		<div class="col-sm-8">
 			<div class="btn-group" role="group">
 				<a role="presentation" class="btn btn-default" ng-class="{ 'btn-primary': tabSelected === 'ENTERPRISE' }" ng-click="switchTab('ENTERPRISE')">企业信息</a>
-				<a role="presentation" class="btn btn-default" ng-class="{ 'btn-primary': tabSelected === 'VIOLATIONS' }" ng-click="switchTab('VIOLATIONS')" ng-if="storeType !== 'CONSIGNMENT'">违规</a>
+				<!--<a role="presentation" class="btn btn-default" ng-class="{ 'btn-primary': tabSelected === 'VIOLATIONS' }" ng-click="switchTab('VIOLATIONS')" ng-if="storeType !== 'CONSIGNMENT'">违规</a>-->
 			</div>
 		</div>
 	</div>

+ 3 - 2
src/main/webapp/resources/view/admin/trade/trade_order_detail.html

@@ -337,8 +337,9 @@
 		<div class="row-fluid" ng-if="orderDetailInfo.proofingid == null">
 			<div class="col-md-3">
 				<span>送货方式:</span>
-				<span ng-if="orderDetailInfo.deliverytype == '1301'">物流配送</span>
-				<span ng-if="orderDetailInfo.deliverytype == '1302'">上门自取</span>	
+				<span ng-if="orderDetailInfo.deliverytype == '1301'">第三方配送</span>
+				<span ng-if="orderDetailInfo.deliverytype == '1302'">卖家配送</span>
+				<span ng-if="orderDetailInfo.deliverytype == '1303'">上门自提</span>
 				<span ng-if="orderDetailInfo.deliverytype == null"><strong>未录入</strong></span>				
 			</div>
 		</div>

+ 2 - 2
src/main/webapp/resources/view/common/site-nav.html

@@ -169,8 +169,8 @@
             </div>
         </li>
         <li><a href=".">商城首页</a></li>
-        <li ng-if="userInfo"><a href="user">买家中心</a></li>
-        <li ng-if="userInfo.enterprises"><a href="vendor">卖家中心</a></li>
+        <li ng-if="userInfo"><a href="user#/home">买家中心</a></li>
+        <li ng-if="userInfo.enterprises"><a href="vendor#/index">卖家中心</a></li>
         <li><a href="help/home" target="_blank">帮助中心</a></li>
         <!-- <li><a href="http://wpa.qq.com/msgrd?v=3&uin=3432892085&site=www.ubtoc.com&menu=yes" target="_blank">在线客服</a></li> -->
        <!-- <li><a href="javascript:void(0)">服务电话:400-830-1818</a></li>-->

+ 3 - 3
src/main/webapp/resources/view/usercenter/forstore/buyer_cart.html

@@ -378,8 +378,8 @@
 		color: white;
 	}
 
-	.buyer-contact .contact-title a, .buyer-contact .contact-title a:hover {
-		color: white;
+	.oder .oder_list dl dd.line01 .buyer-contact .contact-title a, .oder .oder_list dl dd.line01 .buyer-contact .contact-title a:hover {
+		color: white !important;
 	}
 
 	.buyer-contact .contact-buyer-info {
@@ -534,7 +534,7 @@
 						</span>
 						<span style="width: 22%; text-align: left; position: relative;"><img src="static/img/common/songguo.png">
 							<!--<a name="{{store.arr[0].id}}" href="javascript:void(0)" class="contact_btn" ng-controller="ChatContactCtrl as chat" ng-click="chat.contactWithOther(store.arr[0].sellPhone, store.arr[0].enuu, chat.UserType.STORE)">联系卖家</a>-->
-							<a name="{{store.arr[0].id}}" href="javascript:void(0)" class="contact_btn" >联系卖家</a>
+							<a name="{{store.arr[0].id}}" href="javascript:void(0)" class="contact_btn" ng-click="showContact(store.arr[0])">联系卖家</a>
 							<div name="{{store.arr[0].id}}" class="buyer-contact" ng-if="store.arr[0].contactSeller">
 									 <div class="contact-title">
 										 <a ng-click="store.arr[0].contactSeller = false"><i class="fa fa-close fa-lg" aria-hidden="true"></i></a>

+ 11 - 11
src/main/webapp/resources/view/usercenter/forstore/buyer_order.html

@@ -176,8 +176,8 @@
 		color: white;
 	}
 
-	.seller-contact .contact-title a, .seller-contact .contact-title a:hover {
-		color: white;
+	.oder .oder_list dl dd.line01 .seller-contact .contact-title a, .oder .oder_list dl dd.line01 .seller-contact .contact-title a:hover {
+		color: white !important;
 	}
 
 	.seller-contact .contact-seller-info {
@@ -310,12 +310,13 @@
 
 	.notice-ship-tip {
 		position: fixed;
-		width: 340px;
+		width: 300px;
 		height: 145px;
 		background-color: white;
 		font-size: 14px;
-		top: 300px;
-		left: 500px;
+		top: 50%;
+		left: 50%;
+		margin: -78px 0 0 -150px;
 		box-shadow: 1px 6px 5px #C0BCBA
 	}
 
@@ -601,7 +602,7 @@
 							   max-date="endDate" current-text="今天" clear-text="清除" close-text="关闭"
 							   datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
                                ng-click="openDatePicker($event, condition, 'startDateOpen',1)"
-							   ng-change="onDateCondition()"/>
+							   ng-change="onDateCondition(true)"/>
 							<button class="open" ng-click="openDatePicker($event, condition, 'startDateOpen')"></button>
 					</div>
 
@@ -614,7 +615,7 @@
 								 min-date="startDate" current-text="今天" clear-text="清除" close-text="关闭"
 								 datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
                                  ng-click="openDatePicker($event, condition, 'endDateOpen',2)"
-								 ng-change="onDateCondition()"/>
+								 ng-change="onDateCondition(false)"/>
 								<button class="open" ng-click="openDatePicker($event, condition, 'endDateOpen')"></button>
 						</div>
 				</div>
@@ -734,8 +735,7 @@
 							<div ng-if="$index == 0">
 								<div ng-bind="::order.status | statusFilter"></div>
 								<a href="user#/order/detail/{{order.orderid | EncryptionFilter}}" class="oder_d action-link" style="display: block;" target="_blank">订单详情</a>
-
-								<a class="action-link" href="user#/buyerQueryLogistics/{{order.orderid | EncryptionFilter}}" ng-if="order.status == 404" style="display: block;" target="_blank">查看物流</a>
+								<a class="action-link" href="user#/buyerQueryLogistics/{{order.orderid | EncryptionFilter}}" ng-if="order.status == 404 || order.status == 520 || order.status == 405 || order.status == 521" style="display: block;" target="_blank">查看物流</a>
 							</div>
 						</span>
 						<span class="oder_deal" ng-class="{'order-border-bottom-solid' : $index == order.orderDetails.length -1 || $index==2}">
@@ -774,8 +774,8 @@
                                         <i class="fa fa-clock-o" aria-hidden="true"></i>&nbsp; <em ng-bind="order.shipOutTime | hoursToDay : 360"></em><!--15天之后自动收货,换算成小时 15*24=360-->
                                     </div>
                                 </div>
-                              <a href="javascript:void(0)" ng-if="order.status == 405">退货/退款/换货</a>
-															<!--<a href="javascript:void(0)">投诉卖家</a>-->
+                               <!--<a href="javascript:void(0)" ng-if="order.status == 405">退货/退款/换货</a>-->
+								<!--<a href="javascript:void(0)">投诉卖家</a>-->
                             </div>
                         </span>
 					</dd>

+ 4 - 1
src/main/webapp/resources/view/usercenter/forstore/buyer_transfer.html

@@ -44,7 +44,10 @@
 	margin-left: 0px;
 	margin-right: 0px;
 }
-
+.marginleftrightzero:hover{
+	background: none !important;
+	cursor: default !important;
+}
 .marginbot30 {
 	margin-bottom: 30px;
 }

+ 71 - 3
src/main/webapp/resources/view/usercenter/forstore/order_detail.html

@@ -219,6 +219,61 @@
 		width: 60px;
 		height: 60px;
 	}
+	/*联系买家*/
+	.contact-box{
+		position: absolute;
+		z-index: 2;
+		height: 210px;
+		opacity: 1;
+		background-color: white;
+		width: 600px;
+		top: 40px;
+		left: 200px;
+		border: 1px solid #E7E5E2;
+		-webkit-box-shadow: 0 5px 15px rgba(0,0,0,.5);
+		box-shadow: 0 5px 15px rgba(0,0,0,.5);
+	}
+	.contact-box .title{
+		height: 26px;
+		background-color: #5078cb;
+		text-align: right;
+		/*padding-right: 15px;*/
+		line-height: 26px;
+		color: #fff;
+	}
+	.contact-box .title i{
+		float: right;
+		margin: 7px 10px 0 0;
+	}
+	.contact-box .content{
+		width: 550px;
+		margin: 0 auto;
+		background-color: #5078cb;
+		color: #fff;
+		margin-top: 15px;
+		margin-bottom: 12px;
+		border-radius: 4px;
+		height: 150px;
+	}
+	.contact-box .content div{
+		padding: 0 15px;
+		line-height: 40px;
+	}
+	.contact-box .content .company-title{
+		text-align: center;
+		font-size: 18px;
+		padding-top: 15px;
+	}
+	.contact-box div.list{
+		text-align: left;
+		font-size: 14px;
+		padding-left: 15px;
+		padding-right: 15px;
+	}
+	.contact-box div.list em{
+		font-size: 14px;
+		color: #fff;
+	}
 </style>
 <div class="user_right fr">
 	<!--叮当详情-->
@@ -304,14 +359,27 @@
 						<span class="wd01">备注</span>
 					</dt>
 					<dd class="order-company">
-						<span style="white-space: nowrap; width: 100%; text-align: left; line-height: 50px;">
+						<span style="white-space: nowrap; width: 100%; text-align: left; line-height: 50px; position: relative;">
                             <i style="min-width: 300px; display: inline-block">
 								&nbsp;&nbsp;<img src="static/img/user/images/shop_home.png"/>
 								<a ng-href="store/{{order.orderDetails[0].storeid}}" ng-bind="order.storeName" class="hover-color" target="_blank"></a>
 							</i>
 							<img src="static/img/common/songguo.png" style="margin-right:0; ">
 							<!--<a href="javascript:void(0)" class="contact_btn" title="联系卖家" ng-controller="ChatContactCtrl as chat" ng-click="chat.contactWithOther(order.buyerTel, order.buyerenuu, chat.UserType.STORE)">联系卖家</a>-->
-							<a href="javascript:void(0)" class="contact_btn" title="联系卖家">联系卖家</a>
+							<a href="javascript:void(0)" class="contact_btn" title="联系卖家" ng-click="contactSeller()">联系卖家</a>
+							<div class="contact-box" ng-if="contactBNox">
+								<div class="title"><i class="fa fa-close fa-lg" ng-click="closeBox()"></i></div>
+								<div class="content">
+									<div class="company-title" ng-bind="::order.sellername">深圳市优软科技</div>
+									<div class="list">
+										<em>手机:<em ng-bind="::order.sellPhone || '暂无联系电话'">45413413131313</em></em>
+										<em style="margin-left: 60px;">邮箱:<em ng-bind="::order.sellEmail || '暂无电子邮箱'">45413413131313</em></em>
+									</div>
+									<div class="list">地址:
+										<em ng-bind="order.sellCompanyAddress || order.sellCompanyArea || '暂无地址信息'">1212314531455</em>
+									</div>
+								</div>
+							</div>
 						</span>
 					</dd>
 					<div ng-class="{'limit-3': !open}">
@@ -355,7 +423,7 @@
 					<dd class="oder-remark" ng-class="{'length3': order.orderDetails.length > 3}">
 						<span style="width: 100%;">
 							<em>订单备注:</em>
-							<i class="fl" ng-bind="order.orderRemark || '无'">用便宜的物流最好!</i>
+							<i class="fl" ng-bind="remarkList[order.storeid] || '无'">用便宜的物流最好!</i>
 							<!--<input type="text"  class="form-control" placeholder="请填写订单备注" ng-model="order.orderRemark"/>-->
 						</span>
 					</dd>

+ 73 - 3
src/main/webapp/resources/view/usercenter/forstore/order_pay.html

@@ -331,6 +331,7 @@
 	}
 	.sure_oder .btn-wrap .number input{
 		height: 29px;
+		line-height: 29px;
 	}
 	.sure_oder .btn-wrap .number{
 		width: 124px;
@@ -362,6 +363,61 @@
 	.oder_xq_list dl .price-step p a,.oder_xq_list dl .price-step p a:hover{
 		color: #5078cb;
 	}
+	/*联系买家*/
+	.contact-box{
+		position: absolute;
+		z-index: 2;
+		height: 210px;
+		opacity: 1;
+		background-color: white;
+		width: 600px;
+		top: 40px;
+		left: 200px;
+		border: 1px solid #E7E5E2;
+		-webkit-box-shadow: 0 5px 15px rgba(0,0,0,.5);
+		box-shadow: 0 5px 15px rgba(0,0,0,.5);
+	}
+	.contact-box .title{
+		height: 26px;
+		background-color: #5078cb;
+		text-align: right;
+		/*padding-right: 15px;*/
+		line-height: 26px;
+		color: #fff;
+	}
+	.contact-box .title i{
+		float: right;
+		margin: 7px 10px 0 0;
+	}
+	.contact-box .content{
+		width: 550px;
+		margin: 0 auto;
+		background-color: #5078cb;
+		color: #fff;
+		margin-top: 15px;
+		margin-bottom: 12px;
+		border-radius: 4px;
+		height: 150px;
+	}
+	.contact-box .content div{
+		padding: 0 15px;
+		line-height: 40px;
+	}
+	.contact-box .content .company-title{
+		text-align: center;
+		font-size: 18px;
+		padding-top: 15px;
+	}
+	.contact-box div.list{
+		text-align: left;
+		font-size: 14px;
+		padding-left: 15px;
+		padding-right: 15px;
+	}
+	.contact-box div.list em{
+		font-size: 14px;
+		color: #fff;
+	}
 </style>
 <!--右侧主体部分-->
 <div class="user_right fr" id="pay-cart">
@@ -446,12 +502,26 @@
 					</dt>
 					<div ng-repeat="(key, details) in $$orderDetailsMap">
 						<dd style="height: 50px; line-height: 50px;">
-                        <span style="white-space: nowrap; width: 100%; text-align: left; line-height: 50px;">
+                        <span style="white-space: nowrap; width: 100%; text-align: left; line-height: 50px; position: relative;">
                             &nbsp;&nbsp;<img src="static/img/user/images/shop_home01.png"/>
 							店铺:<a ng-href="store/{{details[0].storeid}}" ng-bind="::key" class="hover-color" target="_blank"></a>
 							<img src="static/img/common/songguo.png" style="margin-left: 110px; margin-right:0; ">
 							<!--<a href="javascript:void(0)" class="contact_btn" title="联系卖家" ng-controller="ChatContactCtrl as chat" ng-click="chat.contactWithOther(order.buyerTel, order.buyerenuu, chat.UserType.STORE)">联系卖家</a>-->
-							<a href="javascript:void(0)" class="contact_btn" title="联系卖家">联系卖家</a>
+							<a class="contact_btn" title="联系卖家">联系卖家</a>
+							<!--<a class="contact_btn" title="联系卖家" ng-click="contactSeller(details[0])">联系卖家</a>-->
+							<!--<div class="contact-box" ng-if="details[0].contactSeller">-->
+								<!--<div class="title"><i class="fa fa-close fa-lg" ng-click="details[0].contactSeller = false"></i></div>-->
+								<!--<div class="content">-->
+									<!--<div class="company-title" ng-bind="order.sellername">深圳市优软科技</div>-->
+									<!--<div class="list">-->
+										<!--<em>手机:<em ng-bind="order.sellPhone || '暂无联系电话'">45413413131313</em></em>-->
+										<!--<em style="margin-left: 60px;">邮箱:<em ng-bind="::order.sellEmail || '暂无电子邮箱'">45413413131313</em></em>-->
+									<!--</div>-->
+									<!--<div class="list">地址:-->
+										<!--<em ng-bind="order.sellCompanyAddress || order.sellCompanyArea || '暂无地址信息'">1212314531455</em>-->
+									<!--</div>-->
+								<!--</div>-->
+							<!--</div>-->
 						</span>
 						</dd>
 						<dd class="oder_l" ng-repeat="detail in details">
@@ -515,7 +585,7 @@
 							<span style="width: 100%">
 								<em>订单备注:</em>
 								<input ng-if="order.status==501" type="text"  class="form-control" placeholder="请填写订单备注" ng-model="remarkList[details[0].storeid]" maxlength="200"/>
-								<em ng-if="order.status!=501" ng-bind="remarkList[details[0].storeid] || '无'" style="margin-left: 0;"></em>
+								<em ng-if="order.status!=501" ng-bind="remarkList[order.storeid] || '无'" style="margin-left: 0;"></em>
 							</span>
 						</dd>
 						<dd class="line60">

+ 73 - 2
src/main/webapp/resources/view/usercenter/forstore/query_logistics.html

@@ -105,6 +105,62 @@
     .logistics-content .content P em.name{
         color: #333;
     }
+    /*联系买家*/
+    /*联系买家*/
+    .contact-box{
+        position: absolute;
+        z-index: 2;
+        height: 210px;
+        opacity: 1;
+        background-color: white;
+        width: 600px;
+        top: 40px;
+        left: 200px;
+        border: 1px solid #E7E5E2;
+        -webkit-box-shadow: 0 5px 15px rgba(0,0,0,.5);
+        box-shadow: 0 5px 15px rgba(0,0,0,.5);
+    }
+    .contact-box .title{
+        height: 26px;
+        background-color: #5078cb;
+        text-align: right;
+        /*padding-right: 15px;*/
+        line-height: 26px;
+        color: #fff;
+    }
+    .contact-box .title i{
+        float: right;
+        margin: 7px 10px 0 0;
+    }
+    .contact-box .content{
+        width: 550px;
+        margin: 0 auto;
+        background-color: #5078cb;
+        color: #fff;
+        margin-top: 15px;
+        margin-bottom: 12px;
+        border-radius: 4px;
+        height: 150px;
+    }
+    .contact-box .content div{
+        padding: 0 15px;
+        line-height: 40px;
+    }
+    .contact-box .content .company-title{
+        text-align: center;
+        font-size: 18px;
+        padding-top: 15px;
+    }
+    .contact-box div.list{
+        text-align: left;
+        font-size: 14px;
+        padding-left: 15px;
+        padding-right: 15px;
+    }
+    .contact-box div.list em{
+        font-size: 14px;
+        color: #fff;
+    }
 </style>
 <!--右侧主体部分-->
 <div class="user_right fr">
@@ -114,11 +170,26 @@
             <div class="logistics_cter_01">
                 <!--包裹跟踪-->
                 <div class="tab" style="display: inline-block;">
-                    <div class="log_cter_h">
+                    <div class="log_cter_h" style="position: relative">
                         <span style="margin-right: 0;">订单号:</span>
                         <span style="margin-left: 0; margin-right: 30px;" ng-bind="order.orderid"></span>
                         <span style="margin-right: 0px;"><img src="static/img/user/images/shop_home.png" />&nbsp;<a ng-bind="order.storeName" style="margin-left: 0;margin-right: 20px;" href="store/{{::order.storeid}}" target="_blank"></a></span>
-                        <span><img src="static/img/common/songguo.png"/><!--<a href="#" class="contact_btn" ng-controller="ChatContactCtrl as chat" ng-click="chat.contactWithOther(order.sellPhone, order.sellerenuu, chat.UserType.STORE)">联系卖家</a>--><a href="#" class="contact_btn" >联系卖家</a></span>
+                        <span><img src="static/img/common/songguo.png"/><!--<a href="#" class="contact_btn" ng-controller="ChatContactCtrl as chat" ng-click="chat.contactWithOther(order.sellPhone, order.sellerenuu, chat.UserType.STORE)">联系卖家</a>-->
+                            <a class="contact_btn" ng-click="contactSeller()">联系卖家</a>
+                            <div class="contact-box" ng-if="contactBNox">
+								<div class="title"><i class="fa fa-close fa-lg" ng-click="closeBox()"></i></div>
+								<div class="content">
+									<div class="company-title" ng-bind="::order.sellername">深圳市优软科技</div>
+									<div class="list">
+										<em>手机:<em ng-bind="::order.sellPhone || '暂无联系电话'">45413413131313</em></em>
+										<em style="margin-left: 60px;">邮箱:<em ng-bind="::order.sellEmail || '暂无电子邮箱'">45413413131313</em></em>
+									</div>
+									<div class="list">地址:
+										<em ng-bind="order.sellCompanyAddress || order.sellCompanyArea || '暂无地址信息'">1212314531455</em>
+									</div>
+								</div>
+							</div>
+                        </span>
                     </div>
                     <div class="logistics-content">
                         <div class="img"><img src="static/img/icon/member.png"  alt=""/></div>

+ 75 - 3
src/main/webapp/resources/view/usercenter/forstore/store_focus.html

@@ -269,6 +269,61 @@
 		box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
 		transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
 	}
+	/*联系买家*/
+	.contact-box{
+		position: absolute;
+		z-index: 2;
+		height: 210px;
+		opacity: 1;
+		background-color: white;
+		width: 600px;
+		top: 40px;
+		left: 20px;
+		border: 1px solid #E7E5E2;
+		-webkit-box-shadow: 0 5px 15px rgba(0,0,0,.5);
+		box-shadow: 0 5px 15px rgba(0,0,0,.5);
+	}
+	.contact-box .title{
+		height: 26px;
+		background-color: #5078cb;
+		text-align: right;
+		/*padding-right: 15px;*/
+		line-height: 26px;
+		color: #fff;
+	}
+	.contact-box .title i{
+		float: right;
+		margin: 7px 10px 0 0;
+	}
+	.contact-box .content{
+		width: 550px;
+		margin: 0 auto;
+		background-color: #5078cb;
+		color: #fff;
+		margin-top: 15px;
+		margin-bottom: 12px;
+		border-radius: 4px;
+		height: 150px;
+	}
+	.contact-box .content div{
+		padding: 0 15px;
+		line-height: 40px;
+	}
+	.contact-box .content .company-title{
+		text-align: center;
+		font-size: 18px;
+		padding-top: 15px;
+	}
+	.contact-box div.list{
+		text-align: left;
+		font-size: 14px;
+		padding-left: 15px;
+		padding-right: 15px;
+	}
+	.contact-box div.list em{
+		font-size: 14px;
+		color: #fff;
+	}
 </style>
 <div class="user_right fr">
 	<div class="rt_menu" style="background-color:white">
@@ -306,9 +361,26 @@
 							<div ng-bind=item.storeName class="item-storeName"></div>
 						</a>
 						<i class="fa fa-trash fa-2x item-delete" ng-click="deleteById(item.id)" ng-hide="isBatch" title="取消关注" style="cursor: pointer"></i>
-						<div class="item-seller">
-							<img src="static/img/user/images/touxiang.png">
-							<a class="item-contact">联系卖家</a>
+						<div class="item-seller" style="position: relative;">
+							<img src="static/img/common/songguo.png">
+							<a class="item-contact" ng-click="contactSeller(item)">联系卖家</a>
+							<div class="contact-box" ng-if="item.contactBNox">
+								<div class="title"><i class="fa fa-close fa-lg" ng-click="item.contactBNox = false"></i></div>
+								<div class="content">
+									<div class="company-title" ng-bind="item.storeInfo.enterprise.enName">深圳市优软科技</div>
+									<div class="list">
+										<em>电话:
+											<em ng-bind="item.storeInfo.enterprise.enTel || '暂无联系电话'">45413413131313</em>
+										</em>
+										<em style="margin-left: 60px;">邮箱:
+											<em ng-bind="item.storeInfo.enterprise.enEmail || '暂无电子邮箱'">45413413131313</em>
+										</em>
+									</div>
+									<div class="list">地址:
+										<em ng-bind="item.storeInfo.enterprise.enAddress || '暂无地址信息'">1212314531455</em>
+									</div>
+								</div>
+							</div>
 						</div>
 						<div class="item-mark">
 							<div>公司介绍:

+ 8 - 7
src/main/webapp/resources/view/usercenter/modal/cancelOrder_modal.html

@@ -12,15 +12,16 @@
 	}
 
 	#choice {
-		width: 290px;
+		width: 250px;
 		margin-left: 100px;
 	}
 
 	div.modal-dialog.modal-md {
-		width: 500px !important;
+		width: 440px !important;
 		position: fixed !important;
 		top: 150px !important;
-		left: 400px !important;
+		left: 50% !important;
+		margin-left: -200px;
 	}
 
 	a.cancle-close {
@@ -37,7 +38,7 @@
 	}
 
 	.modal-header {
-		background-color: #3A76E4;
+		background-color: #5078cb;
 		line-height: 31px;
 		padding: 0px !important;
 		height: 31px;
@@ -51,16 +52,16 @@
 	}
 
 	.modal-footer .confirm {
-		width: 90px;
+		width: 70px;
 		padding: 5px 10px;
-		background-color: #3A76E4;
+		background-color: #5078cb;
 		border: none;
 		color: white;
 		font-size: 14px;
 	}
 
 	.modal-footer .cancle-button {
-		width: 90px;
+		width: 70px;
 		padding: 5px 10px;
 		background-color: #D9D5CE;
 		border: none;

+ 72 - 2
src/main/webapp/resources/view/vendor/forstore/purchase_detail.html

@@ -290,6 +290,63 @@
 		width: 60px;
 		height: 60px;
 	}
+	/*联系买家*/
+	.contact-box{
+		position: absolute;
+		z-index: 2;
+		height: 155px;
+		opacity: 1;
+		background-color: white;
+		width: 600px;
+		top: 40px;
+		left: 200px;
+		border: 1px solid #E7E5E2;
+		-webkit-box-shadow: 0 5px 15px rgba(0,0,0,.5);
+		box-shadow: 0 5px 15px rgba(0,0,0,.5);
+	}
+	.contact-box .title{
+		height: 26px;
+		background-color: #5078cb;
+		text-align: right;
+		/*padding-right: 15px;*/
+		line-height: 26px;
+		color: #fff;
+	}
+	.contact-box .title i{
+		float: right;
+		margin: 7px 10px 0 0;
+	}
+	.contact-box .content{
+		width: 550px;
+		margin: 0 auto;
+		background-color: #5078cb;
+		color: #fff;
+		margin-top: 15px;
+		margin-bottom: 12px;
+		border-radius: 4px;
+		height: 100px;
+	}
+	.contact-box .content div{
+		padding: 0 15px;
+		line-height: 40px;
+	}
+	.contact-box .content .company-title{
+		text-align: center;
+		font-size: 18px;
+	}
+	.contact-box div.list{
+		text-align: left;
+		font-size: 14px;
+		padding-left: 15px;
+		padding-right: 15px;
+	}
+	.contact-box div.list em{
+		font-size: 14px;
+		color: #fff;
+	}
+	.oder_xq_list dl span .contact_btn:hover{
+		color: #fff !important;
+	}
 </style>
 <div class="user_right fr">
 	<!--叮当详情-->
@@ -355,13 +412,26 @@
 					<!--<span style="width: 100%; text-align: left; padding-left: 20px;" class="ng-binding"><img src="static/img/user/images/shop_home01.png">{{purchase.buyentername}}</span>-->
 					<!--</dd>-->
 					<dd class="order-company">
-						<span style="white-space: nowrap; width: 100%; text-align: left; line-height: 50px;">
+						<span style="white-space: nowrap; width: 100%; text-align: left; line-height: 50px; position: relative;">
 							<i style="min-width: 315px; display: inline-block">
 								&nbsp;&nbsp;{{purchase.buyername}}<i ng-if="purchase.buyentername">&nbsp;&nbsp;|&nbsp;&nbsp;{{purchase.buyentername}}</i> <!--<a ng-if="purchase.pu_buyentername" name="{{purchase.id}}" ng-controller="ChatContactCtrl as chat" ng-click="chat.contactWithOther(purchase.buyPhone, purchase.buyerenuu, chat.UserType.ENTERPRISE)"></a>-->
 							</i>
 							<img src="static/img/common/songguo.png" style="margin-right:0; ">
 							<!--<a name="{{purchase.id}}" href="javascript:void(0)" class="contact_btn" ng-controller="ChatContactCtrl as chat" ng-click="chat.contactWithOther(purchase.buyPhone, purchase.buyerenuu, chat.UserType.ENTERPRISE)">联系买家</a>-->
-							<a name="{{purchase.id}}" href="javascript:void(0)" class="contact_btn" >联系买家</a>
+							<a name="{{purchase.id}}" href="javascript:void(0)" class="contact_btn" ng-click="contactSeller()">联系买家</a>
+							<div class="contact-box" ng-if="contactBNox">
+								<div class="title"><i class="fa fa-close fa-lg" ng-click="closeBox()"></i></div>
+								<div class="content">
+									<div class="company-title" ng-bind="::purchase.buyername || '买家姓名没获取到'">深圳市优软科技</div>
+									<div class="list">
+										<em>手机:<em ng-bind="::purchase.buyPhone || '暂无联系电话'">45413413131313</em></em>
+										<em style="margin-left: 60px;">邮箱:<em ng-bind="::purchase.buyEmail || '暂无电子邮箱'">45413413131313</em></em>
+									</div>
+									<!--<div class="list">地址:-->
+										<!--<em ng-bind="order.sellCompanyAddress || order.sellCompanyArea || '暂无地址信息'">1212314531455</em>-->
+									<!--</div>-->
+								</div>
+							</div>
 						</span>
 					</dd>
 					<div ng-class="{'limit-3': !open}">

+ 69 - 2
src/main/webapp/resources/view/vendor/forstore/query_logistics.html

@@ -105,6 +105,61 @@
     .logistics-content .content P em.name{
         color: #333;
     }
+    /*联系买家*/
+    .contact-box{
+        position: absolute;
+        z-index: 2;
+        height: 155px;
+        opacity: 1;
+        background-color: white;
+        width: 600px;
+        top: 40px;
+        left: 100px;
+        border: 1px solid #E7E5E2;
+        -webkit-box-shadow: 0 5px 15px rgba(0,0,0,.5);
+        box-shadow: 0 5px 15px rgba(0,0,0,.5);
+    }
+    .contact-box .title{
+        height: 26px;
+        background-color: #5078cb;
+        text-align: right;
+        /*padding-right: 15px;*/
+        line-height: 26px;
+        color: #fff;
+    }
+    .contact-box .title i{
+        float: right;
+        margin: 7px 10px 0 0;
+        font-size: 18px;
+    }
+    .contact-box .content{
+        width: 550px;
+        margin: 0 auto;
+        background-color: #5078cb;
+        color: #fff;
+        margin-top: 15px;
+        margin-bottom: 12px;
+        border-radius: 4px;
+        height: 100px;
+    }
+    .contact-box .content div{
+        padding: 0 15px;
+        line-height: 40px;
+    }
+    .contact-box .content .company-title{
+        text-align: center;
+        font-size: 18px;
+    }
+    .contact-box div.list{
+        text-align: left;
+        font-size: 14px;
+        padding-left: 15px;
+        padding-right: 15px;
+    }
+    .contact-box div.list em{
+        font-size: 14px;
+        color: #fff;
+    }
 </style>
 <!--右侧主体部分-->
 <div class="user_right fr">
@@ -121,8 +176,20 @@
                     </div>
                     <div class="logistics-content">
                         <div class="img"><img src="static/img/icon/member.png"  alt=""/></div>
-                        <div class="content">
-                            <p><span ng-bind="purchase.buyername"></span> &nbsp;<em ng-show="purchase.buyentername">|</em>&nbsp; <em class="name" ng-bind="purchase.buyentername"></em><img src="static/img/common/songguo.png" /><!--<a href="#" class="contact-btn" ng-controller="ChatContactCtrl as chat" ng-click="chat.contactWithOther(purchase.buyPhone, purchase.buyerenuu, chat.UserType.ENTERPRISE)">联系买家</a>--><a href="#" class="contact-btn" >联系买家</a></p>
+                        <div class="content" style="position: relative;">
+                            <p><span ng-bind="purchase.buyername"></span> &nbsp;<em ng-show="purchase.buyentername">|</em>&nbsp; <em class="name" ng-bind="purchase.buyentername"></em><img src="static/img/common/songguo.png" /><!--<a href="#" class="contact-btn" ng-controller="ChatContactCtrl as chat" ng-click="chat.contactWithOther(purchase.buyPhone, purchase.buyerenuu, chat.UserType.ENTERPRISE)">联系买家</a>-->
+                            <a class="contact_btn" ng-click="contactSeller()">联系买家</a>
+                            <div class="contact-box" ng-if="contactBNox">
+                                <div class="title"><i class="fa fa-close fa-lg" ng-click="closeBox()"></i></div>
+                                <div class="content">
+                                    <div class="company-title" ng-bind="::purchase.buyername || '买家姓名没获取到'">深圳市优软科技</div>
+                                    <div class="list">
+                                        <em>手机:<em ng-bind="::purchase.buyPhone || '暂无联系电话'">45413413131313</em></em>
+                                        <em style="margin-left: 60px;">邮箱:<em ng-bind="::purchase.buyEmail || '暂无电子邮箱'">45413413131313</em></em>
+                                    </div>
+                                </div>
+                            </div>
+                            </p>
                             <p ng-bind="purchase.buyPhone"></p>
                             <p>收货地址:<em ng-bind="address.area"></em></p>
                         </div>

+ 9 - 9
src/main/webapp/resources/view/vendor/forstore/vendor_account_management.html

@@ -307,17 +307,17 @@
                         </ul>
                     </div>
                 </div>
-                <div class="user-list">
+                <!--<div class="user-list">
                     <div class="user-list-head count_basic">
                         <div class="basic_title">
-                            <span>企业成员信息</span><!--<span class="fr"><a href="#">修改</a><a href="#">提交</a><a href="#">删除</a></span>-->
+                            <span>企业成员信息</span>&lt;!&ndash;<span class="fr"><a href="#">修改</a><a href="#">提交</a><a href="#">删除</a></span>&ndash;&gt;
                             <span class="pull-right" ng-show="userInfo.sys">
                                 <a title="新增用户默认密码为111111" ng-show="adding == true" class="btn btn-success btn-sm" ng-disabled="newUserForm.$invalid" ng-click="addUser(newUser)" class="text-simple" style="color: #fff;">
                                     <i class="fa fa-user-plus fa-fw"></i>确定添加</a>
                                 <a ng-click="adding = false" ng-show="adding == true" class="text-simple"><i class="fa fa-user-plus fa-fw"></i>
                                     取消
                                 </a>
-                                <!-- 添加用户 start -->
+                                &lt;!&ndash; 添加用户 start &ndash;&gt;
                                 <div class="row-operator2">
                                     <a ng-show="adding != true" class="text-simple operator-trigger" href="javascript:void(0);">
                                         <i class="fa fa-user-plus fa-fw"></i>
@@ -328,7 +328,7 @@
                                         <li><a ng-click="addExistUser()">添加已注册用户</a></li>
                                     </ul>
                                 </div>
-                                <!-- 添加用户 end -->
+                                &lt;!&ndash; 添加用户 end &ndash;&gt;
                         </span>
                         </div>
                      </div>
@@ -350,7 +350,7 @@
                                     <th width="140">邮箱</th>
                                     <th width="100">角色</th>
                                     <th width="80">&nbsp;</th>
-                                    <!--<th width="50" ng-show="active=='chargeapply'">操作</th>-->
+                                    &lt;!&ndash;<th width="50" ng-show="active=='chargeapply'">操作</th>&ndash;&gt;
                                 </tr>
                             </thead>
                             <tbody>
@@ -399,9 +399,9 @@
                                         </div>
                                     </td>
                                     <td>
-                                        <!--<a class="operator-trigger" href="javascript:void(0);"><i class="fa fa-pencil fa-lg" ng-show="(userInfo.sys && enterprise.enAdminuu != user.userUU) || users.length == 1"></i></a>-->
-                                        <ul class="list-unstyle list-inline operator-menu" ng-show="(userInfo.sys && enterprise.enAdminuu != user.userUU) || users.length == 1">
-                                            <!--<li><a ng-click="editUserRole(u)"><i class="fa fa-fw fa-pencil-square-o" style="color: #fff"></i>编辑</a></li>-->
+                                        &lt;!&ndash;<a class="operator-trigger" href="javascript:void(0);"><i class="fa fa-pencil fa-lg" ng-show="(userInfo.sys && enterprise.enAdminuu != user.userUU) || users.length == 1"></i></a>&ndash;&gt;
+                                        <ul class="list-unstyle list-inline operator-menu" ng-show="(userInfo.sys && enterprise.enAdminuu != user.userUU)">
+                                            &lt;!&ndash;<li><a ng-click="editUserRole(u)"><i class="fa fa-fw fa-pencil-square-o" style="color: #fff"></i>编辑</a></li>&ndash;&gt;
                                             <li><a ng-click="removeUser(user)" ng-if="user.userUU != userInfo.userUU" title="删除"><i class="fa fa-fw fa-trash-o" style="color: #fff"></i>删除</a></li>
                                         </ul>
                                     </td>
@@ -409,7 +409,7 @@
                             </tbody>
                         </table>
                     </form>
-                </div>
+                </div>-->
             </div>
             </div>
             <!--安全设置-->

+ 11 - 6
src/main/webapp/resources/view/vendor/forstore/vendor_order.html

@@ -167,8 +167,8 @@
 		color: white;
 	}
 
-	.buyer-contact .contact-title a, .buyer-contact .contact-title a:hover {
-		color: white;
+	.sellOder .oder_list .buyer-contact .contact-title a, .sellOder .oder_list .buyer-contact .contact-title a:hover {
+		color: white !important;
 	}
 
 	.buyer-contact .contact-buyer-info {
@@ -608,6 +608,9 @@
 	.border-bt-16:nth-of-type(1){
 		border-top: none;
 	}
+	.conuter-box .content p{
+		line-height: 20px;
+	}
 </style>
 <div class="user_right fr">
 	<!--订单中心-->
@@ -666,6 +669,7 @@
 						   max-date="endDate" current-text="今天" clear-text="清除" close-text="关闭"
                                ng-click="openDatePicker($event, condition, 'startDateOpen',1)"
 						   datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+							   ng-change="vaildDate(true)"
 						/>
 						<button class="open" ng-click="openDatePicker($event, condition, 'startDateOpen')"></button>
 					</div>
@@ -724,7 +728,7 @@
 							<a ng-if=" status == 'all'" ng-click="setChildStatus('502-406','待发货')" title="">待发货</a>
 							<a ng-if="status == 'inbound' || status == 'all' || status == 'toBeReviewed'" ng-click="setChildStatus('404','待买家收货')" title="">待买家收货</a>
 							<a ng-if="status == 'tobepaid' || status == 'all' || status == 'toBeReviewed'" ng-click="setChildStatus('514','待商城付款')" title="">待商城付款</a>
-							<a ng-if="status == 'completed' || status == 'tobepaid' || status == 'all' || status == 'toBeReviewed'" ng-click="setChildStatus('520','交易完成')" title="">交易完成</a>
+							<a ng-if="status == 'completed' || status == 'tobepaid' || status == 'all'" ng-click="setChildStatus('520','交易完成')" title="">交易完成</a>
 							<a ng-if="status == 'completed' || status == 'all'" ng-click="setChildStatus('606','交易关闭')" title="">交易关闭</a>
 							<a ng-if=" status == 'all'" ng-click="setChildStatus('602-603-315-604-605-606','已取消')" title=""> 已取消</a>
 							<a ng-if="status == 'inbound' || status == 'all' || status == 'tobepaid'" ng-click="setChildStatus('606','售后中')" title="">售后中</a>
@@ -742,12 +746,13 @@
 						<span style="    width: 16%;text-align: left;">日期:{{purchase.createtime | date: 'yyyy-MM-dd'}}</span>
 						<span style="width: 25%;text-align: left;">订单号:<a class="hover-col" href="vendor#/purchase/detail/{{purchase.purchaseid | EncryptionFilter}}" target="_blank"><em ng-bind="purchase.orderid"></em></a></span>
 						<span style="width: 30%; text-align: center;">
-                            <img src="static/img/user/images/shop_home.png"><a ng-bind="purchase.buyentername" href="store/{{::purchase.storeid}}"></a>&nbsp;&nbsp;
+                            <img src="static/img/user/images/shop_home.png">
+							<i ng-bind="purchase.buyentername" href="store/{{::purchase.storeid}}"></i>&nbsp;&nbsp;
                         </span>
 						<span style="position: relative;">
                             <img src="static/img/common/songguo.png">
                             <!--<a name="{{purchase.id}}" href="javascript:void(0)" class="contact_btn" ng-controller="ChatContactCtrl as chat" ng-click="chat.contactWithOther(purchase.buyPhone, purchase.buyerenuu, chat.UserType.ENTERPRISE)">联系买家</a>-->
-							<a name="{{purchase.id}}" href="javascript:void(0)" class="contact_btn" >联系买家</a>
+							<a name="{{purchase.id}}" href="javascript:void(0)" class="contact_btn" ng-click="contactBuyer(purchase)">联系买家</a>
                              <div name="{{purchase.id}}" class="buyer-contact" ng-if="purchase.active" ng-class="{true : 'buyer-contact-info', false : 'display-none'}[purchase.active]">
                                  <div class="contact-title">
                                      <a ng-click="purchase.active=false"><i class="fa fa-close fa-lg" aria-hidden="true"></i></a>
@@ -825,7 +830,7 @@
 						<b style="float: none;">总共<em ng-bind="purchase.batchQty"></em>件商品</b>
 						<b style="float: none;">总金额:<em ng-bind="purchase.ensurePrice | formateNumber : 2 | currencySysmbol : purchase.currency"></em></b>
 					</dd>
-					<div class="com-del-box" ng-if="purchase.showGotoSettle && purchase.showTip == 1" style="display: block;">
+					<div class="com-del-box conuter-box" ng-if="purchase.showGotoSettle && purchase.showTip == 1" style="display: block;">
 						<div class="title">
 							<a ng-click="changeShow(purchase)"><i class="fa fa-close fa-lg"></i></a>
 						</div>

+ 6 - 3
src/main/webapp/resources/view/vendor/forstore/vendor_store_info.html

@@ -638,9 +638,10 @@
 				</div>
 			</div>
 			<!-- 简介不正确提示信息 -->
-			<div class="row com_row" ng-show="storeInfoForm.description.$dirty && storeInfoForm.description.$invalid && !storeInfoForm.description.$error.required">
+			<div class="row com_row" ng-show="storeInfoForm.description.$dirty && storeInfoForm.description.$invalid">
 				<div class="col-md-2 custom_col"></div>
 				<div class="col-md-10 custom_col">
+					<span style="color: #ff0000;" ng-show="storeInfoForm.description.$error.required">简介信息必填</span>
 					<span style="color: #ff0000;" ng-show="storeInfoForm.description.$error.maxlength">请勿超过500个字</span>
 				</div>
 			</div>
@@ -655,9 +656,10 @@
 				</div>
 			</div>
 			<!-- 官网地址不正确提示信息 -->
-			<div class="row com_row" ng-show="storeInfoForm.enUrl.$dirty && storeInfoForm.enUrl.$invalid && !storeInfoForm.enUrl.$error.required">
+			<div class="row com_row" ng-show="storeInfoForm.enUrl.$dirty && storeInfoForm.enUrl.$invalid">
 				<div class="col-md-2 custom_col"></div>
 				<div class="col-md-10 custom_col">
+					<span style="color: #ff0000;" ng-show="storeInfoForm.description.$error.required">官网地址必填</span>
 					<span style="color: #ff0000;" ng-show="storeInfoForm.enUrl.$error.maxlength">请勿超过30个字</span>
 				</div>
 			</div>
@@ -681,9 +683,10 @@
 				</div>
 			</div>
 			<!-- 地址不正确提示信息 -->
-			<div class="row com_row" ng-show="storeInfoForm.address.$dirty && storeInfoForm.address.$invalid && !storeInfoForm.address.$error.required">
+			<div class="row com_row" ng-show="storeInfoForm.address.$dirty && storeInfoForm.address.$invalid">
 				<div class="col-md-2 custom_col"></div>
 				<div class="col-md-10 custom_col">
+					<span style="color: #ff0000;" ng-show="storeInfoForm.description.$error.required">地址信息必填</span>
 					<span style="color: #ff0000;" ng-show="storeInfoForm.address.$error.maxlength">请勿超过30个字</span>
 				</div>
 			</div>

+ 2 - 2
src/main/webapp/resources/view/vendor/forstore/vendor_store_maintain.html

@@ -699,7 +699,7 @@
 				<span>电&nbsp;&nbsp;&nbsp;&nbsp;话<strong class="text-inverse">*</strong></span>
 			</div>
 			<div class="col-md-10 custom_col">
-				<input type="text" class="form-control" style="border-radius: inherit;" title="enTel" ng-model="sampleStore.enterprise.enTel" maxlength="20"/>
+				<input type="text" class="form-control" style="border-radius: inherit;" title="enTel"  ng-pattern="/^(\d){8,12}$/" ng-model="sampleStore.enterprise.enTel" maxlength="12"/>
 			</div>
 		</div>
 		<div class="row com_row" style="margin-top: 10px;">
@@ -707,7 +707,7 @@
 				<span>传&nbsp;&nbsp;&nbsp;&nbsp;真<strong class="text-inverse">*</strong></span>
 			</div>
 			<div class="col-md-10 custom_col">
-				<input type="text" class="form-control" style="border-radius: inherit;" title="enFax" ng-model="sampleStore.enterprise.enFax" maxlength="20"/>
+				<input type="text" class="form-control" style="border-radius: inherit;" title="enFax" ng-pattern="/^[\d-]{0,20}$/" ng-model="sampleStore.enterprise.enFax" maxlength="20"/>
 			</div>
 		</div>
 	</div><!-- 店铺基础信息输入 end -->