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

Merge remote-tracking branch 'origin/dev' into dev

Administrator 7 лет назад
Родитель
Сommit
f0f0d53b51
47 измененных файлов с 779 добавлено и 286 удалено
  1. 1 1
      src/main/java/com/uas/platform/b2c/common/account/dao/UserDao.java
  2. 24 9
      src/main/java/com/uas/platform/b2c/common/account/service/impl/UserServiceImpl.java
  3. 20 0
      src/main/java/com/uas/platform/b2c/common/psmessage/service/MessageService.java
  4. 33 0
      src/main/java/com/uas/platform/b2c/common/psmessage/service/impl/MessageServiceImpl.java
  5. 2 21
      src/main/java/com/uas/platform/b2c/common/weixin/contoller/WeChatController.java
  6. 2 1
      src/main/java/com/uas/platform/b2c/common/weixin/service/WeChatService.java
  7. 19 18
      src/main/java/com/uas/platform/b2c/common/weixin/service/impl/WeChatServiceImpl.java
  8. 14 0
      src/main/java/com/uas/platform/b2c/core/config/SysConf.java
  9. 1 0
      src/main/java/com/uas/platform/b2c/prod/commodity/model/Goods.java
  10. 1 1
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java
  11. 62 8
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductAttachServiceImpl.java
  12. 14 0
      src/main/java/com/uas/platform/b2c/prod/product/kind/controller/KindController.java
  13. 8 2
      src/main/java/com/uas/platform/b2c/prod/product/kind/service/KindService.java
  14. 16 0
      src/main/java/com/uas/platform/b2c/prod/product/kind/service/impl/KindServiceImpl.java
  15. BIN
      src/main/resources/jxls-tpl/trade/releaseByBatch-rmb.xls
  16. BIN
      src/main/resources/jxls-tpl/trade/releasebyBatch-usd.xls
  17. BIN
      src/main/webapp/resources/img/vendor/images/upload_file_no_pass.png
  18. 47 23
      src/main/webapp/resources/js/admin/controllers/AuditRegulpicListCtrl.js
  19. 10 5
      src/main/webapp/resources/js/common/directives.js
  20. 1 0
      src/main/webapp/resources/js/common/query/commodity.js
  21. 8 1
      src/main/webapp/resources/js/common/query/kind.js
  22. 1 14
      src/main/webapp/resources/js/sso/controllers/applyBindCtrl.js
  23. 0 13
      src/main/webapp/resources/js/sso/controllers/rolePermissionCtrl.js
  24. 2 2
      src/main/webapp/resources/js/sso/controllers/securitySetCtrl.js
  25. 0 12
      src/main/webapp/resources/js/sso/controllers/ssoAddressCtrl.js
  26. 0 13
      src/main/webapp/resources/js/sso/controllers/ssoInfoCtrl.js
  27. 3 13
      src/main/webapp/resources/js/sso/controllers/staffManagementCtrl.js
  28. 14 14
      src/main/webapp/resources/js/usercenter/controllers/forstore/seek_purchase_ctrl.js
  29. 4 6
      src/main/webapp/resources/js/vendor/app.js
  30. 166 6
      src/main/webapp/resources/js/vendor/controllers/forstore/seek_purchase_ctrl.js
  31. 2 1
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_onSaleCtrl.js
  32. 3 0
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_store_maintain_ctrl.js
  33. 6 2
      src/main/webapp/resources/view/admin/RegulpicList.html
  34. 1 1
      src/main/webapp/resources/view/admin/audit_component.html
  35. 7 2
      src/main/webapp/resources/view/admin/modal/application_unpass_reason.html
  36. 7 1
      src/main/webapp/resources/view/admin/modal/auditRegulpic_choose_modal.html
  37. 11 2
      src/main/webapp/resources/view/admin/modal/auditRegulpic_modal.html
  38. 31 26
      src/main/webapp/resources/view/admin/modal/auditRegulpicpass_modal.html
  39. 1 1
      src/main/webapp/resources/view/sso/header.html
  40. 2 2
      src/main/webapp/resources/view/sso/securitySet.html
  41. 1 1
      src/main/webapp/resources/view/sso/ssoInfo.html
  42. 1 0
      src/main/webapp/resources/view/sso/staffManagement.html
  43. 66 8
      src/main/webapp/resources/view/usercenter/forstore/seekPurchase.html
  44. 5 3
      src/main/webapp/resources/view/vendor/forstore/purchaseOffer.html
  45. 43 9
      src/main/webapp/resources/view/vendor/forstore/seekPurchase.html
  46. 29 13
      src/main/webapp/resources/view/vendor/forstore/vendor_onSale.html
  47. 90 31
      src/main/webapp/resources/view/vendor/modal/edit_regul_modal.html

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

@@ -135,7 +135,7 @@ public interface UserDao extends JpaSpecificationExecutor<User>, JpaRepository<U
 	 * @param openId
 	 * @return
 	 */
-	public User findUsersByOpenId(String openId);
+	List<User> findUsersByOpenId(String openId);
 
 	/**
 	 * 修改个人的头像

+ 24 - 9
src/main/java/com/uas/platform/b2c/common/account/service/impl/UserServiceImpl.java

@@ -4,24 +4,21 @@ import com.uas.message.mail.service.MailService;
 import com.uas.platform.b2c.common.account.dao.*;
 import com.uas.platform.b2c.common.account.model.*;
 import com.uas.platform.b2c.common.account.service.UserService;
-import com.uas.platform.b2c.common.base.dao.CommonDao;
 import com.uas.platform.b2c.core.config.MessageConf;
 import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.core.utils.ThreadUtils;
+import com.uas.platform.b2c.trade.util.BoundedExecutor;
+import com.uas.platform.core.concurrent.IRunnable;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.exception.SystemException;
-import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.util.AgentUtils;
 import com.uas.platform.core.util.encry.Md5Utils;
 import com.uas.sso.entity.UserView;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.support.ManagedMap;
 import org.springframework.data.domain.Page;
 import org.springframework.data.jpa.domain.Specification;
-import org.springframework.security.access.ConfigAttribute;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.stereotype.Service;
 import org.springframework.ui.ModelMap;
@@ -35,6 +32,8 @@ import javax.persistence.criteria.Root;
 import javax.servlet.http.HttpServletRequest;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 @Service
 public class UserServiceImpl implements UserService {
@@ -425,15 +424,31 @@ public class UserServiceImpl implements UserService {
 		}
 	}
 	@Override
-	public void removeUser(Long uu) {
+	public void removeUser(final Long uu) {
 		User user = userDao.findOne(uu);
 		if (user.getEnterprises().contains(SystemSession.getUser().getEnterprise())) {
 			user.removeEnterprise(SystemSession.getUser().getEnterprise());
 			userDao.save(user);
+			final Long enUU = SystemSession.getUser().getEnterprise().getUu();
+			// 同步账户中心
+			ExecutorService executorService = Executors.newCachedThreadPool();
+			BoundedExecutor executor = new BoundedExecutor(executorService, 1000);
+
 			try {
-				com.uas.sso.util.AccountUtils.removeUser(uu,SystemSession.getUser().getEnterprise().getUu());
-			} catch (Exception e) {
+				executor.submitTask(new Runnable() {
+					@Override
+					public void run() {
+						try {
+							AccountUtils.removeUser(uu, enUU);
+						} catch (Exception e) {
+							e.printStackTrace();
+						}
+					}
+				});
+			} catch (InterruptedException e) {
+				e.printStackTrace();
 			}
+
 		} else {
 			throw new IllegalArgumentException();
 		}

+ 20 - 0
src/main/java/com/uas/platform/b2c/common/psmessage/service/MessageService.java

@@ -0,0 +1,20 @@
+package com.uas.platform.b2c.common.psmessage.service;
+
+import com.uas.platform.b2c.common.message.model.MessageModel;
+import java.util.List;
+
+/**
+ * 公共消息服务接口
+ * Created by wangyc on 2018/6/29.
+ *
+ * @version 2018/6/29 15:06 wangyc
+ */
+public interface MessageService {
+
+    /**
+     * 发送消息
+     * @param messageModel 消息实体
+     * @return
+     */
+    String sendMessage(List<MessageModel> messageModel);
+}

+ 33 - 0
src/main/java/com/uas/platform/b2c/common/psmessage/service/impl/MessageServiceImpl.java

@@ -0,0 +1,33 @@
+package com.uas.platform.b2c.common.psmessage.service.impl;
+
+import com.uas.platform.b2c.common.message.model.MessageModel;
+import com.uas.platform.b2c.common.psmessage.service.MessageService;
+import com.uas.platform.b2c.core.config.SysConf;
+import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.platform.core.util.HttpUtil;
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * Created by wangyc on 2018/6/29.
+ *
+ * @version 2018/6/29 15:12 wangyc
+ */
+@Service
+public class MessageServiceImpl implements MessageService {
+
+    @Autowired
+    private SysConf sysConf;
+
+    @Override
+    public String sendMessage(List<MessageModel> models) {
+        String result = "";
+        try {
+            return HttpUtil.doPost(sysConf.getMessageServiceUrl() + "messages", FastjsonUtils.toJson(models));
+        } catch (Exception e) {
+            result = "false";
+        }
+        return result;
+    }
+}

+ 2 - 21
src/main/java/com/uas/platform/b2c/common/weixin/contoller/WeChatController.java

@@ -60,25 +60,6 @@ public class WeChatController {
         }
     }
 
-//    /**
-//     * 微信授权,获取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
@@ -86,8 +67,8 @@ public class WeChatController {
      * @return 微信用户信息
      */
     @RequestMapping(value = "/getWxUserInfo", method = RequestMethod.GET)
-    public ModelMap getWxUserInfo(String code,String state) {
-        return weChatService.getWxUserInfo(code, state);
+    public ModelMap getWxUserInfo(String code, String state, String openId) {
+        return weChatService.getWxUserInfo(code, state, openId);
     }
 
     /**

+ 2 - 1
src/main/java/com/uas/platform/b2c/common/weixin/service/WeChatService.java

@@ -16,9 +16,10 @@ public interface WeChatService {
      * 获取微信用户信息
      * @param code
      * @param state
+     * @param openId
      * @return
      */
-    ModelMap getWxUserInfo(String code, String state);
+    ModelMap getWxUserInfo(String code, String state, String openId);
 
     /**
      * 发送模板消息

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

@@ -52,7 +52,7 @@ public class WeChatServiceImpl implements WeChatService{
     private static final Integer ACCESS_TOKEN_EXPIRES_IN = 3600;
 
     @Override
-    public ModelMap getWxUserInfo(String code, String state) {
+    public ModelMap getWxUserInfo(String code, String state, String openId) {
         ModelMap result = new ModelMap();
         if (!StringUtils.isEmpty(code)) {
             AuthUserInfo userInfo = null;
@@ -65,21 +65,22 @@ public class WeChatServiceImpl implements WeChatService{
             }
             result.put("nickname", userInfo.getNickname());
             result.put("headimgurl", userInfo.getHeadimgurl());
-            String openid = userInfo.getOpenid();
-
-            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);
-            }
+            openId = userInfo.getOpenid();
+            result.put("openid", openId);
+        }
+
+        // 用户信息查询
+        List<User> users = userDao.findUsersByOpenId(openId);
+        if (CollectionUtils.isEmpty(users)) {
+            result.put("status", 0);
+        } else {
+            result.put("status", 1);
+            // 转成userAccount
+            UserAccount userAccount = convertUserAccount(users.get(0));
+            // 企业信息单独提出
+            Set<Enterprise> enterprises = users.get(0).getEnterprises();
+            result.put("userAccount", userAccount);
+            result.put("enterprises", enterprises);
         }
         return result;
     }
@@ -151,8 +152,8 @@ public class WeChatServiceImpl implements WeChatService{
         if (CollectionUtils.isEmpty(oldUsers)) {
             throw new IllegalOperatorException("未找到用户信息");
         }
-        User judgeUser = userDao.findUsersByOpenId(user.getOpenId());
-        if (!StringUtils.isEmpty(judgeUser)) {
+        List<User> judgeUser = userDao.findUsersByOpenId(user.getOpenId());
+        if (!CollectionUtils.isEmpty(judgeUser)) {
             throw new IllegalOperatorException("该微信号已被绑定");
         }
         UserView userView = new UserView();

+ 14 - 0
src/main/java/com/uas/platform/b2c/core/config/SysConf.java

@@ -166,6 +166,12 @@ public class SysConf {
 	@Value(("#{sys.b2b}"))
     private String b2bUrl;
 
+	/**
+	 * 公共消息服务网址
+	 */
+	@Value(("#{sys.messageServiceUrl}"))
+	private String messageServiceUrl;
+
 	public Boolean getRebuildIndexesOnRefresh() {
 		return rebuildIndexesOnRefresh;
 	}
@@ -361,4 +367,12 @@ public class SysConf {
     public void setB2bUrl(String b2bUrl) {
         this.b2bUrl = b2bUrl;
     }
+
+	public String getMessageServiceUrl() {
+		return messageServiceUrl;
+	}
+
+	public void setMessageServiceUrl(String messageServiceUrl) {
+		this.messageServiceUrl = messageServiceUrl;
+	}
 }

+ 1 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/model/Goods.java

@@ -1650,6 +1650,7 @@ public class Goods implements Serializable {
 		g.setEncapsulation(product.getEncapsulation());
 		g.setPackaging(product.getPackaging());
 		g.setUuid(product.getCmpUuId());
+        g.setSpec(product.getSpec());
 		return g;
 	}
 

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

@@ -1864,7 +1864,7 @@ public class GoodsServiceImpl implements GoodsService {
 			uuids.add(nowGoods.getBatchCode());
 			recommendProductService.deleteProductsWhenSellerUpdateReserve(storeuuid, uuids);
 		} else {
-            // recommendProductService.updateRecommendProductInfo(nowGoods);
+            recommendProductService.updateRecommendProductInfo(nowGoods);
         }
 		return nowGoods;
 	}

+ 62 - 8
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductAttachServiceImpl.java

@@ -4,6 +4,8 @@ import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
 import com.uas.platform.b2c.common.account.dao.UserBaseInfoDao;
 import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.platform.b2c.common.account.model.UserBaseInfo;
+import com.uas.platform.b2c.common.message.model.MessageModel;
+import com.uas.platform.b2c.common.psmessage.service.MessageService;
 import com.uas.platform.b2c.core.constant.Status;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.prod.commodity.dao.ProductAttachSubmitDao;
@@ -31,7 +33,18 @@ import com.uas.platform.core.persistence.criteria.CriterionExpression.Operator;
 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;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
@@ -40,12 +53,6 @@ import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-import java.util.*;
-
 /**
  * Created by wangyc on 2018/6/26.
  *
@@ -72,12 +79,19 @@ public class ProductAttachServiceImpl implements ProductAttachService {
 
     private final UserBaseInfoDao userBaseInfoDao;
 
+    private final MessageService messageService;
+
+    private final String AUDIT_MESSAGE = "您提交的关于品牌“%s” 型号“%s” 的规格书,%s。原因:%s";
+
+    private final String AUDIT_FAILED = "审核不通过";
+
+    private final Logger LOGGER = Logger.getLogger(getClass());
+
     @Autowired
     private ProductService productService;
 
     @Autowired
-    public ProductAttachServiceImpl(ProductDao productDao, ProductAttachSubmitDao productAttachSubmitDao,
-                                    ComponentDao componentDao, BrandInfoDao brandInfoDao, KindInfoDao kindInfoDao, ComponentService componentService, KindDao kindDao, EnterpriseDao enterpriseDao, UserBaseInfoDao userBaseInfoDao) {
+    public ProductAttachServiceImpl(ProductDao productDao, ProductAttachSubmitDao productAttachSubmitDao,ComponentDao componentDao, BrandInfoDao brandInfoDao, KindInfoDao kindInfoDao, ComponentService componentService, KindDao kindDao, EnterpriseDao enterpriseDao, UserBaseInfoDao userBaseInfoDao,MessageService messageService) {
         this.productDao = productDao;
         this.productAttachSubmitDao = productAttachSubmitDao;
         this.componentDao = componentDao;
@@ -87,6 +101,7 @@ public class ProductAttachServiceImpl implements ProductAttachService {
         this.kindDao = kindDao;
         this.enterpriseDao = enterpriseDao;
         this.userBaseInfoDao = userBaseInfoDao;
+        this.messageService = messageService;
     }
 
     @Override
@@ -392,11 +407,50 @@ public class ProductAttachServiceImpl implements ProductAttachService {
             submit.setReason(reason);
             submit = productAttachSubmitDao.save(submit);
 
+            // 发送消息给提交人
+            sendMessage(submit, false);
+
             return ResultMap.success(submit);
         }
 
     }
 
+    /**
+     * 发送审核消息
+     * @param submit 申请
+     * @param success 是否成功
+     */
+    private void sendMessage(ProductAttachSubmit submit, Boolean success) {
+        List<MessageModel> messageModels = new ArrayList<>();
+        // 审核失败
+        if (!success && submit.getProductId() != null) {
+            Product product = productDao.findOne(submit.getProductId());
+            String result = "";
+            if (product != null) {
+                submit.setProduct(product);
+                MessageModel model = new MessageModel();
+                model.setType("规格书申请");
+                model.setConsumerApp("MALL");
+                model.setContent(String.format(AUDIT_MESSAGE, submit.getProduct().getBrand() != null ? submit.getProduct().getBrand() : "-", submit.getProduct().getPcmpcode() != null ? submit.getProduct().getPcmpcode() : "-", AUDIT_FAILED, submit.getReason()));
+                model.setCreateTime(new Date());
+                model.setProducerApp("MALL");
+                model.setReceiverEnuu(submit.getSubmitEnuu());
+                model.setReceiverUu(submit.getSubmitUu());
+                model.setSenderEnuu(submit.getAuditEnuu());
+                model.setSenderUu(submit.getAuditUu());
+                model.setSmsType("DONT_SEND");
+                model.setConsumerType("SINGLE");
+                messageModels.add(model);
+
+                result = messageService.sendMessage(messageModels);
+                LOGGER.info("物料规格书审核:审核发送消息:" + result);
+            } else {
+                result = "物料不存在,物料id为" + submit.getProductId();
+                LOGGER.info("物料规格书审核:审核发送消息失败" + result);
+            }
+        }
+    }
+
     @Override
     public ResultMap chooseAttach(String attach, ProductAttachSubmit submit) {
         ResultMap map = validateSubmit(submit);

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

@@ -1,10 +1,12 @@
 package com.uas.platform.b2c.prod.product.kind.controller;
 
 import com.uas.platform.b2c.prod.product.kind.model.Kind;
+import com.uas.platform.b2c.prod.product.kind.model.KindInfo;
 import com.uas.platform.b2c.prod.product.kind.model.KindProperty;
 import com.uas.platform.b2c.prod.product.kind.service.KindService;
 import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.wordnik.swagger.annotations.ApiOperation;
 import com.wordnik.swagger.annotations.ApiParam;
@@ -13,6 +15,7 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.servlet.ModelAndView;
@@ -222,4 +225,15 @@ public class KindController {
 	public ModelAndView downloadKindProperties(@PathVariable("kindid") Long kindId) {
 		return kindService.downloadKindProperties(kindId);
 	}
+
+	/**
+	 * 通过父类目id获取类目信息
+	 * @param parentId 父类目id
+	 * @return
+	 */
+	@RequestMapping(value = "/parentid", method = RequestMethod.GET)
+	public ResultMap getKindsByLevelAndParentId(@RequestParam(value = "parentid", defaultValue = "0") Long parentId) {
+		List<KindInfo> kindInfos = kindService.findByParentId(parentId);
+		return ResultMap.success(kindInfos);
+	}
 }

+ 8 - 2
src/main/java/com/uas/platform/b2c/prod/product/kind/service/KindService.java

@@ -6,11 +6,10 @@ import com.uas.platform.b2c.prod.product.kind.model.Kind;
 import com.uas.platform.b2c.prod.product.kind.model.KindInfo;
 import com.uas.platform.b2c.prod.product.kind.model.KindProperty;
 import com.uas.platform.b2c.prod.product.property.model.Property;
-import org.springframework.web.servlet.ModelAndView;
-
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import org.springframework.web.servlet.ModelAndView;
 
 public interface KindService {
 	/**
@@ -348,4 +347,11 @@ public interface KindService {
 	 * @return kindids
 	 */
 	public Set<Long> findByEnUU(Long enUU);
+
+	/**
+	 * 通过父类目id获取类目信息
+	 * @param parentId 父类目id
+	 * @return
+	 */
+	List<KindInfo> findByParentId(Long parentId);
 }

+ 16 - 0
src/main/java/com/uas/platform/b2c/prod/product/kind/service/impl/KindServiceImpl.java

@@ -1354,4 +1354,20 @@ public class KindServiceImpl implements KindService {
 	public Set<Long> findByEnUU(Long enUU) {
 		return pcbDao.findByEnUU(enUU);
 	}
+
+	@Override
+	public List<KindInfo> findByParentId(Long parentId) {
+		List<KindInfo> kindInfos = new ArrayList<>();
+		if (parentId == 0L) {
+			kindInfos = kindInfoDao.findByParentid(parentId);
+		} else {
+			KindInfo parentKind = kindInfoDao.findOne(parentId);
+			if (parentKind == null || parentKind.getIsLeaf().equals(0)) {
+				throw new IllegalOperatorException("此类目不存在或无下级类目");
+			} else {
+				kindInfos = kindInfoDao.findByParentid(parentId);
+			}
+		}
+		return kindInfos;
+	}
 }

BIN
src/main/resources/jxls-tpl/trade/releaseByBatch-rmb.xls


BIN
src/main/resources/jxls-tpl/trade/releasebyBatch-usd.xls


BIN
src/main/webapp/resources/img/vendor/images/upload_file_no_pass.png


+ 47 - 23
src/main/webapp/resources/js/admin/controllers/AuditRegulpicListCtrl.js

@@ -183,8 +183,8 @@ define([ 'app/app' ], function(app) {
   /**
    * 审核通过模态框控制器
    */
-  app.register.controller('auditRegulpicpassController', ['$scope', '$modalInstance', 'toaster', 'Commodity', 'Search','item', 'StoreAdminListInformation',
-    function ($scope, $modalInstance, toaster, Commodity, Search, item, StoreAdminListInformation) {
+  app.register.controller('auditRegulpicpassController', ['$scope', '$modalInstance', 'toaster', 'Commodity', 'Search','item', 'StoreAdminListInformation', 'Kind',
+    function ($scope, $modalInstance, toaster, Commodity, Search, item, StoreAdminListInformation, Kind) {
 
     $scope.kindPojo = {
       first: '请选择一级类目',
@@ -199,7 +199,10 @@ define([ 'app/app' ], function(app) {
     $scope.item = item;
     $scope.keyword = item.brand ? item.brand.nameEn : '';
     $scope.kindId = item.kind ? item.kind.nameCn : '';
-        /**
+    $scope.Showbrand = item.brand ? true : false;
+    $scope.ShowKind = item.kind ? true : false;
+    $scope.FisrtkindInfo = []
+    /**
      * 品牌联想词
      */
     $scope.onBrandChange = function(name) {
@@ -207,21 +210,24 @@ define([ 'app/app' ], function(app) {
         $scope.BrandList = []
         return false
       }
-      if ((/[^\x00-\xff]/g).test(name)) {
-        $scope.keyword = ''
-        $scope.BrandList = []
-        return false
-      }
       $scope.BrandList = getSimilarBrands(name).$$state
     }
     /**
      * 品牌联想词失去焦点
      */
+    var _Ch = false
     $scope.onBrandBlur = function(name) {
-      if (name === '') {
-        $scope.BrandList = []
-        return false
-      }
+      setTimeout(function() {
+        if (name !== '') {
+          if (!_Ch) {
+            $scope.keyword = ''
+            angular.element('#brannameid').val('')
+            angular.element('.listUl').hide()
+            $scope.BrandList = []
+          }
+        }
+        _Ch = false
+      }, 250)
     }
     /**
      * 保存不通过原因
@@ -237,32 +243,32 @@ define([ 'app/app' ], function(app) {
           toaster.pop('error', '商城一级类目未选择');
           return;
         }
-        if ($scope.kindPojo.second === ''
-            && $scope.kindInfo[$scope.kindPojo.first].children) {
+        if ($scope.kindPojo.second === '请选择二级类目' && $scope.TwokindInfo.length > 0) {
           toaster.pop('error', '商城二级类目未选择');
           return;
         }
-        if ($scope.kindPojo.third === ''
-            && $scope.kindInfo[$scope.kindPojo.first].children[$scope.kindPojo.second].children) {
+        if ($scope.kindPojo.third === '请选择三级类目'  && $scope.ThreekindInfo.length > 0) {
           toaster.pop('error', '商城三级类目未选择');
           return;
         }
-        if ($scope.kindPojo.third !== '') {
+        if ($scope.kindPojo.third !== '请选择三级类目') {
           info = $scope.kindPojo.third
-        } else if ($scope.kindPojo.second !== '') {
+        } else if ($scope.kindPojo.second !== '请选择二级类目') {
           info = $scope.kindPojo.second
-        } else if ($scope.kindPojo.first !== '') {
+        } else if ($scope.kindPojo.first !== '请选择一级类目') {
           info = $scope.kindPojo.first
         }
-        $scope.item.kindId = info.id
+        $scope.item.kindId = info
         $scope.item.brandId = $scope.brandId
       }
       $scope.item.spec = $scope.spec !== '' ? $scope.spec : $scope.item.product.spec
       toaster.pop('success', '提示',  '已提交,请稍等');
       StoreAdminListInformation.auditSuccess({}, $scope.item, function(data) {
-        if (data.success) {
+        if (data.success || data.code === 4) {
           $modalInstance.close(data);
         } else {
+          $scope.item.kindId = ''
+          $scope.item.brandId = ''
           toaster.pop('error', data.message);
         }
       })
@@ -273,6 +279,7 @@ define([ 'app/app' ], function(app) {
     $scope.setBrand = function(item, id) {
       $scope.keyword = item
       $scope.brandId = id
+      _Ch = true
       $scope.BrandList = []
     }
 
@@ -284,12 +291,28 @@ define([ 'app/app' ], function(app) {
     }
 
     var initKindDataInfo = function () {
-      Commodity.getAllKindInfo({}, function (data) {
-        $scope.kindInfo = data[0].children;
+      Kind.Getparentid({parentid: 0}, function (data) {
+        $scope.FisrtkindInfo = data.data
       })
     };
     initKindDataInfo();
 
+    $scope.ChooseFirstItem = function() {
+      $scope.kindPojo.second = '请选择二级类目'
+      $scope.kindPojo.third = '请选择三级类目'
+      $scope.ThreekindInfo = []
+      Kind.Getparentid({parentid: $scope.kindPojo.first}, function (data) {
+        $scope.TwokindInfo = data.data
+      })
+    }
+
+    $scope.ChooseTwoItem = function() {
+      $scope.kindPojo.third = '请选择三级类目'
+      Kind.Getparentid({parentid: $scope.kindPojo.second}, function (data) {
+        $scope.ThreekindInfo = data.data
+      })
+    }
+
     /**
      * 获取品牌联想词
      *
@@ -340,5 +363,6 @@ define([ 'app/app' ], function(app) {
     function dismiss() {
       $modalInstance.dismiss();
     }
+
   }])
 });

+ 10 - 5
src/main/webapp/resources/js/common/directives.js

@@ -779,7 +779,7 @@ define(['angular', 'showdown', 'angular-toaster'], function(angular) {
 			if (!config.file || (typeof config.file != 'object')) return;
 			if (config.success && (typeof config.success != 'function')) return;
 			if (config.error && (typeof config.error != 'function')) return;
-
+			if (!config.maxSize) config.maxSize = 3145728
 			console.log('upload-file', config.file);
 
 			// 检测上传文件的类型
@@ -789,8 +789,12 @@ define(['angular', 'showdown', 'angular-toaster'], function(angular) {
 			}
 
 			// 限制文件的大小
-			if (config.file.size > 3145728) {
-				alert('上传图片的大小不能超过3M');
+			if (config.file.size > Number(config.maxSize)) {
+				if (config.maxSize === 3145728) {
+          alert('上传图片的大小不能超过3M')
+        } else {
+          alert('上传pdf的大小不能超过20M')
+				}
 				//toaster.pop('error', '上传图片的大小不能超过3M');
 				return;
 			}
@@ -859,7 +863,7 @@ define(['angular', 'showdown', 'angular-toaster'], function(angular) {
 				if (!_accept) {
           element.append('<input type=file class=uploadImage style=display:none; accept=image/jpeg,image/jpg,image/gif,image/bmp,image/png,.pdf />');
 				} else {
-          element.append("<input type='file' class='uploadImage' style='display:none;' accept="+_accept+" />");
+          element.append("<input type='file' class='uploadImage' style='display:none;' accept='.pdf' />");
         }
 				var uploadImage = $(element).find('.uploadImage');
 
@@ -908,7 +912,8 @@ define(['angular', 'showdown', 'angular-toaster'], function(angular) {
 							error : function (message) {
 								alert(message);
 								//toaster.pop('error', message);
-							}
+							},
+							maxSize: maxSize
 						});
 					} else {
 						// TODO huxz 兼容IE

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

@@ -46,6 +46,7 @@ define([ 'ngResource' ], function() {
 				method: 'GET',
 				isArray: true
 			}
+
 		});
 	}]);
 });

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

@@ -56,7 +56,14 @@ define([ 'ngResource'], function() {
 			changeKindProperty: {
 				url: 'produce/kind/kindProperty/changeKindProperty',
 				method: 'PUT'
-			}
+			},
+      /**
+       * 返回所有类目信息(正式环境)
+       */
+      Getparentid: {
+        url : 'produce/kind/parentid',
+        method: 'GET'
+      }
 		});
 	}]).factory('KindAPI', ['$resource', '$cacheFactory', function($resource, $cacheFactory) {
 		var cache = $cacheFactory('KindAPI');

+ 1 - 14
src/main/webapp/resources/js/sso/controllers/applyBindCtrl.js

@@ -6,7 +6,7 @@ define(['app/app'], function (app) {
     "use strict";
     app.register.controller('applyBindCtrl', ['$scope', '$rootScope', 'Enterprise', 'User', 'toaster', '$modal', 'BaseService', 'ngTableParams', '$http', 'AuthenticationService', '$stateParams','AccountResource','AccountRole', 'Authority', function ($scope, $rootScope, Enterprise, User, toaster, $modal, BaseService, ngTableParams, $http, AuthenticationService, $stateParams, AccountResource, AccountRole, Authority) {
         $rootScope.active = 'sso_apply';
-        document.title = '申请绑定——帐户中心';
+        document.title = '绑定审核——帐户中心';
         $scope.tab = 'base';
         $scope.addingUser = false;
         $scope.setAddingUser = function (status) {
@@ -110,19 +110,6 @@ define(['app/app'], function (app) {
             applyToEnterpriseTableParams();
         }
 
-        //手机号和邮箱号的部分隐藏
-        if($scope.userInfo.userTel){
-            $scope.userInfo.userTel = $scope.userInfo.userTel.substr(0, 3)
-                + '****' + $scope.userInfo.userTel.substr(7);
-        }
-        var userEmailTemp = $scope.userInfo.userEmail
-            ? $scope.userInfo.userEmail.indexOf("@") : '';
-        if (userEmailTemp != '') {
-            $scope.userInfo.userEmail = $scope.userInfo.userEmail.substr(
-                0,1) + "***"
-                + $scope.userInfo.userEmail.substr(userEmailTemp);
-        }
-
         var getEnterprise = function () {
             // 获取企业信息
             Enterprise.getEnterpriseInfo({enuu : $scope.userInfo.enterprise.uu}, function(data) {

+ 0 - 13
src/main/webapp/resources/js/sso/controllers/rolePermissionCtrl.js

@@ -114,19 +114,6 @@ define(['app/app'], function (app) {
             applyToEnterpriseTableParams();
         }
 
-      //手机号和邮箱号的部分隐藏
-      if($scope.userInfo.userTel){
-        $scope.userInfo.userTel = $scope.userInfo.userTel.substr(0, 3)
-            + '****' + $scope.userInfo.userTel.substr(7);
-      }
-      var userEmailTemp = $scope.userInfo.userEmail
-          ? $scope.userInfo.userEmail.indexOf("@") : '';
-      if (userEmailTemp != '') {
-        $scope.userInfo.userEmail = $scope.userInfo.userEmail.substr(
-            0,1) + "***"
-            + $scope.userInfo.userEmail.substr(userEmailTemp);
-      }
-
 		var getEnterprise = function () {
 			// 获取企业信息
 			Enterprise.getEnterpriseInfo({enuu : $scope.userInfo.enterprise.uu}, function(data) {

+ 2 - 2
src/main/webapp/resources/js/sso/controllers/securitySetCtrl.js

@@ -115,13 +115,13 @@ define(['app/app'], function (app) {
 
       //手机号和邮箱号的部分隐藏
       if($scope.userInfo.userTel){
-        $scope.userInfo.userTel = $scope.userInfo.userTel.substr(0, 3)
+        $scope.userTel = $scope.userInfo.userTel.substr(0, 3)
             + '****' + $scope.userInfo.userTel.substr(7);
       }
       var userEmailTemp = $scope.userInfo.userEmail
           ? $scope.userInfo.userEmail.indexOf("@") : '';
       if (userEmailTemp != '') {
-        $scope.userInfo.userEmail = $scope.userInfo.userEmail.substr(
+        $scope.userEmail = $scope.userInfo.userEmail.substr(
             0,1) + "***"
             + $scope.userInfo.userEmail.substr(userEmailTemp);
       }

+ 0 - 12
src/main/webapp/resources/js/sso/controllers/ssoAddressCtrl.js

@@ -20,18 +20,6 @@ define(['app/app'], function (app) {
                 $scope.userInfoBackup = angular.copy($scope.userInfo);
                 $scope.canAddTotal = 20;
 
-                //手机号和邮箱号的部分隐藏
-                if($scope.userInfo.userTel){
-                    $scope.userInfo.userTel = $scope.userInfo.userTel.substr(0, 3)
-                        + '****' + $scope.userInfo.userTel.substr(7);
-                }
-                var userEmailTemp = $scope.userInfo.userEmail
-                    ? $scope.userInfo.userEmail.indexOf("@") : '';
-                if (userEmailTemp != '') {
-                    $scope.userInfo.userEmail = $scope.userInfo.userEmail.substr(
-                        0,1) + "***"
-                        + $scope.userInfo.userEmail.substr(userEmailTemp);
-                }
                 // 获取企业信息
                 if ($scope.userInfo.enterprise) {
                     Enterprise.getEnterpriseInfo({enuu: $scope.userInfo.enterprise.uu},

+ 0 - 13
src/main/webapp/resources/js/sso/controllers/ssoInfoCtrl.js

@@ -112,19 +112,6 @@ define(['app/app'], function (app) {
             applyToEnterpriseTableParams();
         }
 
-      //手机号和邮箱号的部分隐藏
-      if($scope.userInfo.userTel){
-        $scope.userInfo.userTel = $scope.userInfo.userTel.substr(0, 3)
-            + '****' + $scope.userInfo.userTel.substr(7);
-      }
-      var userEmailTemp = $scope.userInfo.userEmail
-          ? $scope.userInfo.userEmail.indexOf("@") : '';
-      if (userEmailTemp != '') {
-        $scope.userInfo.userEmail = $scope.userInfo.userEmail.substr(
-            0,1) + "***"
-            + $scope.userInfo.userEmail.substr(userEmailTemp);
-      }
-
 		var getEnterprise = function () {
 			// 获取企业信息
 			Enterprise.getEnterpriseInfo({enuu : $scope.userInfo.enterprise.uu}, function(data) {

+ 3 - 13
src/main/webapp/resources/js/sso/controllers/staffManagementCtrl.js

@@ -12,6 +12,9 @@ define(['app/app'], function (app) {
         $scope.setAddingUser = function (status) {
             $scope.addingUser = status;
             $scope.adding = false;
+            $scope.newUser = {};
+            $scope.newUser.userTel = '';
+            $scope.newUser.userEmail = '';
         };
         $scope.userInfo = $rootScope.userInfo;
 		$scope.updateState = false;
@@ -114,19 +117,6 @@ define(['app/app'], function (app) {
             applyToEnterpriseTableParams();
         }
 
-      //手机号和邮箱号的部分隐藏
-      if($scope.userInfo.userTel){
-        $scope.userInfo.userTel = $scope.userInfo.userTel.substr(0, 3)
-            + '****' + $scope.userInfo.userTel.substr(7);
-      }
-      var userEmailTemp = $scope.userInfo.userEmail
-          ? $scope.userInfo.userEmail.indexOf("@") : '';
-      if (userEmailTemp != '') {
-        $scope.userInfo.userEmail = $scope.userInfo.userEmail.substr(
-            0,1) + "***"
-            + $scope.userInfo.userEmail.substr(userEmailTemp);
-      }
-
 		var getEnterprise = function () {
 			// 获取企业信息
 			Enterprise.getEnterpriseInfo({enuu : $scope.userInfo.enterprise.uu}, function(data) {

+ 14 - 14
src/main/webapp/resources/js/usercenter/controllers/forstore/seek_purchase_ctrl.js

@@ -40,7 +40,7 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
           }
           seekPurchase.getSeekUrl({}, function(data) {
             var seekUrl = data.url;
-              // var seekUrl = 'http://10.1.51.82:24002';
+            //   var seekUrl = 'http://10.1.51.82:24002';
             /*$scope.tab = 'waitOffer';*/
             $scope.toogleTab = function (tab) {
               $scope.vendorType = 'all'
@@ -248,7 +248,7 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
               toaster.pop('error', '型号输入不合法');
               $scope.validObj.code = false;
             }
-            return this.validObj.code;
+            return $scope.validObj.code;
           }
           $scope.checkBrand = function () {
             $scope.setShowSimilarBrandList($scope.isInBrandList);
@@ -603,16 +603,6 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
                   $scope.offerCount = 0;
                   $scope.replaceOfferCount = 0;
               }
-              if (seek.qutations && seek.qutations.length && $scope.isInit) {
-                  for (var i = 0; i < seek.qutations.length; i++) {
-                      if (seek.qutations[i].isReplace == 1) {
-                          $scope.replaceOfferCount++;
-                      } else {
-                          $scope.offerCount++;
-                      }
-                  }
-                  $scope.isInit = false;
-              }
             // $scope.offerCount = seek.offerAmount;
             $scope.currentSeek = seek;
               if (!seek.$status || seek.$status != 1) {
@@ -630,7 +620,17 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
                     } else {
                         $scope.offer = seek.qutations;
                         clearSeekStatus();
-                        seek.$status = status;
+                        if (seek.qutations && seek.qutations.length && $scope.isInit) {
+                            for (var i = 0; i < seek.qutations.length; i++) {
+                                if (seek.qutations[i].isReplace == 1) {
+                                    $scope.replaceOfferCount++;
+                                } else {
+                                    $scope.offerCount++;
+                                }
+                            }
+                        }
+                        seek.$status = $scope.isInit ? $scope.offerCount == 0 ? 3 : 2 : status;
+                        $scope.isInit = false;
                     }
                 });
             } else if (status == 1 && $scope.goodsCount != 0) {// 查看现货
@@ -1070,7 +1070,7 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
             if($(canvas).children().length> 1){
               return false
             }
-            console.log(QRCode)
+            // console.log(QRCode)
             // QRCode.toCanvas(shareMurl, canvas, function (error) {
             //   if (error){ console.error(error);return;}
             //   console.log('success!');

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

@@ -1140,7 +1140,7 @@ define([ 'angularAMD', 'ngLocal', 'common/services', 'common/directives', 'commo
   // 上传规格书
   app.controller('editRegulationCtrl', ['$scope', 'Regulpic', '$modalInstance','showAction', 'Search', 'ChooseItem', 'toaster', function ($scope, Regulpic, $modalInstance, showAction, Search, ChooseItem, toaster) {
     $scope.iniUrlImg = 'static/img/vendor/images/upload_file_icon.png'
-    $scope.Regulpic = Regulpic; // 图片
+    $scope.Regulpic =  (ChooseItem.productAttachSubmit && ChooseItem.productAttachSubmit.uploadAttach) || ChooseItem.attach || 'static/img/vendor/images/upload_file_icon.png'; // 图片
     $scope.Ischange = (ChooseItem.productAttachSubmit && ChooseItem.productAttachSubmit.uploadAttach || ChooseItem.attach) ? true : false
     $scope.showAction = showAction || false  // 个人产品库和企业产品 还是在售产品
 	  $scope.IsLookOrUpdate = ChooseItem.standard === 1 ? 'look' : 'update' // 编辑还是查看
@@ -1152,6 +1152,8 @@ define([ 'angularAMD', 'ngLocal', 'common/services', 'common/directives', 'commo
     $scope.CodeList = [] // 型号数组
 	  $scope.RegulChange = (ChooseItem.standard === 1 && $scope.Ischange) ? false : true // 规格书是否可以编辑
 	  // $scope.RegulpicUrl = ChooseItem.Regulpic
+	  $scope.ChooseItem = ChooseItem
+	  // console.log(ChooseItem.productAttachSubmit.uploadAttach)
     $scope.cancel = function () {
       $modalInstance.close();
     };
@@ -1184,6 +1186,7 @@ define([ 'angularAMD', 'ngLocal', 'common/services', 'common/directives', 'commo
     // 删除已上传图片
     $scope.deleteImg = function () {
       $scope.Regulpic = $scope.iniUrlImg
+      $scope.Ischange = false
     }
 
     // 图片上传成功之后
@@ -1202,11 +1205,6 @@ define([ 'angularAMD', 'ngLocal', 'common/services', 'common/directives', 'commo
         $scope.BrandList = []
         return false
       }
-      if ((/[^\x00-\xff]/g).test(name)) {
-        $scope.brandcode = ''
-        $scope.BrandList = []
-        return false
-      }
       $scope.BrandList = getSimilarBrands(name).$$state
     }
 

+ 166 - 6
src/main/webapp/resources/js/vendor/controllers/forstore/seek_purchase_ctrl.js

@@ -1,9 +1,9 @@
 define(['app/app'], function (app) {
   app.register.controller('seekPurchaseCtrl',
       ['$scope', '$location', '$rootScope', '$stateParams', '$state', 'toaster',
-        'seekPurchase', 'BaseService', 'ngTableParams', '$modal', '$upload', '$http', 'Authority',
+        'seekPurchase', 'BaseService', 'ngTableParams', '$modal', '$upload', '$http', 'Authority', 'Search',
         function ($scope, $location, $rootScope, $stateParams, $state, toaster,
-            seekPurchase, BaseService, ngTableParams, $modal, $upload, $http, Authority) {
+            seekPurchase, BaseService, ngTableParams, $modal, $upload, $http, Authority, Search) {
           document.title = '求购询价-优软商城';
           $rootScope.active = 'vendor_seek_purchase';
           $scope.seekPurchaseRate = {};
@@ -11,17 +11,18 @@ define(['app/app'], function (app) {
           seekPurchase.getSeekUrl({}, function(data) {
             var seekUrl = data.url;
             // var seekUrl = 'http://10.1.51.82:24002';
-          $scope.initInquiryItem = function () {
+          var initInquiryItem = function () {
             $scope.validSayPrice = {
               leadtime: false,
               repliesPrice: false,
               repliesLapQty: false,
               replaceBrand: false,
               replaceCmpCode: false,
-              replaceSpec: false
-            }
+              replaceSpec: true
+            };
+            $scope.inquiryItem = {};
           }
-          $scope.initInquiryItem();
+          initInquiryItem();
 
             $scope.setSayType = function (type) {
               if (type == 'current') {
@@ -205,6 +206,15 @@ define(['app/app'], function (app) {
             }
             return len;
           }
+            var cutOutString = function (str, length) {
+              for (var i = 1; i <= str.length; i++) {
+                if (getRealLen(str.substr(0, i)) > length){
+                  str = str.substr(0, i-1);
+                  break;
+                }
+              }
+              return str;
+            };
 
           $scope.onProduceDateChange = function () {
             if ($scope.offer.produceDate && getRealLen($scope.offer.produceDate) > 12) {
@@ -340,6 +350,7 @@ define(['app/app'], function (app) {
           $scope.isShowSayPriceBox = false;
           /*设置列表状态*/
           $scope.setSeekActive = function (seek, flag, index) {
+            $scope.setSayType('current');
             Authority.getAuthority({resUrl: '/authInquiry/inquiry/sale/item/save'}, function (data) {
               if (data.status == 'fail') {
                 toaster.pop('error', data.msg || '系统错误');
@@ -487,6 +498,155 @@ define(['app/app'], function (app) {
             return {index: -1};
           }*/
 
+            $scope.checkNull = function (code) {
+              var str = code;
+              var filterStr = new Array("空", "没", "无", "-", "—", "null", "#N/A");
+              var flag = true;
+              angular.forEach (filterStr, function(item) {
+                if (str == item){
+                  flag = false;
+                  return;
+                }
+              })
+              return flag;
+            }
+
+            $scope.showSimilarCodeList = false;
+            $scope.isInCodeList = false;
+            $scope.showSimilarBrandList = false;
+            $scope.isInBrandList = false;
+
+            $scope.checkBrand = function () {
+              $scope.setShowSimilarBrandList($scope.isInBrandList);
+              $scope.validSayPrice.replaceBrand = $scope.inquiryItem.replaceBrand
+                  && $scope.inquiryItem.replaceBrand !== '';
+              if (!$scope.validSayPrice.replaceBrand) {
+                toaster.pop('error', '品牌不能为空');
+              }
+              if (!$scope.checkNull($scope.inquiryItem.replaceBrand)){
+                toaster.pop('error', '品牌输入不合法');
+                $scope.validSayPrice.replaceBrand = false;
+              }
+              return $scope.validSayPrice.replaceBrand;
+            }
+            $scope.checkCode = function () {
+              $scope.setShowSimilarCodeList($scope.isInCodeList);
+              $scope.validSayPrice.replaceCmpCode = $scope.inquiryItem.replaceCmpCode && $scope.inquiryItem.replaceCmpCode !== '';
+              if (!$scope.validSayPrice.replaceCmpCode) {
+                toaster.pop('error', '型号不能为空');
+              }
+              if (!$scope.checkNull($scope.inquiryItem.replaceCmpCode)){
+                toaster.pop('error', '型号输入不合法');
+                $scope.validSayPrice.replaceCmpCode = false;
+              }
+              return $scope.validSayPrice.replaceCmpCode;
+            }
+
+
+            $scope.getSimilarCode = function () {
+              if ($scope.inquiryItem.replaceCmpCode) {
+                Search.getSimilarComponents({keyword : $scope.inquiryItem.replaceCmpCode}, function (data) {
+                  $scope.similarCode = data || [];
+                  $scope.setShowSimilarCodeList(data && data.length);
+                }, function (error) {
+                  toaster.pop('error', '系统错误');
+                })
+              }
+            }
+
+            $scope.getSimilarBrand = function () {
+              if ($scope.inquiryItem.replaceBrand) {
+                Search.getSimilarBrands({keyword : $scope.inquiryItem.replaceBrand}, function (data) {
+                  $scope.similarBrand = data || [];
+                  $scope.setShowSimilarBrandList(data && data.length);
+                }, function (error) {
+                  toaster.pop('error', '系统错误');
+                })
+              }
+            }
+
+
+            $scope.setShowSimilarBrandList = function (flag) {
+              $scope.showSimilarBrandList = flag;
+            }
+
+            $scope.setShowSimilarCodeList = function (flag) {
+              $scope.showSimilarCodeList = flag;
+            }
+
+            $scope.onBrandChange = function () {
+              // $scope.applyObj.brand = $scope.applyObj.brand.trim();
+              if ((/[^\x00-\xff]/g).test($scope.inquiryItem.replaceBrand)) {
+                var chineseIndex = -1;
+                for (var i = 0; i < $scope.inquiryItem.replaceBrand.length; i++) {
+                  if ((/[^\x00-\xff]/g).test($scope.inquiryItem.replaceBrand.charAt(i)) && !(/[\u4e00-\u9fa5]/).test($scope.inquiryItem.replaceBrand.charAt(i))) {
+                    chineseIndex = i;
+                    break;
+                  }
+                }
+                if (chineseIndex > -1) {
+                  $scope.inquiryItem.replaceBrand = $scope.inquiryItem.replaceBrand.substring(0, chineseIndex);
+                }
+              } else if ($scope.inquiryItem.replaceBrand && getRealLen($scope.inquiryItem.replaceBrand) > 50) {
+                $scope.inquiryItem.replaceBrand = cutOutString($scope.inquiryItem.replaceBrand, 50);
+              } else {
+                if ($scope.inquiryItem.replaceBrand) {
+                  $scope.getSimilarBrand();
+                } else {
+                  $scope.showSimilarBrandList = false;
+                }
+              }
+            }
+
+            $scope.onCodeChange = function () {
+              // $scope.applyObj.code = $scope.applyObj.code.trim();
+              if ((/[^\x00-\xff]/g).test($scope.inquiryItem.replaceCmpCode)) {
+                var chineseIndex = -1;
+                for (var i = 0; i < $scope.inquiryItem.replaceCmpCode.length; i++) {
+                  if ((/[^\x00-\xff]/g).test($scope.inquiryItem.replaceCmpCode.charAt(i))) {
+                    chineseIndex = i;
+                    break;
+                  }
+                }
+                $scope.inquiryItem.replaceCmpCode = cutOutString($scope.inquiryItem.replaceCmpCode, chineseIndex);
+              } else if ($scope.inquiryItem.replaceCmpCode && getRealLen($scope.inquiryItem.replaceCmpCode) > 100) {
+                $scope.inquiryItem.replaceCmpCode = cutOutString($scope.inquiryItem.replaceCmpCode, 100);
+              } else {
+                if ($scope.inquiryItem.replaceCmpCode) {
+                  $scope.getSimilarCode();
+                } else {
+                  $scope.showSimilarCodeList = false;
+                }
+              }
+            }
+
+            $scope.setBrand = function (brand) {
+              $scope.inquiryItem.replaceBrand = brand;
+              $scope.setShowSimilarBrandList(false);
+            }
+
+            $scope.setCode = function (code) {
+              $scope.inquiryItem.replaceCmpCode = code;
+              $scope.setShowSimilarCodeList(false);
+            }
+
+
+            $scope.checkSpec = function () {
+              if (!$scope.checkNull($scope.inquiryItem.replaceSpec)){
+                toaster.pop('error', '规格输入不合法');
+                $scope.validSayPrice.replaceSpec = false;
+              } else {
+                $scope.validSayPrice.replaceSpec = true;
+              }
+              return $scope.validSayPrice.replaceSpec;
+            }
+            $scope.onSpecInput = function () {
+              if ($scope.inquiryItem.replaceSpec && getRealLen($scope.inquiryItem.replaceSpec) > 100) {
+                $scope.inquiryItem.replaceSpec = cutOutString($scope.inquiryItem.replaceSpec, 100);
+              }
+            };
+
+
           $scope.checkValid = function () {
             var validReplace = $scope.sayType == 'replace' ? $scope.validSayPrice.replaceBrand && $scope.validSayPrice.replaceCmpCode && $scope.validSayPrice.replaceSpec : true;
             for (var i = 0; i < $scope.inquiryItem.replies.length; i++) {

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

@@ -1497,7 +1497,8 @@ define([ 'app/app' ], function(app) {
             Goods.updateGoods(null, commodity, function(data){
                 if(data.code == 1) {
                     toaster.pop('success', '修改成功');
-                    $scope.currenctGoods.splice(index, 1, data.data);
+                    loadData()
+                    // $scope.currenctGoods.splice(index, 1, data.data);
                 }else {
                     toaster.pop('error', '失败', data.message);
                 }

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

@@ -726,6 +726,9 @@ define(['app/app'], function (app) {
 			console.log(products);
 			RecommendProductService.saveProductsWhenSellerUpdate($scope.storeInfo.uuid, products).then(function (products) {
 				$scope.recommendProducts = products;
+				angular.forEach(products, function (item) {
+					item.exist = true;
+				})
 				$scope.backupProducts = angular.copy(products);
 				cancleProductEdit('EDIT_PRODUCTS');
 				toaster.pop('success', '保存成功');

+ 6 - 2
src/main/webapp/resources/view/admin/RegulpicList.html

@@ -215,10 +215,14 @@
     border: 1px solid #219ee6;
     box-shadow: 0 0 2px #219ee6;
     background: #fff;
+    z-index: 999999;
   }
   .application-tab table tr td .lookNoPassInfo:hover .infoMore{
     display: block;
   }
+  #store-list .table tr>th, #store-list .table tr>td {
+    padding: 0px;
+  }
 </style>
 <div class="row-fluid sortable" id="store-list">
   <div class="com-title">
@@ -237,7 +241,7 @@
     </div>
     <div class="col-sm-3">
       <div class="sreach-input">
-        <input type="search" class="form-control" placeholder="请输入公司名" ng-model="keyword" ng-search="refreshTableData()"/>
+        <input type="search" class="form-control" placeholder="请输入公司名字/提交人" ng-model="keyword" ng-search="refreshTableData()"/>
         <button ng-click="refreshTableData()">搜索</button>
       </div>
     </div>
@@ -290,7 +294,7 @@
         <td>{{list.product.cmpCode || list.product.pcmpcode || '-'}}</td>
         <td><a href="{{list.uploadAttach}}" target="_blank"><img src="static/img/vendor/images/pdf.png" style="width:31px;height:35px;" /></a></td>
         <td>{{list.auditer.userName || '-'}}</td>
-        <td><span ng-bind="list.createTime | date : 'yyyy-MM-dd HH:mm:ss'"></span></td>
+        <td><span ng-bind="list.auditTime | date : 'yyyy-MM-dd HH:mm:ss'"></span></td>
         <td>
           <span style="color: #219ee6" ng-if="list.status === 311">待审核</span>
           <span style="color: #666" ng-if="list.status === 102">已通过</span>

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

@@ -1,7 +1,7 @@
 <div class="box">
 	<div class="box-header well" data-original-title>
 		<span style="color: #178acc"><i class="icon-user"></i> 标准器件审批</span>
-		<span ui-sref="audit_regulplist" style="cursor: pointer;"><i class="icon-user"></i> 规格书审核</span>
+		<span ui-sref="audit_regulplist" style="cursor: pointer;margin-left: 20px"><i class="icon-user"></i> 规格书审核</span>
 	</div>
 	<div class="box-content">
 		<!-- ng-tableStart -->

+ 7 - 2
src/main/webapp/resources/view/admin/modal/application_unpass_reason.html

@@ -24,9 +24,14 @@
 	}
 
 	div.title {
-		background-color: #F3F3F3;
+		background-color: #3ba9e9;
+		border-top-left-radius: 6px;
+		border-top-right-radius: 6px;
+		overflow: hidden;
+	}
+	.modal-content {
+		overflow: hidden;
 	}
-
 	#body . {
 		margin-bottom: 10px;
 	}

+ 7 - 1
src/main/webapp/resources/view/admin/modal/auditRegulpic_choose_modal.html

@@ -10,9 +10,15 @@
     padding-right: 10px;
     font-size: 15px;
   }
+  .modal-content {
+    overflow: hidden;
+  }
 
   div.title {
     background-color: #3ba9e9;
+    border-top-left-radius: 6px;
+    border-top-right-radius: 6px;
+    overflow: hidden;
   }
 
   #body . {
@@ -37,7 +43,7 @@
         <p style="color: #ea0025">商城已存在该标准物料,请选择正确的规格书</p>
       </div>
     </div>
-    <div class="form-group" style="margin: 0px">
+    <div class="form-group" style="border-bottom: 1px dashed #dcdcdc;padding-bottom: 15px;">
       <div class="col-sm-6">
         <label class="radio-inline">
           <input type="radio" name="inlineRadioOptions" id="inlineRadio1" value="store" ng-checked="checked === 'store'" ng-click="checked = 'store'">

+ 11 - 2
src/main/webapp/resources/view/admin/modal/auditRegulpic_modal.html

@@ -13,6 +13,12 @@
 
   div.title {
     background-color: #3ba9e9;
+    border-top-left-radius: 6px;
+    border-top-right-radius: 6px;
+    overflow: hidden;
+  }
+  .modal-content {
+    overflow: hidden;
   }
 
   #body . {
@@ -33,8 +39,11 @@
 <form class="form-horizontal " name="myForm" novalidate>
   <div class="modal-body" id="body">
     <div class="form-group">
-      <div class="col-sm-12">
-        <textarea class="form-control" id="reason" title="reason" rows="10" ng-model="reason" placeholder="请填写不通过原因(必填)"></textarea>
+      <div class="col-sm-12" style="position: relative">
+        <textarea maxlength="50" class="form-control" id="reason" title="reason" rows="10" ng-model="reason" placeholder="请填写不通过原因(必填)"></textarea>
+        <div style="position: absolute;bottom: 15px;right: 27px">
+          {{(reason && reason.length) || 0}} / 50
+        </div>
       </div>
     </div>
     <div class="form-group">

+ 31 - 26
src/main/webapp/resources/view/admin/modal/auditRegulpicpass_modal.html

@@ -10,9 +10,14 @@
     padding-right: 10px;
     font-size: 15px;
   }
-
+  .modal-content {
+    overflow: hidden;
+  }
   div.title {
     background-color: #3ba9e9;
+    border-top-left-radius: 6px;
+    border-top-right-radius: 6px;
+    overflow: hidden;
   }
 
   #body . {
@@ -29,7 +34,7 @@
     line-height: 28px;
   }
   .form-horizontal div {
-    color: #666;
+    color: #333;
     font-size: 14px
   }
   .form-horizontal .name {
@@ -40,7 +45,7 @@
     top: 28px;
     left: 15px;
     width: 240px;
-    max-height: 180px;
+    max-height: 140px;
     overflow-y: auto;
     background: #fff;
     border: 1px solid #dcdcdc;
@@ -65,67 +70,67 @@
   <div class="modal-body" id="body" style="padding: 0px 15px;">
     <div class="form-group">
       <div class="col-sm-3 name">品牌:</div>
-      <div class="col-sm-9">{{item.product.brand || item.product.pbranden || '-'}}</div>
+      <div class="col-sm-9">{{item.product.pbranden || item.product.brand || '-'}}</div>
     </div>
     <div class="form-group">
       <div class="col-sm-3 name">物料名称(类目):</div>
-      <div class="col-sm-9">{{item.product.kind || item.product.prodName || '-'}}</div>
+      <div class="col-sm-9">{{item.product.prodName || item.product.kind || '-'}}</div>
     </div>
     <div class="form-group">
       <div class="col-sm-3 name">型号:</div>
-      <div class="col-sm-9">{{item.product.cmpCode || item.product.pcmpcode || '-'}}</div>
+      <div class="col-sm-9">{{item.product.pcmpcode || item.product.cmpCode || '-'}}</div>
     </div>
-    <div class="form-group">
+    <div class="form-group" style="border-bottom: 1px dashed #dcdcdc;padding-bottom: 15px;">
       <div class="col-sm-3 name">规格书:</div>
       <div class="col-sm-9"><a href="{{item.uploadAttach}}" target="_blank"><img src="static/img/vendor/images/pdf.png" style="width:28px;height:28px;"/></a></div>
     </div>
     <div class="form-group">
-      <div class="col-sm-3 name"><em style="color: #ea0e0e">*</em>品牌:</div>
-      <div class="col-sm-9" style="position: relative;" ng-if="!item.brandId">
-        <input type="text" ng-blur="onBrandBlur(keyword)"  ng-change="onBrandChange(keyword)" placeholder="请输入品牌名字" ng-model="keyword" class="form-control" style="width: 240px;height: 28px" />
+      <div class="col-sm-3 name" style="color: #333"><em style="color: #ea0e0e">*</em>品牌:</div>
+      <div class="col-sm-9" style="position: relative;" ng-show="!Showbrand">
+        <input id="brannameid" type="text" ng-blur="onBrandBlur(keyword)"  ng-change="onBrandChange(keyword)" placeholder="请选择品牌名称" ng-model="keyword" class="form-control" style="width: 240px;height: 28px" />
         <ul class="listUl" ng-if="BrandList.value.length > 0">
           <li ng-repeat="item in BrandList.value" ng-click="setBrand(item.nameEn,item.id)">
             {{item.nameEn}}
           </li>
         </ul>
       </div>
-      <div class="col-sm-9" style="position: relative;" ng-if="item.brandId">
+      <div class="col-sm-9" style="position: relative;" ng-if="Showbrand">
         {{item.brand.nameEn}}
       </div>
     </div>
     <div class="form-group">
-      <div class="col-sm-3 name"><em style="color: #ea0e0e">*</em>商城类目:</div>
-      <div class="col-sm-9" ng-if="!item.kindId">
+      <div class="col-sm-3 name" style="color: #333"><em style="color: #ea0e0e">*</em>商城类目:</div>
+      <div class="col-sm-9" ng-if="!ShowKind">
         <div class="col-sm-4" style="padding: 0px;">
           <select class="form-control"
                   ng-model="kindPojo.first"
-                  ng-options="key as value.nameCn for (key,value) in kindInfo"
-                  ng-change="kindPojo.second='';kindPojo.third='';"
+                  ng-change="ChooseFirstItem()"
                   style="opacity: 1;height:28px;overflow-y: scroll;line-height:28px;padding: 0 6px;">
-            <option value="">请选择一级类目</option>
+            <option value="请选择一级类目" selected="selected">请选择一级类目</option>
+            <option ng-repeat="item in FisrtkindInfo" value="{{item.id}}">{{item.nameCn}}</option>
           </select>
         </div>
         <div class="col-sm-4" style="padding: 0px;">
-          <select class="form-control" ng-model="kindPojo.second" ng-show="kindInfo[kindPojo.first].children"
-                  ng-options="key as value.nameCn for (key,value) in kindInfo[kindPojo.first].children"
-                  ng-change="kindPojo.third='';" style="height:28px;line-height:28px;padding: 0 6px;">
-            <option value="">请选择二级类目</option>
+          <select class="form-control" ng-model="kindPojo.second" ng-show="TwokindInfo.length > 0"
+                  ng-change="ChooseTwoItem()" style="height:28px;line-height:28px;padding: 0 6px;">
+            <option value="请选择二级类目" selected="selected">请选择二级类目</option>
+            <option ng-repeat="item in TwokindInfo" value="{{item.id}}">{{item.nameCn}}</option>
           </select>
         </div>
         <div class="col-sm-4" style="padding: 0px;">
           <select class="form-control" ng-model="kindPojo.third" style="opacity: 1;height:28px;line-height:28px;padding: 0 6px;"
-                  ng-show="kindInfo[kindPojo.first].children[kindPojo.second].children"
-                  ng-options="value as value.nameCn for value in kindInfo[kindPojo.first].children[kindPojo.second].children">
-            <option value="">请选择三级类目</option>
+                  ng-show="ThreekindInfo.length> 0">
+            <option value="请选择三级类目" selected="selected">请选择三级类目</option>
+            <option ng-repeat="item in ThreekindInfo" value="{{item.id}}">{{item.nameCn}}</option>
           </select>
         </div>
       </div>
-      <div class="col-sm-9" ng-if="item.kindId">
+      <div class="col-sm-9" ng-if="ShowKind">
         {{item.kind.nameCn}}
       </div>
     </div>
-    <div class="form-group">
-      <div class="col-sm-3 name">规格:</div>
+    <div class="form-group" style="border-bottom: 1px solid #dcdcdc;padding-bottom: 12px;">
+      <div class="col-sm-3 name" style="color:#333;">规格:</div>
       <div class="col-sm-9">
         <input type="text" placeholder="请输入规格(非必填)" ng-model="spec" class="form-control" style="width: 240px;height: 28px" />
       </div>

+ 1 - 1
src/main/webapp/resources/view/sso/header.html

@@ -214,7 +214,7 @@
             <ul>
                 <!--<li ng-class="{'active' : active == 'home'}"><a href="#home" class="active">首页</a></li>-->
                 <!--<li ng-class="{'active' : active == 'message'}" ><a ui-sref="messagePersonal">消息(<span ng-bind="unReadMessage">0</span>)</a></li>-->
-                <li ng-if="userInfo.enterprise && userInfo.enterprise.uu" ng-class="{'active' : active == 'message'}" ><a ui-sref="messagePersonal">消息(<span ng-bind="unReadMessCount || 0"></span>)</a></li>
+                <!--<li ng-if="userInfo.enterprise && userInfo.enterprise.uu" ng-class="{'active' : active == 'message'}" ><a ui-sref="messagePersonal">消息(<span ng-bind="unReadMessCount || 0"></span>)</a></li>-->
                 <!--<li ng-class="{'active' : active == 'browsing-history'}" s><a href="#browsing-history">浏览历史</a></li>-->
             </ul>
         </div>

+ 2 - 2
src/main/webapp/resources/view/sso/securitySet.html

@@ -958,7 +958,7 @@
                         <h5 ng-show="userInfo.emailValidCode && userInfo.emailValidCode == 2"><img class="ok-icon" src="static/img/user/images/ok-account.png"/></h5>
                         <h5 ng-show="!userInfo.emailValidCode || userInfo.emailValidCode != 2"><img src="static/img/user/images/safe.png"/></h5>
                         <font>邮箱认证:</font>
-                        <span ng-show="userInfo.emailValidCode && userInfo.emailValidCode == 2"><i ng-modal="userInfo.userEmail" style="color:#666;">{{userInfo.userEmail}}</i></span>
+                        <span ng-show="userInfo.emailValidCode && userInfo.emailValidCode == 2"><i ng-modal="userInfo.userEmail" style="color:#666;">{{userEmail}}</i></span>
                         <span ng-show="!userInfo.emailValidCode || userInfo.emailValidCode != 2">绑定邮箱可帮助您找回登录密码,并可订阅获取最新的订单动态、促销信息。</span>
                     </span>
               <a ng-show="userInfo.emailValidCode && userInfo.emailValidCode == 2" ng-click="updateUserEmail()">修改</a>
@@ -968,7 +968,7 @@
                     <span>
                         <h5><img class="ok-icon" src="static/img/user/images/ok-account.png"/></h5>
                         <font>手机验证:</font>
-                        <span>您绑定的手机:<i ng-modal="userInfo.userTel" style="color:#666;">{{userInfo.userTel}}</i>。若已丢失或停用,请立即更换,避免账户被盗。</span>
+                        <span>您绑定的手机:<i ng-modal="userInfo.userTel" style="color:#666;">{{userTel}}</i>。若已丢失或停用,请立即更换,避免账户被盗。</span>
                     </span>
               <a ng-click="updateUserTel()">修改</a>
             </li>

+ 1 - 1
src/main/webapp/resources/view/sso/ssoInfo.html

@@ -907,7 +907,7 @@
   .count .basic_title span{
       margin-left:30px;
   }
-  .count .count_basic ul{
+  .count .count_basic > ul{
       margin-left:30px;
   }
 </style>

+ 1 - 0
src/main/webapp/resources/view/sso/staffManagement.html

@@ -282,6 +282,7 @@
     table.role-info tbody tr.role-filter td select {
         background: url("static/img/vendor/images/xiala.png") no-repeat;
         background-position: 30px 9px;
+        opacity:1;
     }
     table.role-info tbody >tr>td{
         font-size: 14px;

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

@@ -29,7 +29,7 @@
         position: relative;
     }
     .seek-purchase .seek-purchase-content .publish-purchase .fl .form-block >span {
-        width: 105px;
+        width: 110px;
         height: 24px;
         line-height: 24px;
         display: inline-block;
@@ -71,7 +71,7 @@
     .seek-purchase .seek-purchase-content .publish-purchase .fl .form-block ul.similar-list {
         position: absolute;
         top: 23px;
-        left: 105px;
+        left: 110px;
         background: #fff;
         border: 1px solid #b5b5b5;
         z-index: 1;
@@ -246,7 +246,7 @@
     }
     .seek-purchase .seek-purchase-content >table >tbody.active .operate-seek,
     .seek-purchase .seek-purchase-content >table >tbody.active .expand-row > td {
-        border-right: 2px solid #f7a986;
+        border-right: 2px solid #f7a986 !important;
     }
     .seek-purchase .seek-purchase-content >table >tbody >tr.default-row:hover {
         background: #f1f5ff;
@@ -301,6 +301,7 @@
     .seek-purchase .seek-purchase-content >table >tbody tr.expand-row table tbody tr td {
         height: 68px;
         line-height: 68px;
+        padding: 0 8px;
     }
     .seek-purchase .seek-purchase-content >table >tbody tr.expand-row table tbody tr td.operate {
         overflow: visible;
@@ -478,7 +479,7 @@
         background: #fff;
         top: 0;
         left: 33px;*/
-        width: 135px;
+        width: 102px;
        /* border: 1px solid #fce8df;*/
     }
     .seek-purchase .seek-purchase-content >table >tbody tr.expand-row td .seek-list table tbody tr td.seek-replies ul li {
@@ -1067,7 +1068,7 @@
                 <th width="140">操作</th>
             </tr>
             </thead>
-            <tbody ng-repeat="seek in seekListData.content" ng-class="{'active': seek.$status && (seek.$status == 1 || seek.$status == 2)}">
+            <tbody ng-repeat="seek in seekListData.content" ng-class="{'active': seek.$status && (seek.$status == 1 || seek.$status == 2 || seek.$status == 3)}">
             <tr class="default-row" ng-mouseover="pauseTimer($index)" ng-mouseleave="startTimer($index)">
                 <td>
                     <div class="row-wrap">
@@ -1115,7 +1116,7 @@
                     <div class="row-wrap">
                         <span ng-if="seek.offerAmount > 0" ng-show="!seek.$status || seek.$status == 0" ng-click="setSeekStatus(seek, 2)">查看报价&nbsp;<i class="fa fa-angle-double-down"></i></span>
                         <span ng-if="seek.goodsAmount > 0" ng-show="!seek.$status || seek.$status == 0" ng-click="setSeekStatus(seek, 1)">商城现货&nbsp;<i class="fa fa-angle-double-down"></i></span>
-                        <span ng-show="seek.$status && (seek.$status == 1 || seek.$status == 2)" ng-click="setSeekStatus(seek, 0)">收起&nbsp;<i class="fa fa-angle-double-up"></i></span>
+                        <span ng-show="seek.$status && (seek.$status == 1 || seek.$status == 2 || seek.$status == 3)" ng-click="setSeekStatus(seek, 0)">收起&nbsp;<i class="fa fa-angle-double-up"></i></span>
                         <div class="sharecode" ng-mouseover="setShowShare(seek,$index)" ng-mouseleave="hideShare($index)">
                             <div class="sharecodeT">分<br/>享</div>
                             <div class="sharecodeBtn">
@@ -1214,19 +1215,30 @@
                         <div ng-show="currentSeek.$status == 2 || currentSeek.$status == 3">
                             <table>
                                 <thead>
-                                <tr>
+                                <tr ng-if="currentSeek.$status == 2">
                                     <th width="273">卖家</th>
                                     <th width="233">交期(天)</th>
                                     <th width="234">价格梯度</th>
                                     <!--<th width="195">生产日期</th>-->
                                     <th width="221">操作</th>
                                 </tr>
+                                <tr ng-if="currentSeek.$status == 3">
+                                    <th width="164">卖家</th>
+                                    <th width="84">品牌</th>
+                                    <th width="96">型号</th>
+                                    <th width="80">规格</th>
+                                    <th width="81">交期(天)</th>
+                                    <th width="102">价格梯度</th>
+                                    <th width="100">报价时间</th>
+                                    <!--<th width="195">生产日期</th>-->
+                                    <th width="181">操作</th>
+                                </tr>
                                 </thead>
                             </table>
                             <div class="seek-list">
                                 <table>
                                     <tbody>
-                                    <tr ng-repeat="of in offer track by $index" ng-show="(currentSeek.$status == 3 && of.isReplace == 1) || (currentSeek.$status == 2 && of.isReplace != 1)">
+                                    <tr ng-repeat="of in offer track by $index" ng-if="currentSeek.$status == 2 && of.isReplace != 1">
                                         <td width="273" ng-bind="of.vendName" title="{{of.vendName}}"></td>
                                         <td width="233" class="red-text" ng-bind="of.leadtime">4-6</td>
                                         <td width="234" class="seek-replies">
@@ -1268,6 +1280,52 @@
                                             <a class="seek-btn" ng-if="of.agreed != 0 && of.agreed != 1" ng-click="setActiveRefuse(of)">拒绝</a>
                                         </td>
                                     </tr>
+                                    <tr ng-repeat="of in offer track by $index" ng-if="currentSeek.$status == 3 && of.isReplace == 1">
+                                        <td width="164" ng-bind="of.vendName" title="{{of.vendName}}"></td>
+                                        <td width="84" ng-bind="of.replaceBrand || '-'" title="{{of.replaceBrand}}"></td>
+                                        <td width="96" ng-bind="of.replaceCmpCode || '-'" title="{{of.replaceCmpCode}}"></td>
+                                        <td width="80" ng-bind="of.replaceSpec || '-'" title="{{of.replaceSpec}}"></td>
+                                        <td width="81" class="red-text" ng-bind="of.leadtime">4-6</td>
+                                        <td width="102" class="seek-replies">
+                                            <!--<span>{{of.currency + of.unitPrice | currencyStr}}</span>-->
+                                            <div class="red-text">
+                                                <!--<span>{{of.replies[0].lapQty}}</span>
+                                                <span>{{of.currency + of.replies[0].price | currencyStr}}</span>-->
+                                            </div>
+                                            <ul class="red-text">
+                                                <li ng-repeat="re in of.replies">
+                                                    <span ng-bind="re.lapQty" title="{{re.lapQty}}">1+</span>
+                                                    <span title="{{of.currency + re.price | currencyStr}}">{{of.currency + re.price | currencyStr}}</span>
+                                                </li>
+                                            </ul>
+                                        </td>
+                                        <td width="100" class="red-text" ng-bind="of.offerTime | date:'yyyy-MM-dd'"></td>
+                                        <!--<td width="195" ng-bind="of.produceDate || '-'"></td>-->
+                                        <td width="181" class="operate">
+                                            <div style="display: inline-block" ng-controller="ChatContactCtrl as chat">
+                                                <a href="javascript:void(0)" ng-click="chat.contactWithOther(null, currentSeek.qutations[$index].enterprise.uu, chat.UserType.ENTERPRISE)">联系卖家<img src="static/img/seekPurchase/link-buyer.png" alt=""></a>
+                                                <div class="com-mall-del-box link-saler-box" ng-if="showLinkBox">
+                                                    <div class="title">
+                                                        <i ng-click="setShowLinkBox(false)"></i>
+                                                    </div>
+                                                    <div class="content">
+                                                        <p><i class="fa fa-exclamation-circle"></i>抱歉,暂时无法与卖家在线沟通!</p>
+                                                        <p>卖家联系电话:<span ng-bind="phone"></span></p>
+                                                        <div>
+                                                            <a ng-click="setShowLinkBox(false)">我知道了</a>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                            <b class="refused-show" ng-if="of.agreed == 0">拒绝原因 <img src="static/img/seekPurchase/refu.png" alt="">
+                                                <a class="say-price-history" ng-bind="of.refusereason"></a>
+                                            </b>
+                                            <img ng-if="of.agreed == 1" src="static/img/seekPurchase/recieved.png" alt="" class="ng-scope">
+                                            <img ng-if="of.agreed == 0" src="static/img/seekPurchase/refused.png" alt="" class="ng-scope">
+                                            <span class="seek-btn" ng-if="of.agreed != 0 && of.agreed != 1" ng-click="adopt(of)">采纳</span>
+                                            <a class="seek-btn" ng-if="of.agreed != 0 && of.agreed != 1" ng-click="setActiveRefuse(of)">拒绝</a>
+                                        </td>
+                                    </tr>
                                     </tbody>
                                 </table>
                             </div>

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

@@ -333,6 +333,7 @@
     .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price .say-price-history > div > div {
         display: inline-block;
         text-align: left;
+        width: 100%;
     }
     .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price .say-price-history > div > div:nth-child(1) {
         /*float: left;*/
@@ -374,6 +375,7 @@
     .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price:hover .say-price-history {
         height: 210px;
         opacity: 1;
+        overflow-y: auto;
     }
     .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate >img {
         position: absolute;
@@ -738,13 +740,13 @@
                             <div>
                                 <div>
                                     <div class="replace-param" ng-if="seek.isReplace == 1">
-                                        <span>替代物料品牌:</span><span ng-bind="seek.replaceBrand"></span>
+                                        <span>品牌:</span><span ng-bind="seek.replaceBrand || '-'"></span>
                                     </div>
                                     <div class="replace-param" ng-if="seek.isReplace == 1">
-                                        <span>替代物料型号:</span><span ng-bind="seek.replaceCmpCode"></span>
+                                        <span>型号:</span><span ng-bind="seek.replaceCmpCode || '-'"></span>
                                     </div>
                                     <div class="replace-param" ng-if="seek.isReplace == 1">
-                                        <span>替代物料规格:</span><span ng-bind="seek.replaceSpec"></span>
+                                        <span>规格:</span><span ng-bind="seek.replaceSpec || '-'"></span>
                                     </div>
                                     <span>交期:</span><span class="red-text" ng-bind="seek.leadtime + '天'">6 天</span>
                                 </div>

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

@@ -389,7 +389,7 @@
         width: 476px;
         top: 50%;
         left: 50%;
-        margin-top: -183px;
+        margin-top: -325px;
         margin-left: -238px;
         /*-webkit-box-shadow: 0 5px 15px rgba(0,0,0,.5);
         -moz-box-shadow: 0 5px 15px rgba(0,0,0,.5);
@@ -446,7 +446,7 @@
     }
     .seek-purchase .say-price-box .content .content-line .form-left span {
         display: inline-block;
-        width: 110px;
+        width: 115px;
         text-align: right;
     }
     .seek-purchase .say-price-box .content .content-line .form-left input {
@@ -530,6 +530,7 @@
     }
     .seek-purchase .say-price-box  .content .content-line .form-item.form-long {
         width: 100%;
+        position: relative;
     }
     .seek-purchase .say-price-box  .content .content-line .form-item.form-long input {
         width: 292px;
@@ -711,6 +712,7 @@
     .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price:hover .say-price-history {
         opacity: 1;
         height: 210px;
+        overflow-y: auto;
     }
     .say-price-box .switch-say {
         text-align: center;
@@ -732,6 +734,32 @@
         color: #fff;
         background: #4290f7;
     }
+    .similar-list {
+        position: absolute;
+        top: 27px;
+        left: 119px;
+        background: #fff;
+        border: 1px solid #b5b5b5;
+        z-index: 1;
+        max-height: 112px;
+        overflow-y: auto;
+        overflow-x: hidden;
+        border-radius: 3px;
+        width: 292px;
+        font-size: 12px;
+    }
+    .similar-list li {
+        height: 22px;
+        line-height: 22px;
+        cursor: pointer;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        padding: 0 5px;
+    }
+    .similar-list li:hover {
+        background: #ddd;
+    }
 </style>
 <div class="user_right fr seek-purchase">
     <!--求购询价-->
@@ -880,13 +908,13 @@
                                 <p class="price-title">{{seek.quotation.isReplace == 1 ? '替代型号报价' : '当前型号报价'}}</p>
                                 <div>
                                     <div class="replace-param" ng-if="seek.quotation.isReplace == 1">
-                                        <span>替代物料品牌:</span><span ng-bind="seek.quotation.replaceBrand"></span>
+                                        <span>品牌:</span><span ng-bind="seek.quotation.replaceBrand || '-'"></span>
                                     </div>
                                     <div class="replace-param" ng-if="seek.quotation.isReplace == 1">
-                                        <span>替代物料型号:</span><span ng-bind="seek.quotation.replaceCmpCode"></span>
+                                        <span>型号:</span><span ng-bind="seek.quotation.replaceCmpCode || '-'"></span>
                                     </div>
                                     <div class="replace-param" ng-if="seek.quotation.isReplace == 1">
-                                        <span>替代物料规格:</span><span ng-bind="seek.quotation.replaceSpec"></span>
+                                        <span>规格:</span><span ng-bind="seek.quotation.replaceSpec || '-'"></span>
                                     </div>
                                     <div class="replace-param">
                                         <span>交期:</span><span class="red-text" ng-bind="seek.quotation.leadtime + '天'"></span>
@@ -960,19 +988,25 @@
                     <div class="content-line">
                         <div class="form-item form-left form-long">
                             <span><i>*</i>品牌:</span>
-                            <input type="text" class="form-control" ng-model="inquiryItem.replaceBrand" ng-blur="onReplaceBrandBlur()">
+                            <input type="text" class="form-control" ng-model="inquiryItem.replaceBrand" ng-blur="checkBrand()" ng-change="onBrandChange()" ng-change="onBrandChange()" placeholder="请勿填中文符号">
+                            <ul class="similar-list" ng-show="showSimilarBrandList" ng-mouseenter="isInBrandList = true;" ng-mouseleave="isInBrandList = false;">
+                                <li ng-repeat="sBrand in similarBrand" ng-bind="sBrand.nameEn" title="{{sBrand.nameEn}}" ng-click="setBrand(sBrand.nameEn)"></li>
+                            </ul>
                         </div>
                     </div>
                     <div class="content-line">
                         <div class="form-item form-left form-long">
                             <span><i>*</i>型号:</span>
-                            <input type="text" class="form-control" ng-model="inquiryItem.replaceCmpCode" ng-blur="onReplaceCmpCodeBlur()">
+                            <input type="text" class="form-control" ng-model="inquiryItem.replaceCmpCode"  ng-blur="checkCode()" ng-change="onCodeChange()" placeholder="请勿填中文符号">
+                            <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>
                     <div class="content-line">
                         <div class="form-item form-left form-long">
-                            <span><i>*</i>规格:</span>
-                            <input type="text" class="form-control" ng-model="inquiryItem.replaceSpec" ng-blur="onReplaceSpecBlur()">
+                            <span>规格:</span>
+                            <input type="text" class="form-control" ng-model="inquiryItem.replaceSpec" ng-blur="checkSpec()" ng-change="onSpecInput()">
                         </div>
                     </div>
                 </div>

+ 29 - 13
src/main/webapp/resources/view/vendor/forstore/vendor_onSale.html

@@ -1194,7 +1194,10 @@
                                 <!--<span ng-if="!commodity.Regulpic">-</span>-->
                                 <div ng-if="commodity.attach || commodity.productAttachSubmit" style="position: relative;display: inline-block;width: auto;margin-top: 0px" class="ToforAdminLook">
                                     <a style="text-decoration: none;margin: 0px;border-bottom:0px" target="_blank" href="{{commodity.attach || commodity.productAttachSubmit.uploadAttach}}" class="Regulpica">
-                                        <img style="width:24px;height:26px" src="static/img/vendor/images/pdf.png"/>
+                                        <div style="width:24px;height:26px;position: relative">
+                                            <img style="width:24px;height:26px" src="static/img/vendor/images/pdf.png"/>
+                                            <div class="zhezhaodang" ng-if="commodity.productAttachSubmit.uploadAttach"></div>
+                                        </div>
                                     </a>
                                     <img ng-if="commodity.productAttachSubmit.uploadAttach" src="static/img/vendor/images/fireinfo_icon.png" width="18" height="18" style="width:18px;height:18px;border: 0px;margin-left:5px;" class="nopass"/>
                                     <div class="forAdminLook">待审核</div>
@@ -1243,22 +1246,22 @@
                                             <a ng-click="editGoodsPicture(commodity.editPic || 'static/img/store/common/default.png', commodity)" title="修改图片"><img src="static/img/icon/update-img.png" /></a>
                                         </div>
                                     </div>
-                                    <div class="fr wid135">
-                                        <p>
+                                    <div class="fr wid135" style="margin-top: 0px">
+                                        <p style="margin-top: 5px">
                                             品牌:
-                                            <input type="text" ng-model="commodity.brandNameEn" style="width:106px" maxlength="25" ng-change="onBrandChange(commodity.brandNameEn)"/>
+                                            <input style="border-radius: 3px;border: 1px solid #a9a9a9;height: 24px;line-height: 24px;width: 107px" type="text" ng-model="commodity.brandNameEn" style="width:106px" maxlength="25" ng-change="onBrandChange(commodity.brandNameEn)"/>
                                         </p>
-                                        <p>
+                                        <p style="margin-top: 5px">
                                             物料名称:
-                                            <input type="text" ng-model="commodity.kindNameCn" style="width:78px" maxlength="20" ng-change="onCodeChange(commodity.kindNameCn)"/>
+                                            <input style="border-radius: 3px;border: 1px solid #a9a9a9;height: 24px;line-height: 24px;width: 79px" type="text" ng-model="commodity.kindNameCn" style="width:78px" maxlength="20" ng-change="onCodeChange(commodity.kindNameCn)"/>
                                         </p>
-                                        <p>
+                                        <p style="margin-top: 5px">
                                             型号:
-                                            <input type="text" ng-model="commodity.code" style="width:106px" maxlength="100" />
+                                            <input style="border-radius: 3px;border: 1px solid #a9a9a9;height: 24px;line-height: 24px;width: 107px" type="text" ng-model="commodity.code" style="width:106px" maxlength="100" />
                                         </p>
-                                        <p>
+                                        <p style="margin-top: 5px">
                                             规格:
-                                            <input type="text" ng-model="commodity.spec" maxlength="50" style="width:106px"/>
+                                            <input style="border-radius: 3px;border: 1px solid #a9a9a9;height: 24px;line-height: 24px;width: 107px" type="text" ng-model="commodity.spec" maxlength="50" style="width:106px"/>
                                         </p>
                                         <!--<p>品牌: <em ng-bind="commodity.brandNameEn" title="{{commodity.brandNameEn}}">NXP</em></p>-->
                                         <!--<p>物料名称(类目): <em ng-bind="commodity.kindNameCn || '-'" title="{{commodity.kindNameCn}}"></em></p>-->
@@ -1351,10 +1354,13 @@
                                             <a style="text-decoration: none;margin: 0px;border-bottom:0px" target="_blank" href="{{commodity.attach}}" class="Regulpica" ng-if="commodity.attach">
                                                 <img style="width:24px;height:26px" src="static/img/vendor/images/pdf.png"/>
                                             </a>
-                                            <a class="Regulpica" ng-click="editRegulPicture(commodity.productAttachSubmit.uploadAttach || 'static/img/vendor/images/upload_file_icon.png', commodity)" ng-if="!commodity.attach">
-                                                <img style="width:24px;height:26px" src="static/img/vendor/images/pdf.png"/>
+                                            <a class="Regulpica" ng-click="editRegulPicture(commodity.productAttachSubmit.uploadAttach || 'static/img/vendor/images/upload_file_icon.png', commodity)" ng-if="!commodity.attach" style="margin: 0px">
+                                                <div style="width:24px;height:26px;position: relative">
+                                                    <img style="width:24px;height:26px" src="static/img/vendor/images/pdf.png"/>
+                                                    <div class="zhezhaodang"></div>
+                                                </div>
                                             </a>
-                                            <img ng-if="commodity.productAttachSubmit.uploadAttach" src="static/img/vendor/images/fireinfo_icon.png" width="18" height="18" style="width:18px;height:18px;border: 0px;margin-left:5px;" class="nopass"/>
+                                                <img ng-if="commodity.productAttachSubmit.uploadAttach" src="static/img/vendor/images/fireinfo_icon.png" width="18" height="18" style="width:18px;height:18px;border: 0px;margin-left:5px;" class="nopass"/>
                                             <div class="forAdminLook">待审核</div>
                                         </div>
                                     </div>
@@ -1687,6 +1693,16 @@
     .device .wanted_list01 a.Regulpica:hover{
         border-bottom: 0 !important;
     }
+    .zhezhaodang {
+        position: absolute;
+        left: 0;
+        top: 0;
+        width: 24px !important;
+        height: 26px !important;
+        background: url('static/img/vendor/images/upload_file_no_pass.png') no-repeat 0px 0px;
+        background-size: 100% 100%;
+        margin-top: 0px !important;;
+    }
 </style>
 <script>
     $(function(){

+ 90 - 31
src/main/webapp/resources/view/vendor/modal/edit_regul_modal.html

@@ -35,11 +35,12 @@
     margin-left: 3px;
   }
   .update-img .update-file-btn p{
+    border-top: 1px solid #e4e5e6;
     line-height: 30px;
     position: relative;
     text-align: center;
     margin-top: 8px;
-    height: 30px;
+    padding-top: 10px;
   }
   .update-img .update-file-btn p input{
     width: 80px;
@@ -118,7 +119,7 @@
   .file-text h3{
     line-height: 26px;
     background: #e3e3e6;
-    font-size: 12px;
+    font-size: 14px;
     text-align: center;
     font-weight: bold;
   }
@@ -186,11 +187,13 @@
   .wuliao_list {
     line-height: 28px;
     margin-bottom: 10px;
+    font-size: 14px;
   }
   .wuliao_list .name {
     margin-right: 5px;
-    width: 100px;
+    width: 115px;
     text-align: right;
+    color: #666;
   }
   .listUl {
     position: absolute;
@@ -222,12 +225,60 @@
     height: 30px;
     cursor: pointer;
   }
+  .titleP{
+    position: relative;
+    height: 44px;
+    background: #5078cb;
+    line-height: 44px;
+    color: #fff;
+    border-top-right-radius: 5px;
+    border-top-left-radius: 5px;
+    text-indent: 14px;
+  }
+  div.forAdminLook {
+    margin: 0 auto;
+    width: 70px;
+    height: 25px;
+    color: #333;
+    font-size: 14px;
+    border: 1px solid #5078cb;
+    border-radius: 3px;
+    text-align: center;
+    line-height: 25px;
+    margin-top: 4px;
+    position: absolute;
+    background: #fff;
+    display: none;
+    z-index:9999999;
+  }
+  .ToforAdminLook:hover .forAdminLook {
+    display: block;
+  }
+
+
+  input::-webkit-input-placeholder, textarea::-webkit-input-placeholder {
+    /* WebKit browsers */
+    color: #999;
+  }
+  input:-moz-placeholder, textarea:-moz-placeholder {
+    /* Mozilla Firefox 4 to 18 */
+    color: #999;
+  }
+  input::-moz-placeholder, textarea::-moz-placeholder {
+    /* Mozilla Firefox 19+ */
+    color: #999;
+  }
+  input:-ms-input-placeholder, textarea:-ms-input-placeholder {
+    /* Internet Explorer 10+ */
+    color: #999;
+  }
 </style>
 <div class="modal-head"></div>
-<div class="modal-body">
+<div class="modal-body" style="padding: 0px">
   <div class="view-box">
-    <div class="update-img">
-      <p style="">{{showAction ? '编辑物料信息': '规格书上传'}}</p>
+    <p style="font-size: 14px;" class="titleP">{{showAction ? '编辑物料信息': '规格书上传'}}</p>
+    <div class="update-img" style="padding: 10px; width: 560px;">
+
       <a ng-click="cancel()" class="close">&times;</a>
       <!--企业产品库 / 个人产品库 --- 这里加上品牌类目型号规格编辑 -->
       <ul style="margin-top:12px;" ng-show="showAction" >
@@ -239,8 +290,8 @@
               <!-- 可编辑状态 -->
               <input type="text"
                      ng-change="onBrandChange(brandcode)"
-                     placeholder="请输入品牌名"
-                     style="width: 180px;height: 28px"
+                     placeholder="请输入品牌名"
+                     style="width: 165px;height: 28px;border-radius: 2px;color: #333"
                      ng-blur="onBrandBlur(brandcode)"
                      ng-model="brandcode"
                      class="form-control" maxlength="25"/>
@@ -250,7 +301,7 @@
                 </li>
               </ul>
             </div>
-            <div ng-show="IsLookOrUpdate === 'look'" style="width: 180px;height: 28px">
+            <div ng-show="IsLookOrUpdate === 'look'" style="width: 165px;height: 28px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">
               {{brandcode}}
             </div>
           </div>
@@ -261,12 +312,12 @@
               <div ng-show="IsLookOrUpdate === 'update'">
                 <!-- 可编辑状态 -->
                 <input type="text"
-                       placeholder="请输入物料名称(类目)"
-                       style="width: 180px;height: 28px"
+                       placeholder="请输入物料名称(类目)"
+                       style="width: 165px;height: 28px;border-radius: 2px;color: #333"
                        ng-model="kind"
                        class="form-control" maxlength="20"/>
               </div>
-              <div ng-show="IsLookOrUpdate === 'look'" style="width: 180px;height: 28px">
+              <div ng-show="IsLookOrUpdate === 'look'" style="width: 165px;height: 28px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">
                 {{kind}}
               </div>
             </div>
@@ -281,7 +332,7 @@
                 <input type="text"
                        ng-change="onCodeChange(cmpcode)"
                        placeholder="请输入型号"
-                       style="width: 180px;height: 28px"
+                       style="width: 165px;height: 28px;border-radius: 2px;color: #333"
                        ng-blur="onCodeBlur(cmpcode)"
                        ng-model="cmpcode"
                        class="form-control" maxlength="100"/>
@@ -291,7 +342,7 @@
                   </li>
                 </ul>
               </div>
-              <div ng-show="IsLookOrUpdate === 'look'" style="width: 180px;height: 28px">
+              <div ng-show="IsLookOrUpdate === 'look'" style="width: 165px;height: 28px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">
                 {{cmpcode}}
               </div>
             </div>
@@ -302,7 +353,7 @@
                 <!-- 可编辑状态 -->
                 <input type="text"
                        placeholder="请输入规格参数"
-                       style="width: 180px;height: 28px"
+                       style="width: 165px;height: 28px;border-radius: 2px;color: #333"
                        ng-model="spec"
                        class="form-control" maxlength="50"/>
             </div>
@@ -311,8 +362,12 @@
         <li class="wuliao_list clearboth">
           <div class="name pull-left" style="width: 60px">规格书:</div>
           <div ng-show="RegulChange" style="line-height: 30px;position: relative;height: 30px;width: 60px;text-align: center;" class="pull-left">
-            <input type="file" image-upload class="uploadImage" accept=".pdf"   on-success="onUploadSuccess($data, $file)" maxSize="20971520" errorSizeMsg="'文件大小不能超过20M'">
-            <span style="color: #5078cb;cursor: pointer;">点击上传</span>
+            <input style="display: inline-block" type="file" image-upload class="uploadImage" accept=".pdf"  on-success="onUploadSuccess($data, $file)" max-size="20971520" errorSizeMsg="'文件大小不能超过20M'">
+            <span style="color: #fff;cursor: pointer;background:#f15601;border-radius: 2px;font-size: 12px;padding: 3px 4px;">点击上传</span>
+          </div>
+          <div ng-show="RegulChange" style="position: relative;display: inline-block" class="ToforAdminLook" ng-if="ChooseItem.productAttachSubmit.uploadAttach">
+            <img src="static/img/vendor/images/fireinfo_icon.png" width="18" height="18" style="width:18px;height:18px;border: 0px;margin-left:5px;"/>
+            <div class="forAdminLook">待审核</div>
           </div>
           <div ng-show="!RegulChange">
             <a href="{{Regulpic}}" target="_blank">
@@ -325,7 +380,7 @@
         <div class="update-big-img" style="margin-top: 0px;width: 197px;">
           <div class="previewImage" style="height: 197px;width: 197px;line-height: 197px;text-align: center">
             <!--<img ng-if="Regulpic" ng-src="static/img/vendor/images/pdf.png" alt="商品图片"  style="height: 197px;line-height: 197px;width: 197px;">-->
-            <input type="file" image-upload class="uploadImage" accept=".pdf"   on-success="onUploadSuccess($data, $file)" maxSize="20971520" errorSizeMsg="'文件大小不能超过20M'">
+            <input ng-show="!Ischange" type="file" image-upload class="uploadImage" accept=".pdf"   on-success="onUploadSuccess($data, $file)" max-size="20971520" errorSizeMsg="'文件大小不能超过20M'">
             <img ng-src="{{Ischange ? 'static/img/vendor/images/pdf.png' : Regulpic}}" alt="商品图片" style="height: 159px;width: 130px;">
             <!--<img ng-src="{{Regulpic}}" alt="商品图片" ng-if="!Ischange" style="height: 197px;line-height: 197px;width: 197px;">-->
             <div class="cover" style="background: rgba(0,0,0,0)">
@@ -342,9 +397,9 @@
         <div class="update-file-btn" style="width: 323px;">
           <div class="file-text" style="margin-top: 0px">
             <h3>规格书上传须知</h3>
-            <div style="height: 171px;">1、规格书上传后,商城会在两个工作日内进行审核,审核通过后规格书将会被展示在在售产品中;<br/>
+            <div style="height: 171px;font-size: 14px;">1、规格书上传后,商城会在两个工作日内进行审核,审核通过后规格书将会被展示在在售产品中;<br/>
               2、当规格书处于<span style="color:#ef0606">待审核</span>状态时,再次上传规格书,则前份规格书失效,需重新等待审核;<br/>
-              3、如审核不通过,将会以小心的形式通知您;<br/>
+              3、如审核不通过,将会以消息的形式通知您;<br/>
               4、商城已收录规格书的器件暂不开放上传<br/>
             </div>
           </div>
@@ -370,9 +425,9 @@
 
       <!-- 在售产品 -->
       <div ng-if="!showAction" class="clearboth">
-        <div class="update-big-img">
-          <div class="previewImage" style="text-align: center">
-            <input type="file" image-upload class="uploadImage" accept=".pdf"   on-success="onUploadSuccess($data, $file)" maxSize="20971520" errorSizeMsg="'文件大小不能超过20M'">
+        <div class="update-big-img" style="margin-top: 0px;width: 197px;">
+          <div class="previewImage" style="height: 197px;width: 197px;line-height: 197px;text-align: center">
+            <input ng-show="!Ischange" type="file" image-upload class="uploadImage" accept=".pdf"   on-success="onUploadSuccess($data, $file)" max-size="20971520" errorSizeMsg="'文件大小不能超过20M'">
             <img ng-src="{{Ischange ? 'static/img/vendor/images/pdf.png' : Regulpic}}" alt="商品图片" style="height: 159px;width: 130px;">
             <!--<img ng-if="Regulpic" ng-src="static/img/vendor/images/pdf.png" alt="商品图片">-->
             <!--<img ng-src="{{Regulpic}}" alt="商品图片" ng-if="!Regulpic">-->
@@ -387,21 +442,25 @@
           </div>
           <span class="prompt"><em style="color: #f00;">*</em>仅允许上传PDF格式文件,大小不超过20M</span>
         </div>
-        <div class="update-file-btn">
+        <div class="update-file-btn" style="width: 323px;">
           <div class="file-text"  style="margin-top: 0px">
             <h3>规格书上传须知</h3>
-            <div>1、规格书上传后,商城会在两个工作日内进行审核,审核通过后规格书将会被展示在在售产品中;<br/>
+            <div style="height: 171px;font-size: 14px;">1、规格书上传后,商城会在两个工作日内进行审核,审核通过后规格书将会被展示在在售产品中;<br/>
               2、当规格书处于<span style="color:#ef0606">待审核</span>状态时,再次上传规格书,则前份规格书失效,需重新等待审核;<br/>
-              3、如审核不通过,将会以小心的形式通知您;<br/>
+              3、如审核不通过,将会以消息的形式通知您;<br/>
               4、商城已收录规格书的器件暂不开放上传<br/>
             </div>
           </div>
+        </div>
+        <div class="update-file-btn clearboth"  style="width: 100%; float: none">
           <p>
-                          <span style="left:40px;">
-                              <input maxSize="20971520" type="file" image-upload class="uploadImage" accept=".pdf" on-success="onUploadSuccess($data, $file)"  errorSizeMsg="'文件大小不能超过20M'">
-                              <span>选择文件</span>
-                          </span>
-            <a ng-click="confirm()" class="ok">确定</a>
+            <span style="position:relative;vertical-align: top;">
+              <input type="file" image-upload class="uploadImage" accept=".pdf"   on-success="onUploadSuccess($data, $file)" max-size="20971520" errorSizeMsg="'文件大小不能超过20M'">
+          选择文件
+              <!--<span >取消</span>-->
+            </span>
+            <a ng-click="confirm()" class="ok" style="float: none">确定</a>
+
           </p>
         </div>
       </div>