Browse Source

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

zhaohongpeng 8 years ago
parent
commit
0c5ab1c2e5
25 changed files with 640 additions and 73 deletions
  1. 103 0
      src/main/java/com/uas/platform/b2c/b2b/controller/ManageController.java
  2. 15 0
      src/main/java/com/uas/platform/b2c/b2b/dao/EnterpriseBaseInfoDao.java
  3. 105 0
      src/main/java/com/uas/platform/b2c/b2b/model/EnterpriseBaseInfo.java
  4. 22 0
      src/main/java/com/uas/platform/b2c/b2b/service/EnterpriseBaseInfoService.java
  5. 63 0
      src/main/java/com/uas/platform/b2c/b2b/service/impl/EnterpriseBaseInfoServiceImpl.java
  6. 1 3
      src/main/java/com/uas/platform/b2c/common/account/controller/SecurityController.java
  7. 28 0
      src/main/java/com/uas/platform/b2c/core/config/SysConf.java
  8. 1 1
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ReleaseProductByBatchServiceImpl.java
  9. 17 0
      src/main/java/com/uas/platform/b2c/prod/product/component/controller/ComponentSubmitController.java
  10. 13 1
      src/main/java/com/uas/platform/b2c/prod/product/component/service/ComponentSubmitService.java
  11. 13 0
      src/main/java/com/uas/platform/b2c/prod/product/component/service/impl/ComponentSubmitServiceImpl.java
  12. 5 1
      src/main/resources/dev/sys.properties
  13. 6 1
      src/main/resources/prod/sys.properties
  14. 5 1
      src/main/resources/test/sys.properties
  15. 3 1
      src/main/webapp/WEB-INF/views/normal/adminWithNav.html
  16. 10 3
      src/main/webapp/resources/js/admin/app.js
  17. 37 0
      src/main/webapp/resources/js/admin/controllers/b2b/b2bManageCtrl.js
  18. 13 0
      src/main/webapp/resources/js/common/query/b2bManage.js
  19. 53 23
      src/main/webapp/resources/js/prod/controllers/ComponentEditCtrl.js
  20. 50 19
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_component_apply_ctrl.js
  21. 2 2
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_order_ctrl.js
  22. 53 0
      src/main/webapp/resources/view/admin/b2b/manage.html
  23. 5 0
      src/main/webapp/resources/view/admin/index.html
  24. 1 1
      src/main/webapp/resources/view/prod/product_component_edit_detail.html
  25. 16 16
      src/main/webapp/resources/view/vendor/forstore/vendor_component_apply.html

+ 103 - 0
src/main/java/com/uas/platform/b2c/b2b/controller/ManageController.java

@@ -0,0 +1,103 @@
+package com.uas.platform.b2c.b2b.controller;
+
+import com.uas.platform.b2c.b2b.model.EnterpriseBaseInfo;
+import com.uas.platform.b2c.b2b.service.EnterpriseBaseInfoService;
+import com.uas.platform.b2c.common.base.model.AccessToken;
+import com.uas.platform.b2c.common.base.service.AccessTokenService;
+import com.uas.platform.b2c.core.config.SysConf;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import com.wordnik.swagger.annotations.ApiOperation;
+import com.wordnik.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.rmi.AccessException;
+import java.util.Arrays;
+
+/**
+ * b2b操作
+ *
+ * Created by hejq on 2018-04-20.
+ */
+@RequestMapping("/b2b/manage")
+@RestController
+public class ManageController {
+
+    @Autowired
+    private AccessTokenService accessTokenService;
+
+    @Autowired
+    private SysConf sysConf;
+
+    @Autowired
+    private EnterpriseBaseInfoService baseInfoService;
+
+    /**
+     * 操作日志
+     */
+    private UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+    /**
+     * 定义可以访问的公司
+     */
+    private static final Long[] ACCESS_ENUU = {1000001L, 10044948L, 10042291L, 10042875L, 10043923L, 10041166L};
+
+    /**
+     * 通过UU号进行跳转到平台
+     *
+     * @param response HttpServletResponse
+     * @param enUU uu号
+     * @throws IOException
+     */
+    @RequestMapping("/authed/redirect/{enUU}")
+    public void redirect(HttpServletResponse response, HttpServletRequest request, @PathVariable("enUU") long enUU)
+            throws IOException {
+        Object bindObj = enUU;
+        if (null == SystemSession.getUser() || null == SystemSession.getUser().getEnterprise()) {
+            throw new AccessException("请先登录");
+        }
+        if (!Arrays.asList(ACCESS_ENUU).contains(SystemSession.getUser().getEnterprise().getUu())) {
+            throw new AccessException("没有访问权限");
+        }
+        AccessToken token = accessTokenService.createNew(bindObj);
+        request.getSession().setAttribute("user", SystemSession.getUser());
+        StringBuffer redirectUrl = new StringBuffer();
+        String domain = sysConf.getB2bDomain();
+        if (StringUtils.hasText(domain)) {
+            // 防止使用同一个www.ubtob.com造成session冲突
+            redirectUrl.append("http://").append(enUU).append(".").append(domain);
+        } else {
+            redirectUrl.append(sysConf.getB2bUrl());
+        }
+        redirectUrl.append("?client_type=manage&access_token=").append(token.getId());
+        logger.log("管理员访问B2B", "通过商务平台后台访问B2B");
+        response.sendRedirect(redirectUrl.toString());
+    }
+
+    /**
+     * 分页查询B2B注册信息
+     *
+     * @param params 分页参数
+     * @param keyword 关键词
+     * @return
+     */
+    @RequestMapping(value = "/enterpriseList", method = RequestMethod.GET)
+    @ApiOperation(value = "分页获取平台所有注册企业信息", httpMethod = "GET")
+    public Page<EnterpriseBaseInfo> findEnterPageByStatus(@ApiParam(required = true, value = "分页参数") PageParams params, @ApiParam(required = true, value = "搜索字符串") String keyword) {
+        PageInfo info = new PageInfo(params);
+        logger.log("管理平台获取企业列表", "通过[" + keyword + "]获取企业信息");
+        return baseInfoService.findEnterPageByKeyword(info, keyword);
+    }
+}

+ 15 - 0
src/main/java/com/uas/platform/b2c/b2b/dao/EnterpriseBaseInfoDao.java

@@ -0,0 +1,15 @@
+package com.uas.platform.b2c.b2b.dao;
+
+import com.uas.platform.b2c.b2b.model.EnterpriseBaseInfo;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 企业基本信息
+ *
+ * Created by hejq on 2018-04-20.
+ */
+@Repository
+public interface EnterpriseBaseInfoDao extends JpaRepository<EnterpriseBaseInfo, Long>, JpaSpecificationExecutor<EnterpriseBaseInfo> {
+}

+ 105 - 0
src/main/java/com/uas/platform/b2c/b2b/model/EnterpriseBaseInfo.java

@@ -0,0 +1,105 @@
+package com.uas.platform.b2c.b2b.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 企业信息基本信息
+ *
+ * Created by hejq on 2018-04-20.
+ */
+@Entity
+@Table(name = "sec$enterprises")
+public class EnterpriseBaseInfo implements Serializable {
+
+    /**
+     * 序列号
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 企业UU号
+     */
+    @Id
+    @Column(name = "en_uu")
+    private Long uu;
+
+    /**
+     * 公司名称
+     */
+    @Column(name = "en_name")
+    private String enName;
+
+    /**
+     * 注册地址
+     */
+    @Column(name = "en_address")
+    private String enAddress;
+
+    /**
+     * 商业登记证号
+     */
+    @Column(name = "en_businesscode")
+    private String enBussinessCode;
+
+    /**
+     * 注册时间
+     */
+    @Column(name = "en_time")
+    private Date enDate;
+
+    public Long getUu() {
+        return uu;
+    }
+
+    public void setUu(Long uu) {
+        this.uu = uu;
+    }
+
+    public String getEnName() {
+        return enName;
+    }
+
+    public void setEnName(String enName) {
+        this.enName = enName;
+    }
+
+    public String getEnAddress() {
+        return enAddress;
+    }
+
+    public void setEnAddress(String enAddress) {
+        this.enAddress = enAddress;
+    }
+
+    public String getEnBussinessCode() {
+        return enBussinessCode;
+    }
+
+    public void setEnBussinessCode(String enBussinessCode) {
+        this.enBussinessCode = enBussinessCode;
+    }
+
+    public Date getEnDate() {
+        return enDate;
+    }
+
+    public void setEnDate(Date enDate) {
+        this.enDate = enDate;
+    }
+
+    @Override
+    public String toString() {
+        return "EnterpriseBaseInfo{" +
+                "uu=" + uu +
+                ", enName='" + enName + '\'' +
+                ", enAddress='" + enAddress + '\'' +
+                ", enBussinessCode='" + enBussinessCode + '\'' +
+                ", enDate=" + enDate +
+                '}';
+    }
+}

+ 22 - 0
src/main/java/com/uas/platform/b2c/b2b/service/EnterpriseBaseInfoService.java

@@ -0,0 +1,22 @@
+package com.uas.platform.b2c.b2b.service;
+
+import com.uas.platform.b2c.b2b.model.EnterpriseBaseInfo;
+import com.uas.platform.core.model.PageInfo;
+import org.springframework.data.domain.Page;
+
+/**
+ * 企业基本信息操作接口
+ *
+ * Created by hejq on 2018-04-20.
+ */
+public interface EnterpriseBaseInfoService {
+
+    /**
+     * 分页查询企业信息
+     *
+     * @param info 分页参数
+     * @param keyword 关键字
+     * @return
+     */
+    Page<EnterpriseBaseInfo> findEnterPageByKeyword(PageInfo info, String keyword);
+}

+ 63 - 0
src/main/java/com/uas/platform/b2c/b2b/service/impl/EnterpriseBaseInfoServiceImpl.java

@@ -0,0 +1,63 @@
+package com.uas.platform.b2c.b2b.service.impl;
+
+import com.uas.platform.b2c.b2b.dao.EnterpriseBaseInfoDao;
+import com.uas.platform.b2c.b2b.model.EnterpriseBaseInfo;
+import com.uas.platform.b2c.b2b.service.EnterpriseBaseInfoService;
+import com.uas.platform.b2c.fa.payment.utils.StringUtils;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.persistence.criteria.PredicateUtils;
+import com.uas.platform.core.persistence.criteria.SimpleExpression;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+/**
+ * 企业基本信息操作实现
+ *
+ * Created by hejq on 2018-04-20.
+ */
+@Service
+public class EnterpriseBaseInfoServiceImpl implements EnterpriseBaseInfoService {
+
+    @Autowired
+    private EnterpriseBaseInfoDao baseInfoDao;
+
+    /**
+     * UU号正则表达式
+     */
+    static final String UU_REGEXP = "^\\d{4,}$";
+
+    /**
+     * 分页查询企业信息
+     *
+     * @param info    分页参数
+     * @param keyword 关键字
+     * @return
+     */
+    @Override
+    public Page<EnterpriseBaseInfo> findEnterPageByKeyword(final PageInfo info, String keyword) {
+        if (!StringUtils.isEmpty(keyword)) {
+            SimpleExpression name = PredicateUtils.like("enName", keyword, false);
+            if (keyword.matches(UU_REGEXP)) {
+                SimpleExpression enUU = PredicateUtils.eq("uu", keyword, false);
+                SimpleExpression[] expressions = new SimpleExpression[]{name, enUU};
+                info.expression(PredicateUtils.or(expressions));
+            } else {
+                SimpleExpression[] expressions = new SimpleExpression[]{name};
+                info.expression(PredicateUtils.or(expressions));
+            }
+        }
+        return baseInfoDao.findAll(new Specification<EnterpriseBaseInfo>() {
+            public Predicate toPredicate(Root<EnterpriseBaseInfo> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+                query.where(info.getPredicates(root, query, builder));
+                return null;
+            }
+        }, info);
+    }
+}

+ 1 - 3
src/main/java/com/uas/platform/b2c/common/account/controller/SecurityController.java

@@ -349,11 +349,9 @@ public class SecurityController {
 	 * @param request
 	 * @param response
 	 */
-	@RequestMapping(value = "/newLogin/other")
+	@RequestMapping(value = "/newLogin/other", produces = {"application/javascript"})
 	@ResponseBody
 	public String afterCrossLogin(HttpServletRequest request, HttpServletResponse response, UserAccount userAccount, Integer maxage) {
-		String callback =request.getParameter("jsoncallback");
-		response.setContentType("text/html;charset=UTF-8");
 		if (userAccount != null && userAccount.getMobile() != null) {
 			SSOToken tk = new SSOToken();
 			tk.setUid(userAccount.getMobile());

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

@@ -154,6 +154,18 @@ public class SysConf {
 	@Value("#{sys.searchUrl}")
 	private String messageServiceIp;
 
+	/**
+	 * b2b域名
+	 */
+	@Value("#{sys.b2bDomain}")
+	private String b2bDomain;
+
+    /**
+     * b2b网址
+     */
+	@Value(("#{sys.b2b}"))
+    private String b2bUrl;
+
 	public Boolean getRebuildIndexesOnRefresh() {
 		return rebuildIndexesOnRefresh;
 	}
@@ -333,4 +345,20 @@ public class SysConf {
 	public void setYesGateway(String yesGateway) {
 		this.yesGateway = yesGateway;
 	}
+
+	public String getB2bDomain() {
+		return b2bDomain;
+	}
+
+	public void setB2bDomain(String b2bDomain) {
+		this.b2bDomain = b2bDomain;
+	}
+
+    public String getB2bUrl() {
+        return b2bUrl;
+    }
+
+    public void setB2bUrl(String b2bUrl) {
+        this.b2bUrl = b2bUrl;
+    }
 }

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

@@ -152,7 +152,7 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 		int rowNum = sheet.getLastRowNum();
 		if (rowNum > 2000) {
 			throw new IllegalOperatorException
-					("您上传的信息超过2000条,请拆分成2000以再上传");
+					("您上传的信息超过2000条,请拆分成2000以再上传");
 		}
 		List<ReleaseProductByBatch> releaseProductByBatchs = new ArrayList<>(rowNum);
 		String batch = createNumberService.getTimeNumber("product$goods", 8, rowNum);

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

@@ -63,6 +63,23 @@ public class ComponentSubmitController {
 		return componentSubmit;
 	}
 
+	/**
+	 * 保存标准器件提交信息(来自新增品牌,修改品牌) 2018年4月20日 09:49:19 前台插件禁用flash会失效,新增上传方法 dongbw
+	 *
+	 * @param component 器件申请信息
+	 * @param uploadItem 规格书附件
+	 * @return 器件申请信息
+	 */
+	@RequestMapping(value = "/upload", method = RequestMethod.POST)
+	public ComponentSubmit saveComponentSubmitWithUploadItem(String component, FileUpload uploadItem) {
+		ComponentSubmit componentSubmit = FastjsonUtils.fromJson(component, ComponentSubmit.class);
+		componentSubmit.setId(null);
+		componentSubmit = componentSubmitService.saveComponentSubmit(componentSubmit, uploadItem);
+		operationInfoService.save(componentSubmit, ServiceCode.componentApply.value());
+		logger.log("器件维护", "保存器件申请", "保存器件申请,原厂型号:" + componentSubmit.getCode(), componentSubmit.getCode(), componentSubmit.getId());
+		return componentSubmit;
+	}
+
 	/**
 	 * 审核通过
 	 * 

+ 13 - 1
src/main/java/com/uas/platform/b2c/prod/product/component/service/ComponentSubmitService.java

@@ -1,7 +1,10 @@
 package com.uas.platform.b2c.prod.product.component.service;
 
 import com.uas.platform.b2c.common.base.model.FileUpload;
-import com.uas.platform.b2c.prod.product.component.modal.*;
+import com.uas.platform.b2c.prod.product.component.modal.Component;
+import com.uas.platform.b2c.prod.product.component.modal.ComponentCrawlSubDetail;
+import com.uas.platform.b2c.prod.product.component.modal.ComponentCrawlSubmit;
+import com.uas.platform.b2c.prod.product.component.modal.ComponentSubmit;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
 import org.apache.poi.ss.usermodel.Workbook;
@@ -35,6 +38,15 @@ public interface ComponentSubmitService {
 	 */
 	public ComponentSubmit saveComponentSubmit(ComponentSubmit componentSubmit);
 
+	/**
+	 * 保存标准器件版本信息(来自新增,更新)
+	 *
+	 * @param componentSubmit  器件申请信息
+	 * @param uploadItem 规格书附件
+	 * @return 器件申请信息
+	 */
+	public ComponentSubmit saveComponentSubmit(ComponentSubmit componentSubmit, FileUpload uploadItem);
+
 	/**
 	 * 根据id查找提交的标准器件信息
 	 * 

+ 13 - 0
src/main/java/com/uas/platform/b2c/prod/product/component/service/impl/ComponentSubmitServiceImpl.java

@@ -2,6 +2,7 @@ package com.uas.platform.b2c.prod.product.component.service.impl;
 
 import com.uas.platform.b2c.common.account.dao.UserBaseInfoDao;
 import com.uas.platform.b2c.common.base.model.FileUpload;
+import com.uas.platform.b2c.common.base.service.FileService;
 import com.uas.platform.b2c.common.base.service.SendMessageService;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
@@ -108,6 +109,9 @@ public class ComponentSubmitServiceImpl implements ComponentSubmitService {
 	@Autowired
 	private KindContrastDao kindContrastDao;
 
+	@Autowired
+	private FileService fileService;
+
 	@Override
 	@Transactional
 	public Component componentSubmitAudit(ComponentSubmit componentSubmit) {
@@ -285,6 +289,15 @@ public class ComponentSubmitServiceImpl implements ComponentSubmitService {
 		return componentSubmitDao.save(componentSubmit);
 	}
 
+	@Override
+	public ComponentSubmit saveComponentSubmit(ComponentSubmit componentSubmit, FileUpload uploadItem) {
+		if ((uploadItem != null) && (uploadItem.getFile() != null)) {
+			String attachUrl = fileService.save(uploadItem);
+			componentSubmit.setAttach(attachUrl);
+		}
+		return saveComponentSubmit(componentSubmit);
+	}
+
 	@Override
 	public ComponentSubmit findComponentSubmitById(Long id) {
 		return componentSubmitDao.findOne(id);

+ 5 - 1
src/main/resources/dev/sys.properties

@@ -47,4 +47,8 @@ kafka-bootstrap-servers=10.10.100.11:9292,10.10.100.12:9292,10.10.100.13:9292,10
 
 #inquiry service url
 inquiryServiceUrl=http://218.17.158.219:24000
-inquiryServiceInnerUrl=http://218.17.158.219:24000
+inquiryServiceInnerUrl=http://218.17.158.219:24000
+
+#b2b
+b2b=http://218.17.158.219/b2b_test
+b2bDomain=218.17.158.219:9000/b2b_test

+ 6 - 1
src/main/resources/prod/sys.properties

@@ -49,4 +49,9 @@ kafka-bootstrap-servers=10.10.100.11:9292,10.10.100.12:9292,10.10.100.13:9292,10
 
 #inquiry service url
 inquiryServiceUrl=https://api-inquiry.usoftmall.com
-inquiryServiceInnerUrl=http://10.10.0.254:8080
+inquiryServiceInnerUrl=http://10.10.0.254:8080
+
+#b2b
+b2b=http://uas.ubtob.com
+b2bDomain=uas.ubtob.com
+b2bInner=http://10.10.100.103:8080

+ 5 - 1
src/main/resources/test/sys.properties

@@ -48,4 +48,8 @@ kafka-bootstrap-servers=10.10.100.11:9292,10.10.100.12:9292,10.10.100.13:9292,10
 
 #inquiry service url
 inquiryServiceUrl=http://218.17.158.219:24000
-inquiryServiceInnerUrl=http://218.17.158.219:24000
+inquiryServiceInnerUrl=http://218.17.158.219:24000
+
+#b2b
+b2b=http://218.17.158.219/b2b_test
+b2bDomain=218.17.158.219:9000/b2b_test

+ 3 - 1
src/main/webapp/WEB-INF/views/normal/adminWithNav.html

@@ -29,7 +29,9 @@
 	<!-- main menu start -->
 	<div class="sidebar-nav main-menu">
 		<ul class="nav nav-tabs nav-stacked">
-
+			<li class="nav-header">B2B</li>
+			<li class="nav-node"><a href="#/b2b/manage"><i
+					class="fa fa-home"></i><span> b2b后台管理</span></a></li>
 			<li class="nav-header">交易管理</li>
 			<li class="nav-node"><a href="#trade/buyerOrder"><i
 					class="fa fa-home"></i><span> 买家销售单跟踪</span></a></li>

+ 10 - 3
src/main/webapp/resources/js/admin/app.js

@@ -1,4 +1,4 @@
- define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ui-form', 'ngLocal', 'ngTable', 'ngSanitize', 'ngDraggable', 'common/services', 'common/directives', 'common/query/brand', 'common/query/address', 'common/query/return' , 'common/query/change' ,'common/query/component', 'common/query/order', 'common/query/purchase', 'common/query/invoice', 'common/query/property', 'common/query/kind', 'common/query/property', 'common/query/receipt', 'common/query/logistics' ,'angular-toaster', 'ui-jquery', 'jquery-uploadify','common/query/dateParse' , 'common/query/bankTransfer' ,'common/query/bankInfo', 'common/query/urlencryption', 'common/query/bill', 'common/query/makerDemand', 'common/query/goods', 'common/query/validtime', 'file-upload','file-upload-shim', 'common/query/slideImage', 'common/query/kindAdvice', 'common/query/responseLogistics', 'common/query/search','common/directives/dynamicInput', 'common/query/auditorMail', 'common/query/tradeBasicProperties', 'common/query/exchangeRate', 'common/query/tradeDeliveryDelayTime', 'common/query/payment', 'common/query/kindContrast', 'common/query/crawlTask', 'common/query/afterSale', 'common/query/refund', 'common/query/messageBoard', 'common/query/logisticsPort', 'common/query/storeInfo', 'common/query/cms', 'common/query/help', 'common/query/commonCount', 'common/module/store_admin_violations_module', 'common/query/internalMessage','common/query/user','common/query/secQuestion','common/query/keyWord','common/query/logUsage','common/query/seekQualityBuyer','common/query/loanApply', 'common/query/supplier', 'common/query/seekSalesman'], function(angularAMD) {
+ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ui-form', 'ngLocal', 'ngTable', 'ngSanitize', 'ngDraggable', 'common/services', 'common/directives', 'common/query/brand', 'common/query/address', 'common/query/return' , 'common/query/change' ,'common/query/component', 'common/query/order', 'common/query/purchase', 'common/query/invoice', 'common/query/property', 'common/query/kind', 'common/query/property', 'common/query/receipt', 'common/query/logistics' ,'angular-toaster', 'ui-jquery', 'jquery-uploadify','common/query/dateParse' , 'common/query/bankTransfer' ,'common/query/bankInfo', 'common/query/urlencryption', 'common/query/bill', 'common/query/makerDemand', 'common/query/goods', 'common/query/validtime', 'file-upload','file-upload-shim', 'common/query/slideImage', 'common/query/kindAdvice', 'common/query/responseLogistics', 'common/query/search','common/directives/dynamicInput', 'common/query/auditorMail', 'common/query/tradeBasicProperties', 'common/query/exchangeRate', 'common/query/tradeDeliveryDelayTime', 'common/query/payment', 'common/query/kindContrast', 'common/query/crawlTask', 'common/query/afterSale', 'common/query/refund', 'common/query/messageBoard', 'common/query/logisticsPort', 'common/query/storeInfo', 'common/query/cms', 'common/query/help', 'common/query/commonCount', 'common/module/store_admin_violations_module', 'common/query/internalMessage','common/query/user','common/query/secQuestion','common/query/keyWord','common/query/logUsage','common/query/seekQualityBuyer','common/query/loanApply', 'common/query/supplier', 'common/query/seekSalesman', 'common/query/b2bManage'], function(angularAMD) {
 	'use strict';
 
 	 /**
@@ -8,7 +8,7 @@
 		 return this.length > 0 ? this[this.length - 1] : null;
 	 };
 
-	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ui.form', 'ng.local', 'ngTable', 'ngSanitize', 'ngDraggable', 'common.services', 'common.directives', 'brandServices', 'addressServices', 'returnServices', 'changeServices', 'componentServices', 'orderServices', 'purchaseServices', 'invoiceServices', 'propertyServices', 'receiptServices', 'logisticsServices', 'common.query.kind', 'toaster','ui.jquery' ,'dateparseServices', 'bankInfo' , 'bankTransfer', 'urlencryptionServices', 'billServices', 'makerDemand', 'goodsServices', 'validtimeServices', 'angularFileUpload', 'slideImageService', 'common.query.kindAdvice', 'responseLogisticsService', 'searchService', 'ngDynamicInput', 'ReviewerEmailInfoService', 'tradeBasicPropertiesServices', 'exchangeRateModule', 'tradeDeliveryDelayTimeModule', 'PaymentService', 'kindContrastServices', 'crawlTaskServices', 'afterSaleService', 'refundModule', 'messageBoardServices', 'logisticsPortService', 'storeInfoServices', 'cmsService', 'helpServices', 'commonCountServices', 'tool.directives', 'StoreAdminViolationsModule', 'internalMessageServices','common.query.user','secQuestionServices','keyWordServices','logUsageServices','seekQualityBuyerServices', 'loanApplyService', 'supplierServices', 'seekSalesmanServices']);
+	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ui.form', 'ng.local', 'ngTable', 'ngSanitize', 'ngDraggable', 'common.services', 'common.directives', 'brandServices', 'addressServices', 'returnServices', 'changeServices', 'componentServices', 'orderServices', 'purchaseServices', 'invoiceServices', 'propertyServices', 'receiptServices', 'logisticsServices', 'common.query.kind', 'toaster','ui.jquery' ,'dateparseServices', 'bankInfo' , 'bankTransfer', 'urlencryptionServices', 'billServices', 'makerDemand', 'goodsServices', 'validtimeServices', 'angularFileUpload', 'slideImageService', 'common.query.kindAdvice', 'responseLogisticsService', 'searchService', 'ngDynamicInput', 'ReviewerEmailInfoService', 'tradeBasicPropertiesServices', 'exchangeRateModule', 'tradeDeliveryDelayTimeModule', 'PaymentService', 'kindContrastServices', 'crawlTaskServices', 'afterSaleService', 'refundModule', 'messageBoardServices', 'logisticsPortService', 'storeInfoServices', 'cmsService', 'helpServices', 'commonCountServices', 'tool.directives', 'StoreAdminViolationsModule', 'internalMessageServices','common.query.user','secQuestionServices','keyWordServices','logUsageServices','seekQualityBuyerServices', 'loanApplyService', 'supplierServices', 'seekSalesmanServices', 'b2bManageService']);
 	app.init = function() {
 		angularAMD.bootstrap(app);
 	};
@@ -801,7 +801,14 @@
             controller: 'LoanApplyListCtrl',
             controllerUrl: 'app/controllers/fa/LoanApplyListCtrl',
             title: '贷款申请列表'
-        }));
+        })).state('b2bManage', angularAMD.route({
+			// b2b后台管理
+			url: '/b2b/manage',
+            templateUrl: 'static/view/admin/b2b/manage.html',
+            controller: 'b2bManageCtrl',
+            controllerUrl: 'app/controllers/b2b/b2bManageCtrl',
+            title: '贷款申请列表'
+		}));
 		
 		$httpProvider.interceptors.push(['Loading', '$q', function(Loading, $q) {
 			return {

+ 37 - 0
src/main/webapp/resources/js/admin/controllers/b2b/b2bManageCtrl.js

@@ -0,0 +1,37 @@
+define(['app/app'], function (app) {
+    'use strict';
+    app.register.controller('b2bManageCtrl', ['$scope', 'ngTableParams', 'manage', 'toaster', 'BaseService', function ($scope, ngTableParams, manage, toaster, BaseService) {
+        //table设置
+        $scope.tableParams = new ngTableParams({
+            page : 1,
+            count : 20
+        }, {
+            total : 0,
+            getData : function ($defer, params) {
+                // $scope.loading = true;
+                var param = BaseService.parseParams(params.url());
+                param.keyword = $scope.keyword;
+                manage.getEnterpriseList(param, function (data) {
+                    params.total(data.totalElements);
+                    $defer.resolve(data.content);
+                }, function (response) {
+                    toaster.pop('error', '获取企业列表失败');
+                });
+            }
+        });
+
+        // 根据关键词搜索
+        $scope.onSearch = function() {
+            $scope.tableParams.reload();
+        }
+
+        /**
+         * 点击跳转商务平台
+         *
+         * @param uu uu号
+         */
+        $scope.redirect = function(uu, url) {
+            window.open('b2b/manage/authed/redirect/' + uu + (url ? ('?url=' + encodeURI(url)) : ''));
+        }
+    }]);
+});

+ 13 - 0
src/main/webapp/resources/js/common/query/b2bManage.js

@@ -0,0 +1,13 @@
+define([ 'ngResource' ], function() {
+    angular.module('b2bManageService', [ 'ngResource' ]).factory('manage', ['$resource', function($resource) {
+        return $resource('b2b', {}, {
+            /**
+             * 获取企业列表
+             */
+            getEnterpriseList: {
+                url: 'b2b/manage/enterpriseList',
+                method:'GET'
+            }
+        });
+    }])
+});

+ 53 - 23
src/main/webapp/resources/js/prod/controllers/ComponentEditCtrl.js

@@ -212,22 +212,35 @@ define([ 'app/app', 'jquery-summernote', 'jquery-uploadify' ], function(app) {
 				});
 			};
 			
-			// 图片上传成功之后
-			$scope.onAttachUploadSuccess = function(data){
-				$scope.$apply(function() {
-					$scope.component.attachFile = data;
-					$scope.component.attach = data.path;
-					if($scope.component.attachFile.size >= 1024 * 1024) {
-						$scope.component.attachFile.size = $filter('number')($scope.component.attachFile.size / 1024 / 1024, 1) + 'Mb';
-					} else if($scope.component.attachFile.size >= 1024) {
-						$scope.component.attachFile.size = $filter('number')($scope.component.attachFile.size / 1024, 1) + 'Kb';
-					} else {
-						$scope.component.attachFile.size = $scope.component.attachFile.size + 'b';
-					}
-					$scope.$uploading = false;
-				});
-			};
-			
+			// // 图片上传成功之后
+			// $scope.onAttachUploadSuccess = function(data){
+			// 	$scope.$apply(function() {
+			// 		$scope.component.attachFile = data;
+			// 		$scope.component.attach = data.path;
+			// 		if($scope.component.attachFile.size >= 1024 * 1024) {
+			// 			$scope.component.attachFile.size = $filter('number')($scope.component.attachFile.size / 1024 / 1024, 1) + 'Mb';
+			// 		} else if($scope.component.attachFile.size >= 1024) {
+			// 			$scope.component.attachFile.size = $filter('number')($scope.component.attachFile.size / 1024, 1) + 'Kb';
+			// 		} else {
+			// 			$scope.component.attachFile.size = $scope.component.attachFile.size + 'b';
+			// 		}
+			// 		$scope.$uploading = false;
+			// 	});
+			// };
+
+            //上传规格书
+            $scope.onAttachUploadSuccess = function () {
+                if($scope.component.attachFile[0].size >= 1024 * 1024) {
+                    $scope.component.attachFile.size = $filter('number')($scope.component.attachFile[0].size / 1024 / 1024, 1) + 'Mb';
+                } else if($scope.component.attachFile.size >= 1024) {
+                    $scope.component.attachFile.size = $filter('number')($scope.component.attachFile[0].size / 1024, 1) + 'Kb';
+                } else {
+                    $scope.component.attachFile.size = $scope.component.attachFile[0].size + 'b';
+                }
+                $scope.component.attach = $scope.component.attachFile[0].name;
+                $scope.$uploading = false;
+            };
+
 			// 重新上传,取消重新上传
 			$scope.reUpload = function() {
 				$scope.$uploading = !$scope.$uploading;
@@ -321,13 +334,30 @@ define([ 'app/app', 'jquery-summernote', 'jquery-uploadify' ], function(app) {
 					toaster.pop('error', '提交失败', '详细描述不可为空');
 					return;
 				}
-				// 提交保存
-				ComponentSubmit.save({}, $scope.component, function(data){
-					toaster.pop('success', '提示', '提交成功,请等待审核');
-					window.location.replace('vendor#/home/componentMaintenance');
-				},function(response){
-					toaster.pop('error', '提交失败', response.data);
-				});
+				// // 提交保存
+				// ComponentSubmit.save({}, $scope.component, function(data){
+				// 	toaster.pop('success', '提示', '提交成功,请等待审核');
+				// 	window.location.replace('vendor#/home/componentMaintenance');
+				// },function(response){
+				// 	toaster.pop('error', '提交失败', response.data);
+				// });
+                var file = null;
+                if($scope.component.attachFile && $scope.component.attachFile[0]) {
+                    file = $scope.component.attachFile[0];
+                }
+                $upload.upload({
+                    url: 'produce/componentSubmit/upload',
+                    file: file,
+                    method: 'POST',
+                    data: {
+                        component: $scope.component
+                    }
+                }).success(function(data){
+                    toaster.pop('success', '提示', '提交成功,请等待审核');
+                    window.location.replace('vendor#/home/componentMaintenance');
+                }).error(function(response){
+                    toaster.pop('error', '提交失败', response.data);
+                });
 			};
 		}]);
 		

+ 50 - 19
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_component_apply_ctrl.js

@@ -4,7 +4,7 @@
  */
 define(['app/app', 'jquery-uploadify'], function(app) {
     "use strict";
-    app.register.controller('vendorComponentApplyCtrl', ['$scope', '$rootScope', 'Search', 'KindAPI', 'ComponentActive', 'ComponentActiveAPI', '$filter', 'ComponentSubmit', 'toaster', 'BrandActiveAPI', '$modal', function($scope, $rootScope, Search, KindAPI, ComponentActive, ComponentActiveAPI, $filter, ComponentSubmit, toaster, BrandActiveAPI, $modal) {
+    app.register.controller('vendorComponentApplyCtrl', ['$scope', '$rootScope', 'Search', 'KindAPI', 'ComponentActive', 'ComponentActiveAPI', '$filter', 'ComponentSubmit', 'toaster', 'BrandActiveAPI', '$modal', '$upload', function($scope, $rootScope, Search, KindAPI, ComponentActive, ComponentActiveAPI, $filter, ComponentSubmit, toaster, BrandActiveAPI, $modal, $upload) {
         $rootScope.active = "vendor_component_apply";
 
         document.title = "器件申请" + "-优软商城";
@@ -239,21 +239,34 @@ define(['app/app', 'jquery-uploadify'], function(app) {
             toaster.pop('success', '上传成功');
         };
 
-        // 规格书上传成功之后
-        $scope.onAttachUploadSuccess = function(data){
-            $scope.$apply(function() {
-                $scope.component.attachFile = data;
-                $scope.component.attach = data.path;
-                if($scope.component.attachFile.size >= 1024 * 1024) {
-                    $scope.component.attachFile.size = $filter('number')($scope.component.attachFile.size / 1024 / 1024, 1) + 'Mb';
-                } else if($scope.component.attachFile.size >= 1024) {
-                    $scope.component.attachFile.size = $filter('number')($scope.component.attachFile.size / 1024, 1) + 'Kb';
-                } else {
-                    $scope.component.attachFile.size = $scope.component.attachFile.size + 'b';
-                }
-                toaster.pop('success', '上传成功');
-                $scope.$uploading = false;
-            });
+        // // 规格书上传成功之后 - 使用uploadify jQuery插件,在禁用flash时,无法正常显示,所以修改 2018年4月20日 09:20:43 dongbw
+        // $scope.onAttachUploadSuccess = function(data){
+        //     $scope.$apply(function() {
+        //         $scope.component.attachFile = data;
+        //         $scope.component.attach = data.path;
+        //         if($scope.component.attachFile.size >= 1024 * 1024) {
+        //             $scope.component.attachFile.size = $filter('number')($scope.component.attachFile.size / 1024 / 1024, 1) + 'Mb';
+        //         } else if($scope.component.attachFile.size >= 1024) {
+        //             $scope.component.attachFile.size = $filter('number')($scope.component.attachFile.size / 1024, 1) + 'Kb';
+        //         } else {
+        //             $scope.component.attachFile.size = $scope.component.attachFile.size + 'b';
+        //         }
+        //         toaster.pop('success', '上传成功');
+        //         $scope.$uploading = false;
+        //     });
+        // };
+
+        //上传规格书
+        $scope.onAttachUploadSuccess = function () {
+            if($scope.component.attachFile[0].size >= 1024 * 1024) {
+                $scope.component.attachFile.size = $filter('number')($scope.component.attachFile[0].size / 1024 / 1024, 1) + 'Mb';
+            } else if($scope.component.attachFile.size >= 1024) {
+                $scope.component.attachFile.size = $filter('number')($scope.component.attachFile[0].size / 1024, 1) + 'Kb';
+            } else {
+                $scope.component.attachFile.size = $scope.component.attachFile[0].size + 'b';
+            }
+            $scope.component.attach = $scope.component.attachFile[0].name;
+            $scope.$uploading = false;
         };
 
         // 重新上传,取消重新上传
@@ -368,11 +381,29 @@ define(['app/app', 'jquery-uploadify'], function(app) {
 
             $scope.component.properties = getProperValues();// 属性
 
-            // 提交保存
-            ComponentSubmit.save({}, $scope.component, function(data){
+            // // 提交保存
+            // ComponentSubmit.save({}, $scope.component, function(data){
+            //     toaster.pop('success', '提示', '提交成功,请等待审核');
+            //     window.location.replace('vendor#/component/applylist');
+            // },function(response){
+            //     $scope.submitEnable = true;
+            //     toaster.pop('error', '提交失败', response.data);
+            // });
+            var file = null;
+            if($scope.component.attachFile && $scope.component.attachFile[0]) {
+                file = $scope.component.attachFile[0];
+            }
+            $upload.upload({
+                url: 'produce/componentSubmit/upload',
+                file: file,
+                method: 'POST',
+                data: {
+                    component: $scope.component
+                }
+            }).success(function(data){
                 toaster.pop('success', '提示', '提交成功,请等待审核');
                 window.location.replace('vendor#/component/applylist');
-            },function(response){
+            }).error(function(response){
                 $scope.submitEnable = true;
                 toaster.pop('error', '提交失败', response.data);
             });

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

@@ -4,7 +4,7 @@
  */
 define(['app/app'], function (app) {
     "use strict";
-    app.register.controller('vendorOrderCtrl', '$scope', '$rootScope', 'Purchase', 'ngTableParams', 'BaseService', 'toaster', '$state', '$filter', 'Return', 'Change', '$modal', 'PuExProcess', 'Recommendation', 'DateUtil', 'Loading', 'bankInfoService', 'Logistics', 'Distributor', 'SessionService','Rate','StoreInfo', function ($scope, $rootScope, Purchase, ngTableParams, BaseService, toaster, $state, $filter, Return, Change, $modal, PuExProcess, Recommendation, DateUtil, Loading, bankInfoService, Logistics, Distributor, SessionService, Rate, StoreInfo) {
+    app.register.controller('vendorOrderCtrl', ['$scope', '$rootScope', 'Purchase', 'ngTableParams', 'BaseService', 'toaster', '$state', '$filter', 'Return', 'Change', '$modal', 'PuExProcess', 'Recommendation', 'DateUtil', 'Loading', 'bankInfoService', 'Logistics', 'Distributor', 'SessionService','Rate','StoreInfo', function ($scope, $rootScope, Purchase, ngTableParams, BaseService, toaster, $state, $filter, Return, Change, $modal, PuExProcess, Recommendation, DateUtil, Loading, bankInfoService, Logistics, Distributor, SessionService, Rate, StoreInfo) {
         $rootScope.active = 'vendor_order';
         document.title = '已卖出的产品-优软商城';
         // 加密过滤器
@@ -1603,7 +1603,7 @@ define(['app/app'], function (app) {
 
         /***********卖家评论模块 *** end *****************************/
 
-    });
+    }]);
 
     app.register.filter('VendorStatusFilter', function () {
         return function (status) {

+ 53 - 0
src/main/webapp/resources/view/admin/b2b/manage.html

@@ -0,0 +1,53 @@
+<div class="row-fluid sortable">
+    <div class="box">
+        <div class="box-header well" data-original-title>
+            <i class="icon-user"></i> B2B商务企业列表
+        </div>
+        <div class="box-content">
+            <!-- ng-tableStart -->
+            <div class="fullscreen" style="padding: 10px;">
+                <div class="row">
+                    <div class="col-xs-2">
+                        共<span class="badge" ng-bind="tableParams.total()"></span>条
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="input-group">
+                            <input placeholder="企业名称或UU号进行搜索" class="form-control"
+                                   ng-model="keyword"  ng-search="onSearch()" size="16" type="text">
+                            <span class="input-group-btn">
+								<button class="btn btn-primary" type="button" ng-click="onSearch()">搜索</button>
+							</span>
+                        </div>
+                    </div>
+                </div>
+                <table ng-table="tableParams" class="table table-bordered table-striped" style="margin-top: 10px;">
+                    <thead>
+                    <tr>
+                        <th class="text-center" width="60">序号</th>
+                        <th class="text-center" width="100">UU</th>
+                        <th class="text-center" width="200">企业名称</th>
+                        <th class="text-center" width="300">企业地址</th>
+                        <th class="text-center" width="150">营业执照</th>
+                        <th class="text-center" width="120">注册时间</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr ng-repeat="en in $data" ng-click="redirect(en.uu)">
+                        <td class="text-center" ng-bind="$index + 1"></td>
+                        <td class="text-center" ng-bind="en.uu"></td>
+                        <td class="text-center" ng-bind="en.enName"></td>
+                        <td class="text-center" ng-bind="en.enAddress"></td>
+                        <td class="text-center" ng-bind="en.enBussinessCode"></td>
+                        <td class="text-center" ng-bind="en.enDate | date: 'yyyy-MM-dd HH:mm'"></td>
+                    </tr>
+                    <tr ng-if="$data.length == 0">
+                        <td colspan="10" class="text-center" style="line-height: 40px; font-size: 20px;"><i class="fa fa-smile-o fa-lg"></i> 暂未查询到企业信息</td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+            <a id="bottom"></a>
+            <!-- ng-tableEnd -->
+        </div>
+    </div><!--/span-->
+</div><!--/row-->

+ 5 - 0
src/main/webapp/resources/view/admin/index.html

@@ -31,6 +31,11 @@
 					<li><a href="#/product/sailingGoods"> <span
 							class="yellow">8</span> 在售中的产品
 					</a></li>
+					<li>
+						<a href="#/b2b/manage">
+							<span class="green">9</span> b2b管理页面
+						</a>
+					</li>
 				</ul>
 			</div>
 		</div>

+ 1 - 1
src/main/webapp/resources/view/prod/product_component_edit_detail.html

@@ -218,7 +218,7 @@
 									</div>
 								</div>
 								<div class="upload-container" ng-if="!component.attachFile || $uploading">
-									<div id="attachUpload" on-success="onAttachUploadSuccess($data)" uploadify="{}"></div>
+									<input class="input-file-default" type="file" ng-file-select ng-model="component.attachFile" ng-change="onAttachUploadSuccess()" ng-multiple="false" accept="image/gif,image/jpeg,image/jpg,image/png,image/svg,application/pdf,*.pdf">
 								</div>
 								<div class="help-block">请上传器件的官方规格书文档!</div>
 							</div>

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

@@ -203,22 +203,22 @@
                         <li class="brand_logo">
                             <span class="fl">规格文档</span>
                             <div style="float: left; padding-left: 10px;">
-                                <div class="" ng-if="component.attachFile">
-                                    <div class="alert alert-success alert-sm f14">
-                                        <a href="{{component.attachFile.path}}">
-                                            <i class="fa fa-file"></i>
-                                            <strong ng-bind="component.attachFile.fileName"></strong>
-                                        </a>(<span ng-bind="component.attachFile.size"></span>)
-                                        <a class="pull-right text-muted f12" ng-click="removeAttach()">删除</a>
-                                        <span class="pull-right">&nbsp;&nbsp;&nbsp;</span>
-                                        <a ng-click="reUpload()" class="pull-right text-muted f12">
-                                            <span ng-if="!$uploading">重新上传</span>
-                                            <span ng-if="$uploading">取消重新上传</span>
-                                        </a>
-                                    </div>
-                                </div>
-                                <div class="upload-container" ng-if="!component.attachFile || $uploading">
-                                    <div id="attachUpload" on-success="onAttachUploadSuccess($data)" uploadify="{}"></div>
+                                <!--<div class="" ng-if="component.attachFile">-->
+                                    <!--<div class="alert alert-success alert-sm f14">-->
+                                        <!--<a href="{{component.attachFile.path}}">-->
+                                            <!--<i class="fa fa-file"></i>-->
+                                            <!--<strong ng-bind="component.attachFile.fileName"></strong>-->
+                                        <!--</a>(<span ng-bind="component.attachFile.size"></span>)-->
+                                        <!--<a class="pull-right text-muted f12" ng-click="removeAttach()">删除</a>-->
+                                        <!--<span class="pull-right">&nbsp;&nbsp;&nbsp;</span>-->
+                                        <!--<a ng-click="reUpload()" class="pull-right text-muted f12">-->
+                                            <!--<span ng-if="!$uploading">重新上传</span>-->
+                                            <!--<span ng-if="$uploading">取消重新上传</span>-->
+                                        <!--</a>-->
+                                    <!--</div>-->
+                                <!--</div>-->
+                                <div class="upload-container">
+                                    <input class="input-file-default" type="file" ng-file-select ng-model="component.attachFile" ng-change="onAttachUploadSuccess()" ng-multiple="false" accept="image/gif,image/jpeg,image/jpg,image/png,image/svg,application/pdf,*.pdf">
                                 </div>
                                 <div class="help-block">请上传器件的官方规格书文档!</div>
                             </div>