Browse Source

Merge branch 'dev-mysql' into feature_release-tomysql

yangc 7 years ago
parent
commit
96e86d5a84
61 changed files with 1820 additions and 446 deletions
  1. BIN
      jpg
  2. 7 0
      src/main/java/com/uas/platform/b2c/common/account/dao/UserDao.java
  3. 10 0
      src/main/java/com/uas/platform/b2c/common/search/constant/SearchUrl.java
  4. 12 0
      src/main/java/com/uas/platform/b2c/common/search/controller/SearcherController.java
  5. 26 0
      src/main/java/com/uas/platform/b2c/common/search/rpc/service/Impl/SearchServiceImpl.java
  6. 2 0
      src/main/java/com/uas/platform/b2c/common/search/rpc/service/SearchService.java
  7. 8 0
      src/main/java/com/uas/platform/b2c/common/search/service/SearcherService.java
  8. 28 11
      src/main/java/com/uas/platform/b2c/common/search/service/impl/SearcherServiceImpl.java
  9. 19 0
      src/main/java/com/uas/platform/b2c/common/weixin/Readme.md
  10. 105 0
      src/main/java/com/uas/platform/b2c/common/weixin/contoller/WeChatController.java
  11. 197 0
      src/main/java/com/uas/platform/b2c/common/weixin/model/MessageModel.java
  12. 48 0
      src/main/java/com/uas/platform/b2c/common/weixin/model/TemplateData.java
  13. 33 0
      src/main/java/com/uas/platform/b2c/common/weixin/model/TemplateDataDetail.java
  14. 62 0
      src/main/java/com/uas/platform/b2c/common/weixin/model/TemplateMessage.java
  15. 36 0
      src/main/java/com/uas/platform/b2c/common/weixin/service/WeChatService.java
  16. 209 0
      src/main/java/com/uas/platform/b2c/common/weixin/service/impl/WeChatServiceImpl.java
  17. 89 0
      src/main/java/com/uas/platform/b2c/common/weixin/util/CheckoutUtil.java
  18. 33 0
      src/main/java/com/uas/platform/b2c/common/weixin/util/WeChatUtil.java
  19. 11 0
      src/main/java/com/uas/platform/b2c/prod/store/api/StoreInController.java
  20. 14 0
      src/main/java/com/uas/platform/b2c/prod/store/model/EnterpriseSimple.java
  21. 19 1
      src/main/java/com/uas/platform/b2c/prod/store/model/StoreIn.java
  22. 10 2
      src/main/java/com/uas/platform/b2c/prod/store/service/StoreInService.java
  23. 72 1
      src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreInServiceImpl.java
  24. 12 0
      src/main/java/com/uas/platform/b2c/trade/presale/controller/CollectionController.java
  25. 12 0
      src/main/java/com/uas/platform/b2c/trade/presale/controller/StoreFocusController.java
  26. 21 0
      src/main/java/com/uas/platform/b2c/trade/presale/dao/CollectionDao.java
  27. 41 1
      src/main/java/com/uas/platform/b2c/trade/presale/dao/StoreFocusDao.java
  28. 36 0
      src/main/java/com/uas/platform/b2c/trade/presale/model/Collection.java
  29. 12 4
      src/main/java/com/uas/platform/b2c/trade/presale/service/CollectionService.java
  30. 11 4
      src/main/java/com/uas/platform/b2c/trade/presale/service/StoreFocusService.java
  31. 18 0
      src/main/java/com/uas/platform/b2c/trade/presale/service/impl/CollectionServiceImpl.java
  32. 27 3
      src/main/java/com/uas/platform/b2c/trade/presale/service/impl/StoreFocusServiceImpl.java
  33. 4 3
      src/main/java/com/uas/platform/b2c/trade/vendor/controller/VendorIntroductionController.java
  34. 8 6
      src/main/java/com/uas/platform/b2c/trade/vendor/service/VendorIntroductionService.java
  35. 108 58
      src/main/java/com/uas/platform/b2c/trade/vendor/service/impl/VendorIntroductionServiceImpl.java
  36. 1 0
      src/main/webapp/WEB-INF/spring/webmvc.xml
  37. 31 31
      src/main/webapp/resources/js/common/controllers/commonCtrls.js
  38. 13 13
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_home_ctrl.js
  39. 120 89
      src/main/webapp/resources/js/usercenter/controllers/forstore/order_pay_ctrl.js
  40. 6 4
      src/main/webapp/resources/js/vendor/app.js
  41. 36 38
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_index_ctrl.js
  42. 3 0
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_onSaleCtrl.js
  43. 48 18
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_order_ctrl.js
  44. 5 5
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_store_maintain_ctrl.js
  45. 3 3
      src/main/webapp/resources/view/usercenter/componentStore.html
  46. 6 6
      src/main/webapp/resources/view/usercenter/forstore/bomDetail.html
  47. 3 3
      src/main/webapp/resources/view/usercenter/forstore/buyer_cart.html
  48. 2 2
      src/main/webapp/resources/view/usercenter/forstore/buyer_order.html
  49. 8 8
      src/main/webapp/resources/view/usercenter/forstore/order_detail.html
  50. 3 3
      src/main/webapp/resources/view/usercenter/forstore/order_pay.html
  51. 33 31
      src/main/webapp/resources/view/usercenter/forstore/seekPurchase.html
  52. 13 7
      src/main/webapp/resources/view/usercenter/left_nav.html
  53. 9 9
      src/main/webapp/resources/view/vendor/forstore/purchaseOffer.html
  54. 9 9
      src/main/webapp/resources/view/vendor/forstore/seekPurchase.html
  55. 8 0
      src/main/webapp/resources/view/vendor/forstore/vendor_account_management.html
  56. 18 7
      src/main/webapp/resources/view/vendor/forstore/vendor_material.html
  57. 18 16
      src/main/webapp/resources/view/vendor/forstore/vendor_material_person.html
  58. 17 12
      src/main/webapp/resources/view/vendor/forstore/vendor_onSale.html
  59. 5 5
      src/main/webapp/resources/view/vendor/forstore/vendor_store_maintain.html
  60. 10 1
      src/main/webapp/resources/view/vendor/forstore/vendor_upload.html
  61. 32 32
      src/main/webapp/resources/view/vendor/left_nav.html

BIN
jpg


+ 7 - 0
src/main/java/com/uas/platform/b2c/common/account/dao/UserDao.java

@@ -131,4 +131,11 @@ public interface UserDao extends JpaSpecificationExecutor<User>, JpaRepository<U
 	@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value = "true") })
 	@Query("select u.userUU from User u inner join u.enterprises as e where e.uu = :enUU and u.userName like %:userName%")
 	public List<Long> findUserByUserNameLikeAndEnUU(@Param("userName") String userName, @Param("enUU") Long enUU);
+
+	/**
+	 * 根据openid获取用户信息
+	 * @param openId
+	 * @return
+	 */
+	public User findUsersByOpenId(String openId);
 }

+ 10 - 0
src/main/java/com/uas/platform/b2c/common/search/constant/SearchUrl.java

@@ -17,6 +17,16 @@ public class SearchUrl {
      */
     public static final String PRODUCT_ID_URL = "/search/productIds?enUU={enUU}&keyword={keyword}&page={page}&size={size}&type={type}";
 
+    /**
+     * 标准型号联想(物料)
+     */
+    public static final String PRODUCT_SIMILAR_PCMPCODE_URL = "/search/product/similarPCmpCodes?keyword={keyword}";
+
+    /**
+     * 类目联想(物料)
+     */
+    public static final String PRODUCT_SIMILAR_KIND_URL = "/search/product/similarKind?keyword={keyword}";
+
     /**
      * 获取类目的数据
      *

+ 12 - 0
src/main/java/com/uas/platform/b2c/common/search/controller/SearcherController.java

@@ -281,6 +281,18 @@ public class SearcherController {
 		return  searcherService.getSimilarKeywords(keyword);
 	}
 
+	/**
+	 * 根据输入获取联想词(包括型号、类目、品牌,按顺序获取)
+	 *
+	 * @param keyword 关键词
+	 * @return 获取联想词(包括型号、类目、品牌)
+	 */
+	@RequestMapping(value = "/product/similarKeywords", method = RequestMethod.GET)
+	@ResponseBody
+	public Map<String,Object> getProductSimilarKeywords(String keyword) {
+		return  searcherService.getProductSimilarKeywords(keyword);
+	}
+
 	/**
 	 * 根据输入获取联想词(器件)
 	 * 

+ 26 - 0
src/main/java/com/uas/platform/b2c/common/search/rpc/service/Impl/SearchServiceImpl.java

@@ -257,6 +257,32 @@ public class SearchServiceImpl implements SearchService{
         }
     }
 
+    @Override
+    public Map<String,Object> getProductSimilarKeywords(String keyword) throws SearchException {
+        Map<String, Object> map = new HashedMap();
+        map.put("keyword", keyword);
+        String pCmpCode = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.PRODUCT_SIMILAR_PCMPCODE_URL, String.class, map);
+        String pBrandEn = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.SIMILAR_BRAND_URL, String.class, map);
+        String kind = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.PRODUCT_SIMILAR_KIND_URL, String.class, map);
+        if(StringUtils.isEmpty(pCmpCode) && StringUtils.isEmpty(pBrandEn) && StringUtils.isEmpty(kind)) {
+            return null;
+        }else {
+            try {
+                List<Object> reMapPCmpCode = FastjsonUtils.fromJsonArray(pCmpCode);
+                List<Object> reMapPBrandEn = FastjsonUtils.fromJsonArray(pBrandEn);
+                List<Object> reMapKind = FastjsonUtils.fromJsonArray(kind);
+                map.clear();
+                map.put("pCmpCode",reMapPCmpCode);
+                map.put("pBrandEn",reMapPBrandEn);
+                map.put("kind",reMapKind);
+                return map;
+            }catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+    }
+
     @Override
     public List<Map<String, Object>> getSimilarComponents(String keyword) throws SearchException {
         Map<String, Object> map = new HashedMap();

+ 2 - 0
src/main/java/com/uas/platform/b2c/common/search/rpc/service/SearchService.java

@@ -37,6 +37,8 @@ public interface SearchService {
 
     Map<String,Object> getSimilarKeywords(String keyword) throws SearchException;
 
+    Map<String,Object> getProductSimilarKeywords(String keyword) throws SearchException;
+
     List<Map<String, Object>> getSimilarComponents(String keyword) throws SearchException;
 
     List<Map<String, Object>> getSimilarBrands(String keyword) throws SearchException;

+ 8 - 0
src/main/java/com/uas/platform/b2c/common/search/service/SearcherService.java

@@ -119,6 +119,14 @@ public interface SearcherService {
 	 */
 	public Map<String,Object> getSimilarKeywords(String keyword);
 
+	/**
+	 * 根据输入获取联想词(包括器件、类目、品牌,按顺序获取)
+	 *
+	 * @param keyword 关键词
+	 * @return 联想词
+	 */
+	Map<String,Object> getProductSimilarKeywords(String keyword);
+
 	/**
 	 * 根据输入的原厂型号获取联想词
 	 * 

+ 28 - 11
src/main/java/com/uas/platform/b2c/common/search/service/impl/SearcherServiceImpl.java

@@ -26,17 +26,6 @@ import com.uas.platform.core.exception.SystemException;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import com.uas.search.exception.SearchException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import javax.servlet.http.HttpServletRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -49,6 +38,18 @@ import org.springframework.ui.ModelMap;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
 /**
  * 搜索索引
  *
@@ -379,6 +380,22 @@ public class SearcherServiceImpl implements SearcherService {
         return result;
     }
 
+    @Override
+    public Map<String, Object> getProductSimilarKeywords(String keyword) {
+        Map<String, Object> result = null;
+        try {
+            result = searchService.getProductSimilarKeywords(keyword);
+        } catch (SearchException e) {
+            throwSystemException(e);
+        }
+        for (Entry<String, Object> entry : result.entrySet()) {
+            if (((List) entry.getValue()).size() > 8) {
+                entry.setValue(((List) entry.getValue()).subList(0, 8));
+            }
+        }
+        return result;
+    }
+
     @Override
     public List<Map<String, Object>> getSimilarComponents(String componentCode) {
         List<Map<String, Object>> components = new ArrayList<>();

+ 19 - 0
src/main/java/com/uas/platform/b2c/common/weixin/Readme.md

@@ -0,0 +1,19 @@
+## name
+
+weixin
+
+## 名称
+
+微信
+
+## 创建人
+
+liusw
+
+## 创建时间
+
+2018年5月29日14:22:32
+
+## 说明
+
+用户绑定微信

+ 105 - 0
src/main/java/com/uas/platform/b2c/common/weixin/contoller/WeChatController.java

@@ -0,0 +1,105 @@
+package com.uas.platform.b2c.common.weixin.contoller;
+
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.common.weixin.model.MessageModel;
+import com.uas.platform.b2c.common.weixin.service.WeChatService;
+import com.uas.platform.b2c.common.weixin.util.CheckoutUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+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;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.List;
+
+/**
+ * @author liusw
+ * @create 2018-05-29 10:21
+ * @desc 微信登录controller
+ **/
+@RestController
+@RequestMapping("/wx")
+public class WeChatController {
+
+
+    @Autowired
+    private WeChatService weChatService;
+
+    @RequestMapping(value = "/check", method = RequestMethod.GET)
+    public void wenxinCheck(Model model, HttpServletRequest request, HttpServletResponse response) {
+        // 微信加密签名
+        String signature = request.getParameter("signature");
+        // 时间戳
+        String timestamp = request.getParameter("timestamp");
+        // 随机数
+        String nonce = request.getParameter("nonce");
+        // 随机字符串
+        String echostr = request.getParameter("echostr");
+        PrintWriter print;
+        // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
+        if (signature != null && CheckoutUtil.checkSignature(signature, timestamp, nonce)) {
+            try {
+                print = response.getWriter();
+                print.write(echostr);
+                print.flush();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+//    /**
+//     * 微信授权,获取code
+//     * @return
+//     */
+//    @RequestMapping("/wxLoginPage")
+//    public ModelMap loginPage(HttpServletRequest request) {
+//        ModelMap data = new ModelMap();
+//        String redirect_url = "http://a2v86u.natappfree.cc";
+//        String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect";
+//        url = url.replace("APPID", appID);
+//        url = url.replace("REDIRECT_URI", redirect_url + "/weChat/pcAuth");
+//        url = url.replace("SCOPE", "snsapi_userinfo");
+//        url = url.replace("STATE", request.getSession().getId());
+//        data.put("sessionId", request.getSession().getId());
+//        data.put("url", url);
+//        System.out.println(url);
+//        return data;
+//    }
+
+    /**
+     * 用户微信授权成功返回接口
+     * @param code 用于获取AccessToken
+     * @param state 获取code的state参数
+     * @return
+     */
+    @RequestMapping(value = "/getWxUserInfo", method = RequestMethod.GET)
+    public ModelMap getWxUserInfo(String code,String state) {
+        return weChatService.getWxUserInfo(code, state);
+    }
+
+    /**
+     * 发送模板消息
+     * @return
+     */
+    @RequestMapping(value = "/sendTemplateMessage", method = RequestMethod.POST)
+    public ModelMap sendTemplateMessage(@RequestBody List<MessageModel> messages){
+        return weChatService.sendTemplateMessage(messages);
+    }
+
+    /**
+     * 绑定用户
+     * @param user
+     * @return
+     */
+    @RequestMapping(value = "/bindUser", method = RequestMethod.POST)
+    public ModelMap bindUser(@RequestBody User user){
+        return weChatService.bindUser(user);
+    }
+}

+ 197 - 0
src/main/java/com/uas/platform/b2c/common/weixin/model/MessageModel.java

@@ -0,0 +1,197 @@
+package com.uas.platform.b2c.common.weixin.model;
+
+/**
+ * @author liusw
+ * @date 2018-05-29 20:14
+ */
+public class MessageModel {
+    /**
+     * 消息类型
+     */
+    private String type;
+    /**
+     * 消息内容
+     */
+    private String content;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 来源id
+     */
+    private Long sourceId;
+    /**
+     * 消息接收者uu
+     */
+    private Long receiverUu;
+    /**
+     * 消息接收者企业uu
+     */
+    private Long receiverEnuu;
+    /**
+     * 消息发送者
+     */
+    private Long senderUu;
+    /**
+     * 消息发送者企业uu
+     */
+    private Long senderEnuu;
+    /**
+     * 来源应用
+     */
+    private String producerApp;
+    /**
+     * 消费类型(所有应用共享:"PUBLIC",单个应用独享:"SINGLE",多个应用共享:"MULTI")
+     */
+    private String consumerType;
+    /**
+     * 推送方式类型
+     * 邮件、短信、IM:"MAIL_AND_SM_AND_IM"
+     * 邮件、短信:"MAIL_AND_SM"
+     * 邮件、IM:"MAIL_AND_IM"
+     * 短信、IM:"SM_AND_IM"
+     * 邮件:"MAIL"
+     * 短信:"SM"
+     * IM:"IM"
+     * 不发送:"DONT_SEND"
+     */
+    private String smsType;
+    /**
+     * 邮件模板id
+     */
+    private String mailTemplate;
+    /**
+     * 短息模板id
+     */
+    private String smTemplate;
+    /**
+     * 接收应用(以","拼接应用名称)
+     */
+    private String consumerApp;
+
+    /**
+     * 询价名称
+     */
+    private String name;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public Long getReceiverUu() {
+        return receiverUu;
+    }
+
+    public void setReceiverUu(Long receiverUu) {
+        this.receiverUu = receiverUu;
+    }
+
+    public Long getReceiverEnuu() {
+        return receiverEnuu;
+    }
+
+    public void setReceiverEnuu(Long receiverEnuu) {
+        this.receiverEnuu = receiverEnuu;
+    }
+
+    public Long getSenderUu() {
+        return senderUu;
+    }
+
+    public void setSenderUu(Long senderUu) {
+        this.senderUu = senderUu;
+    }
+
+    public Long getSenderEnuu() {
+        return senderEnuu;
+    }
+
+    public void setSenderEnuu(Long senderEnuu) {
+        this.senderEnuu = senderEnuu;
+    }
+
+    public String getProducerApp() {
+        return producerApp;
+    }
+
+    public void setProducerApp(String producerApp) {
+        this.producerApp = producerApp;
+    }
+
+    public String getConsumerType() {
+        return consumerType;
+    }
+
+    public void setConsumerType(String consumerType) {
+        this.consumerType = consumerType;
+    }
+
+    public String getSmsType() {
+        return smsType;
+    }
+
+    public void setSmsType(String smsType) {
+        this.smsType = smsType;
+    }
+
+    public String getMailTemplate() {
+        return mailTemplate;
+    }
+
+    public void setMailTemplate(String mailTemplate) {
+        this.mailTemplate = mailTemplate;
+    }
+
+    public String getSmTemplate() {
+        return smTemplate;
+    }
+
+    public void setSmTemplate(String smTemplate) {
+        this.smTemplate = smTemplate;
+    }
+
+    public String getConsumerApp() {
+        return consumerApp;
+    }
+
+    public void setConsumerApp(String consumerApp) {
+        this.consumerApp = consumerApp;
+    }
+
+    public Long getSourceId() {
+        return sourceId;
+    }
+
+    public void setSourceId(Long sourceId) {
+        this.sourceId = sourceId;
+    }
+}

+ 48 - 0
src/main/java/com/uas/platform/b2c/common/weixin/model/TemplateData.java

@@ -0,0 +1,48 @@
+package com.uas.platform.b2c.common.weixin.model;
+
+import java.util.List;
+
+/**
+ * @author liusw
+ * @date 2018-05-29 19:25
+ */
+public class TemplateData {
+    /**
+     * 头部信息
+     */
+    private TemplateDataDetail first;
+
+    /**
+     * 关键字信息
+     */
+    private List<TemplateDataDetail> keywords;
+
+    /**
+     * 备注
+     */
+    private TemplateDataDetail remark;
+
+    public TemplateDataDetail getFirst() {
+        return first;
+    }
+
+    public void setFirst(TemplateDataDetail first) {
+        this.first = first;
+    }
+
+    public List<TemplateDataDetail> getKeywords() {
+        return keywords;
+    }
+
+    public void setKeywords(List<TemplateDataDetail> keywords) {
+        this.keywords = keywords;
+    }
+
+    public TemplateDataDetail getRemark() {
+        return remark;
+    }
+
+    public void setRemark(TemplateDataDetail remark) {
+        this.remark = remark;
+    }
+}

+ 33 - 0
src/main/java/com/uas/platform/b2c/common/weixin/model/TemplateDataDetail.java

@@ -0,0 +1,33 @@
+package com.uas.platform.b2c.common.weixin.model;
+
+/**
+ * @author liusw
+ * @date 2018-05-29 19:26
+ */
+public class TemplateDataDetail {
+    /**
+     * 值
+     */
+    private String value;
+
+    /**
+     * 颜色
+     */
+    private String color;
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getColor() {
+        return color;
+    }
+
+    public void setColor(String color) {
+        this.color = color;
+    }
+}

+ 62 - 0
src/main/java/com/uas/platform/b2c/common/weixin/model/TemplateMessage.java

@@ -0,0 +1,62 @@
+package com.uas.platform.b2c.common.weixin.model;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author liusw
+ * @date 2018-05-29 19:17
+ */
+public class TemplateMessage {
+    /**
+     * 接受openid
+     */
+    private String touser;
+
+    /**
+     * 模板Id
+     */
+    private String templateId;
+
+    /**
+     * 模板跳转地址
+     */
+    private String url;
+
+    /**
+     * 模板消息
+     */
+    private Map<String, TemplateDataDetail> data;
+
+    public String getTouser() {
+        return touser;
+    }
+
+    public void setTouser(String touser) {
+        this.touser = touser;
+    }
+
+    public String getTemplateId() {
+        return templateId;
+    }
+
+    public void setTemplateId(String templateId) {
+        this.templateId = templateId;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public Map<String, TemplateDataDetail> getData() {
+        return data;
+    }
+
+    public void setData(Map<String, TemplateDataDetail> data) {
+        this.data = data;
+    }
+}

+ 36 - 0
src/main/java/com/uas/platform/b2c/common/weixin/service/WeChatService.java

@@ -0,0 +1,36 @@
+package com.uas.platform.b2c.common.weixin.service;
+
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.common.weixin.model.MessageModel;
+import org.springframework.ui.ModelMap;
+
+import java.util.List;
+
+/**
+ * @author liusw
+ * @date 2018-05-30 9:24
+ */
+public interface WeChatService {
+
+    /**
+     * 获取微信用户信息
+     * @param code
+     * @param state
+     * @return
+     */
+    ModelMap getWxUserInfo(String code, String state);
+
+    /**
+     * 发送模板消息
+     * @param messages
+     * @return
+     */
+    ModelMap sendTemplateMessage(List<MessageModel> messages);
+
+    /**
+     * 绑定用户
+     * @param user
+     * @return
+     */
+    ModelMap bindUser(User user);
+}

+ 209 - 0
src/main/java/com/uas/platform/b2c/common/weixin/service/impl/WeChatServiceImpl.java

@@ -0,0 +1,209 @@
+package com.uas.platform.b2c.common.weixin.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.uas.platform.b2c.common.account.dao.UserDao;
+import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.common.weixin.model.MessageModel;
+import com.uas.platform.b2c.common.weixin.model.TemplateData;
+import com.uas.platform.b2c.common.weixin.model.TemplateDataDetail;
+import com.uas.platform.b2c.common.weixin.model.TemplateMessage;
+import com.uas.platform.b2c.common.weixin.service.WeChatService;
+import com.uas.platform.b2c.common.weixin.util.WeChatUtil;
+import com.uas.platform.core.exception.IllegalOperatorException;
+import com.uas.platform.core.util.serializer.FlexJsonUtils;
+import com.uas.sso.common.util.HttpUtil;
+import com.uas.sso.entity.UserAccount;
+import com.uas.sso.entity.UserView;
+import com.uas.sso.util.AccountUtils;
+import net.sf.json.JSONArray;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import java.util.*;
+
+/**
+ * @author liusw
+ * @date 2018-05-30 9:24
+ */
+@Service
+public class WeChatServiceImpl implements WeChatService{
+
+    @Autowired
+    private UserDao userDao;
+
+    @Override
+    public ModelMap getWxUserInfo(String code, String state) {
+        ModelMap result = new ModelMap();
+        if (!StringUtils.isEmpty(code)) {
+            JSONObject userInfo = getAccessTokenByCode(code);
+            result.put("nickname", userInfo.getString("nickname"));
+            result.put("headimgurl", userInfo.getString("headimgurl"));
+            String openid = userInfo.getString("openid");
+            result.put("openid", openid);
+            User user = userDao.findUsersByOpenId(openid);
+            if (StringUtils.isEmpty(user)) {
+                result.put("status", 0);
+            } else {
+                result.put("status", 1);
+                // 转成userAccount
+                UserAccount userAccount = convertUserAccount(user);
+                // 企业信息单独提出
+                Set<Enterprise> enterprises = user.getEnterprises();
+                result.put("userAccount", userAccount);
+                result.put("enterprises", enterprises);
+            }
+        }
+        return result;
+    }
+
+    private UserAccount convertUserAccount(User user) {
+        UserAccount userAccount = new UserAccount();
+        userAccount.setAppId("mall");
+        userAccount.setVipName(user.getUserName());
+        userAccount.setEmail(user.getUserEmail());
+        userAccount.setMobile(user.getUserTel());
+        userAccount.setUserUU(user.getUserUU());
+        return userAccount;
+    }
+
+    @Override
+    public ModelMap sendTemplateMessage(List<MessageModel> messages) {
+        ModelMap result = new ModelMap();
+        String url = WeChatUtil.GET_ACCESS_TOKEN;
+        url = url.replace("APPID", WeChatUtil.APPID);
+        url = url.replace("SECRET", WeChatUtil.APPSECRET);
+        try {
+            HttpUtil.ResponseWrap res = HttpUtil.doGet(url);
+            JSONObject jsonObject = JSON.parseObject(res.getContent());
+            String access_token = jsonObject.getString("access_token");
+            String sendTemplateUrl = WeChatUtil.GET_ACCESS_TOKEN.replace("ACCESS_TOKEN", access_token);
+            // 模板内容设置
+            TemplateMessage templateMessage = new TemplateMessage();
+            templateMessage.setTemplateId(WeChatUtil.INQUIRY_TEMPLATE_ID);
+            templateMessage.setUrl("https://www.usoftmall.com/mobile/center/vendor/seek?seekType=wait");
+            TemplateDataDetail first = new TemplateDataDetail();
+            TemplateDataDetail keyword1 = new TemplateDataDetail();
+            TemplateDataDetail keyword2 = new TemplateDataDetail();
+            TemplateDataDetail keyword3 = new TemplateDataDetail();
+            TemplateDataDetail remark = new TemplateDataDetail();
+            for (MessageModel messageModel : messages) {
+                User user = userDao.findOne(messageModel.getReceiverUu());
+                if (!StringUtils.isEmpty(user.getOpenId())) {
+                    Map<String, TemplateDataDetail> data = new HashMap<>();
+                    templateMessage.setTouser(user.getOpenId());
+                    keyword1.setValue(messageModel.getName());
+                    keyword1.setColor("#173177");
+                    data.put("keyword1", keyword1);
+                    keyword2.setValue("点击查看详情");
+                    keyword2.setColor("#173177");
+                    data.put("keyword2", keyword2);
+                    keyword3.setColor("#173177");
+                    keyword3.setValue("点击查看详情");
+                    data.put("keyword2", keyword2);
+                    first.setValue("尊敬的用户,您有一条新的询价单");
+                    remark.setValue(messageModel.getContent());
+                    data.put("first", first);
+                    data.put("remark", remark);
+                    templateMessage.setData(data);
+                    HttpUtil.doPost(sendTemplateUrl, FlexJsonUtils.toJsonDeep(templateMessage));
+                }
+            }
+            result.put("success", true);
+            return result;
+        } catch (Exception e) {
+            e.printStackTrace();
+            result.put("success", false);
+            result.put("message", e.getMessage());
+            return result;
+        }
+    }
+
+    @Override
+    public ModelMap bindUser(User user) {
+        ModelMap result = new ModelMap();
+        // 账户中心校验手机号和密码是否正确
+        if (StringUtils.isEmpty(user) || StringUtils.isEmpty(user.getUserTel()) || StringUtils.isEmpty(user.getUserPwd()) || StringUtils.isEmpty(user.getOpenId())) {
+            throw new IllegalOperatorException("信息不完整!");
+        }
+        // 是否存在用户信息
+        List<User> oldUsers = userDao.findUserByUserTel(user.getUserTel());
+        if (CollectionUtils.isEmpty(oldUsers)) {
+            throw new IllegalOperatorException("未找到用户信息");
+        }
+        User judgeUser = userDao.findUsersByOpenId(user.getOpenId());
+        if (!StringUtils.isEmpty(judgeUser)) {
+            throw new IllegalOperatorException("该微信号已被绑定");
+        }
+        UserView userView = new UserView();
+        userView.setMobile(user.getUserTel());
+        userView.setPassword(user.getUserPwd());
+        boolean pass = false;
+        try {
+            User oldUser = oldUsers.get(0);
+            if (!StringUtils.isEmpty(oldUser.getOpenId())) {
+                throw new IllegalOperatorException("该用户已经绑定微信号");
+            }
+            pass = AccountUtils.fuzzyCheckPassword(userView);
+            if (!pass) {
+                throw new IllegalOperatorException("手机号或密码不正确");
+            }
+            oldUser.setOpenId(user.getOpenId());
+            user = userDao.save(oldUser);
+            // 转成UserAccount便于登录
+            UserAccount userAccount = convertUserAccount(user);
+            // 企业信息单独提出
+            Set<Enterprise> enterprises = user.getEnterprises();
+            result.put("userAccount", userAccount);
+            result.put("enterprises", enterprises);
+            result.put("success", true);
+            return result;
+        } catch (Exception e) {
+            e.printStackTrace();
+            result.put("success", false);
+            result.put("message", e.getMessage());
+            return result;
+        }
+    }
+
+    /**
+     * 通过code获取用户openId
+     * @param code
+     */
+    private JSONObject getAccessTokenByCode(String code) {
+        String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
+        url = url.replace("APPID", WeChatUtil.APPID);
+        url = url.replace("SECRET", WeChatUtil.APPSECRET);
+        url = url.replace("CODE", code);
+        try {
+            HttpUtil.ResponseWrap res = HttpUtil.doGet(url);
+            JSONObject jsonObject = JSON.parseObject(res.getContent());
+            String accessToken = jsonObject.getString("access_token");
+            String openId = jsonObject.getString("openid");
+            String refreshToken = jsonObject.getString("refresh_token");
+            JSONObject userInfo = getUserInfo(accessToken, openId);
+            return userInfo;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    private JSONObject getUserInfo(String accessToken, String openId) {
+        String url = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";
+        url = url.replace("ACCESS_TOKEN", accessToken);
+        url = url.replace("OPENID", openId);
+        try {
+            HttpUtil.ResponseWrap res = HttpUtil.doGet(url);
+            JSONObject jsonObject = JSON.parseObject(res.getContent());
+            return jsonObject;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}

+ 89 - 0
src/main/java/com/uas/platform/b2c/common/weixin/util/CheckoutUtil.java

@@ -0,0 +1,89 @@
+package com.uas.platform.b2c.common.weixin.util;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * @author wangmh
+ * @create 2018-05-24 14:28
+ * @desc 第三方校验
+ **/
+public class CheckoutUtil {
+    /**
+     *  与接口配置信息中的Token要一致
+     */
+    private static String token = "usoftmall";
+
+    /**
+     * 验证签名
+     *
+     * @param signature
+     * @param timestamp
+     * @param nonce
+     * @return
+     */
+    public static boolean checkSignature(String signature, String timestamp, String nonce) {
+        String[] arr = new String[] { token, timestamp, nonce };
+        // 将token、timestamp、nonce三个参数进行字典序排序
+        // Arrays.sort(arr);
+        sort(arr);
+        StringBuilder content = new StringBuilder();
+        for (int i = 0; i < arr.length; i++) {
+            content.append(arr[i]);
+        }
+        MessageDigest md = null;
+        String tmpStr = null;
+
+        try {
+            md = MessageDigest.getInstance("SHA-1");
+            // 将三个参数字符串拼接成一个字符串进行sha1加密
+            byte[] digest = md.digest(content.toString().getBytes());
+            tmpStr = byteToStr(digest);
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        }
+        content = null;
+        // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信
+        return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
+    }
+
+    /**
+     * 将字节数组转换为十六进制字符串
+     *
+     * @param byteArray
+     * @return
+     */
+    private static String byteToStr(byte[] byteArray) {
+        String strDigest = "";
+        for (int i = 0; i < byteArray.length; i++) {
+            strDigest += byteToHexStr(byteArray[i]);
+        }
+        return strDigest;
+    }
+
+    /**
+     * 将字节转换为十六进制字符串
+     *
+     * @param mByte
+     * @return
+     */
+    private static String byteToHexStr(byte mByte) {
+        char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+        char[] tempArr = new char[2];
+        tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
+        tempArr[1] = Digit[mByte & 0X0F];
+        String s = new String(tempArr);
+        return s;
+    }
+    public static void sort(String a[]) {
+        for (int i = 0; i < a.length - 1; i++) {
+            for (int j = i + 1; j < a.length; j++) {
+                if (a[j].compareTo(a[i]) < 0) {
+                    String temp = a[i];
+                    a[i] = a[j];
+                    a[j] = temp;
+                }
+            }
+        }
+    }
+}

+ 33 - 0
src/main/java/com/uas/platform/b2c/common/weixin/util/WeChatUtil.java

@@ -0,0 +1,33 @@
+package com.uas.platform.b2c.common.weixin.util;
+
+/**
+ * @author liusw
+ * @date 2018-05-29 19:33
+ */
+public class WeChatUtil {
+
+    /**
+     * appid
+     */
+    public static final String APPID = "wxb3274b676737a319";
+
+    /**
+     * appsecret
+     */
+    public static final String APPSECRET = "2d453655ce03869d9b14ff2f9f62a634";
+
+    /**
+     * 模板ID
+     */
+    public static final String INQUIRY_TEMPLATE_ID = "-G-4m7K9Lsz7CsBmcBpIWi8eCw6ph_P1716fYSIfnhQ";
+
+    /**
+     * 发送模板消息url
+     */
+    public static final String SEND_TEMPLATE_URL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
+
+    /**
+     * 获取access_token
+     */
+    public static final String GET_ACCESS_TOKEN = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET";
+}

+ 11 - 0
src/main/java/com/uas/platform/b2c/prod/store/api/StoreInController.java

@@ -163,4 +163,15 @@ public class StoreInController {
 	public List<StoreIn> findFiveStoreByType(@RequestParam("types") String types, @RequestParam("num") Integer num){
 		return storeService.findFiveStores(types, num);
 	}
+
+	/**
+	 * 通过型号、品牌、类目、店铺名称模糊搜索店铺信息(分页)
+	 * @param keyword 关键词
+	 * @param params 分页参数
+	 * @return
+	 */
+	@RequestMapping(value = "/stores", method = RequestMethod.GET, params = "op=similar")
+	public Page<StoreIn> findBySimilarName(@RequestParam(value = "keyword", required = false) String keyword, @RequestParam(value = "field", required = false) String field, PageParams params, @RequestParam(value = "type", required = false) String type, HttpServletRequest request) {
+		return storeService.findBySimilarName(params, keyword, type, field, request);
+	}
 }

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

@@ -4,6 +4,7 @@ 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 javax.persistence.Column;
 import java.util.Date;
 
 /**
@@ -93,6 +94,19 @@ public class EnterpriseSimple {
 	 */
 	private Date enDate;
 
+	/**
+	 * 企业简介
+	 */
+	private String description;
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
 	public EnterpriseSimple() {
 	}
 

+ 19 - 1
src/main/java/com/uas/platform/b2c/prod/store/model/StoreIn.java

@@ -2,6 +2,8 @@ package com.uas.platform.b2c.prod.store.model;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonInclude;
+import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.account.model.UserBaseInfo;
 import com.uas.platform.b2c.core.utils.JacksonUtils;
 import com.uas.platform.b2c.prod.commodity.model.Goods;
 import org.springframework.util.StringUtils;
@@ -119,6 +121,10 @@ public class StoreIn implements Serializable {
 	@Column(name = "st_enuu")
 	private Long enUU;
 
+	@OneToOne(cascade = { CascadeType.REFRESH })
+	@JoinColumn(name = "st_enuu", insertable = false, updatable = false)
+	private Enterprise enterpriseInfo;
+
 	/**
 	 * 企业信息JSON
 	 */
@@ -174,6 +180,14 @@ public class StoreIn implements Serializable {
 	@Transient
 	private List<Goods> goodses;
 
+	public Enterprise getEnterpriseInfo() {
+		return enterpriseInfo;
+	}
+
+	public void setEnterpriseInfo(Enterprise enterpriseInfo) {
+		this.enterpriseInfo = enterpriseInfo;
+	}
+
 	public StoreIn() {
 	}
 
@@ -291,7 +305,11 @@ public class StoreIn implements Serializable {
 
 	public EnterpriseSimple getEnterprise() {
 		try {
-			return StringUtils.hasText(this.enterpriseJson) ? JacksonUtils.fromJson(this.enterpriseJson, EnterpriseSimple.class) : null;
+			this.enterprise = StringUtils.hasText(this.enterpriseJson) ? JacksonUtils.fromJson(this.enterpriseJson, EnterpriseSimple.class) : null;
+			if (!StringUtils.isEmpty(this.enterpriseInfo)) {
+				this.enterprise.setDescription(this.enterpriseInfo.getDescription());
+			}
+			return this.enterprise;
 		} catch (Exception e) {
 			e.printStackTrace();
 			return new EnterpriseSimple();

+ 10 - 2
src/main/java/com/uas/platform/b2c/prod/store/service/StoreInService.java

@@ -9,6 +9,7 @@ import com.uas.platform.b2c.prod.store.model.StoreStatus;
 import com.uas.platform.b2c.prod.store.model.StoreType;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -139,7 +140,6 @@ public interface StoreInService {
 	 */
 	List<StoreIn> findFiveStores(String types, Integer num);
 
-
 	/**
 	 * 获取企业的店铺信息
 	 * @return
@@ -200,5 +200,13 @@ public interface StoreInService {
 	 */
 	Set<Qualification> getQualificationsSort();
 
-
+	/**
+	 * 通过型号、品牌、类目、店铺名称模糊搜索店铺信息(分页)
+	 * @param params 分页参数
+	 * @param keyword 关键字
+	 * @param request requset
+	 * @param feild 类型
+	 * @return
+	 */
+	Page<StoreIn> findBySimilarName(PageParams params, String keyword, String type, String feild, HttpServletRequest request);
 }

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

@@ -10,6 +10,7 @@ import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.account.service.EnterpriseService;
 import com.uas.platform.b2c.common.search.dao.SearchHistoryDao;
 import com.uas.platform.b2c.common.search.model.SearchHistory;
+import com.uas.platform.b2c.common.search.service.SearcherService;
 import com.uas.platform.b2c.core.config.SysConf;
 import com.uas.platform.b2c.core.constant.Type;
 import com.uas.platform.b2c.core.support.SystemSession;
@@ -18,6 +19,7 @@ import com.uas.platform.b2c.core.utils.UuidUtils;
 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.product.component.modal.ComponentGoods;
 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;
@@ -36,6 +38,8 @@ import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.exception.IllegalStatusException;
 import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import com.uas.platform.core.persistence.criteria.LogicalExpression;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.persistence.criteria.SimpleExpression;
 import java.util.ArrayList;
@@ -66,6 +70,7 @@ import org.springframework.mobile.device.DeviceResolver;
 import org.springframework.mobile.device.LiteDeviceResolver;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.ui.ModelMap;
 import org.springframework.util.StringUtils;
 
 /**
@@ -102,8 +107,10 @@ public class StoreInServiceImpl implements StoreInService {
 
 	private final DeviceResolver deviceResolver = new LiteDeviceResolver();
 
+	private final SearcherService searcherService;
+
 	@Autowired
-	public StoreInServiceImpl(StoreInDao storeDao, QualificationDao qualificationDao, GoodsDao goodsDao, ComponentDao componentDao, PurchaseDao purchaseDao, StoreBrandInfoDao brandInfoDao, StoreAdsService adsService, SysConf sysConf, EnterpriseService enterpriseService, SearchHistoryDao searchHistoryDao) {
+	public StoreInServiceImpl(StoreInDao storeDao, QualificationDao qualificationDao, GoodsDao goodsDao, ComponentDao componentDao, PurchaseDao purchaseDao, StoreBrandInfoDao brandInfoDao, StoreAdsService adsService, SysConf sysConf, EnterpriseService enterpriseService, SearchHistoryDao searchHistoryDao, SearcherService searcherService) {
 		this.storeDao = storeDao;
 		this.qualificationDao = qualificationDao;
 		this.goodsDao = goodsDao;
@@ -114,6 +121,7 @@ public class StoreInServiceImpl implements StoreInService {
 		this.sysConf = sysConf;
 		this.enterpriseService = enterpriseService;
 		this.searchHistoryDao = searchHistoryDao;
+		this.searcherService = searcherService;
 	}
 
 	@Override
@@ -695,4 +703,67 @@ public class StoreInServiceImpl implements StoreInService {
 		}
 		return map;
 	}
+
+	@Override
+	public Page<StoreIn> findBySimilarName(PageParams params, String keyword, String type, String field, HttpServletRequest request) {
+		LogicalExpression typeLogicalEx = null;
+		LogicalExpression keywordLogicalEx = null;
+		SimpleExpression nameSimpleEx = null;
+		final PageInfo pageInfo = new PageInfo(params);
+
+		// 搜索店铺类型
+		if (!StringUtils.isEmpty(type)) {
+			Set<StoreType> typeSet = getTypesFromString(type);
+			typeLogicalEx = PredicateUtils.in("type", typeSet.toArray(new StoreType[]{}), true);
+		}
+		// 搜索店铺名称
+		if (!StringUtils.isEmpty(keyword)) {
+            if ("similar".equals(field)) {
+                // 搜索器件、品牌、类目
+                PageParams pageParams = new PageParams();
+                pageParams.setCount(20);
+                pageParams.setPage(1);
+
+                ModelMap map = searcherService.searchComponentGoods(keyword, pageParams, request);
+                List<ComponentGoods> components = (List<ComponentGoods>) map.get("components");
+                Set<String> storeIds = new HashSet<>();
+                for (ComponentGoods componentGood : components) {
+                    if (componentGood.getStoreId() != null) {
+                        storeIds.add(componentGood.getStoreId());
+                    }
+                }
+
+                if (CollectionUtils.isEmpty(storeIds)) {
+                    storeIds.add("");
+                }
+				keywordLogicalEx = PredicateUtils.in("uuid", storeIds, true);
+            } else {
+                nameSimpleEx = PredicateUtils.like("storeName", keyword, true);
+            }
+
+			if (nameSimpleEx != null) {
+				if (typeLogicalEx != null) {
+					pageInfo.expression(PredicateUtils.and(nameSimpleEx, typeLogicalEx));
+				} else {
+					pageInfo.expression(nameSimpleEx);
+				}
+			} else if (typeLogicalEx != null) {
+				pageInfo.expression(PredicateUtils.and(keywordLogicalEx, typeLogicalEx));
+			} else {
+				pageInfo.expression(keywordLogicalEx);
+			}
+		} else if (typeLogicalEx != null) {
+			pageInfo.expression(typeLogicalEx);
+		}
+
+
+
+		return storeDao.findAll(new Specification<StoreIn>() {
+			@Override
+			public Predicate toPredicate(Root<StoreIn> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
+				criteriaQuery.where(pageInfo.getPredicates(root, criteriaQuery, criteriaBuilder));
+				return null;
+			}
+		}, pageInfo);
+	}
 }

+ 12 - 0
src/main/java/com/uas/platform/b2c/trade/presale/controller/CollectionController.java

@@ -7,6 +7,7 @@ import com.uas.platform.b2c.prod.product.component.modal.ComponentInfo;
 import com.uas.platform.b2c.trade.presale.model.Collection;
 import com.uas.platform.b2c.trade.presale.model.CollectionInfo;
 import com.uas.platform.b2c.trade.presale.service.CollectionService;
+import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.model.Type;
@@ -84,6 +85,17 @@ public class CollectionController {
 		return collectionService.getPageStore(info);
 	}
 
+	/**
+	 * 2016年3月24日 上午11:22:22 获取个人收藏器件个数
+	 *
+	 * @return  ResultMap 返回收藏数量
+	 */
+	@RequestMapping(value = "/count", method = RequestMethod.GET, params = "type=component")
+	@ApiOperation(value = "器件收藏数量", httpMethod = "GET")
+	public ResultMap getStoreCountByuseruuAndComponent() {
+		return collectionService.getStoreCountByuseruuAndComponent(Collection.kindType.COMPONENT.getCode());
+	}
+
 	/**
 	 * 删除指定的搜藏信息
 	 *

+ 12 - 0
src/main/java/com/uas/platform/b2c/trade/presale/controller/StoreFocusController.java

@@ -3,6 +3,7 @@ package com.uas.platform.b2c.trade.presale.controller;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.trade.presale.model.StoreFocus;
 import com.uas.platform.b2c.trade.presale.service.StoreFocusService;
+import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import com.wordnik.swagger.annotations.ApiOperation;
@@ -50,6 +51,17 @@ public class StoreFocusController {
 		return storeFocusService.getByUseruuAndEnuu();
 	}
 
+	/**
+	 * 查询指定uu号下的店铺关注统计信息
+	 *
+	 * @return ResultMap
+	 */
+	@RequestMapping(value = "/count", method = RequestMethod.GET)
+	@ApiOperation(value = "查询指定uu号下的所有店铺关注记录", httpMethod = "GET")
+	public ResultMap getStoreFocusCountByUseruuAndEnuu() {
+		return storeFocusService.getStoreFocusCountByUseruuAndEnuu();
+	}
+
 	/**
 	 * 单个/批量删除店铺关注记录
 	 * 

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

@@ -96,4 +96,25 @@ public interface CollectionDao extends JpaRepository<Collection, Long>, JpaSpeci
 	 * @return
 	 */
 	List<Collection> findStoreByUseruuAndDissociativeAndKindAndComponentid(Long useruu, Integer dissociative, int kind, Long componentid);
+
+	/**
+	 * 根据useruu,enuu, 获取指定类型的总计数量
+	 * @param useruu 个人uu
+	 * @param enuu 企业uu
+	 * @param kind 类型
+	 * @return
+	 */
+	@Query(value = "select count(*) from Collection c where c.useruu =:useruu and c.enuu =:enuu and c.kind =:kind")
+	Integer findStoreCountByUseruuAndEnuuAndKind(@Param("useruu") Long useruu, @Param("enuu") Long enuu, @Param("kind") int kind);
+
+
+	/**
+	 * 根据useruu,enuu, 获取指定类型的总计数量
+	 * @param useruu 个人uu
+	 * @param dissociative 企业uu
+	 * @param kind 类型
+	 * @return
+	 */
+	@Query(value = "select count(*) from Collection c where c.useruu =:useruu and c.dissociative =:dissociative and c.kind =:kind")
+	Integer findStoreCountByUseruuAndDissociativeAndKind(@Param("useruu") Long useruu, @Param("dissociative") Integer dissociative, @Param("kind") int kind);
 }

+ 41 - 1
src/main/java/com/uas/platform/b2c/trade/presale/dao/StoreFocusDao.java

@@ -3,7 +3,7 @@ package com.uas.platform.b2c.trade.presale.dao;
 import com.uas.platform.b2c.trade.presale.model.StoreFocus;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.data.mongodb.repository.Query;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
@@ -25,6 +25,46 @@ public interface StoreFocusDao extends JpaSpecificationExecutor<StoreFocus>, Jpa
 	 */
 	List<StoreFocus> findStoreFocusByUseruuAndEnuu(Long useruu, Long enuu);
 
+	/**
+	 * 根据个人的uu号和enuu号查找所有记录
+	 *
+	 * @param useruu 个人uu
+	 * @param enuu 企业enuu
+	 * @return List<StoreFocus> 返回店铺关注列表
+	 */
+	@Query(value = "select s from StoreFocus s where s.useruu =:useruu and s.enuu =:enuu and s.dissociative =:dissociative")
+	List<StoreFocus> findStoreFocusByUseruuAndEnuuAndDissociative(@Param("useruu") Long useruu, @Param("enuu")Long enuu, @Param("dissociative")Integer dissociative);
+
+	/**
+	 * 根据个人的uu号和是否是游离类型查找所有记录
+	 *
+	 * @param useruu 个人uu
+	 *
+	 * @return List<StoreFocus> 返回店铺关注列表
+	 */
+	@Query(value = "select s from StoreFocus s where s.useruu =:useruu and s.dissociative =:dissociative")
+	List<StoreFocus> findStoreFocusByUseruuAndDissociative(@Param("useruu")Long useruu, @Param("dissociative")Integer dissociative);
+
+	/**
+	 * 根据个人的uu号和enuu号查找所有记录
+	 *
+	 * @param useruu 个人uu
+	 * @param dissociative dissociative 游离的信息
+	 * @return List<StoreFocus> 返回店铺关注列表
+	 */
+	@Query(value = "select count(s) from StoreFocus s where s.useruu =:useruu and s.dissociative =:dissociative")
+	Integer findStoreFocusCountByUseruuAndDissociative(@Param("useruu")Long useruu, @Param("dissociative")Integer dissociative);
+
+	/**
+	 * 根据个人的uu号和enuu号查找所有记录
+	 *
+	 * @param useruu 个人uu
+	 * @param enuu 企业enuu
+	 * @return List<StoreFocus> 返回店铺关注列表
+	 */
+	@Query(value = "select count(s) from StoreFocus s where s.useruu =:useruu and s.dissociative =:dissociative and s.enuu =:enuu")
+	Integer findStoreFocusCountByUseruuAndEnuuAndDissociative(@Param("useruu") Long useruu, @Param("enuu") Long enuu, @Param("dissociative") Integer dissociative);
+
 	/**
 	 * 根据个人的uu号、enuu号、storeid查找记录
 	 *

+ 36 - 0
src/main/java/com/uas/platform/b2c/trade/presale/model/Collection.java

@@ -81,6 +81,42 @@ public class Collection implements Serializable {
 	@Column(name = "store_dissociative")
 	private Integer dissociative;
 
+	/**
+	 * 收藏类型
+	 */
+	public enum  kindType {
+
+		BRAND(1, "品牌"),
+
+		COMPONENT(2, "器件");
+
+		private int code;
+		private String phrase;
+
+		kindType(int code, String phrase) {
+			this.code = code;
+			this.phrase = phrase;
+		}
+
+		public int getCode() {
+			return code;
+		}
+
+		public kindType setCode(int code) {
+			this.code = code;
+			return this;
+		}
+
+		public String getPhrase() {
+			return phrase;
+		}
+
+		public kindType setPhrase(String phrase) {
+			this.phrase = phrase;
+			return this;
+		}
+	}
+
 	public Long getId() {
 		return id;
 	}

+ 12 - 4
src/main/java/com/uas/platform/b2c/trade/presale/service/CollectionService.java

@@ -1,12 +1,12 @@
 package com.uas.platform.b2c.trade.presale.service;
 
-import java.util.List;
-
-import org.springframework.data.domain.Page;
-
 import com.uas.platform.b2c.trade.presale.model.Collection;
 import com.uas.platform.b2c.trade.presale.model.CollectionInfo;
+import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
+import org.springframework.data.domain.Page;
+
+import java.util.List;
 
 /**
  * @author yujia
@@ -89,4 +89,12 @@ public interface CollectionService {
 	 * @return Page<Collection> 返回collection的分页对象
 	 */
 	Page<Collection> getPageStore(PageInfo info);
+
+	/**
+	 * 2016年3月24日 上午11:22:22 获取个人收藏器件个数
+	 *
+	 * @param kind  收藏的类型  1 代表品牌  2 代表器件
+	 * @return  ResultMap 返回收藏数量
+	 */
+	ResultMap getStoreCountByuseruuAndComponent(int kind);
 }

+ 11 - 4
src/main/java/com/uas/platform/b2c/trade/presale/service/StoreFocusService.java

@@ -1,11 +1,11 @@
 package com.uas.platform.b2c.trade.presale.service;
 
-import java.util.List;
-
-import org.springframework.data.domain.Page;
-
 import com.uas.platform.b2c.trade.presale.model.StoreFocus;
+import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
+import org.springframework.data.domain.Page;
+
+import java.util.List;
 
 /**
  * @version 2017年8月3日09:08:12 hulh 添加注释
@@ -27,6 +27,13 @@ public interface StoreFocusService {
 	 */
 	List<StoreFocus> getByUseruuAndEnuu();
 
+	/**
+	 * 查询指定uu号下的店铺关注统计信息
+	 *
+	 * @return ResultMap
+	 */
+	ResultMap getStoreFocusCountByUseruuAndEnuu();
+
 	/**
 	 * 单个/批量删除店铺关注记录
 	 * 

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

@@ -1,11 +1,13 @@
 package com.uas.platform.b2c.trade.presale.service.impl;
 
+import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.trade.presale.dao.CollectionDao;
 import com.uas.platform.b2c.trade.presale.dao.CollectionInfoDao;
 import com.uas.platform.b2c.trade.presale.model.Collection;
 import com.uas.platform.b2c.trade.presale.model.CollectionInfo;
 import com.uas.platform.b2c.trade.presale.service.CollectionService;
+import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.Type;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -170,4 +172,20 @@ public class CollectionServiceImpl implements CollectionService {
 		return collectionDao.findStoreByUseruuAndKind(useruu, kind);
 	}
 
+	/**
+	 * 2016年3月24日 上午11:22:22 获取个人收藏器件个数
+	 * @param kind 收藏的类型  1 代表品牌  2 代表器件
+	 * @return ResultMap 返回收藏数量
+	 */
+	@Override
+	public ResultMap getStoreCountByuseruuAndComponent(int kind) {
+		Integer count = 0;
+		User user = SystemSession.getUser();
+		if (user.getEnterprise() != null) {
+			count = collectionDao.findStoreCountByUseruuAndEnuuAndKind(user.getUserUU(), user.getEnterprise().getUu(), kind);
+		} else {
+			count = collectionDao.findStoreCountByUseruuAndDissociativeAndKind(user.getUserUU(), Type.PERSONAL.value(), kind);
+		}
+		return ResultMap.success(count);
+	}
 }

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

@@ -1,9 +1,11 @@
 package com.uas.platform.b2c.trade.presale.service.impl;
 
+import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.trade.presale.dao.StoreFocusDao;
 import com.uas.platform.b2c.trade.presale.model.StoreFocus;
 import com.uas.platform.b2c.trade.presale.service.StoreFocusService;
+import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.Type;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -47,9 +49,31 @@ public class StoreFocusServiceImpl implements StoreFocusService {
 
 	@Override
 	public List<StoreFocus> getByUseruuAndEnuu() {
-		List<StoreFocus> list = storeFocusDao.findStoreFocusByUseruuAndEnuu(SystemSession.getUser().getUserUU(),
-				SystemSession.getUser().getEnterprise().getUu());
-		return list;
+		List<StoreFocus> storeFocuses = null;
+		User user = SystemSession.getUser();
+		if (user.getEnterprise().getUu() != null) {
+			storeFocuses = storeFocusDao.findStoreFocusByUseruuAndEnuuAndDissociative(user.getUserUU(), user.getEnterprise().getUu(), Type.ENTERPRISING.value());
+		} else {
+			storeFocuses = storeFocusDao.findStoreFocusByUseruuAndDissociative(user.getUserUU(), Type.PERSONAL.value());
+		}
+		return storeFocuses;
+	}
+
+	/**
+	 * 查询指定uu号下的店铺关注统计信息
+	 *
+	 * @return ResultMap
+	 */
+	@Override
+	public ResultMap getStoreFocusCountByUseruuAndEnuu() {
+		Integer count = null;
+		User user = SystemSession.getUser();
+		if (user.getEnterprise() != null) {
+			count = storeFocusDao.findStoreFocusCountByUseruuAndEnuuAndDissociative(user.getUserUU(), user.getEnterprise().getUu(), Type.ENTERPRISING.value());
+		} else {
+			count = storeFocusDao.findStoreFocusCountByUseruuAndDissociative(user.getUserUU(), Type.PERSONAL.value());
+		}
+		return ResultMap.success(count);
 	}
 
 	@Override

+ 4 - 3
src/main/java/com/uas/platform/b2c/trade/vendor/controller/VendorIntroductionController.java

@@ -34,16 +34,17 @@ public class VendorIntroductionController {
 
 
     /**
-     * 根据关键词(非必填)获取供应商资源列表
+     * 根据关键词(非必填)精确匹配来获取供应商资源列表
      *
      * @param size  the params 一页的大小
 	 * @param page 第几页
      * @param keyword the keyword  搜索关键字
+	 * @param field 字段   kind  类目 cmpCode 型号  brand 品牌
      * @return the Page<VendorIntroduction> 返回一页的数据
      */
     @RequestMapping(value = "/vendor/list", method = RequestMethod.GET)
-	public Page<VendorIntroduction> getVendorIntroductionList(int page, int size, String keyword) {
-		return vendorIntroductionService.getVendorIntroduction(page, size, keyword);
+	public Page<VendorIntroduction> getVendorIntroductionList(int page, int size, String keyword, String field) {
+		return vendorIntroductionService.getVendorIntroduction(page, size, keyword, field);
 	}
 
 	/**

+ 8 - 6
src/main/java/com/uas/platform/b2c/trade/vendor/service/VendorIntroductionService.java

@@ -12,13 +12,15 @@ public interface VendorIntroductionService {
 
 
     /**
-     * 获取供应商资源列表
-     * @param page 页码
-     * @param size 每页大小
-     * @param keyword  关键词
-     * @return 供应商资源page
+     * 根据关键词(非必填)精确匹配来获取供应商资源列表
+     *
+     * @param size  the params 一页的大小
+     * @param page 第几页
+     * @param keyword the keyword  搜索关键字
+     * @param field 字段   kind  类目 cmpCode 型号  brand 品牌
+     * @return the Page<VendorIntroduction> 返回一页的数据
      */
-    Page<VendorIntroduction> getVendorIntroduction(int page, int size, String keyword);
+    Page<VendorIntroduction> getVendorIntroduction(int page, int size, String keyword, String field);
 
     /**
      * 根据vendUU获取企业物料列表

+ 108 - 58
src/main/java/com/uas/platform/b2c/trade/vendor/service/impl/VendorIntroductionServiceImpl.java

@@ -34,28 +34,72 @@ public class VendorIntroductionServiceImpl implements VendorIntroductionService
 	private SearchService searchService;
 
 	/**
-	 * 获取供应商资源列表
-	 * @param page    页码
-	 * @param size    每页大小
-	 * @param keyword 关键词
-	 * @return 供应商资源page
-     * @version 2018年5月15日 11:53:06 增加限制,要求营业执照号长度大于12才显示
+	 * 类目
+	 */
+	private static final String KIND_EQUAL = "kind";
+
+	/**
+	 * 型号
+	 */
+	private static final String PCMPCODE_EQUAL = "pCmpCode";
+
+	/**
+	 * 品牌
+	 */
+	private static final String PBRANDEN_EQUAL = "pBrandEn";
+
+	/**
+	 * 根据关键词(非必填)精确匹配来获取供应商资源列表
+	 *
+	 * @param size  the params 一页的大小
+	 * @param page 第几页
+	 * @param keyword the keyword  搜索关键字
+	 * @param field 字段   kind  类目 cmpCode 型号  brand 品牌
+	 * @return the Page<VendorIntroduction> 返回一页的数据
 	 */
 	@Override
-	public Page<VendorIntroduction> getVendorIntroduction(int page, int size, String keyword) {
+	public Page<VendorIntroduction> getVendorIntroduction(int page, int size, String keyword, String field) {
 		long start = System.currentTimeMillis();
+		String enterpriseCondition = " 1=1 ";
+		String productCondition = "";
+		// 拼接查询条件
 		if (!StringUtils.isEmpty(keyword)) {
             keyword = keyword.trim();
+            if (!StringUtils.isEmpty(field)) {
+            	switch (field) {
+					case KIND_EQUAL :
+						productCondition = "pr_kind = '" + keyword + "'";
+						break;
+					case PCMPCODE_EQUAL :
+						productCondition = "pr_pcmpcode = '" + keyword + "'";
+						break;
+					case PBRANDEN_EQUAL :
+						productCondition = "pr_pbranden = '" + keyword + "'";
+						break;
+                    default :
+                        enterpriseCondition = "(en_name like '%" + keyword + "%' or en_address like '%" + keyword + "%' or en_industry like '% "
+                                + keyword + "%')";
+                        break;
+				}
+			} else {
+                enterpriseCondition = "(en_name like '%" + keyword + "%' or en_address like '%" + keyword + "%' or en_industry like '% "
+                        + keyword + "%')";
+            }
         }
         Long enUU = 0L;
         if (null != SystemSession.getUser() && null != SystemSession.getUser().getEnterprise()) {
             enUU = SystemSession.getUser().getEnterprise().getUu();
         }
 		// 查询所有企业个数
-		Integer total = getTotalCount(enUU, keyword);
+		Integer total = getTotalCount(enUU, enterpriseCondition, productCondition);
 		// 查询企业
-		List<VendorIntroduction> vendorIntroductions = getEnterpriseWithCondition(enUU, keyword, page, size);
-//		System.out.println("查找完企业UU" + (System.currentTimeMillis() - start));
+		List<VendorIntroduction> vendorIntroductions;
+		if (!StringUtils.isEmpty(productCondition)) {
+			vendorIntroductions = getEnterpriseWithProductCondition(enUU, enterpriseCondition, productCondition,  page, size);
+		} else {
+			vendorIntroductions = getEnterpriseWithoutProductCondition(enUU, enterpriseCondition,  page, size);
+		}
+		System.out.println("查找完企业UU" + (System.currentTimeMillis() - start));
 		return new Page<VendorIntroduction>(page, size, vendorIntroductions, total);
 	}
 
@@ -103,91 +147,97 @@ public class VendorIntroductionServiceImpl implements VendorIntroductionService
 	/**
 	 * 获取供应商资源信息
 	 * @param enUU 本企业UU
-	 * @param keyword 关键词
+	 * @param enterpriseCondition 企业搜索条件
+	 * @param productCondition 物料搜索条件
 	 * @param page 页码
 	 * @param size 尺寸
 	 * @return
 	 */
-	private List<VendorIntroduction> getEnterpriseWithCondition(Long enUU, String keyword, int page, int size) {
+	private List<VendorIntroduction> getEnterpriseWithProductCondition(Long enUU, String enterpriseCondition, String productCondition, int page, int size) {
+		StringBuilder enterpriseSql = new StringBuilder();
+		// 查询所有符合条件的enUU的语句,按待售物料数量排序
+		String enUUSql = getEnUUGroupByEnUUOrderByCount(enUU, enterpriseCondition, productCondition);
+		// 获取企业sql
+		enterpriseSql.append("select en.en_uu enUU, en.en_name enName, en.en_shortname enShortname, en.en_address enAddress, en.en_tel enTel, " +
+				" en.en_email enEmail, en.en_corporation enCorporation, en.en_businesscode enBusinesscode, en.en_industry enIndustry, en.en_Businessscope enBusinessScope " +
+				",st.st_uuid,st.st_status from sec$enterprises en left join store$info st on st.st_enuu = en.en_uu right join (").append(enUUSql)
+				.append(" ) a on en.en_uu = a.en_uu order by en.en_weight desc, counts desc");
+		// 查找非供应商的卖当前商品的企业UU
+		StringBuilder vendorIntroductionUusSql = new StringBuilder();
+		// 行数 控制
+		String rownumSql = ") s order by isStore desc,prodCounts desc,enUU asc limit " + (page - 1) * size + "," + size ;
+		vendorIntroductionUusSql.append("select s.*, if( st_uuid is not null and st_status = 'OPENED', 1, null) isStore");
+		vendorIntroductionUusSql.append(",(select count(1) from ( select pr_enuu from v$product$private where ").append(productCondition)
+				.append(" and ifnull(pr_b2cenabled, 1) = 1 and pr_pbranden is not null and pr_pcmpcode is not null) p1 where pr_enuu = enUU) prodCounts");
+		vendorIntroductionUusSql.append(" from (").append(enterpriseSql).append(rownumSql);
+		System.out.println("ens:" + vendorIntroductionUusSql);
+		return commonDao.query(vendorIntroductionUusSql.toString(), VendorIntroduction.class);
+	}
+
+	/**
+	 * 获取供应商资源信息
+	 * @param enUU 本企业UU
+	 * @param enterpriseCondition 企业搜索条件
+	 * @param page 页码
+	 * @param size 尺寸
+	 * @return
+	 */
+	private List<VendorIntroduction> getEnterpriseWithoutProductCondition(Long enUU, String enterpriseCondition, int page, int size) {
 		StringBuilder enterpriseSql = new StringBuilder();
-//		// 查询所有符合条件的enUU的语句,按待售物料数量排序
-//		String enUUSql = getEnUUGroupByEnUUOrderByCount(enUU, keyword);
 		// 获取企业sql
 		enterpriseSql.append("select en.en_uu enUU, en.en_name enName, en.en_shortname enShortname, en.en_address enAddress, en.en_tel enTel, " +
 				"en.en_email enEmail, en.en_corporation enCorporation, en.en_businesscode enBusinesscode, en.en_industry enIndustry, en.en_Businessscope enBusinessScope " +
 				",st.st_enuu,st.st_status from sec$enterprises en left join store$info st on st.st_enuu = en.en_uu where en_name not like '%测试%' and en_name not like '%test%' " +
 				"and (length(en_businesscode) > 12 or en_name like '%香港%' or en_name like '%HONG KONG%' or en_area like '%香港%') and " +
 				" (en_name not REGEXP '^[0-9]*$' and (en_name like '%ltd%' or en_name like '%limited%' or en_name like '%tcl%' or en_name not regexp '[\\u4e00-\\u9fa5_a-zA-Z0-9]')) and en_uu <> ")
-			.append(enUU);
-		if (!StringUtils.isEmpty(keyword)) {
-			enterpriseSql.append(" and (en_name like '%").append(keyword).append("%' or en_address like '%").append(keyword).append("%' or en_industry like '%").append(keyword)
-			.append("%')");
-		}
+				.append(enUU).append(" and ").append(enterpriseCondition);
 		// rownum 控制
 		String rownumSql = ") s order by isStore desc,enUU asc limit " + (page - 1) * size + "," + size ;
-//		// 查询企业简要物料信息语句
-//		String prodInfoSql = "select wm_concat(pr_title || (case when pr_brand is not null then '(' || pr_brand || ')' else ' ' end)) from v$product$private where pr_enuu=en_uu and "
-//				+ " and pr_issale = 1 and pr_b2cenabled = 1 and rownum<5 ";
 		// 查询企业是否开店语句
-		// 查找非供应商的卖当前商品的企业UU
-		// (select 1 from v$product$private where ifnull(pr_b2cenabled, 1) = 1 and pr_issale = 1 and pr_pbranden is not null and pr_pcmpcode is not null and pr_enuu = enUU limit 0,1) hasProduct
 		String vendorIntroductionUusSql = "select s.*, if( st_enuu is not null and st_status = 'OPENED', 1, 0) isStore from ("
 				+ enterpriseSql + rownumSql;
-//		String vendorIntroductionUusSql = "select s.*,( " + prodInfoSql + ") productInfo, (" + storeSql +
-//				") isStore from (select t.*,rownum as r1 from (" + enterpriseSql + rownumSql;
-//        System.out.println("ens:" + vendorIntroductionUusSql);
 		return commonDao.query(vendorIntroductionUusSql, VendorIntroduction.class);
 	}
 
 	/**
 	 * 获取所有符合条件企业数量
 	 * @param enUU  本企业UU
-	 * @param keyword 关键词
+	 * @param enterpriseCondition 企业过滤条件
+	 * @param productCondition 物料过滤条件
 	 * @return
 	 */
-	private Integer getTotalCount(Long enUU, String keyword) {
+	private Integer getTotalCount(Long enUU, String enterpriseCondition, String productCondition) {
 		StringBuilder enCountSql = new StringBuilder();
-		// 含名称、地址、、行业、经营范围搜索 物料型号、名称
-		if (!StringUtils.isEmpty(keyword)) {
-			String keywordSql = getKeywordSql(enUU, keyword);
-			enCountSql.append("select count(1) from (").append(keywordSql);
-		} else {
-			enCountSql.append("select count(1) from (select en_uu,count(1) from sec$enterprises where en_name not like '%测试%' " +
-					" and en_name not like '%test%' and (length(en_businesscode) > 12 or en_name like '%香港%' or en_name like '%HONG KONG%' or en_area like '%香港%')" +
-					" and (en_name not REGEXP '^[0-9]*$' and (en_name like '%ltd%' or en_name like '%limited%' or en_name like '%tcl%' or en_name not regexp '[\\u4e00-\\u9fa5_a-zA-Z0-9]')) and en_uu <> ").append(enUU);
+		enCountSql.append("select count(1) from (select en_uu,count(1) from (select en_uu from sec$enterprises where en_name not like '%测试%' " +
+				" and en_name not like '%test%' and (length(en_businesscode) > 12 or en_name like '%香港%' or en_name like '%HONG KONG%' " +
+				" or en_area like '%香港%')and (en_name not REGEXP '^[0-9]*$' and (en_name like '%ltd%' or en_name like '%limited%' or " +
+				" en_name like '%tcl%' or en_name not regexp '[\\u4e00-\\u9fa5_a-zA-Z0-9]') and ").append(enterpriseCondition).append(") and en_uu <> ")
+				.append(enUU).append(") e ");
+		if (!StringUtils.isEmpty(productCondition)) {
+			enCountSql.append("right join ( select pr_enuu from v$product$private where ").append(productCondition).append(") p on pr_enuu = en_uu");
 		}
 		enCountSql.append(" group by en_uu )a");
-//        System.out.println("en_count:" + enCountSql.toString());
+        System.out.println("en_count:" + enCountSql.toString());
 		return commonDao.queryForObject(enCountSql.toString(), Integer.class);
 	}
 
-	/**
-	 * 拼接关键词Sql
-	 * @param enUU
-	 * @param keyword
-	 * @return
-	 */
-	private String getKeywordSql(Long enUU, String keyword) {
-		return "select en_uu,count(1) as counts from sec$enterprises where en_name not like '%测试%' " +
-				"and lower(en_name) not like '%test%' and (length(en_businesscode) > 12 or en_name like '%香港%' or en_name like '%HONG KONG%' or en_area like '%香港%') and (en_name like '%"
-				+ keyword + "%' or en_address like '%" + keyword + "%' or en_industry like '%" + keyword + "%') and en_uu <> " + enUU +
-                " and (en_name not regexp '^[0-9]*$' and (en_name like '%ltd%' or en_name like '%limited%' or en_name like '%tcl%' or en_name not regexp '[\\u4e00-\\u9fa5a-zA-Z0-9]'))";
-	}
-
 	/**
 	 * 拼接所有待售物料所属企业UU,按enUU分组,按物料数量倒序
 	 * @param enUU 当前企业UU
-	 * @param keyword 搜索关键词
+	 * @param enterpriseCondition 企业过滤条件
+	 * @param productCondition 物料匹配条件
 	 * @return
 	 */
-	private String getEnUUGroupByEnUUOrderByCount(Long enUU, String keyword) {
+	private String getEnUUGroupByEnUUOrderByCount(Long enUU, String enterpriseCondition, String productCondition) {
 		StringBuilder enUUSql = new StringBuilder();
 		// 含名称、企业执照号、地址、邮箱、电话、行业、经营范围搜索
-		if (!StringUtils.isEmpty(keyword)) {
-			enUUSql.append(getKeywordSql(enUU, keyword));
-		} else {
-			enUUSql.append("select en_uu, count(1) as counts from (select * from sec$enterprises where en_name not like '%测试%' " +
-					" and lower(en_name) not like '%test%') en where en.en_uu <> ").append(enUU);
+		enUUSql.append("select en_uu, count(1) as counts from (select en_uu from sec$enterprises where en_name not like '%测试%' " +
+				" and en_name not like '%test%' and (length(en_businesscode) > 12 or en_name like '%香港%' or en_name like '%HONG KONG%' " +
+				" or en_area like '%香港%')and (en_name not REGEXP '^[0-9]*$' and (en_name like '%ltd%' or en_name like '%limited%' or " +
+				" en_name like '%tcl%' or en_name not regexp '[\\u4e00-\\u9fa5_a-zA-Z0-9]')) and ").append(enterpriseCondition).append(" and en_uu <> ").append(enUU)
+				.append(") e");
+		if (!StringUtils.isEmpty(productCondition)) {
+			enUUSql.append(" right join ( select pr_enuu from v$product$private where ").append(productCondition).append(") p on pr_enuu = en_uu where en_uu is not null ");
 		}
 		enUUSql.append(" group by en_uu order by count(1) desc ");
 		return enUUSql.toString();

+ 1 - 0
src/main/webapp/WEB-INF/spring/webmvc.xml

@@ -121,6 +121,7 @@
 			<mvc:exclude-mapping path="/basic/enterprise/**/info"/>
 			<mvc:exclude-mapping path="/vendor/introduction/vendor/**" />
 			<mvc:exclude-mapping path="/vendor/introduction/product/**" />
+			<mvc:exclude-mapping path="/wx/**"/>
 			<bean class="com.uas.platform.b2c.core.filter.SSOInterceptor"></bean>
 		</mvc:interceptor>
 		<!-- 对所有的请求拦截,将Session中的User信息设置进SystemSession -->

+ 31 - 31
src/main/webapp/resources/js/common/controllers/commonCtrls.js

@@ -1774,21 +1774,21 @@ define([ 'app/app' ], function(app) {
 	app.controller('leftNavCtrl', ["$scope", "toaster", '$modal', '$rootScope', function($scope, toaster, $modal, $rootScope){
 		//安全设置提醒框
 
-		$scope.openHomeCenterModel = function() {
-			var modalInstance = $modal.open({
-				animation: true,
-				templateUrl: $rootScope.rootPath + '/static/view/usercenter/modal/homeCenter_modal.html',
-				controller:'homeModalCtrl'
-			});
-			modalInstance.result.then(function(){
-			}, function(){
-			});
-		};
-		$scope.promptUpdate = function() {
-			if (!$scope.userInfo.pwdEnable || !$scope.userInfo.userEmail || !$scope.userInfo.haveUserQuestion) {
-				$scope.openHomeCenterModel();
-			}
-		};
+		// $scope.openHomeCenterModel = function() {
+		// 	var modalInstance = $modal.open({
+		// 		animation: true,
+		// 		templateUrl: $rootScope.rootPath + '/static/view/usercenter/modal/homeCenter_modal.html',
+		// 		controller:'homeModalCtrl'
+		// 	});
+		// 	modalInstance.result.then(function(){
+		// 	}, function(){
+		// 	});
+		// };
+		// $scope.promptUpdate = function() {
+		// 	if (!$scope.userInfo.pwdEnable || !$scope.userInfo.userEmail || !$scope.userInfo.haveUserQuestion) {
+		// 		$scope.openHomeCenterModel();
+		// 	}
+		// };
   }]);
 
 	app.controller('homeModalCtrl', ['$rootScope', '$scope',  '$modalInstance', 'toaster', '$http', 'ShippingAddress','$state', function($rootScope, $scope, $modalInstance, toaster, $http, ShippingAddress,$state) {
@@ -1827,25 +1827,25 @@ define([ 'app/app' ], function(app) {
    */
 	app.controller('leftNavCtrl', ["$scope", "toaster", "$modal", "$rootScope", function($scope, toaster, $modal, $rootScope){
         //安全设置提醒框
-        $scope.openHomeCenterModel = function() {
-            var modalInstance = $modal.open({
-                animation: true,
-                templateUrl: $rootScope.rootPath + '/static/view/usercenter/modal/homeCenter_modal.html',
-                controller:'homeModalCtrl'
-            });
-            modalInstance.result.then(function(){
-            }, function(){
-            });
-        };
-
-	    $scope.promptUpdate = function() {
-            if (!$scope.userInfo.pwdEnable || !$scope.userInfo.haveUserQuestion||!$scope.userInfo.emailValidCode || $scope.userInfo.emailValidCode != 2) {
-                $scope.openHomeCenterModel();
-            }
+        // $scope.openHomeCenterModel = function() {
+        //     var modalInstance = $modal.open({
+        //         animation: true,
+        //         templateUrl: $rootScope.rootPath + '/static/view/usercenter/modal/homeCenter_modal.html',
+        //         controller:'homeModalCtrl'
+        //     });
+        //     modalInstance.result.then(function(){
+        //     }, function(){
+        //     });
+        // };
+
+	    // $scope.promptUpdate = function() {
+         //    if (!$scope.userInfo.pwdEnable || !$scope.userInfo.haveUserQuestion||!$scope.userInfo.emailValidCode || $scope.userInfo.emailValidCode != 2) {
+         //        $scope.openHomeCenterModel();
+         //    }
 			/*if (!$scope.userInfo.pwdEnable || !$scope.userInfo.userEmail || !$scope.userInfo.haveUserQuestion) {
 				$scope.openHomeCenterModel();
 			}*/
-		};
+		// };
 	}]);
 
     function checkNullStr (str) {

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

@@ -17,21 +17,21 @@ define(['app/app', 'calendar'], function(app) {
         getRecommendComps(null, null, {page: 0, size: 12});
 
         //安全设置提醒框
-      $scope.openHomeCenterModel = function() {
-        var modalInstance = $modal.open({
-          animation: true,
-          templateUrl: $rootScope.rootPath + '/static/view/usercenter/modal/homeCenter_modal.html',
-          controller:'homeModalCtrl'
-        });
-        modalInstance.result.then(function(){
-        }, function(){
-        });
-      }
+      // $scope.openHomeCenterModel = function() {
+      //   var modalInstance = $modal.open({
+      //     animation: true,
+      //     templateUrl: $rootScope.rootPath + '/static/view/usercenter/modal/homeCenter_modal.html',
+      //     controller:'homeModalCtrl'
+      //   });
+      //   modalInstance.result.then(function(){
+      //   }, function(){
+      //   });
+      // }
 
         //安全级别
-        if (!$scope.userInfo.pwdEnable || !$scope.userInfo.haveUserQuestion||!$scope.userInfo.emailValidCode || $scope.userInfo.emailValidCode != 2) {
-            $scope.openHomeCenterModel();
-        }
+        // if (!$scope.userInfo.pwdEnable || !$scope.userInfo.haveUserQuestion||!$scope.userInfo.emailValidCode || $scope.userInfo.emailValidCode != 2) {
+        //     $scope.openHomeCenterModel();
+        // }
 
       /*  if(!($scope.userInfo.pwdEnable && $scope.userInfo.haveUserQuestion && $scope.userInfo.userEmail)){
           $scope.openHomeCenterModel();

+ 120 - 89
src/main/webapp/resources/js/usercenter/controllers/forstore/order_pay_ctrl.js

@@ -4,7 +4,7 @@
  */
 define(['app/app'], function(app) {
 	app.register.controller('orderPayCtrl', ['$scope', '$rootScope', '$stateParams', '$modal', '$state', 'Bill', 'toaster', 'Order', '$filter', 'ShippingAddress', 'Ysepay', '$q', 'NumberService', 'Cart', '$timeout', 'DistributionRule', 'TakeSelf', 'StoreInfo', function($scope, $rootScope, $stateParams, $modal, $state, Bill, toaster, Order, $filter, ShippingAddress, Ysepay, $q, NumberService, Cart, $timeout, DistributionRule, TakeSelf, StoreInfo) {
-
+        $scope.userInfo = $rootScope.userInfo;
 		document.title = '结算页-优软商城';
 		$rootScope.active = 'buyer_cart';
 
@@ -571,97 +571,128 @@ define(['app/app'], function(app) {
 			window.open("user#/invoice", '_self');
 		};
 
+        // 安全设置提醒框
+        $scope.openHomeCenterModel = function() {
+          var modalInstance = $modal.open({
+            animation: true,
+            templateUrl: $rootScope.rootPath + '/static/view/usercenter/modal/homeCenter_modal.html',
+            controller:'homeModalCtrl'
+          });
+          modalInstance.result.then(function(){
+          }, function(){
+          });
+        };
+        // 安全级别模态框
+        app.register.controller('homeModalCtrl', ['$rootScope', '$scope',  '$modalInstance', 'toaster', '$http', 'ShippingAddress','$state', function($rootScope, $scope, $modalInstance, toaster, $http, ShippingAddress,$state){
+            $rootScope.$on('$stateChangeStart',
+                function(event, toState, toParams, fromState, fromParams){
+                    $modalInstance.dismiss();
+                })
+            $scope.goLink = function(op){
+                $state.go('account_manager',{op:op});
+                $modalInstance.dismiss('cancel');
+            }
+            $scope.cancel = function () {
+                $modalInstance.dismiss('cancel');
+            }
+        }]);
+
 		//确认付款
 		$scope.imperfect = false;//暂不完善
 		$scope.confirmPay = function() {
-			if($scope.order.status == 502 || $scope.order.status == 503) {
-				var arr = [];
-				if($scope.order.orderids) {
-					arr = $scope.order.orderids.split(",");
-				}else {
-					arr.push($scope.order.orderid);
-				}
-				if ($scope.order.currency == 'RMB' && $scope.order.paytype == '1102') {
-					paymentEnsure(arr);
-				} else if($scope.order.paytype == '1103') {
-					$state.go('order_transfer', {orderid : enIdFilter(arr.join("-"))});
-				}else {
-					toaster.pop('info', '美元请线下付款');
-				}
-				return ;
-			}
-			var validRule = checkRule();
-			if (!validRule){
-				toaster.pop("info", "当前地址部分卖家无法配送,请重新选择地址或与卖家协商处理");
-				return ;
-			}
-			var validTakeSelf = checkTakeSelf();
-			if (!validTakeSelf){
-				toaster.pop("info", "请选择一个自提点");
-				return ;
-			}
-			var orderInfos = [], orderInfo;
-			orderInfo = generateOrderInfo();
-			if(orderInfo == null) {
-				return ;
-			}
-			orderInfos.push(orderInfo);
-			if(!$scope.imperfect){
-				var validBill = checkBill();
-				if (!validBill){
-					// toaster.pop('info', '请完善专票信息');
-					$scope.showBillFrame = true;
-					return ;
-				}
-			}
-
-			Order.ensure({orderid: enIdFilter($scope.order.orderid)}, orderInfos, function(data){
-				if(data.code == 1) {
-					if (data.data && data.data[0]) {
-						var arr = [];
-						var batchCodes = [];
-						for(var i = 0; i < data.data.length; i++) {
-							arr.push(data.data[i].orderid);
-							for(var j = 0; j < data.data[i].orderDetails.length; j++) {
-								batchCodes.push(data.data[i].orderDetails[j].batchCode);
-							}
-						}
-						if(!$scope.order.buyNow) {
-							Cart.deleteByBatchCode({}, batchCodes, function(data) {
-							}, function(response) {
-							});
-						}
-						if ($scope.order.currency == 'RMB' && $scope.order.paytype == '1102') {
-							paymentEnsure(arr);
-						} else if($scope.order.paytype == '1103') {
-							console.log(arr.length)
-							if(arr.length != 1){
-								$state.go('downPayment', {orderid : enIdFilter(arr.join('-'))});
-							}else {
-								$state.go('order_transfer', {orderid : enIdFilter(arr.join('-'))});
-							}
-						}else {
-							toaster.pop('info', '美元请线下付款');
-							$state.go('buyer_order');
-						}
-
-					}
-				}else {
-					if(data.code == 6) { //产品信息有更新
-						toaster.pop('warning', data.message + ",请刷新界面之后重新操作");
-					}else if(data.code == 7){
-						toaster.pop('warning', data.message + ",将为您跳转到购物车界面");
-						$timeout(function () {
-							$state.go('buyer_cart');
-						}, 1000);
-					}else {
-						toaster.pop('warning', data.message);
-					}
-				}
-
-			}, function(response) {
-				toaster.pop('error', '确认订单失败,' + response.data);
-			});
+            // 安全级别
+            if (!$scope.userInfo.pwdEnable || !$scope.userInfo.haveUserQuestion||!$scope.userInfo.emailValidCode || $scope.userInfo.emailValidCode != 2) {
+                $scope.openHomeCenterModel();
+            } else {
+                if($scope.order.status == 502 || $scope.order.status == 503) {
+                    var arr = [];
+                    if($scope.order.orderids) {
+                        arr = $scope.order.orderids.split(",");
+                    }else {
+                        arr.push($scope.order.orderid);
+                    }
+                    if ($scope.order.currency == 'RMB' && $scope.order.paytype == '1102') {
+                        paymentEnsure(arr);
+                    } else if($scope.order.paytype == '1103') {
+                        $state.go('order_transfer', {orderid : enIdFilter(arr.join("-"))});
+                    }else {
+                        toaster.pop('info', '美元请线下付款');
+                    }
+                    return ;
+                }
+                var validRule = checkRule();
+                if (!validRule){
+                    toaster.pop("info", "当前地址部分卖家无法配送,请重新选择地址或与卖家协商处理");
+                    return ;
+                }
+                var validTakeSelf = checkTakeSelf();
+                if (!validTakeSelf){
+                    toaster.pop("info", "请选择一个自提点");
+                    return ;
+                }
+                var orderInfos = [], orderInfo;
+                orderInfo = generateOrderInfo();
+                if(orderInfo == null) {
+                    return ;
+                }
+                orderInfos.push(orderInfo);
+                if(!$scope.imperfect){
+                    var validBill = checkBill();
+                    if (!validBill){
+                        // toaster.pop('info', '请完善专票信息');
+                        $scope.showBillFrame = true;
+                        return ;
+                    }
+                }
+
+                Order.ensure({orderid: enIdFilter($scope.order.orderid)}, orderInfos, function(data){
+                    if(data.code == 1) {
+                        if (data.data && data.data[0]) {
+                            var arr = [];
+                            var batchCodes = [];
+                            for(var i = 0; i < data.data.length; i++) {
+                                arr.push(data.data[i].orderid);
+                                for(var j = 0; j < data.data[i].orderDetails.length; j++) {
+                                    batchCodes.push(data.data[i].orderDetails[j].batchCode);
+                                }
+                            }
+                            if(!$scope.order.buyNow) {
+                                Cart.deleteByBatchCode({}, batchCodes, function(data) {
+                                }, function(response) {
+                                });
+                            }
+                            if ($scope.order.currency == 'RMB' && $scope.order.paytype == '1102') {
+                                paymentEnsure(arr);
+                            } else if($scope.order.paytype == '1103') {
+                                console.log(arr.length)
+                                if(arr.length != 1){
+                                    $state.go('downPayment', {orderid : enIdFilter(arr.join('-'))});
+                                }else {
+                                    $state.go('order_transfer', {orderid : enIdFilter(arr.join('-'))});
+                                }
+                            }else {
+                                toaster.pop('info', '美元请线下付款');
+                                $state.go('buyer_order');
+                            }
+
+                        }
+                    }else {
+                        if(data.code == 6) { //产品信息有更新
+                            toaster.pop('warning', data.message + ",请刷新界面之后重新操作");
+                        }else if(data.code == 7){
+                            toaster.pop('warning', data.message + ",将为您跳转到购物车界面");
+                            $timeout(function () {
+                                $state.go('buyer_cart');
+                            }, 1000);
+                        }else {
+                            toaster.pop('warning', data.message);
+                        }
+                    }
+
+                }, function(response) {
+                    toaster.pop('error', '确认订单失败,' + response.data);
+                });
+            }
 		};
 
 		// 跳银盛支付页面

+ 6 - 4
src/main/webapp/resources/js/vendor/app.js

@@ -688,7 +688,7 @@ define([ 'angularAMD', 'ngLocal', 'common/services', 'common/directives', 'commo
 				$rootScope.applyStatus = 'NONE';
 			}
 
-			if ($rootScope.applyStatus === 'NONE' && $location.$$path === '/index') {
+			if ($location.$$path === '/index') {
                 AuthenticationService.getAuthentication().success(function (data) {
                     angular.forEach(data.enterprises, function (item) {
                         if (item.current) {
@@ -696,9 +696,11 @@ define([ 'angularAMD', 'ngLocal', 'common/services', 'common/directives', 'commo
                         }
                     });
                     $rootScope.userInfo = data;
-                    if (!(!data.pwdEnable || !data.haveUserQuestion||!data.emailValidCode || data.emailValidCode != 2)) {
-                        $state.go('vendor_store_apply');
-                    }
+					if ($rootScope.applyStatus === 'NONE') {
+						$state.go('vendor_store_apply');
+					} else if ($rootScope.applyStatus === 'PASS') {
+						$state.go('vendor_store_maintain');
+					}
                 }).error(function (error) {
                     toaster.pop('error', '获取登录信息失败');
                 })

+ 36 - 38
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_index_ctrl.js

@@ -8,7 +8,6 @@ define(['app/app', 'calendar'], function(app) {
         $rootScope.active = 'index';
         $scope.count = 0;
         $scope.userInfo = $rootScope.userInfo;
-        console.log($scope.userInfo);
 
         // 申请
         $scope.auditApply = function (status, id, UU) {
@@ -167,47 +166,46 @@ define(['app/app', 'calendar'], function(app) {
         };
 
         //安全设置提醒框
-        $scope.openHomeCenterModel = function() {
-            var modalInstance = $modal.open({
-              animation: true,
-              templateUrl: $rootScope.rootPath + '/static/view/usercenter/modal/homeCenter_modal.html',
-              controller:'homeModalCtrl'
-            });
-            modalInstance.result.then(function(){
-            }, function(){
-            });
-        }
+        // $scope.openHomeCenterModel = function() {
+        //     var modalInstance = $modal.open({
+        //       animation: true,
+        //       templateUrl: $rootScope.rootPath + '/static/view/usercenter/modal/homeCenter_modal.html',
+        //       controller:'homeModalCtrl'
+        //     });
+        //     modalInstance.result.then(function(){
+        //     }, function(){
+        //     });
+        // }
 
         //安全级别
-        if(!($scope.userInfo.pwdEnable && $scope.userInfo.haveUserQuestion && ($scope.userInfo.userEmail==null?false:true))){
-            $scope.openHomeCenterModel();
-        } else {
-            $q.all([initRuleCount().$promise]).then(function (data) {
-                if (data){
-                    if ($scope.needShowTip){
-                        $modal.open({
-                            animation: true,
-                            templateUrl: 'static/view/common/modal/delivery_rule_modal.html',
-                            controller: 'rule_tip_ctrl',
-                            resolve : {
-                                type : function() {
-                                    return 'center';
-                                },
-                                tipModal : function() {
-                                    return true;
-                                },
-                                success : function () {
-                                    return false;
-                                },
-                                uuid: function () {
-                                    return null;
-                                }
+        $q.all([initRuleCount().$promise]).then(function (data) {
+            if (data){
+                if ($scope.needShowTip){
+                    $modal.open({
+                        animation: true,
+                        templateUrl: 'static/view/common/modal/delivery_rule_modal.html',
+                        controller: 'rule_tip_ctrl',
+                        resolve : {
+                            type : function() {
+                                return 'center';
+                            },
+                            tipModal : function() {
+                                return true;
+                            },
+                            success : function () {
+                                return false;
+                            },
+                            uuid: function () {
+                                return null;
                             }
-                        });
-                    }
+                        }
+                    });
                 }
-            });
-        }
+            }
+        });
+        // if(!($scope.userInfo.pwdEnable && $scope.userInfo.haveUserQuestion && ($scope.userInfo.userEmail==null?false:true))){
+        //     // $scope.openHomeCenterModel();
+        // } else {}
 
     }]);
 

+ 3 - 0
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_onSaleCtrl.js

@@ -1807,6 +1807,9 @@ define([ 'app/app' ], function(app) {
                 $scope.modifyData = data;
                 $scope.batchModify = false;
                 $scope.modifyResult = true;
+                if ($scope.modifyData.success > 0) {
+                    loadData();
+                }
             }).error(function(response) {
                 $scope.selectFile(' ');
                 $scope.myFile = [];

+ 48 - 18
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_order_ctrl.js

@@ -571,28 +571,44 @@ define(['app/app'], function (app) {
         };
         getCounts();
 
+        //安全设置提醒框
+        $scope.openHomeCenterModel = function() {
+            var modalInstance = $modal.open({
+              animation: true,
+              templateUrl: $rootScope.rootPath + '/static/view/usercenter/modal/homeCenter_modal.html',
+              controller:'homeModalCtrl'
+            });
+            modalInstance.result.then(function(){
+            }, function(){
+            });
+        }
+
         // 填写物流信息
         $scope.toBeShiped = function (purchase) {
-            bankInfoService.getVenderBankDefault(null, function (data) {
-                if (data && data.length > 0) {
-                    // 如果处于406,则直接跳转到物流页面
-                    if (purchase.inid) {
-                        // 填写物流信息
-                        $state.go("vendor_delivery", {ids: enIdFilter(purchase.inid)});
-                    } else {
-                        Purchase.tobeshiped({id: purchase.id}, function (data) {
-                            toaster.pop('success', '转出货单成功');
+            if(!($scope.userInfo.pwdEnable && $scope.userInfo.haveUserQuestion && $scope.userInfo.emailValidCode == 2)){
+                $scope.openHomeCenterModel();
+            } else {
+                bankInfoService.getVenderBankDefault(null, function (data) {
+                    if (data && data.length > 0) {
+                        // 如果处于406,则直接跳转到物流页面
+                        if (purchase.inid) {
                             // 填写物流信息
-                            $state.go("vendor_delivery", {ids: enIdFilter(data.inId)});
-                        }, function (response) {
-                            toaster.pop('error', '失败', '转出货单失败' + response.data);
-                        });
+                            $state.go("vendor_delivery", {ids: enIdFilter(purchase.inid)});
+                        } else {
+                            Purchase.tobeshiped({id: purchase.id}, function (data) {
+                                toaster.pop('success', '转出货单成功');
+                                // 填写物流信息
+                                $state.go("vendor_delivery", {ids: enIdFilter(data.inId)});
+                            }, function (response) {
+                                toaster.pop('error', '失败', '转出货单失败' + response.data);
+                            });
+                        }
+                    } else {
+                        purchase.showGotoSettle = true;
                     }
-                } else {
-                    purchase.showGotoSettle = true;
-                }
-            }, function (response) {
-            });
+                }, function (response) {
+                });
+            }
         };
 
         $scope.showDeletePurchase = function (purchase) {
@@ -1710,4 +1726,18 @@ define(['app/app'], function (app) {
         }
 
     }]);
+    app.register.controller('homeModalCtrl', ['$rootScope', '$scope',  '$modalInstance', 'toaster', '$http', 'ShippingAddress','$state', function($rootScope, $scope, $modalInstance, toaster, $http, ShippingAddress,$state){
+        $rootScope.$on('$stateChangeStart',
+            function(event, toState, toParams, fromState, fromParams){
+                $modalInstance.dismiss();
+            })
+        $scope.goLink = function(op) {
+            $state.go('vendor_account_management',{op:op});
+            $modalInstance.dismiss('cancel');
+        }
+
+        $scope.cancel = function () {
+            $modalInstance.dismiss('cancel');
+        }
+    }]);
 });

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

@@ -261,10 +261,10 @@ define(['app/app'], function (app) {
 				toaster.pop('error', '店铺信息不能为空');
 				return false;
 			}
-			if (!$scope.sampleStore.description || $scope.sampleStore.description == '') {
-				toaster.pop('error', '店铺简介信息不能为空');
-				return false;
-			}
+			// if (!$scope.sampleStore.description || $scope.sampleStore.description == '') {
+			// 	toaster.pop('error', '店铺简介信息不能为空');
+			// 	return false;
+			// }
 			if (!$scope.sampleStore.enterprise) {
 				toaster.pop('error', '企业信息不能为空');
 				return false;
@@ -274,7 +274,7 @@ define(['app/app'], function (app) {
 				return false;
 			}*/
 			if (!$scope.sampleStore.enterprise.address || $scope.sampleStore.enterprise.address == '') {
-				toaster.pop('error', '企业地址不能为空');
+				toaster.pop('error', '店铺地址不能为空');
 				return false;
 			}
 			if (!$scope.sampleStore.enterprise.enTel || $scope.sampleStore.enterprise.enTel == '') {

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

@@ -273,9 +273,9 @@ td {
 				<a name="detail" href="product/component/{{item.componentinfo.uuid}}/">
                     <img ng-src="{{item.componentinfo.img || 'static/img/user/images/default.png'}}" class="collect-img" />
                     <div class="collect-content">
-                        <p ng-bind="item.componentinfo.code"></p>
-                        <p ng-bind="item.componentinfo.brand.nameEn">
-                        <p ng-bind="item.componentinfo.kind.nameCn">           
+												<p ng-bind="item.componentinfo.brand.nameEn">
+												<p ng-bind="item.componentinfo.kind.nameCn">
+												<p ng-bind="item.componentinfo.code"></p>
                     </div> 
                 </a>
                 <span class="collect-delete" ng-click="cancleStore(item.id)" ng-show="show && !isBatch"><i class="fa fa-trash fa-2x"></i></span>      

+ 6 - 6
src/main/webapp/resources/view/usercenter/forstore/bomDetail.html

@@ -631,7 +631,7 @@
             <thead>
             <tr>
                 <th width="110">发布时间</th>
-                <th width="260">类目/品牌</th>
+                <th width="260">品牌/类目</th>
                 <th width="260">型号/规格</th>
                 <th width="110">采购数量(PCS)</th>
                 <th width="120">截止时间</th>
@@ -662,21 +662,21 @@
                 <td>
                     <div class="row-wrap il-content">
                         <div class="il-box-large il-box">
-                            <div title="{{seek.prodTitle | nullStrFilter}}" class="fl item size-middle"><span>类目(产品名称):</span><div class="content">{{(seek.prodTitle || '-') | nullStrFilter}}</div></div>
-                            <div title="{{seek.inbrand}}" class="fl item bottom size-middle"><span>品牌:</span><div class="content">{{seek.inbrand || '-'}}</div></div>
+                            <div title="{{seek.inbrand}}"  style="width: 100%"  class="fl item size-middle"><span>品牌:</span><div class="content" style="width:135px">{{seek.inbrand || '-'}}</div></div>
+                            <div title="{{seek.prodTitle | nullStrFilter}}" style="width: 100%"  class="fl bottom item size-middle"><span>类目(产品名称):</span><div class="content" style="width:135px">{{(seek.prodTitle || '-') | nullStrFilter}}</div></div>
                         </div>
                     </div>
                 </td>
                 <td>
                     <div class="row-wrap il-content">
                         <div class="il-box-large il-box">
-                            <div title="{{seek.cmpCode}}" class="fl item"><span>型号:</span><div class="content">{{seek.cmpCode || '-'}}</div></div>
-                            <div title="{{seek.spec}}" class="fl item bottom"><span>规格:</span><div class="content">{{seek.spec || '-'}}</div></div>
+                            <div title="{{seek.cmpCode}}" style="width: 100%"  class="fl item"><span>型号:</span><div class="content" style="width:135px">{{seek.cmpCode || '-'}}</div></div>
+                            <div title="{{seek.spec}}" style="width: 100%"  class="fl item bottom"><span>规格:</span><div class="content" style="width:135px">{{seek.spec || '-'}}</div></div>
                         </div>
                     </div>
                 </td>
                 <td>
-                    <div class="row-wrap il-content">
+                    <div class="row-wrap il-content" style="padding-top: 0px">
                         <div class="il-box-small il-box">
                             <!--<div title="{{seek.encapsulation}}" class="item"><span>封装:</span>{{seek.encapsulation || '-'}}</div>
                             <div title="{{seek.produceDate}}" class="item"><span>生产日期:</span>{{seek.produceDate || '-'}}</div>-->

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

@@ -665,12 +665,12 @@
 									<a href="store/productDetail/{{::cart.batchCode}}" target="_blank">
                                         <img ng-src="{{cart.img || 'static/img/store/common/default.png'}}" width="60" height="60"/></a>
 									<div class="car_pro_xq">
+											<i class="text-hidden" ng-if="!cart.uuid">品牌:<a ng-bind="::cart.goods.brandNameEn || '-'" title="{{::cart.goods.brandNameEn}}" class="unstand"></a></i>
+									   <i class="text-hidden" ng-if="cart.uuid">品牌:<a href="product/brand/{{::cart.goods.branduuid}}/" target="_blank" ng-bind="::cart.goods.brandNameEn" title="{{::cart.goods.brandNameEn}}"></a></i>
 									    <i class="text-hidden" ng-if="!cart.uuid">类目:<a ng-bind="::cart.kiName || '-'" title="{{::cart.kiName}}" class="unstand"></a></i>
 									    <i class="text-hidden" ng-if="cart.uuid">类目:<a href="product/kind/{{cart.goods.kindUuid}}" target="_blank" ng-bind="::cart.kiName" title="{{::cart.kiName}}"></a></i>
 									    <i class="text-hidden">型号:<a href="store/productDetail/{{::cart.batchCode}}" target="_blank" ng-bind="::cart.code || '-'" title="{{::cart.code}}"></a></i>
-									   <i class="text-hidden" ng-if="!cart.uuid">品牌:<a ng-bind="::cart.goods.brandNameEn || '-'" title="{{::cart.goods.brandNameEn}}" class="unstand"></a></i>
-									   <i class="text-hidden" ng-if="cart.uuid">品牌:<a href="product/brand/{{::cart.goods.branduuid}}/" target="_blank" ng-bind="::cart.goods.brandNameEn" title="{{::cart.goods.brandNameEn}}"></a></i>
-									</div>
+									   </div>
 								</div>
                         	</span>
 							<span class="wd02">

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

@@ -903,10 +903,10 @@
 							<div class="pro_xq">
 								<a href="store/productDetail/{{::detail.batchCode}}" target="_blank"><img ng-src="{{detail.img || 'static/img/store/common/default.png'}}" width="55" height="55"/></a>
 								<p>
+									品牌:<a href="product/brand/{{::detail.branduuid}}/" target="_blank" ng-if="detail.uuid"><em ng-bind="::detail.brName || '-'" title="{{::detail.brName}}"></em></a><br/>
 									类目:<a href="product/kind/{{::detail.kindUuid}}" target="_blank" ng-if="detail.uuid"><em ng-bind="::detail.kiName || '-'" title="{{::detail.kiName}}"></em></a><br ng-if="detail.uuid"/>
 									<a class="unstand" ng-if="!detail.uuid"><em ng-bind="detail.kiName || '-'" title="{{::detail.kiName}}"></em></a><br ng-if="!detail.uuid"/>
-									型号:<a href="store/productDetail/{{::detail.batchCode}}" target="_blank"><em ng-bind="::detail.cmpCode || '-'" title="{{::detail.cmpCode}}"></em></a><br/>
-									品牌:<a href="product/brand/{{::detail.branduuid}}/" target="_blank" ng-if="detail.uuid"><em ng-bind="::detail.brName || '-'" title="{{::detail.brName}}"></em></a>
+									型号:<a href="store/productDetail/{{::detail.batchCode}}" target="_blank"><em ng-bind="::detail.cmpCode || '-'" title="{{::detail.cmpCode}}"></em></a>
 									<a  class="unstand" ng-if="!detail.uuid"><em ng-bind="detail.brName || '-'" title="{{::detail.brName}}"></em></a>
 								</p>
 							</div>

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

@@ -428,7 +428,13 @@
                             <a href="store/productDetail/{{::detail.batchCode}}" target="_blank">
 								<img ng-src="{{detail.img ? detail.img : 'static/img/store/common/default.png'}}"/>
 							</a>
-                            <p class="style01" style="margin-top: 10px;" ng-if="detail.uuid">类目:
+													<p class="style01" ng-if="detail.uuid" style="margin-top: 10px;">品牌:
+								<a ng-bind="detail.brName" href="product/brand/{{::detail.branduuid}}/" title="{{detail.brName}}" target="_blank"></a>
+							</p>
+							<p class="style01" ng-if="!detail.uuid" style="margin-top: 10px;">品牌:
+								<a ng-bind="detail.brName || '-'" title="{{detail.brName}}" class="unstand"></a>
+							</p>
+                            <p class="style01" ng-if="detail.uuid">类目:
 								<a ng-bind="detail.kiName || '-'" href="product/kind/{{::detail.kindUuid}}" title="{{detail.kiName}}" target="_blank"></a>
 							</p>
 							 <p class="style01" style="margin-top: 10px;" ng-if="!detail.uuid">类目:
@@ -437,13 +443,7 @@
 							<p class="style01">型号:
 								<a ng-bind="detail.cmpCode || '-'" href="store/productDetail/{{::detail.batchCode}}" title="{{detail.cmpCode}}" target="_blank"></a>
 							</p>
-							<p class="style01" ng-if="detail.uuid">品牌:
-								<a ng-bind="detail.brName" href="product/brand/{{::detail.branduuid}}/" title="{{detail.brName}}" target="_blank"></a>
-							</p>
-							<p class="style01" ng-if="!detail.uuid">品牌:
-								<a ng-bind="detail.brName || '-'" title="{{detail.brName}}" class="unstand"></a>
-							</p>
-                        </span>
+												</span>
 							<span class="wd01">交期:
 							<i ng-if="detail.b2cMinDelivery != detail.b2cMaxDelivery" ng-bind="detail.b2cMinDelivery + '-' + detail.b2cMaxDelivery"></i>
 							<i ng-if="detail.b2cMinDelivery == detail.b2cMaxDelivery" ng-bind="detail.b2cMinDelivery"></i>

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

@@ -729,12 +729,12 @@
                         <span class="wd02">
                             <a  href="store/productDetail/{{::detail.batchCode}}" target="_blank" href="javascript:void(0)"> <img ng-src="{{detail.img || 'static/img/store/common/default.png'}}"/></a>
 							<div class="style-type">
+								<p  ng-if="detail.uuid"><a href="product/brand/{{detail.branduuid}}/" target="_blank" style="color: #323232">品牌:<b ng-bind="detail.brName || '-'" style="color: #323232" title="{{detail.brName}}"></b></a></p>
+								<p ng-if="!detail.uuid"><a style="color: #323232" class="unstand">品牌:<b ng-bind="detail.brName || '-'" style="color: #323232" title="{{detail.brName}}"></b></a></p>
 								<p title="{{detail.kiName}}" ng-if="detail.uuid"><a href="product/kind/{{detail.goodsHistory.kindUuid}}" target="_blank" style="color: #323232">类目:<b ng-bind="detail.kiName || '-'"></b></a></p>
 								<p title="{{detail.kiName}}" ng-if="!detail.uuid"><a style="color: #323232" class="unstand">类目:<b ng-bind="detail.kiName || '-'"></b></a></p>
 								<p><a href="store/productDetail/{{::detail.batchCode}}" target="_blank" style="color: #323232">型号:<b ng-bind="detail.cmpCode || '-'" title="{{detail.cmpCode}}"></b></a></p>
-								<p  ng-if="detail.uuid"><a href="product/brand/{{detail.branduuid}}/" target="_blank" style="color: #323232">品牌:<b ng-bind="detail.brName || '-'" style="color: #323232" title="{{detail.brName}}"></b></a></p>
-								<p ng-if="!detail.uuid"><a style="color: #323232" class="unstand">品牌:<b ng-bind="detail.brName || '-'" style="color: #323232" title="{{detail.brName}}"></b></a></p>
-							</div>
+								</div>
                         </span>
 						<span class="wd01" ng-if="order.status == 501">
 							交期 :

+ 33 - 31
src/main/webapp/resources/view/usercenter/forstore/seekPurchase.html

@@ -888,13 +888,6 @@
         <div class="publish-purchase">
             <div class="fl">
                 <p>单个发布</p>
-                <div class="form-block">
-                    <span><i>*</i>型号</span>
-                    <input type="text" class="form-group" ng-model="applyObj.code" ng-class="{'error': !validObj.code}" ng-blur="checkCode()" ng-change="onCodeChange()" >
-                    <ul class="similar-list" ng-show="showSimilarCodeList" ng-mouseenter="isInCodeList = true;" ng-mouseleave="isInCodeList = false;">
-                        <li ng-repeat="sCode in similarCode" ng-bind="sCode.code" title="{{sCode.code}}" ng-click="setCode(sCode.code)"></li>
-                    </ul>
-                </div>
                 <div class="form-block">
                     <span><i>*</i>品牌</span>
                     <input type="text" class="form-group" ng-class="{'error': !validObj.brand}" maxlength="20" ng-model="applyObj.brand" ng-blur="checkBrand()" ng-change="onBrandChange()">
@@ -903,24 +896,17 @@
                     </ul>
                 </div>
                 <div class="form-block">
-                    <span><i>*</i>截止日期</span>
-                    <input type="text" ng-model="applyObj.deadline"
-                           readonly
-                           class="form-control select-adder" placeholder="截止日期"
-                           ng-class="{'error': !validObj.deadline}"
-                           datepicker-popup="yyyy-MM-dd"
-                           is-open="condition.deadlineOpen"
-                           min-date="nowDate" max-date="deadDate"
-                           current-text="今天" clear-text="清除" close-text="关闭"
-                           ng-click="openDatePicker($event, condition, 'deadlineOpen',3)"
-                           datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
-                           ng-change="checkDeadline()"
-                    />
+                    <span>类目(产品名称)</span>
+                    <input type="text" class="form-group" ng-model="applyObj.prodTitle" ng-change="onProdTitleInput()">
                 </div>
                 <div class="form-block">
-                    <span>采购数量(PCS)</span>
-                    <input type="text" ng-change="onAmountChange()" class="form-group" ng-class="{'error': !validObj.amount}" ng-model="applyObj.amount" ng-blur="checkAmount()" >
+                    <span><i>*</i>型号</span>
+                    <input type="text" class="form-group" ng-model="applyObj.code" ng-class="{'error': !validObj.code}" ng-blur="checkCode()" ng-change="onCodeChange()" >
+                    <ul class="similar-list" ng-show="showSimilarCodeList" ng-mouseenter="isInCodeList = true;" ng-mouseleave="isInCodeList = false;">
+                        <li ng-repeat="sCode in similarCode" ng-bind="sCode.code" title="{{sCode.code}}" ng-click="setCode(sCode.code)"></li>
+                    </ul>
                 </div>
+
                <!-- <div class="form-block single-price">
                     <span>单价预算</span>
                     <select ng-model="applyObj.currency">
@@ -937,14 +923,30 @@
                     <span>生产日期</span>
                     <input type="text" class="form-group" ng-model="applyObj.produceDate" ng-change="onProduceDateChange()">
                 </div>-->
-                <div class="form-block">
-                    <span>类目(产品名称)</span>
-                    <input type="text" class="form-group" ng-model="applyObj.prodTitle" ng-change="onProdTitleInput()">
-                </div>
+
                 <div class="form-block">
                     <span>规格</span>
                     <input type="text" class="form-group" ng-model="applyObj.spec" ng-blur="checkSpec()" ng-change="onSpecInput()">
                 </div>
+                <div class="form-block">
+                    <span><i>*</i>截止日期</span>
+                    <input type="text" ng-model="applyObj.deadline"
+                           readonly
+                           class="form-control select-adder" placeholder="截止日期"
+                           ng-class="{'error': !validObj.deadline}"
+                           datepicker-popup="yyyy-MM-dd"
+                           is-open="condition.deadlineOpen"
+                           min-date="nowDate" max-date="deadDate"
+                           current-text="今天" clear-text="清除" close-text="关闭"
+                           ng-click="openDatePicker($event, condition, 'deadlineOpen',3)"
+                           datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+                           ng-change="checkDeadline()"
+                    />
+                </div>
+                <div class="form-block">
+                    <span>采购数量(PCS)</span>
+                    <input type="text" ng-change="onAmountChange()" class="form-group" ng-class="{'error': !validObj.amount}" ng-model="applyObj.amount" ng-blur="checkAmount()" >
+                </div>
                 <a href="javascript:void(0)" ng-click="release()">发布求购</a>
             </div>
         </div>
@@ -997,7 +999,7 @@
                     </div>
                 </div>
                 <div class="sreach-input fr">
-                    <input type="search" placeholder="型号/品牌" class="form-control" ng-model="keyWord" ng-search="onSearch()"/>
+                    <input type="search" placeholder="品牌/型号" class="form-control" ng-model="keyWord" ng-search="onSearch()"/>
                     <a class="seek" href="javascript:void(0)" ng-click="onSearch()">搜索</a>
                 </div>
             </div>
@@ -1006,11 +1008,11 @@
             <thead>
             <tr>
                 <th width="110">发布时间</th>
-                <th width="260">类目/品牌</th>
+                <th width="260">品牌/类目</th>
                 <th width="260">型号/规格</th>
                 <th width="110">采购数量(PCS)</th>
                 <th width="120">状态/截止时间</th>
-                <th width="136">操作</th>
+                <th width="140">操作</th>
             </tr>
             </thead>
             <tbody ng-repeat="seek in seekListData.content" ng-class="{'active': seek.$status && (seek.$status == 1 || seek.$status == 2)}">
@@ -1024,8 +1026,8 @@
                 <td>
                     <div class="row-wrap il-content">
                         <div class="il-box-large il-box">
-                            <div title="{{seek.prodTitle | nullStrFilter}}" class="fl item size-middle"><span>类目(产品名称):</span><div class="content">{{(seek.prodTitle || '-') | nullStrFilter}}</div></div>
-                            <div title="{{seek.inbrand}}" class="fl item bottom size-middle"><span>品牌:</span><div class="content">{{seek.inbrand || '-'}}</div></div>
+                            <div title="{{seek.inbrand}}" class="fl item size-middle"><span>品牌:</span><div class="content">{{seek.inbrand || '-'}}</div></div>
+                            <div title="{{seek.prodTitle | nullStrFilter}}" class="fl bottom item size-middle"><span>类目(产品名称):</span><div class="content">{{(seek.prodTitle || '-') | nullStrFilter}}</div></div>
                         </div>
                     </div>
                 </td>

+ 13 - 7
src/main/webapp/resources/view/usercenter/left_nav.html

@@ -36,18 +36,24 @@
             <a href="user#/home"><p ng-class="{'active' : active == 'home'}"><span>买家中心</span></p></a>
             <ul>
                 <li ng-class="{'active' : active == 'buyer_cart'}"><a  ui-sref="buyer_cart">购物车<em>(<span ng-bind="countCart || 0 | number"></span>)</em></a> </li>
-                <div ng-hide="!(userInfo.pwdEnable && userInfo.haveUserQuestion &&  userInfo.emailValidCode && userInfo.emailValidCode == 2)">
+                <div>
                     <li ng-class="{'active' : active == 'buyer_order'}"><a  ui-sref="buyer_order">订单中心</a></li>
                     <li ng-class="{'active' : active == 'seek_purchase'}"><a  ui-sref="buyerSeekPurchase">我的求购</a></li>
                     <li ng-class="{'active' : active == 'pay_center'}"><a  ui-sref="pay_center">支付中心</a></li>
                     <li ng-class="{'active' : active == 'buyer_invoice'}"><a  ui-sref="buyer_invoice">发票管理</a></li>
                 </div>
-                <div ng-hide="userInfo.pwdEnable && userInfo.haveUserQuestion && userInfo.emailValidCode && userInfo.emailValidCode == 2">
-                    <li ng-class="{'active' : active == 'buyer_order'}"><a ng-click="promptUpdate()" class="disabled">订单中心</a></li>
-                    <li ng-class="{'active' : active == 'seek_purchase'}"><a  ng-click="promptUpdate()" class="disabled" >我的求购</a></li>
-                    <li ng-class="{'active' : active == 'pay_center'}"><a ng-click="promptUpdate()" class="disabled" >支付中心</a></li>
-                    <li ng-class="{'active' : active == 'buyer_invoice'}"><a ng-click="promptUpdate()" class="disabled" >发票管理</a></li>
-                </div>
+                <!--<div ng-hide="!(userInfo.pwdEnable && userInfo.haveUserQuestion &&  userInfo.emailValidCode && userInfo.emailValidCode == 2)">-->
+                    <!--<li ng-class="{'active' : active == 'buyer_order'}"><a  ui-sref="buyer_order">订单中心</a></li>-->
+                    <!--<li ng-class="{'active' : active == 'seek_purchase'}"><a  ui-sref="buyerSeekPurchase">我的求购</a></li>-->
+                    <!--<li ng-class="{'active' : active == 'pay_center'}"><a  ui-sref="pay_center">支付中心</a></li>-->
+                    <!--<li ng-class="{'active' : active == 'buyer_invoice'}"><a  ui-sref="buyer_invoice">发票管理</a></li>-->
+                <!--</div>-->
+                <!--<div ng-hide="userInfo.pwdEnable && userInfo.haveUserQuestion && userInfo.emailValidCode && userInfo.emailValidCode == 2">-->
+                    <!--<li ng-class="{'active' : active == 'buyer_order'}"><a ng-click="promptUpdate()" class="disabled">订单中心</a></li>-->
+                    <!--<li ng-class="{'active' : active == 'seek_purchase'}"><a  ng-click="promptUpdate()" class="disabled" >我的求购</a></li>-->
+                    <!--<li ng-class="{'active' : active == 'pay_center'}"><a ng-click="promptUpdate()" class="disabled" >支付中心</a></li>-->
+                    <!--<li ng-class="{'active' : active == 'buyer_invoice'}"><a ng-click="promptUpdate()" class="disabled" >发票管理</a></li>-->
+                <!--</div>-->
 
 
 

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

@@ -654,7 +654,7 @@
                     </div>
                 </div>
                 <div class="sreach-input fr">
-                    <input type="search" placeholder="型号/品牌/类目/规格/公司" class="form-control" ng-model="keyWord" ng-search="onSearch()"/>
+                    <input type="search" placeholder="品牌/类目/型号/规格/公司" class="form-control" ng-model="keyWord" ng-search="onSearch()"/>
                     <a class="seek" href="javascript:void(0)" ng-click="onSearch()">搜索</a>
                 </div>
             </div>
@@ -662,12 +662,12 @@
         <table ng-table="seekPurchaseTableParams">
             <thead>
             <tr>
-                <th width="178">买家/发布时间</th>
-                <th width="245">类目/品牌</th>
+                <th width="180">买家/发布时间</th>
+                <th width="245">品牌/类目</th>
                 <th width="245">型号/规格</th>
                 <th width="110">采购数量(PCS)</th>
-                <th width="124">剩余时间</th>
-                <th width="88">操作</th>
+                <th width="130">剩余时间</th>
+                <th width="90">操作</th>
             </tr>
             </thead>
             <tbody ng-repeat="seek in $data track by $index" ng-class="{'active': seek.$active, 'hover': seek.$hover && (seek.status == 201 || seek.status == 202)}">
@@ -684,16 +684,16 @@
                 <td>
                     <div class="row-wrap il-content">
                         <div class="il-box-large il-box">
-                            <div title="{{seek.prodTitle | nullStrFilter}}" class="fl item size-middle"><span>类目(产品名称):</span><div class="content">{{(seek.prodTitle || '-') | nullStrFilter}}</div></div>
-                            <div title="{{seek.inbrand}}" class="fl item bottom size-middle"><span>品牌:</span><div class="content">{{seek.inbrand || '-'}}</div></div>
+                            <div title="{{seek.inbrand}}" style="width: 100%" class="fl item size-middle"><span>品牌:</span><div class="content" style="width:135px">{{seek.inbrand || '-'}}</div></div>
+                            <div title="{{seek.prodTitle | nullStrFilter}}" style="width: 100%" class="fl item bottom size-middle"><span>类目(产品名称):</span><div class="content" style="width:135px">{{(seek.prodTitle || '-') | nullStrFilter}}</div></div>
                         </div>
                     </div>
                 </td>
                 <td>
                     <div class="row-wrap il-content">
                         <div class="il-box-large il-box">
-                            <div title="{{seek.cmpCode}}" class="fl item"><span>型号:</span><div class="content">{{seek.cmpCode || '-'}}</div></div>
-                            <div title="{{seek.spec}}" class="fl item bottom"><span>规格:</span><div class="content">{{seek.spec || '-'}}</div></div>
+                            <div title="{{seek.cmpCode}}" style="width: 100%" class="fl item"><span>型号:</span><div class="content" style="width:135px">{{seek.cmpCode || '-'}}</div></div>
+                            <div title="{{seek.spec}}" style="width: 100%" class="fl item bottom"><span>规格:</span><div class="content" style="width:135px">{{seek.spec || '-'}}</div></div>
                         </div>
                     </div>
                 </td>

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

@@ -691,7 +691,7 @@
                     </div>
                 </div>
                 <div class="sreach-input fr">
-                    <input type="search" placeholder="型号/品牌/类目/规格/公司" class="form-control" ng-model="keyWord" ng-search="onSearch()"/>
+                    <input type="search" placeholder="品牌/类目/型号/规格/公司" class="form-control" ng-model="keyWord" ng-search="onSearch()"/>
                     <a class="seek" href="javascript:void(0)" ng-click="onSearch()">搜索</a>
                 </div>
             </div>
@@ -699,12 +699,12 @@
         <table ng-table="seekPurchaseTableParams">
             <thead>
                 <tr>
-                    <th width="178">买家/发布时间</th>
-                    <th width="245">类目/品牌</th>
+                    <th width="180">买家/发布时间</th>
+                    <th width="245">品牌/类目</th>
                     <th width="245">型号/规格</th>
                     <th width="110">采购数量(PCS)</th>
-                    <th width="124">剩余时间</th>
-                    <th width="88">操作</th>
+                    <th width="130">剩余时间</th>
+                    <th width="90">操作</th>
                 </tr>
             </thead>
             <tbody ng-repeat="seek in seekListData track by $index" ng-class="{'active': seek.$active}">
@@ -721,16 +721,16 @@
                     <td>
                         <div class="row-wrap il-content">
                             <div class="il-box-large il-box">
-                                <div title="{{seek.prodTitle | nullStrFilter}}" class="fl item size-middle"><span>类目(产品名称):</span><div class="content">{{(seek.prodTitle || '-') | nullStrFilter}}</div></div>
-                                <div title="{{seek.inbrand}}" class="fl item bottom size-middle"><span>品牌:</span><div class="content">{{seek.inbrand || '-'}}</div></div>
+                                <div title="{{seek.inbrand}}" style="width: 100%" class="fl item size-middle"><span>品牌:</span><div class="content" style="width:135px">{{seek.inbrand || '-'}}</div></div>
+                                <div title="{{seek.prodTitle | nullStrFilter}}" style="width: 100%" class="fl item size-middle bottom"><span>类目(产品名称):</span><div class="content" style="width:135px">{{(seek.prodTitle || '-') | nullStrFilter}}</div></div>
                             </div>
                         </div>
                     </td>
                     <td>
                         <div class="row-wrap il-content">
                             <div class="il-box-large il-box">
-                                <div title="{{seek.cmpCode}}" class="fl item"><span>型号:</span><div class="content">{{seek.cmpCode || '-'}}</div></div>
-                                <div title="{{seek.spec}}" class="fl item bottom"><span>规格:</span><div class="content">{{seek.spec || '-'}}</div></div>
+                                <div title="{{seek.cmpCode}}" style="width: 100%" class="fl item"><span>型号:</span><div class="content" style="width:135px">{{seek.cmpCode || '-'}}</div></div>
+                                <div title="{{seek.spec}}" style="width: 100%" class="fl item bottom"><span>规格:</span><div class="content" style="width:135px">{{seek.spec || '-'}}</div></div>
                             </div>
                         </div>
                     </td>

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

@@ -1055,6 +1055,14 @@
                   </div>
                 </div>
               </li>
+                <li>
+                    <div class="fl">企业简介</div>
+                    <div class="col-sm-10" ng-if="updateState">
+                        <textarea class="form-control" style="border-radius: inherit;resize: none;height: 200px;" title="description" ng-model="enterpriseInfo.description" maxlength="500" required></textarea>
+                    </div>
+                    <div class="fr" ng-if="!updateState"><span
+                            ng-bind="enterpriseInfo.description || '暂无信息'"></span></div>
+                </li>
             </ul>
             <!--<div class="deal-btn" ng-if="userInfo.sys">-->
             <!--<button type="button" class="edit btn btn-primary" ng-if=" !updateState"  ng-click="changeToUpdate(true)">修改</button>-->

+ 18 - 7
src/main/webapp/resources/view/vendor/forstore/vendor_material.html

@@ -379,7 +379,8 @@
 		font-size: 12px;
 		line-height: 35px;
 		/* margin-top: 5px; */
-		padding-right: 22px
+		padding-right: 22px;
+		overflow: hidden;
 	}
 	.device .tab{
 		padding-bottom: 20px;
@@ -1930,6 +1931,13 @@
 	.edit-replace-box .content .content-line .form-item input.error {
 		border-color: #e30e16;
 	}
+	/*上架30分钟提示*/
+	.record-line .tip {
+		padding-left: 30px;
+		float: left;
+		font-size: 14px;
+		color: #f60e0e;
+	}
 </style>
 <div class="user_right fr">
 	<!--货品管理-->
@@ -2003,9 +2011,10 @@
 							</label>
 						</th>
 						<th width="50">序号</th>
+						<th width="120">品牌</th>
 						<th width="140">类目(产品名称)</th>
 						<th width="170">产品型号</th>
-						<th width="120">品牌</th>
+
 						<th width="100">单位</th>
 						<!--<th width="80">封装</th>-->
 						<th width="310">操作</th>
@@ -2049,6 +2058,10 @@
 							<!--<span ng-show="isBatch"><input type="checkbox" ng-checked="material.isChoosed"  ng-click="chooseOne(material)"  id="{{$index+1}}"/><label for="{{$index+1}}"></label><br/></span>-->
 							<span ng-show="!isBatch" ng-bind="(param.page - 1) * 10 + $index + 1"></span>
 						</td>
+						<td>
+							<div class="ellipsis-div" ng-if="material.pbranden" ng-bind="material.pbranden" title="{{material.pbranden}}"></div>
+							<div class="ellipsis-div" ng-if="!material.pbranden" ng-bind="material.pbrand" title="{{material.pbrand}}"></div>
+						</td>
 						<td>
 							<span ng-if="material.kind" ng-bind="material.kind" title="{{material.kind}}"></span>
 							<span ng-if="!material.kind" ng-bind="material.kinden || '-'" title="{{material.kinden || '-'}}"></span>
@@ -2057,10 +2070,7 @@
                             <a class="brand-type" ng-if="material.cmpUuId" ng-href="product/component/{{material.cmpUuId}}/" ng-bind="material.pcmpcode" title="{{material.pcmpcode}}" target="_blank"></a>
                             <span class="brand-type" ng-if="!material.cmpUuId" ng-bind="material.pcmpcode" title="{{material.pcmpcode}}"></span>
 						</td>
-						<td>
-							<div class="ellipsis-div" ng-if="material.pbranden" ng-bind="material.pbranden" title="{{material.pbranden}}"></div>
-							<div class="ellipsis-div" ng-if="!material.pbranden" ng-bind="material.pbrand" title="{{material.pbrand}}"></div>
-						</td>
+
 						<td ng-bind="material.unit || 'PCS'" title="{{material.unit  || 'PCS'}}"></td>
 						<!--<td>-->
 							<!--<span ng-bind="material.encapsulation || '-'" title="{{material.encapsulation || '-'}}"></span>-->
@@ -2354,7 +2364,7 @@
 														</div>
 														<div class="input-list">
 															<span class="tit"  style="width: 84px">规格:</span><input class="width70 form-control" name="spec" title="规格"  placeholder="规格" ng-model="goods.spec"
-																																		maxlength="20"
+																																		maxlength="50"
 																																		style="width: 70px;"/>
 														</div>
 													</div>
@@ -2467,6 +2477,7 @@
 						<!--<strong class="text-inverse">*</strong>商城暂未收录的 品牌/器件,”原厂型号“将会显示为空且不可上架售卖,<br/>-->
 						<!--如需上架可先点击 【匹配】按钮,若匹配不成功,可前往<a ui-sref="vendor_brand_apply" target="_blank"> 品牌申请/</a><a ui-sref="vendor_component_apply" target="_blank">器件申请</a>,提出申请-->
 					<!--</div>-->
+					<div class="tip">* 上架成功30分钟后,方可被客户搜索到,并在企业产品库展示。</div>
 					<div ng-if="currenctMaterial.length != 0">显示 {{(param.page - 1) * 10 + 1}}-
 						<span ng-if="param.currentPage == materialAll.totalPages" ng-bind="materialAll.totalElements"></span>
 						<span ng-if="param.currentPage != materialAll.totalPages" ng-bind="param.page * param.count"></span>, 共: <span ng-bind="materialAll.totalElements" style="color: #5078cb;"></span> 个</div>

+ 18 - 16
src/main/webapp/resources/view/vendor/forstore/vendor_material_person.html

@@ -1858,9 +1858,9 @@
 					<thead>
 					<tr>
 						<th width="80">序号</th>
+						<th width="150">品牌</th>
 						<th width="180">类目(产品名称)</th>
 						<th width="200">型号</th>
-						<th width="150">品牌</th>
 						<!--<th width="100">单位</th>-->
 						<th width="80">规格</th>
 						<th width="180">操作</th>
@@ -1893,6 +1893,10 @@
 							<img ng-if="material.standard == 0" src="static/img/store/common/nonstandard.png" alt="" class="standard"/>
 							<img ng-if="material.standard != 0" src="static/img/store/common/standard.png" alt="" class="standard"/>
 						</td>
+						<td>
+							<div class="ellipsis-div" ng-if="material.pbranden" ng-bind="material.pbranden" title="{{material.pbranden}}"></div>
+							<div class="ellipsis-div" ng-if="!material.pbranden" ng-bind="material.pbrand" title="{{material.pbrand}}"></div>
+						</td>
 						<td>
 							<span ng-if="material.kind" ng-bind="material.kind" title="{{material.kind}}"></span>
 							<span ng-if="!material.kind" ng-bind="material.kinden || '-'" title="{{material.kinden || '-'}}"></span>
@@ -1903,10 +1907,7 @@
 							</span>
                             <span class="brand-type" ng-if="!material.cmpUuId" ng-bind="material.pcmpcode" title="{{material.pcmpcode}}"></span>
 						</td>
-						<td>
-							<div class="ellipsis-div" ng-if="material.pbranden" ng-bind="material.pbranden" title="{{material.pbranden}}"></div>
-							<div class="ellipsis-div" ng-if="!material.pbranden" ng-bind="material.pbrand" title="{{material.pbrand}}"></div>
-						</td>
+
 						<!--<td ng-bind="material.unit || 'PCS'" title="{{material.unit  || 'PCS'}}"></td>-->
 						<td>
 							<span ng-bind="material.spec || '-'" title="{{material.spec || '-'}}"></span>
@@ -2271,8 +2272,8 @@
 								<div class="replace-list"  ng-class="{'Scrollactive': material.showMoreReplace} ">
 									<div class="replace-item" ng-repeat="replace in material.productReplaceList" ng-if="material.showMoreReplace || (!material.showMoreReplace && replace.detno < 5) ">
 										<i>{{replace.detno}}</i>
-										<span title="{{replace.ptrCmpcode}}">型号:{{replace.ptrCmpcode}}</span>
 										<span title="{{replace.ptrBranden}}">品牌:{{replace.ptrBranden}}</span>
+										<span title="{{replace.ptrCmpcode}}">型号:{{replace.ptrCmpcode}}</span>
 									</div>
 									<div ng-if="(material.productReplaceList.length < 4 && material.productReplaceList.length % 2 !== 0) || (material.productReplaceList.length > 4 && material.showMoreReplace && material.productReplaceList.length % 2 !== 0)" class="replace-item"></div>
 								</div>
@@ -2515,8 +2516,8 @@
 <div class="com-modal-wrap" ng-if="activeIndex > -1">
 	<div class="edit-replace-box">
 		<div class="title">
-			<div>型号:<span>{{editCmp}}</span></div>
 			<div>品牌:<span>{{editBrand}}</span></div>
+			<div>型号:<span>{{editCmp}}</span></div>
 			<i class="fa fa-close" ng-click="setActiveIndex(-1)"></i>
 		</div>
 		<div class="content">
@@ -2525,18 +2526,19 @@
 			</div>
 			<div class="content-line" ng-repeat="(key, mate) in replaceMaterialList" on-finish-render="ngRepeatFinished">
 				<div class="form-item form-left">
-					<span><i>{{key + 1}}</i><em>*</em>型号:</span>
-					<input type="text"  ng-readonly="mate.editable == false"  class="form-control" ng-model="mate.ptrCmpcode" ng-focus="onFocus($event, 'similar-list3_'+ key, 'code', key)" ng-change="onCodeChange(mate.ptrCmpcode, key)" ng-blur="onCodeBlur(key)" ng-class="{'error': errorObj[key].code == 1}" placeholder="请输入型号名称">
-					<ul class="similar-list" ng-class="'similar-list3_'+ key"  ng-show="mate.showSimilarCodeList && similarCode.length > 0 && mate.ptrCmpcode" ng-mouseenter="setIsInCodeList(true, key)" ng-mouseleave="setIsInCodeList(false, key)">
-							<li ng-repeat="sCode in similarCode" ng-bind="sCode.code" title="{{sCode.code}}" ng-click="setCode(key, sCode.code)"></li>
+					<span><i>{{key + 1}}</i><em>*</em>品牌:</span>
+					<input type="text"  ng-readonly="mate.editable == false"  class="form-control" ng-model="mate.ptrBranden" ng-focus="onFocus($event, 'similar-list4_'+ key, 'brand', key)" ng-change="onBrandChange(mate.ptrBranden, key)" ng-blur="onBrandBlur(key)" ng-class="{'error': errorObj[key].brand == 1}" placeholder="请输入品牌名称">
+					<ul class="similar-list" ng-class="'similar-list4_'+ key" ng-show="mate.showSimilarBrandList && similarBrand.length > 0 && mate.ptrBranden" ng-mouseenter="setIsInBrandList(true, key)" ng-mouseleave="setIsInBrandList(false, key)">
+							<li ng-repeat="sBrand in similarBrand" ng-bind="sBrand.nameEn" title="{{sBrand.nameEn}}" ng-click="setBrand(key, sBrand.nameEn)"></li>
 					</ul>
+
 				</div>
 				<div class="form-item form-right">
-					<span><em>*</em>品牌:</span>
-					<input type="text"  ng-readonly="mate.editable == false"  class="form-control" ng-model="mate.ptrBranden" ng-focus="onFocus($event, 'similar-list4_'+ key, 'brand', key)" ng-change="onBrandChange(mate.ptrBranden, key)" ng-blur="onBrandBlur(key)" ng-class="{'error': errorObj[key].brand == 1}" placeholder="请输入品牌名称">
-                    <ul class="similar-list" ng-class="'similar-list4_'+ key" ng-show="mate.showSimilarBrandList && similarBrand.length > 0 && mate.ptrBranden" ng-mouseenter="setIsInBrandList(true, key)" ng-mouseleave="setIsInBrandList(false, key)">
-                        <li ng-repeat="sBrand in similarBrand" ng-bind="sBrand.nameEn" title="{{sBrand.nameEn}}" ng-click="setBrand(key, sBrand.nameEn)"></li>
-                    </ul>
+					<span><em>*</em>型号:</span>
+					<input type="text"  ng-readonly="mate.editable == false"  class="form-control" ng-model="mate.ptrCmpcode" ng-focus="onFocus($event, 'similar-list3_'+ key, 'code', key)" ng-change="onCodeChange(mate.ptrCmpcode, key)" ng-blur="onCodeBlur(key)" ng-class="{'error': errorObj[key].code == 1}" placeholder="请输入型号名称">
+					<ul class="similar-list" ng-class="'similar-list3_'+ key"  ng-show="mate.showSimilarCodeList && similarCode.length > 0 && mate.ptrCmpcode" ng-mouseenter="setIsInCodeList(true, key)" ng-mouseleave="setIsInCodeList(false, key)">
+						<li ng-repeat="sCode in similarCode" ng-bind="sCode.code" title="{{sCode.code}}" ng-click="setCode(key, sCode.code)"></li>
+					</ul>
 					<i class="fa fa-minus-circle" ng-if="replaceMaterialList.length >= 1 && mate.editable != false" ng-click="setReplies('sub', key)"></i>
 					<i class="fa fa-plus-circle" ng-if="key == linearLength - 1 && mate.editable != false" ng-click="setReplies('add', key)"></i>
 				</div>

+ 17 - 12
src/main/webapp/resources/view/vendor/forstore/vendor_onSale.html

@@ -947,6 +947,10 @@
         color: #4290f7;
         cursor: pointer;
     }
+
+    .wanted_list01 .tab table tr {
+        height: 104px;
+    }
 </style>
 <div class="user_right fr">
     <!--货品管理-->
@@ -1089,11 +1093,16 @@
                                 </div>
                             </div>
                             <div class="fr wid135">
+                                <p ng-if="!commodity.uuid">品牌: <em ng-bind="commodity.brandNameEn" title="{{commodity.brandNameEn}}">NXP</em></a></p>
+                                <p ng-if="commodity.uuid" name="brand-a"><a href="product/brand/{{commodity.branduuid}}" style="margin: 0; color: #333;" target="_blank">品牌: <em ng-bind="commodity.brandNameEn" title="{{commodity.brandNameEn}}">NXP</em></a></p>
                                 <p ng-if="!commodity.uuid">类目(产品名称): <em ng-bind="commodity.kindNameCn || '-'" title="{{commodity.kindNameCn}}"></em></a></p>
                                 <p ng-if="commodity.uuid" name="kind-a"><a href="product/kind/{{commodity.kindUuid}}" style="margin: 0; color: #333;" target="_blank">类目(产品名称): <em ng-bind="commodity.kindNameCn || '-'" title="{{commodity.kindNameCn}}"></em></a></p>
                                 <p>型号: <em class="href" ng-bind="commodity.code" title="{{commodity.code}}"  ng-click="goToBatchDetail($event, commodity)">LPC1112</em></p>
-                                <p ng-if="!commodity.uuid">品牌: <em ng-bind="commodity.brandNameEn" title="{{commodity.brandNameEn}}">NXP</em></a></p>
-                                <p ng-if="commodity.uuid" name="brand-a"><a href="product/brand/{{commodity.branduuid}}" style="margin: 0; color: #333;" target="_blank">品牌: <em ng-bind="commodity.brandNameEn" title="{{commodity.brandNameEn}}">NXP</em></a></p>
+                                <p>规格: <em ng-bind="commodity.spec  || '-'" title="{{commodity.spec}}">LPC1112</em></p>
+                                <!--<div class="margin0">-->
+                                    <!--<span class="marginL10">规格: </span>-->
+                                    <!--<span ng-bind="commodity.spec  || '-'" title="{{commodity.spec}}" class="width45" style="overflow: hidden;text-overflow: ellipsis;white-space: nowrap;"></span>-->
+                                <!--</div>-->
                             </div>
                         </td>
                         <td style="white-space: inherit;">
@@ -1120,10 +1129,6 @@
                                 <span class="marginL10">最小包装数: </span>
                                 <span ng-bind="commodity.minPackQty" title="{{commodity.minPackQty}}" class="width45" style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis;"></span>
                             </div>
-                            <div class="margin0">
-                                <span class="marginL10">规格: </span>
-                                <span ng-bind="commodity.spec  || '-'" title="{{commodity.spec}}" class="width45" style="overflow: hidden;text-overflow: ellipsis;white-space: nowrap;"></span>
-                            </div>
                         </td>
                         <td>
                             <div ng-repeat="price in commodity.prices" >
@@ -1192,9 +1197,14 @@
                                         </div>
                                     </div>
                                     <div class="fr wid135">
+                                        <p>品牌: <em ng-bind="commodity.brandNameEn" title="{{commodity.brandNameEn}}">NXP</em></p>
                                         <p>类目(产品名称): <em ng-bind="commodity.kindNameCn || '-'" title="{{commodity.kindNameCn}}"></em></p>
                                         <p>型号: <em ng-bind="commodity.code" title="{{commodity.code}}">LPC1112</em></p>
-                                        <p>品牌: <em ng-bind="commodity.brandNameEn" title="{{commodity.brandNameEn}}">NXP</em></p>
+                                        <p>
+                                            <span style="width: 32px;">规格: </span>
+                                            <span><input style="width:90px" type="text"
+                                                         placeholder="请输入规格" maxlength="50" ng-model="commodity.spec" class="wid48 form-control"/></span>
+                                        </p>
                                     </div>
                                 </div>
                                 <div class="content-show width120">
@@ -1228,11 +1238,6 @@
                                         <span><input type="text" ng-blur="changeMinPackQty(commodity)"
                                                      ng-class="{'error' : commodity.editMinPackQtyInValid}" placeholder="数量" maxlength="6" ng-model="commodity.editMinPackQty" class="wid48 form-control"/></span>
                                     </div>
-                                    <div>
-                                        <span style="width: 32px;">规格: </span>
-                                        <span><input style="width:90px" type="text"
-                                                      placeholder="请输入规格" maxlength="20" ng-model="commodity.spec" class="wid48 form-control"/></span>
-                                    </div>
                                 </div>
                                 <div class="content-show width135">
                                     <div ng-repeat="price in commodity.editPrices">

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

@@ -699,10 +699,10 @@
 			</div>-->
 			<div class="row com_row">
 				<div class="col-md-2 custom_col">
-					<span>简&nbsp;&nbsp;&nbsp;&nbsp;介<strong class="text-inverse">*</strong></span>
+					<span>主营产品</span>
 				</div>
 				<div class="col-md-10 custom_col">
-					<textarea class="form-control" style="border-radius: inherit;resize: none;height: 200px;" title="description" ng-model="sampleStore.description" maxlength="500" required></textarea>
+					<textarea class="form-control" style="border-radius: inherit;resize: none;height: 200px;" title="description" ng-model="sampleStore.description" maxlength="500"></textarea>
 				</div>
 			</div>
 			<!--<div class="row com_row" style="margin-top: 10px;">
@@ -715,7 +715,7 @@
 			</div>-->
 			<div class="row com_row" style="margin-top: 10px;">
 				<div class="col-md-2 custom_col">
-					<span>企业地址<strong class="text-inverse">*</strong></span>
+					<span>店铺地址<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="address" ng-model="sampleStore.enterprise.address" maxlength="50"/>
@@ -798,7 +798,7 @@
 			</div>
 			<div class="row com_row">
 				<div class="col-md-2 custom_col">
-					<span>简&nbsp;&nbsp;&nbsp;&nbsp;介</span>
+					<span>主营产品</span>
 				</div>
 				<div class="col-md-10 custom_col show_info">
 					<div style="word-break: break-all;">
@@ -818,7 +818,7 @@
 			</div>-->
 			<div class="row com_row" style="margin-top: 10px;">
 				<div class="col-md-2 custom_col">
-					<span>企业地址</span>
+					<span>店铺地址</span>
 				</div>
 				<div class="col-md-10 custom_col show_info">
 					<div>

+ 10 - 1
src/main/webapp/resources/view/vendor/forstore/vendor_upload.html

@@ -517,6 +517,12 @@
     .com_tab ul li.active:after{
         display: block
     }
+    /*上架30分钟提示*/
+    .device .load_next .tip {
+        margin-left: 15px;
+        font-size: 14px;
+        color: #f60e0e;
+    }
 </style>
 <div class="user_right fr">
     <!--货品管理-->
@@ -686,7 +692,10 @@
                             </tbody>
                         </table>
                         <div style="margin-top: -40px;" ng-if="$$productOn.tab == 'bathOn'">3、如核对信息无误之后,点击确认发布</div>
-                        <span class="blue-bg publish" href="javascript:void(0)" ng-click="publish($event)" ng-disabled="!pageParams.totalElements" ng-show="$$productOn.tab == 'bathOn'"><span>确认上架</span></span>
+                        <div>
+                            <span class="blue-bg publish" href="javascript:void(0)" ng-click="publish($event)" ng-disabled="!pageParams.totalElements" ng-show="$$productOn.tab == 'bathOn'"><span>确认上架</span></span>
+                            <b class="tip" ng-show="$$productOn.tab == 'bathOn'">* 上架成功30分钟后,方可被客户搜索到,并在企业产品库展示。</b>
+                        </div>
                     </div>
                 </div>
                 <!--<div class="load_next">-->

+ 32 - 32
src/main/webapp/resources/view/vendor/left_nav.html

@@ -43,7 +43,7 @@
 <div id="vendor_left_bar" class="user_left fl" ng-controller="leftNavCtrl">
 	<span  ui-sref="vendor_index"><p ng-class="{'active' : active == 'index'}"><span>卖家中心</span></p></span>
 	<ul>
-		<div ng-hide="!(userInfo.pwdEnable && userInfo.haveUserQuestion && userInfo.emailValidCode && userInfo.emailValidCode == 2)">
+		<div>
 		<li ng-class="{'active' : active == 'vendor_order'}"><span  ui-sref="vendor_order">订单中心</span></li>
 			<!--	<li ng-class="{'active' : active == 'vendor_productOn'}"><span  ui-sref="vendor_productOn">产品导入</span></li>-->
 			<li ng-class="{'active' : active == 'vendor_productOn'}"><span  ui-sref="vendor_upload">产品导入</span></li>
@@ -79,40 +79,40 @@
 		<!--</li>-->
 		<!--<li ng-class="{'active' : active == 'vendor_manufacture'}"><span  ui-sref="vendor_manufacture">原厂认证</span></li>-->
 		</div>
-		<div ng-hide="userInfo.pwdEnable && userInfo.haveUserQuestion && userInfo.emailValidCode && userInfo.emailValidCode == 2">
-			<li ng-class="{'active' : active == 'vendor_order'}"><span ng-click="promptUpdate()" class="disabled">订单中心</span></li>
-			<!--	<li ng-class="{'active' : active == 'vendor_productOn'}"><span  ui-sref="vendor_productOn">产品导入</span></li>-->
-			<li ng-class="{'active' : active == 'vendor_productOn'}"><span ng-click="promptUpdate()" class="disabled" >产品导入</span></li>
-			<li ng-class="{'active' : active == 'vendor_material'}"><span ng-click="promptUpdate()" class="disabled" >产品管理</span></li>
-			<li ng-class="{'active' : active == 'vendor_store'}">
-				<!-- 我要开店 !store && applyStatus == 'NONE' -->
-				<span ng-click="promptUpdate()" class="disabled"  ng-if="!store && applyStatus == 'NONE'">开店申请</span>
-				<!-- 店铺申请中 !store && applyStatus == 'PREPARE' -->
-				<span ng-click="promptUpdate()" class="disabled"  ng-if="!store && applyStatus == 'PREPARE'">开店申请</span>
-				<!-- 我的店铺 !store && applyStatus == 'PASS' -->
-				<span ng-click="promptUpdate()" class="disabled"  ng-if="!store && applyStatus == 'PASS'">店铺管理</span>
-				<!-- 我的店铺 store -->
-				<span ng-click="promptUpdate()" class="disabled"  ng-if="store && (!store.status || store.status === 'OPENED')">店铺管理</span>
-				<!-- 我的店铺申述 store -->
-				<span ng-click="promptUpdate()" class="disabled"  ng-if="store && store.status && store.status !== 'OPENED'">店铺管理</span>
-			</li>
-			<li ng-class="{'active' : active == 'vendor_seek_purchase'}"><span ng-click="promptUpdate()" class="disabled">我的商机</span></li>
-			<li ng-class="{'active' : active == 'vendor_logistics'}"><span ng-click="promptUpdate()" class="disabled">物流管理</span></li>
-			<li ng-class="{'active' : active == 'vendor_invoice'}"><span ng-click="promptUpdate()" class="disabled" >发票管理</span></li>
-			<!--	<li ng-class="{'active' : active == 'vendor_logistics'}"><span  ui-sref="vendor_logistics">物流管理</span></li>-->
-			<li ng-class="{'active' : active == 'pay_center'}"><span ng-click="promptUpdate()" class="disabled" >结算中心</span></li>
-			<li ng-class="{'active' : active == 'vendor_brand_apply'}"><span ng-click="promptUpdate()" class="disabled" >品牌申请</span></li>
-			<li ng-class="{'active' : active == 'vendor_component_apply'}"><span ng-click="promptUpdate()" class="disabled" >器件申请</span></li>
-			<!--<li ng-class="{'active' : active == 'vendor_repository'}"><span  ui-sref="vendor_repository">仓库管理</span></li>-->
-
-			<!--<li ng-class="{'active' : active == 'vendor_after_sale'}" class="undo">-->
-			<!--&lt;!&ndash;<span  ui-sref="vendor_after_sale">售后处理</span>&ndash;&gt;-->
-			<!--售后处理-->
+		<!--<div ng-hide="userInfo.pwdEnable && userInfo.haveUserQuestion && userInfo.emailValidCode && userInfo.emailValidCode == 2">-->
+			<!--<li ng-class="{'active' : active == 'vendor_order'}"><span ng-click="promptUpdate()" class="disabled">订单中心</span></li>-->
+			<!--&lt;!&ndash;	<li ng-class="{'active' : active == 'vendor_productOn'}"><span  ui-sref="vendor_productOn">产品导入</span></li>&ndash;&gt;-->
+			<!--<li ng-class="{'active' : active == 'vendor_productOn'}"><span ng-click="promptUpdate()" class="disabled" >产品导入</span></li>-->
+			<!--<li ng-class="{'active' : active == 'vendor_material'}"><span ng-click="promptUpdate()" class="disabled" >产品管理</span></li>-->
+			<!--<li ng-class="{'active' : active == 'vendor_store'}">-->
+				<!--&lt;!&ndash; 我要开店 !store && applyStatus == 'NONE' &ndash;&gt;-->
+				<!--<span ng-click="promptUpdate()" class="disabled"  ng-if="!store && applyStatus == 'NONE'">开店申请</span>-->
+				<!--&lt;!&ndash; 店铺申请中 !store && applyStatus == 'PREPARE' &ndash;&gt;-->
+				<!--<span ng-click="promptUpdate()" class="disabled"  ng-if="!store && applyStatus == 'PREPARE'">开店申请</span>-->
+				<!--&lt;!&ndash; 我的店铺 !store && applyStatus == 'PASS' &ndash;&gt;-->
+				<!--<span ng-click="promptUpdate()" class="disabled"  ng-if="!store && applyStatus == 'PASS'">店铺管理</span>-->
+				<!--&lt;!&ndash; 我的店铺 store &ndash;&gt;-->
+				<!--<span ng-click="promptUpdate()" class="disabled"  ng-if="store && (!store.status || store.status === 'OPENED')">店铺管理</span>-->
+				<!--&lt;!&ndash; 我的店铺申述 store &ndash;&gt;-->
+				<!--<span ng-click="promptUpdate()" class="disabled"  ng-if="store && store.status && store.status !== 'OPENED'">店铺管理</span>-->
 			<!--</li>-->
-			<!--<li ng-class="{'active' : active == 'vendor_manufacture'}"><span  ui-sref="vendor_manufacture">原厂认证</span></li>-->
+			<!--<li ng-class="{'active' : active == 'vendor_seek_purchase'}"><span ng-click="promptUpdate()" class="disabled">我的商机</span></li>-->
+			<!--<li ng-class="{'active' : active == 'vendor_logistics'}"><span ng-click="promptUpdate()" class="disabled">物流管理</span></li>-->
+			<!--<li ng-class="{'active' : active == 'vendor_invoice'}"><span ng-click="promptUpdate()" class="disabled" >发票管理</span></li>-->
+			<!--&lt;!&ndash;	<li ng-class="{'active' : active == 'vendor_logistics'}"><span  ui-sref="vendor_logistics">物流管理</span></li>&ndash;&gt;-->
+			<!--<li ng-class="{'active' : active == 'pay_center'}"><span ng-click="promptUpdate()" class="disabled" >结算中心</span></li>-->
+			<!--<li ng-class="{'active' : active == 'vendor_brand_apply'}"><span ng-click="promptUpdate()" class="disabled" >品牌申请</span></li>-->
+			<!--<li ng-class="{'active' : active == 'vendor_component_apply'}"><span ng-click="promptUpdate()" class="disabled" >器件申请</span></li>-->
+			<!--&lt;!&ndash;<li ng-class="{'active' : active == 'vendor_repository'}"><span  ui-sref="vendor_repository">仓库管理</span></li>&ndash;&gt;-->
 
+			<!--&lt;!&ndash;<li ng-class="{'active' : active == 'vendor_after_sale'}" class="undo">&ndash;&gt;-->
+			<!--&lt;!&ndash;&lt;!&ndash;<span  ui-sref="vendor_after_sale">售后处理</span>&ndash;&gt;&ndash;&gt;-->
+			<!--&lt;!&ndash;售后处理&ndash;&gt;-->
+			<!--&lt;!&ndash;</li>&ndash;&gt;-->
+			<!--&lt;!&ndash;<li ng-class="{'active' : active == 'vendor_manufacture'}"><span  ui-sref="vendor_manufacture">原厂认证</span></li>&ndash;&gt;-->
 
-		</div>
+
+		<!--</div>-->
 		<li ng-class="{'active' : active == 'vendor_account_management'}"><span  ui-sref="vendor_account_management">账户管理</span></li>
 	</ul>
 </div>