Browse Source

Merge branch 'dev-mysql' into liusw-seeksalesman-v1.0-20180313

liusw 7 years ago
parent
commit
2e4398cf03
69 changed files with 7591 additions and 1455 deletions
  1. 694 698
      pom.xml
  2. 12 0
      src/main/java/com/uas/platform/b2c/common/account/controller/UserController.java
  3. 11 0
      src/main/java/com/uas/platform/b2c/common/account/dao/UserDao.java
  4. 7 0
      src/main/java/com/uas/platform/b2c/common/account/service/UserService.java
  5. 34 0
      src/main/java/com/uas/platform/b2c/common/account/service/impl/UserServiceImpl.java
  6. 43 0
      src/main/java/com/uas/platform/b2c/core/filter/SimpleCORSFilter.java
  7. 43 0
      src/main/java/com/uas/platform/b2c/core/utils/StringUtilB2C.java
  8. 14 6
      src/main/java/com/uas/platform/b2c/external/erp/commodity/service/impl/ProductDetailERPServiceImpl.java
  9. 13 4
      src/main/java/com/uas/platform/b2c/external/erp/commodity/util/ModelConverter.java
  10. 4 4
      src/main/java/com/uas/platform/b2c/prod/commodity/controller/ProductController.java
  11. 11 0
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductPersonDao.java
  12. 2 3
      src/main/java/com/uas/platform/b2c/prod/commodity/model/ReleaseProductByBatch.java
  13. 3 2
      src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java
  14. 7 3
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java
  15. 21 5
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductServiceImpl.java
  16. 40 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/api/VendorListController.java
  17. 40 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/controller/VendorListController.java
  18. 164 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/controller/VendorListSubmitController.java
  19. 48 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/dao/VendorListDao.java
  20. 36 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/dao/VendorListSubmitDao.java
  21. 263 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/modal/VendorList.java
  22. 362 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/modal/VendorListSubmit.java
  23. 28 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/VendorListService.java
  24. 75 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/VendorListSubmitService.java
  25. 157 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/VendorListServiceImpl.java
  26. 490 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/VendorListSubmitServiceImpl.java
  27. 6 0
      src/main/java/com/uas/platform/b2c/trade/seek/service/impl/SeekPurchaseBomServiceImpl.java
  28. 1 1
      src/main/resources/dev/sys.properties
  29. BIN
      src/main/resources/jxls-tpl/product/brand-vendor.xls
  30. BIN
      src/main/resources/jxls-tpl/trade/seekPurchaseByBatch.xls
  31. 1 1
      src/main/resources/test/sys.properties
  32. 3 0
      src/main/webapp/WEB-INF/views/normal/admin.html
  33. 6 2
      src/main/webapp/WEB-INF/views/normal/adminWithNav.html
  34. 1 0
      src/main/webapp/WEB-INF/views/normal/erp/vendor_center.html
  35. BIN
      src/main/webapp/resources/img/all/border_line.png
  36. BIN
      src/main/webapp/resources/img/icon/shop_icon.png
  37. 41 42
      src/main/webapp/resources/js/admin/app.js
  38. 153 0
      src/main/webapp/resources/js/admin/controllers/SupplierSubmitDetailCtrl.js
  39. 60 0
      src/main/webapp/resources/js/admin/controllers/SupplierSubmitListCtrl.js
  40. 53 13
      src/main/webapp/resources/js/admin/controllers/help/HelpDetailCtrl.js
  41. 37 7
      src/main/webapp/resources/js/admin/controllers/help/HelpEditCtrl.js
  42. 319 0
      src/main/webapp/resources/js/admin/controllers/supplierMaintenanceCtrl.js
  43. 17 10
      src/main/webapp/resources/js/common/controllers/commonCtrls.js
  44. 1 1
      src/main/webapp/resources/js/common/directives.js
  45. 4 0
      src/main/webapp/resources/js/common/query/enterprise.js
  46. 10 0
      src/main/webapp/resources/js/common/query/help.js
  47. 83 0
      src/main/webapp/resources/js/common/query/supplier.js
  48. 2 0
      src/main/webapp/resources/js/usercenter/controllers/forstore/query_logistics_ctrl.js
  49. 7 7
      src/main/webapp/resources/js/vendor/app.js
  50. 2 0
      src/main/webapp/resources/js/vendor/controllers/forstore/query_logistics_ctrl.js
  51. 74 16
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_materialCtrl.js
  52. 3 3
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_materialPersonCtrl.js
  53. 833 0
      src/main/webapp/resources/view/admin/brand_add.html
  54. 43 5
      src/main/webapp/resources/view/admin/brand_maintenance.html
  55. 8 3
      src/main/webapp/resources/view/admin/brand_maintenance_detail.html
  56. 899 0
      src/main/webapp/resources/view/admin/supplier_maintenance.html
  57. 573 0
      src/main/webapp/resources/view/admin/supplier_submit_detail.html
  58. 68 0
      src/main/webapp/resources/view/admin/supplier_submit_list.html
  59. 4 0
      src/main/webapp/resources/view/common/sidebar.html
  60. 2 1
      src/main/webapp/resources/view/usercenter/forstore/query_logistics.html
  61. 15 2
      src/main/webapp/resources/view/usercenter/forstore/seekPurchase.html
  62. 405 197
      src/main/webapp/resources/view/vendor/forstore/erp/vendor_material_erp.html
  63. 442 202
      src/main/webapp/resources/view/vendor/forstore/erp/vendor_material_person_erp.html
  64. 694 172
      src/main/webapp/resources/view/vendor/forstore/erp/vendor_onSale_erp.html
  65. 39 35
      src/main/webapp/resources/view/vendor/forstore/erp/vendor_undercarriage_erp.html
  66. 2 1
      src/main/webapp/resources/view/vendor/forstore/query_logistics.html
  67. 1 2
      src/main/webapp/resources/view/vendor/forstore/vendor_delivery.html
  68. 56 6
      src/main/webapp/resources/view/vendor/forstore/vendor_material.html
  69. 1 1
      src/main/webapp/resources/view/vendor/forstore/vendor_material_person.html

+ 694 - 698
pom.xml

@@ -1,704 +1,700 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<artifactId>platform-b2c</artifactId>
-	<packaging>war</packaging>
-	<name>platform-b2c Maven Webapp</name>
-	<url>http://maven.apache.org</url>
-	<parent>
-		<groupId>com.uas.platform</groupId>
-		<artifactId>platform</artifactId>
-		<version>0.0.1-SNAPSHOT</version>
-	</parent>
-	<profiles>
-		<profile>
-			<!-- 开发环境 -->
-			<id>dev</id>
-			<properties>
-				<profile>dev</profile>
-				<!-- static plugin -->
-				<static-path>static</static-path>
-			</properties>
-			<!-- 默认 -->
-			<activation>
-				<activeByDefault>true</activeByDefault>
-			</activation>
-		</profile>
-		<profile>
-			<!-- 测试环境 -->
-			<id>test</id>
-			<properties>
-				<profile>test</profile>
-				<!-- static plugin -->
-				<static-path>static</static-path>
-			</properties>
-		</profile>
-		<profile>
-			<!-- 生产环境 -->
-			<id>prod</id>
-			<properties>
-				<profile>prod</profile>
-				<!-- static plugin -->
-				<static-path>https://static.usoftmall.com</static-path>
-			</properties>
-		</profile>
-	</profiles>
-	<dependencies>
-		<dependency>
-			<groupId>javax.servlet</groupId>
-			<artifactId>javax.servlet-api</artifactId>
-			<version>3.0.1</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>javax.servlet</groupId>
-			<artifactId>servlet-api</artifactId>
-		</dependency>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns="http://maven.apache.org/POM/4.0.0"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>platform-b2c</artifactId>
+  <packaging>war</packaging>
+  <name>platform-b2c Maven Webapp</name>
+  <url>http://maven.apache.org</url>
+  <parent>
+    <groupId>com.uas.platform</groupId>
+    <artifactId>platform</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+  </parent>
+  <profiles>
+    <profile>
+      <!-- 开发环境 -->
+      <id>dev</id>
+      <properties>
+        <profile>dev</profile>
+        <!-- static plugin -->
+        <static-path>static</static-path>
+      </properties>
+      <!-- 默认 -->
+      <activation>
+        <activeByDefault>true</activeByDefault>
+      </activation>
+    </profile>
+    <profile>
+      <!-- 测试环境 -->
+      <id>test</id>
+      <properties>
+        <profile>test</profile>
+        <!-- static plugin -->
+        <static-path>static</static-path>
+      </properties>
+    </profile>
+    <profile>
+      <!-- 生产环境 -->
+      <id>prod</id>
+      <properties>
+        <profile>prod</profile>
+        <!-- static plugin -->
+        <static-path>https://static.usoftmall.com</static-path>
+      </properties>
+    </profile>
+  </profiles>
+  <dependencies>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>javax.servlet-api</artifactId>
+      <version>3.0.1</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>servlet-api</artifactId>
+    </dependency>
 
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>log4j</groupId>
-			<artifactId>log4j</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>com.uas.platform</groupId>
-			<artifactId>platform-core</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>com.uas.api</groupId>
-			<artifactId>b2c-erp-api</artifactId>
-			<version>0.0.2-SNAPSHOT</version>
-		</dependency>
-		<dependency>
-			<groupId>com.uas.api</groupId>
-			<artifactId>b2c-manage-api</artifactId>
-			<version>0.0.1</version>
-		</dependency>
-		<dependency>
-			<groupId>com.caucho</groupId>
-			<artifactId>hessian</artifactId>
-		</dependency>
-		<!-- spring -->
-		<dependency>
-			<groupId>org.springframework</groupId>
-			<artifactId>spring-core</artifactId>
-			<exclusions>
-				<exclusion>
-					<groupId>commons-logging</groupId>
-					<artifactId>commons-logging</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework</groupId>
-			<artifactId>spring-context</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework</groupId>
-			<artifactId>spring-context-support</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework</groupId>
-			<artifactId>spring-webmvc</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework</groupId>
-			<artifactId>spring-jdbc</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework</groupId>
-			<artifactId>spring-tx</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework</groupId>
-			<artifactId>spring-aop</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework</groupId>
-			<artifactId>spring-aspects</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework</groupId>
-			<artifactId>spring-test</artifactId>
-			<version>4.1.6.RELEASE</version>
-		</dependency>
-		<!-- jpa -->
-		<dependency>
-			<groupId>org.springframework.data</groupId>
-			<artifactId>spring-data-jpa</artifactId>
-		</dependency>
-		<!-- mongodb spring -->
-		<dependency>
-			<groupId>org.springframework.data</groupId>
-			<artifactId>spring-data-mongodb</artifactId>
-			<version>1.5.2.RELEASE</version>
-		</dependency>
-		<!-- xstream -->
-		<dependency>
-			<groupId>com.thoughtworks.xstream</groupId>
-			<artifactId>xstream</artifactId>
-			<version>1.3.1</version>
-		</dependency>
-		<!-- fileupload -->
-		<dependency>
-			<groupId>commons-fileupload</groupId>
-			<artifactId>commons-fileupload</artifactId>
-			<version>1.3.1</version>
-		</dependency>
-		<!-- hibernate -->
-		<dependency>
-			<groupId>org.hibernate</groupId>
-			<artifactId>hibernate-core</artifactId>
-			<exclusions>
-				<exclusion>
-					<groupId>xml-apis</groupId>
-					<artifactId>xml-apis</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>org.hibernate</groupId>
-			<artifactId>hibernate-entitymanager</artifactId>
-			<exclusions>
-				<exclusion>
-					<groupId>cglib</groupId>
-					<artifactId>cglib</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>dom4j</groupId>
-					<artifactId>dom4j</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>org.hibernate.javax.persistence</groupId>
-			<artifactId>hibernate-jpa-2.1-api</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>commons-collections</groupId>
-			<artifactId>commons-collections</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.hibernate</groupId>
-			<artifactId>hibernate-validator</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-api</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>jcl-over-slf4j</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-log4j12</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.aspectj</groupId>
-			<artifactId>aspectjrt</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.aspectj</groupId>
-			<artifactId>aspectjweaver</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.commons</groupId>
-			<artifactId>commons-lang3</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>javax.validation</groupId>
-			<artifactId>validation-api</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>javax.transaction</groupId>
-			<artifactId>jta</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.hibernate</groupId>
-			<artifactId>hibernate-ehcache</artifactId>
-		</dependency>
-		<!-- jdbc -->
-		<dependency>
-			<groupId>com.oracle</groupId>
-			<artifactId>ojdbc6</artifactId>
-		</dependency>
-		<!-- mysql -->
-		<dependency>
-			<groupId>mysql</groupId>
-			<artifactId>mysql-connector-java</artifactId>
-			<version>5.1.21</version>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework</groupId>
-			<artifactId>spring-orm</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>commons-pool</groupId>
-			<artifactId>commons-pool</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>commons-dbcp</groupId>
-			<artifactId>commons-dbcp</artifactId>
-		</dependency>
-		<!-- redis -->
-		<dependency>
-			<groupId>redis.clients</groupId>
-			<artifactId>jedis</artifactId>
-			<version>2.7.3</version>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.data</groupId>
-			<artifactId>spring-data-redis</artifactId>
-			<version>1.6.0.RELEASE</version>
-		</dependency>
-		<!-- spring mobile -->
-		<dependency>
-			<groupId>org.springframework.mobile</groupId>
-			<artifactId>spring-mobile-device</artifactId>
-		</dependency>
-		<!--json-lib -->
-		<dependency>
-			<groupId>net.sf.json-lib</groupId>
-			<artifactId>json-lib</artifactId>
-			<classifier>jdk15</classifier>
-		</dependency>
-		<dependency>
-			<groupId>org.codehaus.jackson</groupId>
-			<artifactId>jackson-core-asl</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.codehaus.jackson</groupId>
-			<artifactId>jackson-mapper-asl</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>com.fasterxml.jackson.core</groupId>
-			<artifactId>jackson-core</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>com.fasterxml.jackson.core</groupId>
-			<artifactId>jackson-databind</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>com.fasterxml.jackson.core</groupId>
-			<artifactId>jackson-annotations</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>com.alibaba</groupId>
-			<artifactId>fastjson</artifactId>
-		</dependency>
-		<!-- velocity -->
-		<dependency>
-			<groupId>org.apache.velocity</groupId>
-			<artifactId>velocity</artifactId>
-		</dependency>
-		<!-- mail -->
-		<dependency>
-			<groupId>javax.mail</groupId>
-			<artifactId>mail</artifactId>
-		</dependency>
-		<!-- jxls -->
-		<dependency>
-			<groupId>net.sf.jxls</groupId>
-			<artifactId>jxls-core</artifactId>
-			<version>1.0.4</version>
-		</dependency>
-		<dependency>
-			<groupId>net.sf.jxls</groupId>
-			<artifactId>jxls-reader</artifactId>
-			<version>1.0.4</version>
-		</dependency>
-		<!-- poi -->
-		<dependency>
-			<groupId>org.apache.poi</groupId>
-			<artifactId>poi</artifactId>
-			<version>3.17</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.poi</groupId>
-			<artifactId>poi-ooxml</artifactId>
-			<version>3.17</version>
-			<exclusions>
-				<exclusion>
-					<groupId>org.apache.poi</groupId>
-					<artifactId>poi</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<!-- BeeCloud支付集成SDK -->
-		<dependency>
-			<groupId>cn.beecloud</groupId>
-			<artifactId>beecloud-java-sdk</artifactId>
-			<version>3.1.0</version>
-		</dependency>
-		<dependency>
-			<groupId>jaxen</groupId>
-			<artifactId>jaxen</artifactId>
-			<version>1.1.6</version>
-			<exclusions>
-				<exclusion>
-					<groupId>dom4j</groupId>
-					<artifactId>dom4j</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>xml-apis</groupId>
-					<artifactId>xml-apis</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>xerces</groupId>
-					<artifactId>xmlParserAPIs</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>xerces</groupId>
-					<artifactId>xercesImpl</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>xerces</groupId>
-					<artifactId>xercesImpl</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>com.ibm.icu</groupId>
-					<artifactId>icu4j</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<!-- kafka消息中间件 -->
-		 <dependency>
-			 <groupId>org.springframework.kafka</groupId>
-			 <artifactId>spring-kafka</artifactId>
-			<version>1.2.2.RELEASE</version>
-		 </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.uas.platform</groupId>
+      <artifactId>platform-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.uas.api</groupId>
+      <artifactId>b2c-erp-api</artifactId>
+      <version>0.0.2-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>com.uas.api</groupId>
+      <artifactId>b2c-manage-api</artifactId>
+      <version>0.0.1</version>
+    </dependency>
+    <dependency>
+      <groupId>com.caucho</groupId>
+      <artifactId>hessian</artifactId>
+    </dependency>
+    <!-- spring -->
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-core</artifactId>
+      <exclusions>
+        <exclusion>
+          <groupId>commons-logging</groupId>
+          <artifactId>commons-logging</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-context</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-context-support</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-webmvc</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-jdbc</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-tx</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-aop</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-aspects</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-test</artifactId>
+      <version>4.1.6.RELEASE</version>
+    </dependency>
+    <!-- jpa -->
+    <dependency>
+      <groupId>org.springframework.data</groupId>
+      <artifactId>spring-data-jpa</artifactId>
+    </dependency>
+    <!-- mongodb spring -->
+    <dependency>
+      <groupId>org.springframework.data</groupId>
+      <artifactId>spring-data-mongodb</artifactId>
+      <version>1.5.2.RELEASE</version>
+    </dependency>
+    <!-- xstream -->
+    <dependency>
+      <groupId>com.thoughtworks.xstream</groupId>
+      <artifactId>xstream</artifactId>
+      <version>1.3.1</version>
+    </dependency>
+    <!-- fileupload -->
+    <dependency>
+      <groupId>commons-fileupload</groupId>
+      <artifactId>commons-fileupload</artifactId>
+      <version>1.3.1</version>
+    </dependency>
+    <!-- hibernate -->
+    <dependency>
+      <groupId>org.hibernate</groupId>
+      <artifactId>hibernate-core</artifactId>
+      <exclusions>
+        <exclusion>
+          <groupId>xml-apis</groupId>
+          <artifactId>xml-apis</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.hibernate</groupId>
+      <artifactId>hibernate-entitymanager</artifactId>
+      <exclusions>
+        <exclusion>
+          <groupId>cglib</groupId>
+          <artifactId>cglib</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>dom4j</groupId>
+          <artifactId>dom4j</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.hibernate.javax.persistence</groupId>
+      <artifactId>hibernate-jpa-2.1-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>commons-collections</groupId>
+      <artifactId>commons-collections</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.hibernate</groupId>
+      <artifactId>hibernate-validator</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>jcl-over-slf4j</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-log4j12</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.aspectj</groupId>
+      <artifactId>aspectjrt</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.aspectj</groupId>
+      <artifactId>aspectjweaver</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>javax.validation</groupId>
+      <artifactId>validation-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>javax.transaction</groupId>
+      <artifactId>jta</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.hibernate</groupId>
+      <artifactId>hibernate-ehcache</artifactId>
+    </dependency>
+    <!-- mysql -->
+    <dependency>
+      <groupId>mysql</groupId>
+      <artifactId>mysql-connector-java</artifactId>
+      <version>5.1.21</version>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-orm</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>commons-pool</groupId>
+      <artifactId>commons-pool</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>commons-dbcp</groupId>
+      <artifactId>commons-dbcp</artifactId>
+    </dependency>
+    <!-- redis -->
+    <dependency>
+      <groupId>redis.clients</groupId>
+      <artifactId>jedis</artifactId>
+      <version>2.7.3</version>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.data</groupId>
+      <artifactId>spring-data-redis</artifactId>
+      <version>1.6.0.RELEASE</version>
+    </dependency>
+    <!-- spring mobile -->
+    <dependency>
+      <groupId>org.springframework.mobile</groupId>
+      <artifactId>spring-mobile-device</artifactId>
+    </dependency>
+    <!--json-lib -->
+    <dependency>
+      <groupId>net.sf.json-lib</groupId>
+      <artifactId>json-lib</artifactId>
+      <classifier>jdk15</classifier>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.jackson</groupId>
+      <artifactId>jackson-core-asl</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.jackson</groupId>
+      <artifactId>jackson-mapper-asl</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-databind</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-annotations</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.alibaba</groupId>
+      <artifactId>fastjson</artifactId>
+    </dependency>
+    <!-- velocity -->
+    <dependency>
+      <groupId>org.apache.velocity</groupId>
+      <artifactId>velocity</artifactId>
+    </dependency>
+    <!-- mail -->
+    <dependency>
+      <groupId>javax.mail</groupId>
+      <artifactId>mail</artifactId>
+    </dependency>
+    <!-- jxls -->
+    <dependency>
+      <groupId>net.sf.jxls</groupId>
+      <artifactId>jxls-core</artifactId>
+      <version>1.0.4</version>
+    </dependency>
+    <dependency>
+      <groupId>net.sf.jxls</groupId>
+      <artifactId>jxls-reader</artifactId>
+      <version>1.0.4</version>
+    </dependency>
+    <!-- poi -->
+    <dependency>
+      <groupId>org.apache.poi</groupId>
+      <artifactId>poi</artifactId>
+      <version>3.17</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.poi</groupId>
+      <artifactId>poi-ooxml</artifactId>
+      <version>3.17</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.apache.poi</groupId>
+          <artifactId>poi</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <!-- BeeCloud支付集成SDK -->
+    <dependency>
+      <groupId>cn.beecloud</groupId>
+      <artifactId>beecloud-java-sdk</artifactId>
+      <version>3.1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>jaxen</groupId>
+      <artifactId>jaxen</artifactId>
+      <version>1.1.6</version>
+      <exclusions>
+        <exclusion>
+          <groupId>dom4j</groupId>
+          <artifactId>dom4j</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>xml-apis</groupId>
+          <artifactId>xml-apis</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>xerces</groupId>
+          <artifactId>xmlParserAPIs</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>xerces</groupId>
+          <artifactId>xercesImpl</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>xerces</groupId>
+          <artifactId>xercesImpl</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.ibm.icu</groupId>
+          <artifactId>icu4j</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <!-- kafka消息中间件 -->
+    <dependency>
+      <groupId>org.springframework.kafka</groupId>
+      <artifactId>spring-kafka</artifactId>
+      <version>1.2.2.RELEASE</version>
+    </dependency>
 
-		<!-- service on dubbo -->
-		<dependency>
-			<groupId>com.uas.dfs</groupId>
-			<artifactId>dfs-api</artifactId>
-		</dependency>
-		<!-- search -->
-		<dependency>
-			<groupId>com.uas.search</groupId>
-			<artifactId>search-api</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>com.uas.message</groupId>
-			<artifactId>message-mail-api</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>com.uas.message</groupId>
-			<artifactId>message-sms-api</artifactId>
-		</dependency>
+    <!-- service on dubbo -->
+    <dependency>
+      <groupId>com.uas.dfs</groupId>
+      <artifactId>dfs-api</artifactId>
+    </dependency>
+    <!-- search -->
+    <dependency>
+      <groupId>com.uas.search</groupId>
+      <artifactId>search-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.uas.message</groupId>
+      <artifactId>message-mail-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.uas.message</groupId>
+      <artifactId>message-sms-api</artifactId>
+    </dependency>
 
-		<dependency>
-			<groupId>com.uas.account</groupId>
-			<artifactId>account-common</artifactId>
-		</dependency>
+    <dependency>
+      <groupId>com.uas.account</groupId>
+      <artifactId>account-common</artifactId>
+    </dependency>
 
-        <dependency>
-            <groupId>net.sourceforge.pinyin4j</groupId>
-            <artifactId>pinyin4j</artifactId>
-			<version>1.1.0</version>
-        </dependency>
-        <!-- security -->
-		<dependency>
-			<groupId>org.springframework.security</groupId>
-			<artifactId>spring-security-core</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.security</groupId>
-			<artifactId>spring-security-config</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.security</groupId>
-			<artifactId>spring-security-web</artifactId>
-		</dependency>
+    <dependency>
+      <groupId>net.sourceforge.pinyin4j</groupId>
+      <artifactId>pinyin4j</artifactId>
+      <version>1.1.0</version>
+    </dependency>
+    <!-- security -->
+    <dependency>
+      <groupId>org.springframework.security</groupId>
+      <artifactId>spring-security-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.security</groupId>
+      <artifactId>spring-security-config</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.security</groupId>
+      <artifactId>spring-security-web</artifactId>
+    </dependency>
 
-		<!-- swagger-springmvc -->
-		<dependency>
-			<groupId>com.mangofactory</groupId>
-			<artifactId>swagger-springmvc</artifactId>
-			<version>1.0.2</version>
-		</dependency>
-		<dependency>
-			<groupId>com.mangofactory</groupId>
-			<artifactId>swagger-models</artifactId>
-			<version>1.0.2</version>
-		</dependency>
-		<dependency>
-			<groupId>com.wordnik</groupId>
-			<artifactId>swagger-annotations</artifactId>
-			<version>1.3.11</version>
-		</dependency>
-		<!-- swagger-springmvc dependencies -->
-		<dependency>
-			<groupId>com.google.guava</groupId>
-			<artifactId>guava</artifactId>
-			<version>15.0</version>
-		</dependency>
-		<dependency>
-			<groupId>com.fasterxml</groupId>
-			<artifactId>classmate</artifactId>
-			<version>1.1.0</version>
-		</dependency>
-		<dependency>
-			<groupId>javax.servlet</groupId>
-			<artifactId>servlet-api</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>com.uas.ps</groupId>
-			<artifactId>ps-core</artifactId>
-			<version>0.0.1-SNAPSHOT</version>
-		</dependency>
-		<dependency>
-			<groupId>com.uas.ps</groupId>
-			<artifactId>ps-entity</artifactId>
-			<version>0.0.1-SNAPSHOT</version>
-		</dependency>
-		<dependency>
-			<groupId>com.uas.ps</groupId>
-			<artifactId>ps-entity</artifactId>
-			<version>0.0.1-SNAPSHOT</version>
-		</dependency>
-		<!--Hutool POI工具类(对MS Office操作)-->
-		<!--<dependency>
-			<groupId>org.apache.poi</groupId>
-			<artifactId>poi-ooxml</artifactId>
-			<version>3.17</version>
-		</dependency>-->
-		<dependency>
-			<groupId>com.xiaoleilu</groupId>
-			<artifactId>hutool-poi</artifactId>
-			<version>3.2.2</version>
-			<exclusions>
-				<exclusion>
-					<groupId>org.apache.poi</groupId>
-					<artifactId>poi-ooxml</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-	</dependencies>
-	<build>
-		<finalName>platform-b2c</finalName>
-		<!-- 受profile影响的目录 -->
-		<resources>
-			<resource>
-				<directory>${basedir}/src/main/resources</directory>
-				<filtering>true</filtering>
-				<excludes>
-					<exclude>**/*.xls</exclude>
-				</excludes>
-			</resource>
-			<!-- xls文件不能filter处理,需区分出来 -->
-			<resource>
-				<directory>${basedir}/src/main/resources</directory>
-				<filtering>false</filtering>
-				<includes>
-					<include>**/*.xls</include>
-				</includes>
-			</resource>
-		</resources>
-		<!-- 在maven生命周期validate阶段生成timestamp -->
-		<plugins>
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>buildnumber-maven-plugin</artifactId>
-				<version>1.3</version>
-				<executions>
-					<execution>
-						<phase>validate</phase>
-						<goals>
-							<goal>create-timestamp</goal>
-						</goals>
-					</execution>
-				</executions>
-				<configuration>
-					<format>{0,date,yyyy-MM-dd HH:mm:ss}</format>
-					<items>
-						<item>timestamp</item>
-					</items>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<configuration>
-					<source>1.7</source>
-					<target>1.7</target>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>com.samaxes.maven</groupId>
-				<artifactId>minify-maven-plugin</artifactId>
-				<version>1.7.4</version>
-				<!-- 静态文件压缩 -->
-				<executions>
-					<execution>
-						<id>default-minify</id>
-						<phase>prepare-package</phase>
-						<configuration>
-							<charset>UTF-8</charset>
-							<skipMerge>true</skipMerge>
-							<closureLanguage>ECMASCRIPT5</closureLanguage>
-							<closureAngularPass>true</closureAngularPass>
-							<nosuffix>true</nosuffix>
-							<webappTargetDir>${project.build.directory}/minify</webappTargetDir>
-							<cssSourceDir>resources</cssSourceDir>
-							<cssEngine>YUI</cssEngine>
-							<jsSourceDir>resources</jsSourceDir>
-							<jsEngine>YUI</jsEngine>
-							<cssSourceIncludes>
-								<cssSourceInclude>css/**/*.css</cssSourceInclude>
-								<cssSourceInclude>data/**/*.json</cssSourceInclude>
-							</cssSourceIncludes>
-							<cssSourceExcludes>
-								<cssSourceExclude>css/**/*.min.css</cssSourceExclude>
-							</cssSourceExcludes>
-							<jsSourceIncludes>
-								<jsSourceInclude>js/**/*.js</jsSourceInclude>
-							</jsSourceIncludes>
-							<jsSourceExcludes>
-								<jsSourceExclude>js/**/*.min.js</jsSourceExclude>
-							</jsSourceExcludes>
-						</configuration>
-						<goals>
-							<goal>minify</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<artifactId>maven-resources-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>copy-resources</id>
-						<phase>prepare-package</phase>
-						<goals>
-							<goal>copy-resources</goal>
-						</goals>
-						<configuration>
-							<outputDirectory>${project.build.directory}/minify</outputDirectory>
-							<overwrite>false</overwrite>
-							<resources>
-								<resource>
-									<directory>${basedir}/src/main/webapp</directory>
-								</resource>
-							</resources>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<groupId>com.uas.plugins</groupId>
-				<artifactId>static-maven-plugin</artifactId>
-				<version>0.0.2-SNAPSHOT</version>
-				<!-- 静态资源分离 -->
-				<executions>
-					<execution>
-						<id>default-static</id>
-						<phase>prepare-package</phase>
-						<configuration>
-							<pathMatcher>static</pathMatcher>
-							<staticUrl>${static-path}</staticUrl>
-							<webappDir>${project.build.directory}/minify</webappDir>
-							<sourceDir>/</sourceDir>
-							<targetDir>${project.build.directory}/statics</targetDir>
-							<staticDir>/</staticDir>
-							<sourceIncludes>
-								<sourceInclude>resources/js/**/*.js</sourceInclude>
-								<sourceInclude>resources/data/**/*.json</sourceInclude>
-								<sourceInclude>resources/view/**/*.html</sourceInclude>
-								<sourceInclude>WEB-INF/views/**/*.html</sourceInclude>
-							</sourceIncludes>
-							<!-- http://static.ubtoc.com/css/index.css?_v=1450321871828 -->
-							<versionSuffix>
-								<suffix>?_v=${timestamp}</suffix>
-								<exclude>*/require.js,*.min.js,*.min.css</exclude>
-							</versionSuffix>
-						</configuration>
-						<goals>
-							<goal>static</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-war-plugin</artifactId>
-				<version>2.4</version>
-				<configuration>
-					<webResources>
-						<resource>
-							<directory>${project.build.directory}/statics</directory>
-						</resource>
-						<resource>
-							<directory>${project.build.directory}/minify</directory>
-						</resource>
-					</webResources>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.tomcat.maven</groupId>
-				<artifactId>tomcat7-maven-plugin</artifactId>
-				<version>2.2</version>
-				<configuration>
-					<port>8080</port>
-					<path>/platform-b2c</path>
-					<uriEncoding>utf-8</uriEncoding>
-				</configuration>
-			</plugin>
-		</plugins>
-		<pluginManagement>
-			<plugins>
-				<plugin>
-					<groupId>org.eclipse.m2e</groupId>
-					<artifactId>lifecycle-mapping</artifactId>
-					<version>1.0.0</version>
-					<configuration>
-						<lifecycleMappingMetadata>
-							<pluginExecutions>
-								<pluginExecution>
-									<pluginExecutionFilter>
-										<groupId>
-											org.codehaus.mojo
-										</groupId>
-										<artifactId>
-											buildnumber-maven-plugin
-										</artifactId>
-										<versionRange>
-											[1.3,)
-										</versionRange>
-										<goals>
-											<goal>
-												create-timestamp
-											</goal>
-										</goals>
-									</pluginExecutionFilter>
-									<action>
-										<ignore></ignore>
-									</action>
-								</pluginExecution>
-							</pluginExecutions>
-						</lifecycleMappingMetadata>
-					</configuration>
-				</plugin>
-			</plugins>
-		</pluginManagement>
-	</build>
-	<distributionManagement>
-		<!-- 发布release仓库 -->
-		<repository>
-			<id>platform-release</id>
-			<name>platform-release</name>
-			<url>http://113.105.74.141:8081/artifactory/libs-release-local</url>
-		</repository>
-		<!-- 发布快照版本 -->
-		<snapshotRepository>
-			<id>platform-snapshots</id>
-			<name>platform-snapshots</name>
-			<url>http://113.105.74.141:8081/artifactory/libs-snapshot-local</url>
-		</snapshotRepository>
-	</distributionManagement>
+    <!-- swagger-springmvc -->
+    <dependency>
+      <groupId>com.mangofactory</groupId>
+      <artifactId>swagger-springmvc</artifactId>
+      <version>1.0.2</version>
+    </dependency>
+    <dependency>
+      <groupId>com.mangofactory</groupId>
+      <artifactId>swagger-models</artifactId>
+      <version>1.0.2</version>
+    </dependency>
+    <dependency>
+      <groupId>com.wordnik</groupId>
+      <artifactId>swagger-annotations</artifactId>
+      <version>1.3.11</version>
+    </dependency>
+    <!-- swagger-springmvc dependencies -->
+    <dependency>
+      <groupId>com.google.guava</groupId>
+      <artifactId>guava</artifactId>
+      <version>15.0</version>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml</groupId>
+      <artifactId>classmate</artifactId>
+      <version>1.1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>servlet-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.uas.ps</groupId>
+      <artifactId>ps-core</artifactId>
+      <version>0.0.1-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>com.uas.ps</groupId>
+      <artifactId>ps-entity</artifactId>
+      <version>0.0.1-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>com.uas.ps</groupId>
+      <artifactId>ps-entity</artifactId>
+      <version>0.0.1-SNAPSHOT</version>
+    </dependency>
+    <!--Hutool POI工具类(对MS Office操作)-->
+    <!--<dependency>
+      <groupId>org.apache.poi</groupId>
+      <artifactId>poi-ooxml</artifactId>
+      <version>3.17</version>
+    </dependency>-->
+    <dependency>
+      <groupId>com.xiaoleilu</groupId>
+      <artifactId>hutool-poi</artifactId>
+      <version>3.2.2</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.apache.poi</groupId>
+          <artifactId>poi-ooxml</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+  </dependencies>
+  <build>
+    <finalName>platform-b2c</finalName>
+    <!-- 受profile影响的目录 -->
+    <resources>
+      <resource>
+        <directory>${basedir}/src/main/resources</directory>
+        <filtering>true</filtering>
+        <excludes>
+          <exclude>**/*.xls</exclude>
+        </excludes>
+      </resource>
+      <!-- xls文件不能filter处理,需区分出来 -->
+      <resource>
+        <directory>${basedir}/src/main/resources</directory>
+        <filtering>false</filtering>
+        <includes>
+          <include>**/*.xls</include>
+        </includes>
+      </resource>
+    </resources>
+    <!-- 在maven生命周期validate阶段生成timestamp -->
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>buildnumber-maven-plugin</artifactId>
+        <version>1.3</version>
+        <executions>
+          <execution>
+            <phase>validate</phase>
+            <goals>
+              <goal>create-timestamp</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <format>{0,date,yyyy-MM-dd HH:mm:ss}</format>
+          <items>
+            <item>timestamp</item>
+          </items>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <source>1.7</source>
+          <target>1.7</target>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>com.samaxes.maven</groupId>
+        <artifactId>minify-maven-plugin</artifactId>
+        <version>1.7.4</version>
+        <!-- 静态文件压缩 -->
+        <executions>
+          <execution>
+            <id>default-minify</id>
+            <phase>prepare-package</phase>
+            <configuration>
+              <charset>UTF-8</charset>
+              <skipMerge>true</skipMerge>
+              <closureLanguage>ECMASCRIPT5</closureLanguage>
+              <closureAngularPass>true</closureAngularPass>
+              <nosuffix>true</nosuffix>
+              <webappTargetDir>${project.build.directory}/minify</webappTargetDir>
+              <cssSourceDir>resources</cssSourceDir>
+              <cssEngine>YUI</cssEngine>
+              <jsSourceDir>resources</jsSourceDir>
+              <jsEngine>YUI</jsEngine>
+              <cssSourceIncludes>
+                <cssSourceInclude>css/**/*.css</cssSourceInclude>
+                <cssSourceInclude>data/**/*.json</cssSourceInclude>
+              </cssSourceIncludes>
+              <cssSourceExcludes>
+                <cssSourceExclude>css/**/*.min.css</cssSourceExclude>
+              </cssSourceExcludes>
+              <jsSourceIncludes>
+                <jsSourceInclude>js/**/*.js</jsSourceInclude>
+              </jsSourceIncludes>
+              <jsSourceExcludes>
+                <jsSourceExclude>js/**/*.min.js</jsSourceExclude>
+              </jsSourceExcludes>
+            </configuration>
+            <goals>
+              <goal>minify</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <artifactId>maven-resources-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>copy-resources</id>
+            <phase>prepare-package</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${project.build.directory}/minify</outputDirectory>
+              <overwrite>false</overwrite>
+              <resources>
+                <resource>
+                  <directory>${basedir}/src/main/webapp</directory>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>com.uas.plugins</groupId>
+        <artifactId>static-maven-plugin</artifactId>
+        <version>0.0.2-SNAPSHOT</version>
+        <!-- 静态资源分离 -->
+        <executions>
+          <execution>
+            <id>default-static</id>
+            <phase>prepare-package</phase>
+            <configuration>
+              <pathMatcher>static</pathMatcher>
+              <staticUrl>${static-path}</staticUrl>
+              <webappDir>${project.build.directory}/minify</webappDir>
+              <sourceDir>/</sourceDir>
+              <targetDir>${project.build.directory}/statics</targetDir>
+              <staticDir>/</staticDir>
+              <sourceIncludes>
+                <sourceInclude>resources/js/**/*.js</sourceInclude>
+                <sourceInclude>resources/data/**/*.json</sourceInclude>
+                <sourceInclude>resources/view/**/*.html</sourceInclude>
+                <sourceInclude>WEB-INF/views/**/*.html</sourceInclude>
+              </sourceIncludes>
+              <!-- http://static.ubtoc.com/css/index.css?_v=1450321871828 -->
+              <versionSuffix>
+                <suffix>?_v=${timestamp}</suffix>
+                <exclude>*/require.js,*.min.js,*.min.css</exclude>
+              </versionSuffix>
+            </configuration>
+            <goals>
+              <goal>static</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-war-plugin</artifactId>
+        <version>2.4</version>
+        <configuration>
+          <webResources>
+            <resource>
+              <directory>${project.build.directory}/statics</directory>
+            </resource>
+            <resource>
+              <directory>${project.build.directory}/minify</directory>
+            </resource>
+          </webResources>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.tomcat.maven</groupId>
+        <artifactId>tomcat7-maven-plugin</artifactId>
+        <version>2.2</version>
+        <configuration>
+          <port>8080</port>
+          <path>/platform-b2c</path>
+          <uriEncoding>utf-8</uriEncoding>
+        </configuration>
+      </plugin>
+    </plugins>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.eclipse.m2e</groupId>
+          <artifactId>lifecycle-mapping</artifactId>
+          <version>1.0.0</version>
+          <configuration>
+            <lifecycleMappingMetadata>
+              <pluginExecutions>
+                <pluginExecution>
+                  <pluginExecutionFilter>
+                    <groupId>
+                      org.codehaus.mojo
+                    </groupId>
+                    <artifactId>
+                      buildnumber-maven-plugin
+                    </artifactId>
+                    <versionRange>
+                      [1.3,)
+                    </versionRange>
+                    <goals>
+                      <goal>
+                        create-timestamp
+                      </goal>
+                    </goals>
+                  </pluginExecutionFilter>
+                  <action>
+                    <ignore></ignore>
+                  </action>
+                </pluginExecution>
+              </pluginExecutions>
+            </lifecycleMappingMetadata>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+  <distributionManagement>
+    <!-- 发布release仓库 -->
+    <repository>
+      <id>platform-release</id>
+      <name>platform-release</name>
+      <url>http://113.105.74.141:8081/artifactory/libs-release-local</url>
+    </repository>
+    <!-- 发布快照版本 -->
+    <snapshotRepository>
+      <id>platform-snapshots</id>
+      <name>platform-snapshots</name>
+      <url>http://113.105.74.141:8081/artifactory/libs-snapshot-local</url>
+    </snapshotRepository>
+  </distributionManagement>
 </project>

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

@@ -606,6 +606,18 @@ public class UserController {
 		return userService.findUsersPageByEnUUAndKeyword(pageInfo,enuu,keyword);
 	}
 
+
+	/**
+	 * 通过姓名模糊查询该企业所有人员信息
+	 * @param enuu 企业uu号
+	 * @return 完整的企业人员信息
+	 */
+	@RequestMapping(value = "/enterprise/username",method = RequestMethod.GET)
+	public Page<User> findUserByUserNameLikeAndEnUU(PageParams params, Long enuu, String userName){
+		PageInfo pageInfo = new PageInfo(params);
+		return userService.findUserByUserNameLikeAndEnUU(pageInfo, enuu, userName);
+	}
+
 	/**
 	 * 新增用户
 	 *

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

@@ -110,4 +110,15 @@ public interface UserDao extends JpaSpecificationExecutor<User>, JpaRepository<U
 	@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value = "true") })
 	@Query("select u.userUU from User u inner join u.enterprises as e where e.uu = :enUU and u.userUU = :userUU")
 	public List<Long> findUserByEnUUAndUserUU(@Param("enUU") long enUU, @Param("userUU") long userUU);
+
+	/**
+	 * 按名字查询当前企业的用户信息
+	 *
+	 * @param userName
+	 * @param enUU
+	 * @return
+	 */
+	@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value = "true") })
+	@Query("select u.userUU from User u inner join u.enterprises as e where e.uu = :enUU and u.userName like %:userName%")
+	public List<Long> findUserByUserNameLikeAndEnUU(@Param("userName") String userName, @Param("enUU") Long enUU);
 }

+ 7 - 0
src/main/java/com/uas/platform/b2c/common/account/service/UserService.java

@@ -54,6 +54,13 @@ public interface UserService {
 	 */
 	Page<User> findUsersPageByEnUU(PageInfo pageInfo, Long enUU);
 	Page<User> findUsersPageByEnUUAndKeyword(PageInfo pageInfo , Long enUU , String keyword);
+
+	/**
+	 * 通过姓名获取该企业所有人员信息
+	 * @return 完整的企业人员信息
+	 */
+	Page<User> findUserByUserNameLikeAndEnUU(PageInfo pageInfo , Long enUU , String userName);
+
 	/**
 	 * 按email取用户信息
 	 * 

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

@@ -251,6 +251,40 @@ public class UserServiceImpl implements UserService {
 
 	}
 
+	@Override
+	public Page<User> findUserByUserNameLikeAndEnUU(PageInfo pageInfo, Long enUU, String userName) {
+		List<Long> usersId = new ArrayList<>();
+		if (!StringUtils.isEmpty(userName)) {
+			usersId = userDao.findUserByUserNameLikeAndEnUU(userName, enUU);
+		}
+		final List<Long> users = usersId;
+		if (users.size()>0) {
+			Page<User> pUser = userDao.findAll(new Specification<User>() {
+				public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+					Predicate predicateId = root.get("userUU").in(users);
+					query.where(predicateId);
+					return null;
+				}
+			}, pageInfo);
+			for (User user : pUser) {
+				Set<Role> roles = user.getRoles();
+				Long enuu = SystemSession.getUser().getEnterprise().getUu();
+				if (!CollectionUtils.isEmpty(roles)) {
+					Iterator<Role> iterator = roles.iterator();
+					while (iterator.hasNext()) {
+						Role role = iterator.next();
+						if (!role.getEnUU().equals(enuu)) {
+							iterator.remove();
+						}
+					}
+				}
+			}
+			return pUser;
+		}else{
+			return null;
+		}
+	}
+
 	@Override
 	public User save(User user) {
         User userOld = userDao.findOne(user.getUserUU());

+ 43 - 0
src/main/java/com/uas/platform/b2c/core/filter/SimpleCORSFilter.java

@@ -0,0 +1,43 @@
+package com.uas.platform.b2c.core.filter;
+
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * CORS 跨域请求过滤器,实现允许跨域
+ * @author suntg
+ * @since 2018年3月15日17:51:32
+ */
+public class SimpleCORSFilter implements Filter {
+
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+
+    }
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response,
+                         FilterChain chain) throws IOException, ServletException {
+        HttpServletResponse res = (HttpServletResponse) response;
+        res.setHeader("Access-Control-Allow-Origin", "*");
+        res.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT");
+        res.setHeader("Access-Control-Allow-Headers", "Content-Type");
+        res.setHeader("Access-Control-Allow-Credentials", "true");
+        res.setHeader("Access-Control-Allow-Headers", "x-requested-with");
+        chain.doFilter(request, res);
+    }
+
+    @Override
+    public void destroy() {
+
+    }
+
+}

+ 43 - 0
src/main/java/com/uas/platform/b2c/core/utils/StringUtilB2C.java

@@ -273,4 +273,47 @@ public class StringUtilB2C {
 			return a.equals(b);
 		}
 	}
+
+
+	/**
+	 * 中文的标点 转化为英文的标点,全角转半角
+	 *
+	 * @param input
+	 * @return
+	 */
+	public static String toEnglish(String input) {
+		if (StringUtils.isEmpty(input)) {
+			return null;
+		} else {
+            /*正则转换中文标点*/
+			input = input.replaceAll("\\:", ":")
+					.replaceAll("\\。", ".")
+					.replaceAll("\\“", "\"")
+					.replaceAll("\\”", "\"")
+					.replaceAll("\\【", "[")
+					.replaceAll("\\】", "]")
+					.replaceAll("\\《", "<")
+					.replaceAll("\\》", ">")
+					.replaceAll("\\,", ", ")
+					.replaceAll("\\?", "?")
+					.replaceAll("\\、", ", ")
+					.replaceAll("\\;", ";")
+					.replaceAll("\\(", "(")
+					.replaceAll("\\)", ")")
+					.replaceAll("\\‘", "'")
+					.replaceAll("\\’", "'")
+					.replaceAll("\\『", "[")
+					.replaceAll("\\』", "]")
+					.replaceAll("\\「", "[")
+					.replaceAll("\\」", "]")
+					.replaceAll("\\﹃", "[")
+					.replaceAll("\\﹄", "]")
+					.replaceAll("\\〔", "{")
+					.replaceAll("\\〕", "}")
+					.replaceAll("\\—", "-")
+					.replaceAll("\\·", ".");
+            /*正则转换全角为半角*/
+            return input;
+		}
+	}
 }

+ 14 - 6
src/main/java/com/uas/platform/b2c/external/erp/commodity/service/impl/ProductDetailERPServiceImpl.java

@@ -16,15 +16,14 @@ import com.uas.platform.b2c.prod.commodity.model.Goods;
 import com.uas.platform.b2c.prod.commodity.model.Product;
 import com.uas.platform.b2c.prod.commodity.model.ProductDetail;
 import com.uas.platform.b2c.prod.commodity.service.GoodsService;
-import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.logging.BufferedLoggerManager;
-import org.apache.log4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.CollectionUtils;
-
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.List;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
 
 /**
  * 针对ERP物料交易详情接口
@@ -93,6 +92,8 @@ public class ProductDetailERPServiceImpl implements ProductDetailERPService {
 
     @Override
     public void updateReserve(List<ProductDetailERP> productDetailERPList) {
+        SimpleDateFormat dateFormat=new SimpleDateFormat("yy-MM-dd");
+        SimpleDateFormat timeFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         List<Product> productList = new ArrayList<Product>();
         Long enuu = SystemSession.getUser().getEnterprise().getUu();
         for (ProductDetailERP productDetailERP : productDetailERPList) {
@@ -148,7 +149,14 @@ public class ProductDetailERPServiceImpl implements ProductDetailERPService {
                 }
 
                 products.get(0).setErpReserve(productDetailERP.getReserve() == null ? 0 : productDetailERP.getReserve());
-                products.get(0).setProduceDate(productDetailERP.getProduceDate());
+                if (productDetailERP.getProduceDate() != null) {
+                    try {
+                        products.get(0).setProduceDate(dateFormat.format(timeFormat.parse(productDetailERP.getProduceDate())));
+                    } catch (Exception e) {
+                        products.get(0).setProduceDate(productDetailERP.getProduceDate());
+                    }
+                }
+
                 products.get(0).setPrice(productDetailERP.getPrice());
                 productList.add(products.get(0));
             }

+ 13 - 4
src/main/java/com/uas/platform/b2c/external/erp/commodity/util/ModelConverter.java

@@ -13,11 +13,11 @@ import com.uas.platform.b2c.prod.commodity.model.GoodsQtyPrice;
 import com.uas.platform.b2c.prod.commodity.model.GoodsSimple;
 import com.uas.platform.b2c.prod.commodity.model.ProductDetail;
 import com.uas.platform.b2c.prod.product.component.modal.ComponentGoods;
-import org.springframework.data.domain.Page;
-import org.springframework.util.CollectionUtils;
-
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.List;
+import org.springframework.data.domain.Page;
+import org.springframework.util.CollectionUtils;
 
 /**
  * 用于ERP与商城类的互转
@@ -27,6 +27,9 @@ import java.util.List;
  */
 public class ModelConverter {
 
+	public static SimpleDateFormat dateFormat=new SimpleDateFormat("yy-MM-dd");
+	public static SimpleDateFormat timeFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
     /**
      * erp分段价格转 商城分段价格
      *
@@ -196,7 +199,13 @@ public class ModelConverter {
 		productDetail.setMinPackQty(productDetailERP.getMinPackQty());
 		productDetail.setPackaging(productDetailERP.getPackaging());
 		productDetail.setPrice(productDetailERP.getPrice());
-		productDetail.setProduceDate(productDetailERP.getProduceDate());
+		if (productDetailERP.getProduceDate() != null) {
+			try {
+				productDetail.setProduceDate(dateFormat.format(timeFormat.parse(productDetailERP.getProduceDate())));
+			} catch (Exception e) {
+				productDetail.setProduceDate(productDetailERP.getProduceDate());
+			}
+		}
 		// 暂时将ERP空闲库存放置在product中
 //		productDetail.setReserve(productDetailERP.getReserve());
 		productDetail.setCode(productDetailERP.getCode());

+ 4 - 4
src/main/java/com/uas/platform/b2c/prod/commodity/controller/ProductController.java

@@ -74,9 +74,9 @@ public class ProductController {
      * @return all products
      */
     @RequestMapping(method = RequestMethod.GET, params = "_status=all")
-	Page<V_ProductPrivate> getAllProducts(PageParams page, String keyword, String type) {
+	Page<V_ProductPrivate> getAllProducts(PageParams page, String keyword, String type, Long userUU) {
 		PageInfo info = new PageInfo(page);
-		return productService.getAllProducts(info, keyword, type);
+		return productService.getAllProducts(info, keyword, type, userUU);
 	}
 
 	/**
@@ -109,9 +109,9 @@ public class ProductController {
 	 * @param productReplaceList 替代物料数组
 	 */
 	@RequestMapping(value = "/productReplace", method = RequestMethod.POST)
-	ResultMap setProductReplacesByPerson(@RequestBody String productReplaceList) {
+	ResultMap setProductReplacesByPerson(@RequestParam("productId") Long productId, @RequestBody String productReplaceList) {
 		List<ProductReplace> productReplaces = JSON.parseArray(productReplaceList,ProductReplace.class);
-		productService.setProductReplacesByPerson(productReplaces);
+		productService.setProductReplacesByPerson(productId, productReplaces);
 		return ResultMap.success("success");
 	}
 

+ 11 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductPersonDao.java

@@ -3,6 +3,8 @@ package com.uas.platform.b2c.prod.commodity.dao;
 import com.uas.platform.b2c.prod.commodity.model.ProductPerson;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 
 import java.util.List;
 
@@ -29,4 +31,13 @@ public interface ProductPersonDao extends JpaRepository<ProductPerson, Long>, Jp
      * @return
      */
     List<ProductPerson> findByProductId(Long productId);
+
+    /**
+     * 根据enuu和userUU查询物料信息
+     * @param enuu
+     * @param userUU
+     * @return
+     */
+    @Query("select p.productId from ProductPerson p where p.enuu = :enuu and p.userUU = :userUU")
+    List<Long> findIdByEnuuAndUserUU(@Param("enuu") Long enuu, @Param("userUU") Long userUU);
 }

+ 2 - 3
src/main/java/com/uas/platform/b2c/prod/commodity/model/ReleaseProductByBatch.java

@@ -8,7 +8,6 @@ import com.uas.platform.b2c.core.utils.StringUtilB2C;
 import com.uas.platform.b2c.prod.commodity.constant.DoubleConstant;
 import com.uas.platform.b2c.prod.commodity.constant.ErrorInfoConstant;
 import com.uas.platform.b2c.prod.commodity.type.ReleaseConstant;
-import com.uas.platform.b2c.prod.commodity.util.GoodsUtil;
 import com.uas.platform.b2c.trade.order.StringConstant.Currency;
 import org.apache.commons.collections.CollectionUtils;
 import org.codehaus.jackson.annotate.JsonIgnore;
@@ -518,8 +517,8 @@ public class ReleaseProductByBatch implements Serializable {
 				throw new RuntimeException(e + "指定字符集不支持");
 			}
 		}
-		setBrandNameEn(StringUtilB2C.getStr(value));
-		setB2cBranden(StringUtilB2C.getStr(value));
+		setBrandNameEn(StringUtilB2C.toEnglish(StringUtilB2C.getStr(value)));
+		setB2cBranden(StringUtilB2C.toEnglish(StringUtilB2C.getStr(value)));
 	}
 
 	public void setCodeByExcel(Object value) {

+ 3 - 2
src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java

@@ -24,7 +24,7 @@ public interface ProductService {
      * @param type    the type 标准or非标准
      * @return all products
      */
-    Page<V_ProductPrivate> getAllProducts(PageInfo page, String keyword, String type);
+    Page<V_ProductPrivate> getAllProducts(PageInfo page, String keyword, String type, Long userUU);
 
     /**
      * 分页获取个人物料资料
@@ -44,9 +44,10 @@ public interface ProductService {
 
     /**
      * 批量保存个人替代物料信息
+     * @param productId          替代物料id
      * @param productReplaceList 替代物料数组
      */
-    boolean setProductReplacesByPerson(List<ProductReplace> productReplaceList);
+    boolean setProductReplacesByPerson(Long productId, List<ProductReplace> productReplaceList);
 
 
     /**

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

@@ -18,7 +18,6 @@ import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.DoubleArith;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
 import com.uas.platform.b2c.core.utils.NumberUtil;
-import com.uas.platform.b2c.core.utils.PatternUtil;
 import com.uas.platform.b2c.external.erp.commodity.util.ModelConverter;
 import com.uas.platform.b2c.prod.commodity.constant.DoubleConstant;
 import com.uas.platform.b2c.prod.commodity.constant.IntegerConstant;
@@ -252,9 +251,14 @@ public class GoodsServiceImpl implements GoodsService {
 //        if (!PatternUtil.matchChineseAndEnglish(goods.getPackaging())) {
 //            throw new IllegalOperatorException("包装信息只能包含中文和英文");
 //        }
-        if (goods.getProduceDate().length() > 12) {
-            throw new IllegalOperatorException("产品生产日期不能超过12个字符");
+        if (StringUtils.isEmpty(goods.getProduceDate())) {
+            throw new IllegalOperatorException("型号" + goods.getCode()+"品牌" + goods.getBrandNameEn() +"的产品生产日期为空");
+        } else {
+            if (goods.getProduceDate().length() > 12) {
+                throw new IllegalOperatorException("产品生产日期不能超过12个字符");
+            }
         }
+
         if (goods.getOriginal() == null) {
             throw new IllegalOperatorException("必须选择库存类型");
         }

+ 21 - 5
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductServiceImpl.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2c.advertise.ad.service.RecommendProductService;
+import com.uas.platform.b2c.common.account.dao.UserDao;
 import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.platform.b2c.common.account.service.EnterpriseService;
 import com.uas.platform.b2c.core.config.SysConf;
@@ -201,14 +202,18 @@ public class ProductServiceImpl implements ProductService {
     @Autowired
     private ProductReplaceDao productReplaceDao;
 
+    @Autowired
+    private UserDao userDao;
+
     @Value("#{sys.productServiceIp}")
     private String productServiceIp;
 
     private ConcurrentHashMap<String, Field> sortFields = new ConcurrentHashMap<String, Field>();
 
     @Override
-    public Page<V_ProductPrivate> getAllProducts(final PageInfo page, String keyword, String type) {
-        page.expression(PredicateUtils.eq("enUU", SystemSession.getUser().getEnterprise().getUu(), true));
+    public Page<V_ProductPrivate> getAllProducts(final PageInfo page, String keyword, String type, Long userUU) {
+        Long enuu = SystemSession.getUser().getEnterprise().getUu();
+        page.expression(PredicateUtils.eq("enUU", enuu, true));
         page.expression(PredicateUtils.isNotNull("pcmpcode"));
         page.expression(PredicateUtils.isNotNull("pbranden"));
         if (StringUtils.isEmpty(type)) {
@@ -241,6 +246,17 @@ public class ProductServiceImpl implements ProductService {
             page.expression(logicalExpression4);
         }
 
+        if (!StringUtils.isEmpty(userUU)) {
+            // 先查询userUU在当前企业 有哪些物料
+            List<Long> ids = productPersonDao.findIdByEnuuAndUserUU(enuu, userUU);
+
+            if (CollectionUtils.isEmpty(ids)) {
+                return null;
+            } else {
+                page.expression(PredicateUtils.in("id", ids, true));
+            }
+        }
+
         Page<V_ProductPrivate> productPage = v_productPrivateDao.findAll(new Specification<V_ProductPrivate>() {
             @Override
             public Predicate toPredicate(Root<V_ProductPrivate> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
@@ -361,12 +377,12 @@ public class ProductServiceImpl implements ProductService {
     }
 
     @Override
-    public boolean setProductReplacesByPerson(List<ProductReplace> productReplaceList) {
-        if (CollectionUtils.isEmpty(productReplaceList)) {
+    public boolean setProductReplacesByPerson(Long productId, List<ProductReplace> productReplaceList) {
+        if (productId == null) {
             return false;
         }
         Date date = new Date(System.currentTimeMillis());
-        List<ProductReplace> productReplacesOld = productReplaceDao.findByUserUUAndProductId(SystemSession.getUser().getUserUU(),productReplaceList.get(0).getProductId());
+        List<ProductReplace> productReplacesOld = productReplaceDao.findByUserUUAndProductId(SystemSession.getUser().getUserUU(), productId);
         productReplaceDao.delete(productReplacesOld);
         for (ProductReplace productReplace : productReplaceList) {
             productReplace.setUserUU(SystemSession.getUser().getUserUU());

+ 40 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/api/VendorListController.java

@@ -0,0 +1,40 @@
+package com.uas.platform.b2c.prod.product.brand.api;
+
+import com.uas.platform.b2c.prod.product.brand.modal.VendorList;
+import com.uas.platform.b2c.prod.product.brand.service.VendorListService;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+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;
+
+/**
+ * Created by wangyc on 2017/11/27.
+ *
+ * @version 2017/11/27 17:38 wangyc
+ */
+@RestController("api.VendorListController")
+@RequestMapping("api/produce/vendorlist")
+public class VendorListController {
+
+    private final VendorListService vendorListService;
+
+    @Autowired
+    public VendorListController(VendorListService vendorListService) {
+        this.vendorListService = vendorListService;
+    }
+
+    /**
+     * 通过品牌uuid获取供应商列表
+     * @param uuid
+     * @return
+     */
+    @RequestMapping(value = "/{uuid}", method = RequestMethod.GET)
+    public Page<VendorList> findByBrand(@PathVariable("uuid") String uuid, PageParams params) {
+        PageInfo pageInfo = new PageInfo(params);
+        return vendorListService.findByBrandAPI(pageInfo, uuid);
+    }
+}

+ 40 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/controller/VendorListController.java

@@ -0,0 +1,40 @@
+package com.uas.platform.b2c.prod.product.brand.controller;
+
+import com.uas.platform.b2c.prod.product.brand.modal.VendorList;
+import com.uas.platform.b2c.prod.product.brand.service.VendorListService;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+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;
+
+/**
+ * Created by wangyc on 2017/11/27.
+ *
+ * @version 2017/11/27 17:38 wangyc
+ */
+@RestController
+@RequestMapping("produce/vendorlist")
+public class VendorListController {
+
+    private final VendorListService vendorListService;
+
+    @Autowired
+    public VendorListController(VendorListService vendorListService) {
+        this.vendorListService = vendorListService;
+    }
+
+    /**
+     * 通过品牌uuid获取供应商列表
+     * @param uuid
+     * @return
+     */
+    @RequestMapping(value = "/{uuid}", method = RequestMethod.GET)
+    public Page<VendorList> findByBrand(@PathVariable("uuid") String uuid, PageParams params) {
+        PageInfo pageInfo = new PageInfo(params);
+        return vendorListService.findByBrand(pageInfo, uuid);
+    }
+}

+ 164 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/controller/VendorListSubmitController.java

@@ -0,0 +1,164 @@
+package com.uas.platform.b2c.prod.product.brand.controller;
+
+import com.uas.platform.b2c.common.base.model.FileUpload;
+import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
+import com.uas.platform.b2c.core.support.view.JxlsExcelView;
+import com.uas.platform.b2c.prod.product.brand.modal.VendorListSubmit;
+import com.uas.platform.b2c.prod.product.brand.service.VendorListSubmitService;
+import com.uas.platform.core.exception.IllegalOperatorException;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by wangyc on 2017/11/27.
+ *
+ * @version 2017/11/27 10:35 wangyc
+ */
+@RestController
+@RequestMapping("/produce/vendorSubmit")
+public class VendorListSubmitController {
+
+    private final VendorListSubmitService vendorListSubmitService;
+
+    private static final UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+    @Autowired
+    public VendorListSubmitController(VendorListSubmitService vendorListSubmitService) {
+        this.vendorListSubmitService = vendorListSubmitService;
+    }
+
+    /**
+     * 获取供应商申请
+     * @param id
+     * @return
+     */
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    public VendorListSubmit getOne(@PathVariable("id") Long id) {
+        return vendorListSubmitService.findOne(id);
+    }
+
+    /**
+     * 新增供应商申请
+     * @param vendorListSubmit
+     * @return
+     */
+    @RequestMapping(method = RequestMethod.POST)
+    public VendorListSubmit save(@RequestBody VendorListSubmit vendorListSubmit) {
+        logger.log("品牌-供应商申请", "新增品牌供应商申请", "供应商名称:" + vendorListSubmit.getVendorName());
+        return vendorListSubmitService.save(vendorListSubmit);
+    }
+
+    /**
+     * 删除供应商申请
+     * @param id 供应商id
+     * @return
+     */
+    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
+    public VendorListSubmit delete(@PathVariable("id") Long id) {
+        logger.log("品牌-供应商申请", "删除品牌供应商申请", "供应商id:" + id);
+        return vendorListSubmitService.delete(id);
+    }
+
+    /**
+     * 更新供应商申请
+     * @param vendorListSubmit
+     * @return
+     */
+    @RequestMapping(value = "/update", method = RequestMethod.POST)
+    public VendorListSubmit update(@RequestBody VendorListSubmit vendorListSubmit) {
+        logger.log("品牌-供应商申请", "更新品牌供应商申请", "供应商名称:" + vendorListSubmit.getVendorName());
+        return vendorListSubmitService.update(vendorListSubmit);
+    }
+
+    /**
+     * 审核通过申请
+     * @param vendorListSubmit
+     * @return
+     */
+    @RequestMapping(value = "/audit", method = RequestMethod.POST)
+    public VendorListSubmit audit(@RequestBody VendorListSubmit vendorListSubmit) {
+        logger.log("品牌-供应商申请", "审核通过品牌供应商申请", "供应商名称:" + vendorListSubmit.getVendorName());
+        return vendorListSubmitService.audit(vendorListSubmit);
+    }
+
+    /**
+     * 审核不通过申请
+     * @param id
+     * @return
+     */
+    @RequestMapping(value = "/unaudit/{id}", method = RequestMethod.POST)
+    public VendorListSubmit unaudit(@PathVariable Long id) {
+        logger.log("品牌-供应商申请", "审核不通过品牌供应商申请", "供应商id:" + id);
+        return vendorListSubmitService.unaudit(id);
+    }
+
+    /**
+     * 获取批量导入供应商模板
+     *
+     * @return model and view
+     */
+    @RequestMapping(value = "/template", method = RequestMethod.GET)
+    public ModelAndView downloadTemplate() {
+        ModelAndView modelAndView = new ModelAndView();
+        modelAndView.setView(new JxlsExcelView("classpath:jxls-tpl/product/brand-vendor", "优软商城品牌供应商上传模板"));
+
+        logger.log("品牌-供应商申请", "下载批量导入供应商模板");
+        return modelAndView;
+    }
+
+    /**
+     * 批量导入供应商申请
+     * @param uploadItem
+     * @return
+     */
+    @RequestMapping(value = "/upload", method = RequestMethod.POST)
+    public List<VendorListSubmit> uploadVendorList(FileUpload uploadItem) {
+        logger.log("品牌-供应商申请", "批量导入供应商");
+        String fileName = uploadItem.getFile().getOriginalFilename();
+        String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
+        InputStream is = null;
+        Workbook workbook = null;
+        List<VendorListSubmit> vendorListSubmits = new ArrayList<VendorListSubmit>();
+
+        try {
+            is = uploadItem.getFile().getInputStream();
+            if ("xls".equals(suffix)) {
+                workbook = new HSSFWorkbook(is);
+            } else if ("xlsx".equals(suffix)) {
+                workbook = new XSSFWorkbook(is);
+            } else {
+                throw new IllegalOperatorException("文件格不正确,请上传.xls或.xlsx的文件");
+            }
+            vendorListSubmits = vendorListSubmitService.upload(workbook);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return vendorListSubmits;
+    }
+
+    /**
+     * 分页获取品牌供应商申请
+     * @param params
+     * @param keywords
+     * @param status
+     * @return
+     */
+    @RequestMapping(value = "/page", method = RequestMethod.GET)
+    public Page<VendorListSubmit> getPageInfo(PageParams params, String keywords, Integer status) {
+        PageInfo pageInfo = new PageInfo(params);
+        return vendorListSubmitService.findByPage(pageInfo, keywords, status);
+    }
+}

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

@@ -0,0 +1,48 @@
+package com.uas.platform.b2c.prod.product.brand.dao;
+
+import com.uas.platform.b2c.prod.product.brand.modal.VendorList;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * Created by wangyc on 2017/11/27.
+ *
+ * @version 2017/11/27 11:12 wangyc
+ */
+@Repository
+public interface VendorListDao extends JpaSpecificationExecutor<VendorList>, JpaRepository<VendorList, Long>{
+
+    /**
+     * 通过品牌uuid获取品牌供应商信息
+     * @param uuid
+     * @return
+     */
+    List<VendorList> findByBranduuid(String uuid);
+
+    /**
+     * 通过品牌uuid和供应商名称获取品牌供应商信息
+     * @param uuid
+     * @param vendorName
+     * @return
+     */
+    List<VendorList> findByBranduuidAndVendorName(String uuid, String vendorName);
+
+    /**
+     * 通过品牌uuid和供应商营业执照号获取品牌供应商信息
+     * @param uuid
+     * @param license
+     * @return
+     */
+    List<VendorList> findByBranduuidAndLicense(String uuid, String license);
+
+    /**
+     * 通过品牌uuid和店铺id获取品牌供应商信息
+     * @param branduuid
+     * @param storeuuid
+     * @return
+     */
+    VendorList findByBranduuidAndStoreuuid(String branduuid, String storeuuid);
+}

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

@@ -0,0 +1,36 @@
+package com.uas.platform.b2c.prod.product.brand.dao;
+
+import com.uas.platform.b2c.prod.product.brand.modal.VendorListSubmit;
+import java.util.List;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Created by wangyc on 2017/11/27.
+ *
+ * @version 2017/11/27 11:32 wangyc
+ */
+@Repository
+public interface VendorListSubmitDao extends JpaSpecificationExecutor<VendorListSubmit>, JpaRepository<VendorListSubmit, Long> {
+
+    /**
+     * 根据供应商id和申请状态获取申请信息
+     * @param vendorId
+     * @param status
+     * @return
+     */
+    List<VendorListSubmit> findByVendoridAndStatus(Long vendorId, Integer status);
+
+    /**
+     * 根据品牌uuid和申请状态获取新增供应商申请信息
+     * @param branduuid 品牌uuid
+     * @param status 状态
+     * @return
+     */
+    @Query("select v from VendorListSubmit v where v.vendorid is null and v.branduuid =:branduuid and v.status =:status")
+    List<VendorListSubmit> findByBranduuidAndStatusAndVendoridIsNull(@Param("branduuid") String branduuid, @Param("status") Integer status);
+
+}

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

@@ -0,0 +1,263 @@
+package com.uas.platform.b2c.prod.product.brand.modal;
+
+import com.uas.platform.b2c.prod.store.model.StoreIn;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 品牌-供应商
+ * Created by wangyc on 2017/11/13.
+ *
+ * @version 2017/11/13 17:06 wangyc
+ */
+@Entity
+@Table(name = "product$vendorlist")
+public class VendorList implements Serializable {
+
+    private static final long serialVersionUID = 4427517228899698468L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    @Column(name = "vl_id")
+    private Long id;
+
+    /**
+     * 供应商名称
+     */
+    @Column(name = "vl_vendorname")
+    private String vendorName;
+
+    /**
+     * 供应商图片
+     */
+    @Column(name = "vl_img")
+    private String img;
+
+    /**
+     * 营业执照号
+     */
+    @Column(name = "vl_license")
+    private String license;
+
+    /**
+     * 供应商地区(以“,”分割,省市县)
+     */
+    @Column(name = "vl_area")
+    private String area;
+
+    /**
+     * 供应商详细地址
+     */
+    @Column(name = "vl_detailaddress")
+    private String detailAddress;
+
+    /**
+     * 供应商电话
+     */
+    @Column(name = "vl_tel")
+    private String tel;
+
+    /**
+     * 传真
+     */
+    @Column(name = "vl_fax")
+    private String fax;
+
+    /**
+     * 供应商网址
+     */
+    @Column(name = "vl_website")
+    private String website;
+
+    /**
+     * 对应商城店铺uuid
+     */
+    @Column(name = "vl_storeuuid")
+    private String storeuuid;
+
+    /**
+     * 店铺信息
+     */
+    @Transient
+    private StoreIn storeIn;
+
+    /**
+     * 供应商邮箱
+     */
+    @Column(name = "vl_email")
+    private String email;
+
+    /**
+     * 更新时间
+     */
+    @Column(name = "vl_updatetime")
+    private Date updatetime;
+
+    /**
+     * 品牌uuid
+     */
+    @Column(name = "vl_branduuid")
+    private String branduuid;
+
+    /**
+     * 是否申请中
+     * 1,是
+     * 0,否
+     */
+    @Column(name = "vl_issubmited")
+    private Short isSubmited;
+
+    /**
+     * 申请时间
+     */
+    @Column(name = "vl_submitTime")
+    private Date submitTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getVendorName() {
+        return vendorName;
+    }
+
+    public void setVendorName(String vendorName) {
+        this.vendorName = vendorName;
+    }
+
+    public String getImg() {
+        return img;
+    }
+
+    public void setImg(String img) {
+        this.img = img;
+    }
+
+    public String getLicense() {
+        return license;
+    }
+
+    public void setLicense(String license) {
+        this.license = license;
+    }
+
+    public String getArea() {
+        return area;
+    }
+
+    public void setArea(String area) {
+        this.area = area;
+    }
+
+    public String getDetailAddress() {
+        return detailAddress;
+    }
+
+    public void setDetailAddress(String detailAddress) {
+        this.detailAddress = detailAddress;
+    }
+
+    public String getTel() {
+        return tel;
+    }
+
+    public void setTel(String tel) {
+        this.tel = tel;
+    }
+
+    public String getFax() {
+        return fax;
+    }
+
+    public void setFax(String fax) {
+        this.fax = fax;
+    }
+
+    public String getWebsite() {
+        return website;
+    }
+
+    public void setWebsite(String website) {
+        this.website = website;
+    }
+
+    public String getStoreuuid() {
+        return storeuuid;
+    }
+
+    public void setStoreuuid(String storeuuid) {
+        this.storeuuid = storeuuid;
+    }
+
+    public StoreIn getStoreIn() {
+        return storeIn;
+    }
+
+    public void setStoreIn(StoreIn storeIn) {
+        this.storeIn = storeIn;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    public String getBranduuid() {
+        return branduuid;
+    }
+
+    public void setBranduuid(String branduuid) {
+        this.branduuid = branduuid;
+    }
+
+    public Short getIsSubmited() {
+        return isSubmited;
+    }
+
+    public void setIsSubmited(Short isSubmited) {
+        this.isSubmited = isSubmited;
+    }
+
+    public Date getSubmitTime() {
+        return submitTime;
+    }
+
+    public void setSubmitTime(Date submitTime) {
+        this.submitTime = submitTime;
+    }
+
+    public VendorList() {
+    }
+
+    public VendorList(VendorListSubmit vendorListSubmit) {
+        this.area = vendorListSubmit.getArea();
+        this.branduuid = vendorListSubmit.getBranduuid();
+        this.detailAddress = vendorListSubmit.getDetailAddress();
+        this.email = vendorListSubmit.getEmail();
+        this.license = vendorListSubmit.getLicense();
+        this.storeuuid = vendorListSubmit.getStoreuuid();
+        this.tel = vendorListSubmit.getTel();
+        this.fax = vendorListSubmit.getFax();
+        this.updatetime = new Date();
+        this.vendorName = vendorListSubmit.getVendorName();
+        this.website = vendorListSubmit.getWebsite();
+        this.img = vendorListSubmit.getImg();
+    }
+}

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

@@ -0,0 +1,362 @@
+package com.uas.platform.b2c.prod.product.brand.modal;
+
+import com.uas.platform.b2c.common.account.model.UserBaseInfo;
+import com.uas.platform.b2c.prod.store.model.StoreIn;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 品牌-供应商申请
+ * Created by wangyc on 2017/11/13.
+ *
+ * @version 2017/11/13 17:24 wangyc
+ */
+@Entity
+@Table(name = "product$vendorlist_submit")
+public class VendorListSubmit implements Serializable {
+
+    private static final long serialVersionUID = 5300583886223133147L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    @Column(name = "vls_id")
+    private Long id;
+
+    /**
+     * 供应商名称
+     */
+    @Column(name = "vls_vendorname")
+    private String vendorName;
+
+    /**
+     * 供应商图片
+     */
+    @Column(name = "vls_img")
+    private String img;
+
+    /**
+     * 营业执照号
+     */
+    @Column(name = "vls_license")
+    private String license;
+
+    /**
+     * 供应商地区(以“,”分割,省市县)
+     */
+    @Column(name = "vls_area")
+    private String area;
+
+    /**
+     * 供应商详细地址
+     */
+    @Column(name = "vls_detailaddress")
+    private String detailAddress;
+
+    /**
+     * 供应商电话
+     */
+    @Column(name = "vls_tel")
+    private String tel;
+
+    /**
+     * 传真
+     */
+    @Column(name = "vls_fax")
+    private String fax;
+
+    /**
+     * 供应商网址
+     */
+    @Column(name = "vls_website")
+    private String website;
+
+    /**
+     * 对应商城店铺
+     */
+    @Column(name = "vls_storeuuid")
+    private String storeuuid;
+
+    /**
+     * 店铺信息
+     */
+    @Transient
+    private StoreIn storeIn;
+
+    /**
+     * 供应商邮箱
+     */
+    @Column(name = "vls_email")
+    private String email;
+
+    /**
+     * 更新时间
+     */
+    @Column(name = "vls_updatetime")
+    private Date updatetime;
+
+    /**
+     * 审核时间
+     */
+    @Column(name = "vls_audittime")
+    private Date audittime;
+
+    /**
+     * 品牌uuid
+     */
+    @Column(name = "vls_branduuid")
+    private String branduuid;
+
+    @Transient
+    private BrandInfo brand;
+
+    /**
+     * 审核状态
+     * SUBMITTED(101, "已提交"),
+     * AUDITED(102, "已审核"),
+     * NOTALLOW(103, "未通过"),
+     */
+    @Column(name = "vls_status")
+    private Integer status;
+
+    /**
+     * 申请操作类型
+     * DELETED(112, "删除")
+     * PRELIMINARY(818, "新增")
+     * ACTIVE(815, "更新")
+     */
+    @Column(name = "vls_type")
+    private Integer type;
+
+    /**
+     * 来源品牌--供应商id,以判断是否更新
+     */
+    @Column(name = "vls_vendorid")
+    private Long vendorid;
+
+    /**
+     * 上次更新人uu
+     */
+    @Column(name = "vls_updateruu")
+    private Long updateruu;
+
+    /**
+     * 上次更新人
+     */
+    @Transient
+    private UserBaseInfo updater;
+
+    /**
+     * 审核人uu
+     */
+    @Column(name = "vls_auditeruu")
+    private Long auditeruu;
+
+    /**
+     * 审核人
+     */
+    @Transient
+    private UserBaseInfo auditer;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getVendorName() {
+        return vendorName;
+    }
+
+    public void setVendorName(String vendorName) {
+        this.vendorName = vendorName;
+    }
+
+    public String getImg() {
+        return img;
+    }
+
+    public void setImg(String img) {
+        this.img = img;
+    }
+
+    public String getLicense() {
+        return license;
+    }
+
+    public void setLicense(String license) {
+        this.license = license;
+    }
+
+    public String getArea() {
+        return area;
+    }
+
+    public void setArea(String area) {
+        this.area = area;
+    }
+
+    public String getDetailAddress() {
+        return detailAddress;
+    }
+
+    public void setDetailAddress(String detailAddress) {
+        this.detailAddress = detailAddress;
+    }
+
+    public String getTel() {
+        return tel;
+    }
+
+    public void setTel(String tel) {
+        this.tel = tel;
+    }
+
+    public String getFax() {
+        return fax;
+    }
+
+    public void setFax(String fax) {
+        this.fax = fax;
+    }
+
+    public String getWebsite() {
+        return website;
+    }
+
+    public void setWebsite(String website) {
+        this.website = website;
+    }
+
+    public String getStoreuuid() {
+        return storeuuid;
+    }
+
+    public void setStoreuuid(String storeuuid) {
+        this.storeuuid = storeuuid;
+    }
+
+    public StoreIn getStoreIn() {
+        return storeIn;
+    }
+
+    public void setStoreIn(StoreIn storeIn) {
+        this.storeIn = storeIn;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    public Date getAudittime() {
+        return audittime;
+    }
+
+    public void setAudittime(Date audittime) {
+        this.audittime = audittime;
+    }
+
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    public String getBranduuid() {
+        return branduuid;
+    }
+
+    public void setBranduuid(String branduuid) {
+        this.branduuid = branduuid;
+    }
+
+    public BrandInfo getBrand() {
+        return brand;
+    }
+
+    public void setBrand(BrandInfo brand) {
+        this.brand = brand;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public Long getVendorid() {
+        return vendorid;
+    }
+
+    public void setVendorid(Long vendorid) {
+        this.vendorid = vendorid;
+    }
+
+    public Long getUpdateruu() {
+        return updateruu;
+    }
+
+    public void setUpdateruu(Long updateruu) {
+        this.updateruu = updateruu;
+    }
+
+    public UserBaseInfo getUpdater() {
+        return updater;
+    }
+
+    public void setUpdater(UserBaseInfo updater) {
+        this.updater = updater;
+    }
+
+    public Long getAuditeruu() {
+        return auditeruu;
+    }
+
+    public void setAuditeruu(Long auditeruu) {
+        this.auditeruu = auditeruu;
+    }
+
+    public UserBaseInfo getAuditer() {
+        return auditer;
+    }
+
+    public void setAuditer(UserBaseInfo auditer) {
+        this.auditer = auditer;
+    }
+
+    public VendorListSubmit() {
+    }
+
+    public VendorListSubmit(VendorList vendorList) {
+        this.vendorName = vendorList.getVendorName();
+        this.img = vendorList.getImg();
+        this.license = vendorList.getLicense();
+        this.area = vendorList.getArea();
+        this.detailAddress = vendorList.getDetailAddress();
+        this.tel = vendorList.getTel();
+        this.fax = vendorList.getFax();
+        this.website = vendorList.getWebsite();
+        this.storeuuid = vendorList.getStoreuuid();
+        this.email = vendorList.getEmail();
+        this.branduuid = vendorList.getBranduuid();
+    }
+}

+ 28 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/service/VendorListService.java

@@ -0,0 +1,28 @@
+package com.uas.platform.b2c.prod.product.brand.service;
+
+import com.uas.platform.b2c.prod.product.brand.modal.VendorList;
+import com.uas.platform.core.model.PageInfo;
+import org.springframework.data.domain.Page;
+
+/**
+ * Created by wangyc on 2017/11/27.
+ *
+ * @version 2017/11/27 17:39 wangyc
+ */
+public interface VendorListService {
+
+    /**
+     * 通过品牌uuid获取供应商列表(公共接口调用)
+     * @param uuid
+     * @return
+     */
+    Page<VendorList> findByBrandAPI(PageInfo pageInfo, String uuid);
+
+    /**
+     * 通过品牌uuid获取供应商列表(管理后台调用)
+     * @param pageInfo
+     * @param uuid
+     * @return
+     */
+    Page<VendorList> findByBrand(PageInfo pageInfo, String uuid);
+}

+ 75 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/service/VendorListSubmitService.java

@@ -0,0 +1,75 @@
+package com.uas.platform.b2c.prod.product.brand.service;
+
+import com.uas.platform.b2c.prod.product.brand.modal.VendorListSubmit;
+import com.uas.platform.core.model.PageInfo;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.data.domain.Page;
+
+import java.util.List;
+
+/**
+ * Created by wangyc on 2017/11/27.
+ *
+ * @version 2017/11/27 10:38 wangyc
+ */
+public interface VendorListSubmitService {
+
+    /**
+     * 获取供应商申请
+     * @param id
+     * @return
+     */
+    VendorListSubmit findOne(Long id);
+
+    /**
+     * 新增供应商
+     * @param vendorListSubmit
+     * @return
+     */
+    VendorListSubmit save(VendorListSubmit vendorListSubmit);
+
+    /**
+     * 删除供应商申请
+     * @param id 供应商id
+     * @return
+     */
+    VendorListSubmit delete(Long id);
+
+    /**
+     * 更新供应商
+     * @param vendorListSubmit
+     * @return
+     */
+    VendorListSubmit update(VendorListSubmit vendorListSubmit);
+
+    /**
+     * 审核通过申请
+     * @param vendorListSubmit
+     * @return
+     */
+    VendorListSubmit audit(VendorListSubmit vendorListSubmit);
+
+    /**
+     * 审核不通过申请
+     * @param id
+     * @return
+     */
+    VendorListSubmit unaudit(Long id);
+
+    /**
+     * 批量导入供应商申请
+     * @param workbook
+     * @return
+     */
+    List<VendorListSubmit> upload(Workbook workbook);
+
+    /**
+     * 分页获取供应商申请
+     * @param pageInfo
+     * @param keywords
+     * @param status
+     * @return
+     */
+    Page<VendorListSubmit> findByPage(PageInfo pageInfo, String keywords, Integer status);
+
+}

+ 157 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/VendorListServiceImpl.java

@@ -0,0 +1,157 @@
+package com.uas.platform.b2c.prod.product.brand.service.impl;
+
+import com.uas.platform.b2c.core.constant.Status;
+import com.uas.platform.b2c.prod.product.brand.dao.BrandDao;
+import com.uas.platform.b2c.prod.product.brand.dao.VendorListDao;
+import com.uas.platform.b2c.prod.product.brand.dao.VendorListSubmitDao;
+import com.uas.platform.b2c.prod.product.brand.modal.Brand;
+import com.uas.platform.b2c.prod.product.brand.modal.VendorList;
+import com.uas.platform.b2c.prod.product.brand.modal.VendorListSubmit;
+import com.uas.platform.b2c.prod.product.brand.service.VendorListService;
+import com.uas.platform.b2c.prod.store.dao.StoreInDao;
+import com.uas.platform.b2c.prod.store.model.StoreIn;
+import com.uas.platform.core.exception.IllegalOperatorException;
+import com.uas.platform.core.model.Constant;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.persistence.criteria.CriterionExpression;
+import com.uas.platform.core.persistence.criteria.SimpleExpression;
+import java.util.ArrayList;
+import java.util.List;
+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.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+/**
+ * Created by wangyc on 2017/11/27.
+ *
+ * @version 2017/11/27 17:39 wangyc
+ */
+@Service
+public class VendorListServiceImpl implements VendorListService{
+
+    private final VendorListDao vendorListDao;
+
+    private final VendorListSubmitDao vendorListSubmitDao;
+
+    private final BrandDao brandDao;
+
+    private final StoreInDao storeInDao;
+
+    @Autowired
+    public VendorListServiceImpl (VendorListDao vendorListDao, VendorListSubmitDao vendorListSubmitDao, BrandDao brandDao, StoreInDao storeInDao) {
+        this.vendorListDao = vendorListDao;
+        this.vendorListSubmitDao = vendorListSubmitDao;
+        this.brandDao = brandDao;
+        this.storeInDao = storeInDao;
+    }
+
+    @Override
+    public Page<VendorList> findByBrandAPI(final PageInfo pageInfo, String uuid) {
+        Brand brand = brandDao.findByUuid(uuid);
+
+        if (brand == null)
+            throw new IllegalOperatorException("此品牌为空,请重新确认品牌信息");
+
+        // 根据品牌信息获取
+        if (StringUtils.hasText(uuid)) {
+            SimpleExpression branduuid = new SimpleExpression("branduuid", uuid, CriterionExpression.Operator.EQ);
+            pageInfo.expression(branduuid);
+        }
+
+        return vendorListDao.findAll(new Specification<VendorList>() {
+            public Predicate toPredicate(Root<VendorList> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+                query.where(pageInfo.getPredicates(root, query, builder));
+                return null;
+            }
+        }, pageInfo);
+    }
+
+    @Override
+    public Page<VendorList> findByBrand(final PageInfo pageInfo, String uuid) {
+        Brand brand = brandDao.findByUuid(uuid);
+        if (brand == null)
+            throw new IllegalOperatorException("此品牌为空,请重新确认品牌信息");
+
+        // 根据品牌信息获取
+        if (StringUtils.hasText(uuid)) {
+            SimpleExpression branduuid = new SimpleExpression("branduuid", uuid, CriterionExpression.Operator.EQ);
+            pageInfo.expression(branduuid);
+        }
+
+        Page<VendorList> vendorListPage = vendorListDao.findAll(new Specification<VendorList>() {
+            public Predicate toPredicate(Root<VendorList> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+                query.where(pageInfo.getPredicates(root, query, builder));
+                return null;
+            }
+        }, pageInfo);
+
+        List<VendorList> vendorLists = vendorListPage.getContent();
+
+        // 装载店铺信息
+        if (CollectionUtils.isNotEmpty(vendorLists)) {
+            for (VendorList vendorList : vendorLists) {
+                // 如果供应商信息申请状态为正在申请中,用申请信息替换它
+                if (Constant.YES == vendorList.getIsSubmited()) {
+                    List<VendorListSubmit> vendorListSubmits = vendorListSubmitDao.findByVendoridAndStatus(vendorList.getId(),
+                        Status.SUBMITTED.value());
+                    if (CollectionUtils.isNotEmpty(vendorListSubmits)) {
+                        convertBySubmit(vendorList, vendorListSubmits.get(0));
+                    }
+                }
+
+                if (vendorList.getStoreuuid() != null) {
+                    StoreIn store = storeInDao.findByUuid(vendorList.getStoreuuid());
+                    if (store != null) {
+                        vendorList.setStoreIn(store);
+                    }
+                }
+            }
+        }
+
+        List<VendorList> returnVendorLists = new ArrayList<>(vendorLists);
+        Long totalElements = vendorListPage.getTotalElements();
+
+        List<VendorListSubmit> vendorListSubmits = vendorListSubmitDao.findByBranduuidAndStatusAndVendoridIsNull(uuid, Status.SUBMITTED.value());
+        if (CollectionUtils.isNotEmpty(vendorListSubmits)) {
+            for (VendorListSubmit vendorListSubmit : vendorListSubmits) {
+                VendorList vendorList = new VendorList();
+                convertBySubmit(vendorList, vendorListSubmit);
+                vendorList.setIsSubmited((short) 2);
+
+                if (vendorList.getStoreuuid() != null) {
+                    StoreIn store = storeInDao.findByUuid(vendorList.getStoreuuid());
+                    if (store != null) {
+                        vendorList.setStoreIn(store);
+                    }
+                }
+                returnVendorLists.add(vendorList);
+            }
+            totalElements += vendorListSubmits.size();
+//            pageInfo.setPageSize(returnVendorLists.size());
+        }
+
+        return new PageImpl<VendorList>(returnVendorLists, pageInfo, totalElements);
+    }
+
+    private void convertBySubmit(VendorList vendorList, VendorListSubmit vendorListSubmit) {
+        vendorList.setArea(vendorListSubmit.getArea());
+        vendorList.setBranduuid(vendorListSubmit.getBranduuid());
+        vendorList.setDetailAddress(vendorListSubmit.getDetailAddress());
+        vendorList.setEmail(vendorListSubmit.getEmail());
+        vendorList.setLicense(vendorListSubmit.getLicense());
+        vendorList.setStoreuuid(vendorListSubmit.getStoreuuid());
+        vendorList.setTel(vendorListSubmit.getTel());
+        vendorList.setFax(vendorListSubmit.getFax());
+        vendorList.setVendorName(vendorListSubmit.getVendorName());
+        vendorList.setWebsite(vendorListSubmit.getWebsite());
+        vendorList.setImg(vendorListSubmit.getImg());
+    }
+}

+ 490 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/VendorListSubmitServiceImpl.java

@@ -0,0 +1,490 @@
+package com.uas.platform.b2c.prod.product.brand.service.impl;
+
+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.UserBaseInfo;
+import com.uas.platform.b2c.core.constant.Status;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.prod.product.brand.dao.BrandDao;
+import com.uas.platform.b2c.prod.product.brand.dao.VendorListDao;
+import com.uas.platform.b2c.prod.product.brand.dao.VendorListSubmitDao;
+import com.uas.platform.b2c.prod.product.brand.modal.Brand;
+import com.uas.platform.b2c.prod.product.brand.modal.BrandInfo;
+import com.uas.platform.b2c.prod.product.brand.modal.VendorList;
+import com.uas.platform.b2c.prod.product.brand.modal.VendorListSubmit;
+import com.uas.platform.b2c.prod.product.brand.service.VendorListSubmitService;
+import com.uas.platform.b2c.prod.store.dao.StoreInDao;
+import com.uas.platform.b2c.prod.store.model.StoreIn;
+import com.uas.platform.b2c.prod.store.model.StoreStatus;
+import com.uas.platform.core.exception.IllegalOperatorException;
+import com.uas.platform.core.model.Constant;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.persistence.criteria.CriterionExpression;
+import com.uas.platform.core.persistence.criteria.SimpleExpression;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+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.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+/**
+ * Created by wangyc on 2017/11/27.
+ *
+ * @version 2017/11/27 10:39 wangyc
+ */
+@Service
+public class VendorListSubmitServiceImpl implements VendorListSubmitService {
+
+    private final VendorListDao vendorListDao;
+
+    private final VendorListSubmitDao vendorListSubmitDao;
+
+    private final BrandDao brandDao;
+
+    private final StoreInDao storeInDao;
+
+    private final UserBaseInfoDao userBaseInfoDao;
+
+    private final EnterpriseDao enterpriseDao;
+
+    @Autowired
+    public VendorListSubmitServiceImpl(VendorListDao vendorListDao, VendorListSubmitDao vendorListSubmitDao, BrandDao brandDao, StoreInDao storeInDao, UserBaseInfoDao userBaseInfoDao, EnterpriseDao enterpriseDao){
+        this.vendorListDao = vendorListDao;
+        this.vendorListSubmitDao = vendorListSubmitDao;
+        this.brandDao = brandDao;
+        this.storeInDao = storeInDao;
+        this.userBaseInfoDao = userBaseInfoDao;
+        this.enterpriseDao = enterpriseDao;
+    }
+
+    @Override
+    public VendorListSubmit findOne(Long id) {
+        VendorListSubmit vendorListSubmit = vendorListSubmitDao.findOne(id);
+        if (vendorListSubmit == null) {
+            throw new IllegalOperatorException("此供应商申请不存在");
+        }
+
+        if (vendorListSubmit.getStoreuuid() != null) {
+            vendorListSubmit.setStoreIn(storeInDao.findByUuid(vendorListSubmit.getStoreuuid()));
+        }
+        return vendorListSubmit;
+    }
+
+    @Override
+    public VendorListSubmit save(VendorListSubmit vendorListSubmit) {
+        validition(vendorListSubmit);// 验证申请
+
+        List<VendorList> existsVendors = new ArrayList<VendorList>();
+        if (vendorListSubmit.getLicense() != null) {// 判断供应商信息是否已存在
+            existsVendors = vendorListDao.findByBranduuidAndLicense(vendorListSubmit.getBranduuid(), vendorListSubmit.getLicense());
+        } else {
+            existsVendors = vendorListDao.findByBranduuidAndVendorName(vendorListSubmit.getBranduuid(), vendorListSubmit.getVendorName());
+        }
+
+        if (CollectionUtils.isNotEmpty(existsVendors)) {
+            throw new IllegalOperatorException("此供应商已存在,请重新确认供应商信息或更新对应供应商信息");
+        }
+
+        vendorListSubmit.setUpdateruu(SystemSession.getUser().getUserUU());
+        vendorListSubmit.setUpdatetime(new Date());
+        vendorListSubmit.setStatus(Status.SUBMITTED.value());
+        // 设置操作类型为新增
+        vendorListSubmit.setType(Status.PRELIMINARY.value());
+        return vendorListSubmitDao.save(vendorListSubmit);
+    }
+
+    @Override
+    public VendorListSubmit delete(Long id) {
+        VendorList oldVendor = vendorListDao.findOne(id);
+        if (oldVendor == null) {
+            throw new IllegalOperatorException("此供应商信息不存在,请确认后再进行操作");
+        }
+
+        if (Constant.YES == oldVendor.getIsSubmited()) {
+            throw new IllegalOperatorException("此供应商信息正在申请中,请联系管理员处理完现有申请后,再进行操作");
+        }
+
+        Date now = new Date();
+
+        VendorListSubmit vendorListSubmit = new VendorListSubmit(oldVendor);
+        vendorListSubmit.setUpdateruu(SystemSession.getUser().getUserUU());
+        vendorListSubmit.setUpdatetime(now);
+        vendorListSubmit.setVendorid(oldVendor.getId());
+        vendorListSubmit.setStatus(Status.SUBMITTED.value());
+        // 设置操作类型为删除
+        vendorListSubmit.setType(Status.DELETED.value());
+
+        // 更新供应商信息为正在申请
+        oldVendor.setSubmitTime(now);
+        oldVendor.setIsSubmited(Constant.YES);
+        vendorListDao.save(oldVendor);
+
+        return vendorListSubmitDao.save(vendorListSubmit);
+    }
+
+    @Override
+    public VendorListSubmit update(VendorListSubmit vendorListSubmit) {
+        validition(vendorListSubmit);// 验证申请
+
+        VendorList oldVendor = vendorListDao.findOne(vendorListSubmit.getVendorid());
+        if (oldVendor == null)
+            throw new IllegalOperatorException("此供应商不存在");
+
+        if (Constant.YES == oldVendor.getIsSubmited()) {
+            throw new IllegalOperatorException("此供应商信息正在申请中,请联系管理员处理完现有申请后,再进行操作");
+        }
+
+
+        Date now = new Date();
+
+        vendorListSubmit.setUpdateruu(SystemSession.getUser().getUserUU());
+        vendorListSubmit.setUpdatetime(now);
+        vendorListSubmit.setStatus(Status.SUBMITTED.value());
+        // 设置操作类型为更新
+        vendorListSubmit.setType(Status.ACTIVE.value());
+        vendorListSubmit.setId(null);
+
+        // 更新供应商信息为正在申请
+        oldVendor.setSubmitTime(now);
+        oldVendor.setIsSubmited(Constant.YES);
+        vendorListDao.save(oldVendor);
+
+        return vendorListSubmitDao.save(vendorListSubmit);
+    }
+
+    @Override
+    public VendorListSubmit audit(VendorListSubmit vendorListSubmit) {
+        validition(vendorListSubmit);// 验证申请
+
+        Date now = new Date();
+
+        vendorListSubmit.setStatus(Status.AUDITED.value());// 修改状态为已审核
+        vendorListSubmit.setAuditeruu(SystemSession.getUser().getUserUU());
+        vendorListSubmit.setAudittime(now);
+        vendorListSubmitDao.save(vendorListSubmit);
+
+        // 删除申请,删除原供应商信息
+        if (Status.DELETED.value() == vendorListSubmit.getType()) {
+            // 检测关联供应商信息有效性
+            checkVendorid(vendorListSubmit);
+            vendorListDao.delete(vendorListSubmit.getVendorid());
+        } else {
+            VendorList vendorList = new VendorList(vendorListSubmit);
+            // 若为更新则更新之前的供应商信息
+            if (Status.ACTIVE.value() == vendorListSubmit.getType()) {
+                // 检测关联供应商信息有效性
+                checkVendorid(vendorListSubmit);
+                vendorList.setId(vendorListSubmit.getVendorid());
+            }
+            // 将供应商信息申请状态更新为不在申请中
+            vendorList.setIsSubmited(Constant.NO);
+            vendorList.setSubmitTime(now);
+            vendorListDao.save(vendorList);
+        }
+
+        return vendorListSubmit;
+    }
+
+    /**
+     * 检测关联供应商信息有效性
+     * @param vendorListSubmit 供应商申请
+     */
+    private void checkVendorid(VendorListSubmit vendorListSubmit) {
+        if (vendorListSubmit.getVendorid() == null || vendorListDao.findOne(vendorListSubmit.getVendorid()) == null) {
+            throw new IllegalOperatorException("原供应商信息不存在,请重新确认后再进行操作");
+        }
+    }
+
+    @Override
+    public VendorListSubmit unaudit(Long id) {
+        VendorListSubmit vendorListSubmit = vendorListSubmitDao.findOne(id);
+        if (vendorListSubmit == null)
+            throw new IllegalOperatorException("此申请不存在,请重新确认申请信息");
+        if (Status.SUBMITTED.value() != vendorListSubmit.getStatus())
+            throw new IllegalOperatorException("此申请不为待审核状态,请重新确认申请信息");
+
+        vendorListSubmit.setStatus(Status.NOTALLOW.value());
+        vendorListSubmit.setAuditeruu(SystemSession.getUser().getUserUU());
+        vendorListSubmit.setAudittime(new Date());
+
+        // 若申请关联已生效供应商信息,将已生效信息改为不在申请状态中
+        if (vendorListSubmit.getVendorid() != null) {
+            VendorList oldVendor = vendorListDao.findOne(vendorListSubmit.getVendorid());
+            if (oldVendor != null) {
+                oldVendor.setIsSubmited(Constant.NO);
+                oldVendor.setSubmitTime(new Date());
+                vendorListDao.save(oldVendor);
+            }
+        }
+
+        return vendorListSubmitDao.save(vendorListSubmit);
+    }
+
+    @Override
+    public List<VendorListSubmit> upload(Workbook workbook) {
+        List<VendorListSubmit> vendorListSubmits = new ArrayList<VendorListSubmit>();
+        Sheet sheet = workbook.getSheetAt(0);
+        int rowNum = sheet.getLastRowNum();
+        Date date = new Date();
+
+        Row firstRow = sheet.getRow(0);// 验证表头
+        if (firstRow != null) {
+            List<String> titles = new ArrayList<String>();
+            titles.add("品牌英文名");
+            titles.add("代理商名称");
+            titles.add("营业执照号");
+            titles.add("地区(省,市,区/县。以,分隔)");
+            titles.add("详细地址(街道)");
+            titles.add("电话");
+            titles.add("传真");
+            titles.add("网址");
+            titles.add("关联企业名称");
+            titles.add("邮箱");
+
+            List<String> heads = new ArrayList<String>();
+            for (int j = 0; j < 10; j++) {
+                if (firstRow.getCell(j) != null) {
+                    firstRow.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
+                    Object cell = firstRow.getCell(j);
+                    if (cell != null && StringUtils.hasText(firstRow.getCell(j).getStringCellValue().trim())) {
+                        heads.add(firstRow.getCell(j).getStringCellValue().trim());
+                    }
+                }
+            }
+            if (!titles.equals(heads))
+                throw new IllegalOperatorException("表头不正确,请重新下载模板");
+        } else {
+            throw new IllegalOperatorException("表头不正确,请重新下载模板");
+        }
+
+        List<VendorListSubmit> vendorListSubmitList = new ArrayList<VendorListSubmit>();
+
+        for (int r = 1; r <= rowNum; r++) {
+            Row row = sheet.getRow(r);
+
+            if (row != null && row.getCell(0) != null) {
+                VendorListSubmit vendorListSubmit = new VendorListSubmit();
+
+                // 品牌英文名
+                if (row.getCell(0) != null) {
+                    row.getCell(0).setCellType(Cell.CELL_TYPE_STRING);
+                    String brandNameEn = row.getCell(0).getStringCellValue().trim();
+
+                    if (StringUtils.hasText(brandNameEn)) {
+                        List<Brand> brands = brandDao.findByUpperNameEn(brandNameEn);
+                        if (CollectionUtils.isEmpty(brands))
+                            throw new IllegalOperatorException("第" + (r+1) + "行品牌:" + brandNameEn + " 不存在,请重新确认品牌信息");
+
+                        vendorListSubmit.setBranduuid(brands.get(0).getUuid());
+                    } else {
+                        throw new IllegalOperatorException("第" + (r+1) + "行品牌英文名不可为空");
+                    }
+                } else {
+                    throw new IllegalOperatorException("第" + (r+1) + "行品牌英文名不可为空");
+                }
+
+                // 供应商名称
+                if (row.getCell(1) != null) {
+                    row.getCell(1).setCellType(Cell.CELL_TYPE_STRING);
+                    String vendorName = row.getCell(1).getStringCellValue().trim();
+
+                    if (StringUtils.hasText(vendorName)) {
+                        vendorListSubmit.setVendorName(vendorName);
+                    } else {
+                        throw new IllegalOperatorException("第" + (r+1) + "行供应商名称不可为空");
+                    }
+                } else {
+                    throw new IllegalOperatorException("第" + (r+1) + "行供应商名称不可为空");
+                }
+
+                // 营业执照号
+                if (row.getCell(2) != null) {
+                    row.getCell(2).setCellType(Cell.CELL_TYPE_STRING);
+                    String license = row.getCell(2).getStringCellValue().trim();
+
+                    if (StringUtils.hasText(license))
+                        vendorListSubmit.setLicense(license);
+                }
+
+                // 地区
+                if (row.getCell(3) != null) {
+                    row.getCell(3).setCellType(Cell.CELL_TYPE_STRING);
+                    String area = row.getCell(3).getStringCellValue().trim();
+
+                    if (StringUtils.hasText(area)) {
+                        area.replace(",", ",");
+                        vendorListSubmit.setArea(area);
+                    } else {
+                        throw new IllegalOperatorException("第" + (r+1) + "行地区不可为空");
+                    }
+                } else {
+                    throw new IllegalOperatorException("第" + (r+1) + "行地区不可为空");
+                }
+
+                // 详细地址
+                if (row.getCell(4) != null) {
+                    row.getCell(4).setCellType(Cell.CELL_TYPE_STRING);
+                    String detailAddress = row.getCell(4).getStringCellValue().trim();
+
+                    if (StringUtils.hasText(detailAddress)) {
+                        vendorListSubmit.setDetailAddress(detailAddress);
+                    } else {
+                        throw new IllegalOperatorException("第" + (r+1) + "行详细地址不可为空");
+                    }
+                } else {
+                    throw new IllegalOperatorException("第" + (r+1) + "行详细地址不可为空");
+                }
+
+                // 电话
+                if (row.getCell(5) != null) {
+                    row.getCell(5).setCellType(Cell.CELL_TYPE_STRING);
+                    String tel = row.getCell(5).getStringCellValue().trim();
+
+                    if (StringUtils.hasText(tel)) {
+                        vendorListSubmit.setTel(tel);
+                    }
+                }
+
+                // 传真
+                if (row.getCell(6) != null) {
+                    row.getCell(6).setCellType(Cell.CELL_TYPE_STRING);
+                    String fax = row.getCell(6).getStringCellValue().trim();
+
+                    if (StringUtils.hasText(fax)) {
+                        vendorListSubmit.setFax(fax);
+                    }
+                }
+
+                // 网址
+                if (row.getCell(7) != null) {
+                    row.getCell(7).setCellType(Cell.CELL_TYPE_STRING);
+                    String website = row.getCell(7).getStringCellValue().trim();
+
+                    if (StringUtils.hasText(website)) {
+                        vendorListSubmit.setWebsite(website);
+                    }
+                }
+
+                // 关联企业名称
+                if (row.getCell(8) != null) {
+                    row.getCell(8).setCellType(Cell.CELL_TYPE_STRING);
+                    String enName = row.getCell(8).getStringCellValue().trim();
+
+                    if (StringUtils.hasText(enName)) {
+                        List<Long> enuu = enterpriseDao.findEnuuByName(enName);
+                        if (CollectionUtils.isNotEmpty(enuu)) {
+                            List<StoreIn> storeInExist = storeInDao.findByEnUU(enuu.get(0));
+                            if (CollectionUtils.isNotEmpty(storeInExist)) {
+                                StoreIn storeIn = storeInExist.get(0);
+                                if (StoreStatus.OPENED == storeIn.getStatus()) {
+                                    VendorList vendorLists = vendorListDao.findByBranduuidAndStoreuuid(vendorListSubmit.getBranduuid(), storeIn.getUuid());
+                                    if (vendorLists != null) {
+                                        throw new IllegalOperatorException("第" + (r+1) + "行企业:" + enName + " 店铺,在当前品牌下已关联供应商");
+                                    }
+                                    vendorListSubmit.setStoreuuid(storeIn.getUuid());
+                                } else {
+                                    throw new IllegalOperatorException("第" + (r+1) + "行企业:" + enName + " 店铺不为已开通状态");
+                                }
+                            } else {
+                                throw new IllegalOperatorException("第" + (r+1) + "行企业:" + enName + "未开通店铺");
+                            }
+                        } else {
+                            throw new IllegalOperatorException("第" + (r+1) + "行企业:" + enName + "不存在");
+                        }
+                    }
+                }
+                // 邮箱
+                if (row.getCell(9) != null) {
+                    row.getCell(9).setCellType(Cell.CELL_TYPE_STRING);
+                    String email = row.getCell(9).getStringCellValue().trim();
+
+                    if (StringUtils.hasText(email)) {
+                        vendorListSubmit.setEmail(email);
+                    }
+                }
+
+                vendorListSubmit.setUpdateruu(SystemSession.getUser().getUserUU());
+                vendorListSubmit.setUpdatetime(new Date());
+                vendorListSubmit.setStatus(Status.SUBMITTED.value());
+                // 设置操作类型为新增
+                vendorListSubmit.setType(Status.PRELIMINARY.value());
+                vendorListSubmitList.add(vendorListSubmit);
+            }
+        }
+        return vendorListSubmitDao.save(vendorListSubmitList);
+    }
+
+    @Override
+    public Page<VendorListSubmit> findByPage(final PageInfo pageInfo, String keywords, Integer status) {
+        if (Status.AVAILABLE.value() != status) {// 非全部时过滤状态
+            pageInfo.filter("status", status);
+        }
+
+        if (StringUtils.hasText(keywords)) {
+            SimpleExpression vendorName = new SimpleExpression("vendorName", keywords, CriterionExpression.Operator.LIKE, true);
+            pageInfo.expression(vendorName);
+        }
+
+        Page<VendorListSubmit> vendorListSubmitPage = vendorListSubmitDao.findAll(new Specification<VendorListSubmit>() {
+            @Override
+            public Predicate toPredicate(Root<VendorListSubmit> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                query.where(pageInfo.getPredicates(root, query, cb));
+                return null;
+            }
+        }, pageInfo);
+
+        List<VendorListSubmit> vendorListSubmits = vendorListSubmitPage.getContent();
+        for (VendorListSubmit vendorListSubmit : vendorListSubmits) {// 设置品牌信息、提交人、审核人
+            Brand brand = brandDao.findByUuid(vendorListSubmit.getBranduuid());
+            if (brand == null)
+                throw new IllegalOperatorException("供应商申请:" + vendorListSubmit.getVendorName() + " 所属品牌不存在");
+            vendorListSubmit.setBrand(new BrandInfo(brand));
+
+            UserBaseInfo updater = userBaseInfoDao.findUserByUserUU(vendorListSubmit.getUpdateruu());
+            if (updater == null)
+                throw new IllegalOperatorException("供应商申请:" + vendorListSubmit.getVendorName() + " 提交人不存在");
+            vendorListSubmit.setUpdater(updater);
+
+            if (vendorListSubmit.getAuditeruu() != null) {
+                UserBaseInfo auditer = userBaseInfoDao.findUserByUserUU(vendorListSubmit.getUpdateruu());
+                if (auditer == null)
+                    throw new IllegalOperatorException("供应商申请:" + vendorListSubmit.getVendorName() + " 审核人不存在");
+                vendorListSubmit.setAuditer(auditer);
+            }
+        }
+        return new PageImpl<VendorListSubmit>(vendorListSubmits, pageInfo, vendorListSubmitPage.getTotalElements());
+
+    }
+
+    /**
+     * 验证申请数据正确性
+     * @param vendorListSubmit
+     * @return
+     */
+    private void validition(VendorListSubmit vendorListSubmit) {
+        if (vendorListSubmit.getBranduuid() == null) {
+            throw new IllegalOperatorException("品牌信息为空,请确认信息后重新申请");
+        }
+
+        // 店铺id不为空时,验证同品牌下是否存在已关联该店铺的供应商(更新自身除外)
+        if (vendorListSubmit.getStoreuuid() != null) {
+            VendorList existsVendor = vendorListDao.findByBranduuidAndStoreuuid(vendorListSubmit.getBranduuid(), vendorListSubmit.getStoreuuid());
+            if (existsVendor != null && !existsVendor.getId().equals(vendorListSubmit.getVendorid())) {
+                throw new IllegalOperatorException("此店铺关联供应商已入驻,请确认信息后重新申请");
+            }
+        }
+    }
+}

+ 6 - 0
src/main/java/com/uas/platform/b2c/trade/seek/service/impl/SeekPurchaseBomServiceImpl.java

@@ -270,6 +270,12 @@ public class SeekPurchaseBomServiceImpl implements SeekPurchaseBomService {
             result += 1;
         } else {
             String deadline = StringUtilB2C.replaceLineBreak(StringUtilB2C.getStr(deadlineValue));
+            if (deadline.contains(".")) {
+                deadline = deadline.replace(".", "-");
+            }
+            if (deadline.contains("/")) {
+                deadline = deadline.replace("/", "-");
+            }
             try {
                 deadline = com.uas.platform.b2c.fa.payment.utils.StringUtils.cutOutString(deadline, 10);
                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

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

@@ -32,7 +32,7 @@ floorMicroServiceIp=10.10.100.23
 carouselMicroServiceIp=10.10.100.23
 storecmsMicroServiceIp=192.168.253.12
 endpointUri=10.10.100.23
-recommendPort=20100
+recommendPort=20102
 # upload file
 uploadFileUrl = http://10.10.100.200:9999
 # search file

BIN
src/main/resources/jxls-tpl/product/brand-vendor.xls


BIN
src/main/resources/jxls-tpl/trade/seekPurchaseByBatch.xls


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

@@ -32,7 +32,7 @@ floorMicroServiceIp=10.10.100.23
 carouselMicroServiceIp=10.10.100.23
 storecmsMicroServiceIp=192.168.253.12
 endpointUri=10.10.100.23
-recommendPort=20100
+recommendPort=20102
 # upload file
 uploadFileUrl = http://10.10.100.200:9999
 # search file

+ 3 - 0
src/main/webapp/WEB-INF/views/normal/admin.html

@@ -19,6 +19,7 @@
 <link rel="stylesheet" href="static/lib/jquery/themes/summernote/css/summernote.css" />
 <link rel="stylesheet" href="static/css/common.css" />
 <link rel="stylesheet" href="static/css/admin.css" />
+<link rel="stylesheet" href="static/lib/quill/quill.snow.css" />
 </head>
 <body>
 	<!-- main content begin -->
@@ -67,6 +68,8 @@
 	</div>
 	<!-- Loading End -->
 </body>
+<script src="static/lib/quill/quill.core.js"></script>
+<script src="static/lib/quill/quill.min.js"></script>
 <script language="javascript" type="text/javascript" src="static/lib/datePicker/WdatePicker.js"></script>
 <script type="text/javascript" src="static/lib/require.js"
 	data-main="static/js/admin/main.js"></script>

+ 6 - 2
src/main/webapp/WEB-INF/views/normal/adminWithNav.html

@@ -133,8 +133,10 @@
 			<li class="nav-header">审批</li>
 			<li class="nav-node"><a href="#audit/brand"><i
 					class="fa fa-bullhorn"></i><span> 品牌</span></a></li>
-			<li class="nav-node"><a href="#brandmaintenance"><i
-					class="fa fa-bullhorn"></i><span> 品牌维护</span></a></li>
+			<li class="nav-node"><a href="#supplierSubmitList"><i
+					class="fa fa-bullhorn"></i><span> 品牌供应商</span></a></li>
+			<!--<li class="nav-node"><a href="#brandmaintenance"><i-->
+					<!--class="fa fa-bullhorn"></i><span> 品牌维护</span></a></li>-->
 			<li class="nav-node"><a href="#audit/component"><i
 					class="fa fa-shopping-cart"></i><span> 标准器件</span></a></li>
 			<li class="nav-node"><a href="#audit/componentBatchMaintenance"><i
@@ -154,6 +156,8 @@
 					class="fa fa-flag"></i><span> 品牌映射维护</span></a></li>
 			<li class="nav-node"><a href="#/store/company"><i
 					class="fa fa-flag"></i><span> 寄售管理</span></a></li>
+			<li class="nav-node"><a href="#brandmaintenance"><i
+					class="fa fa-bullhorn"></i><span> 品牌维护</span></a></li>
 			<li class="nav-node"><a href="#/store/list"><i
 					class="fa fa-flag"></i><span> 店铺管理</span></a></li>
 			<li class="nav-node"><a href="#/store/application"><i

+ 1 - 0
src/main/webapp/WEB-INF/views/normal/erp/vendor_center.html

@@ -19,6 +19,7 @@
 <link rel="stylesheet" href="static/lib/calendar/calendar.css">
 <link rel="stylesheet" href="static/lib/angular/ng-table.css">
 <link rel="stylesheet" href="static/css/erp/align.css">
+<link rel="stylesheet" href="static/css/commonComponent.css" />
 </head>
 <body>
 	<!-- 消息提示框  Start-->

BIN
src/main/webapp/resources/img/all/border_line.png


BIN
src/main/webapp/resources/img/icon/shop_icon.png


+ 41 - 42
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/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'], 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', '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']);
 	app.init = function() {
 		angularAMD.bootstrap(app);
 	};
@@ -310,6 +310,24 @@
 			templateUrl : 'static/view/admin/brand_maintenance_detail.html',
 			controller : 'BrandMaintenanceDetailCtrl',
 			controllerUrl : 'app/controllers/BrandMaintenanceDetailCtrl'
+		})).state('suppliermaintenance', angularAMD.route({
+			// 供应商维护
+			url: '/suppliermaintenance/:uuid',
+			templateUrl : 'static/view/admin/supplier_maintenance.html',
+			controller : 'supplierMaintenanceCtrl',
+			controllerUrl : 'app/controllers/supplierMaintenanceCtrl'
+		})).state('supplierSubmitList', angularAMD.route({
+			// 供应商申请列表
+			url: '/supplierSubmitList',
+			templateUrl : 'static/view/admin/supplier_submit_list.html',
+			controller : 'SupplierSubmitListCtrl',
+			controllerUrl : 'app/controllers/SupplierSubmitListCtrl'
+		})).state('supplierSubmitDetail', angularAMD.route({
+			// 供应商申请详情
+			url: '/supplierSubmit/:id',
+			templateUrl : 'static/view/admin/supplier_submit_detail.html',
+			controller : 'SupplierSubmitDetailCtrl',
+			controllerUrl : 'app/controllers/SupplierSubmitDetailCtrl'
 		})).state('mgr', angularAMD.route({
 			// 类目审批
 			url: '/audit/kind',
@@ -597,38 +615,26 @@
 			controllerUrl: 'app/controllers/product/KindAdviceCtrl',
 			title: '轮播图片管理'
 		})).state('logUsage', angularAMD.route({
-      //用户操作日志
-      url: '/logUsage',
-      templateUrl: 'static/view/admin/logUsage.html',
-      controller: 'LogUsageCtrl',
-      controllerUrl: 'app/controllers/LogUsageCtrl',
-      title: '用户操作日志'
-    })).state('seekQualityBuyer', angularAMD.route({
-
-      url: '/seekQualityBuyer',
-      templateUrl: 'static/view/admin/seekQualityBuyer.html',
-      controller: 'SeekQualityBuyerCtrl',
-      controllerUrl: 'app/controllers/SeekQualityBuyerCtrl',
-      title: '优质采购商'
-    })).state('seekSalesman', angularAMD.route({
-		url: '/seekSalesman',
-		templateUrl: 'static/view/admin/seek_salesman.html',
-		controller: 'SeekSalesmanCtrl',
-		controllerUrl: 'app/controllers/SeekSalesmanCtrl',
-		title: '求购-业务员分配'
-	})).state('seekSalesmandetail', angularAMD.route({
-		// 求购-业务员 查看详情
-		url: '/seekSalesman/:uuid/:name',
-		templateUrl : 'static/view/admin/seek_salesman_detail.html',
-		controller : 'SeekSalesmanDetailCtrl',
-		controllerUrl : 'app/controllers/SeekSalesmanDetailCtrl'
-    })).state('keyWord', angularAMD.route({
-      url: '/keyWord',
-      templateUrl: 'static/view/admin/keyword.html',
-      controller: 'KeyWordCtrl',
-      controllerUrl: 'app/controllers/KeyWordCtrl',
-      title: '非法关键词维护'
-    })).state('slideImage', angularAMD.route({
+			//用户操作日志
+			url: '/logUsage',
+			templateUrl: 'static/view/admin/logUsage.html',
+			controller: 'LogUsageCtrl',
+			controllerUrl: 'app/controllers/LogUsageCtrl',
+			title: '用户操作日志'
+		})).state('seekQualityBuyer', angularAMD.route({
+			//用户操作日志
+			url: '/seekQualityBuyer',
+			templateUrl: 'static/view/admin/seekQualityBuyer.html',
+			controller: 'SeekQualityBuyerCtrl',
+			controllerUrl: 'app/controllers/SeekQualityBuyerCtrl',
+			title: '用户操作日志'
+    	})).state('keyWord', angularAMD.route({
+			url: '/keyWord',
+			templateUrl: 'static/view/admin/keyword.html',
+			controller: 'KeyWordCtrl',
+			controllerUrl: 'app/controllers/KeyWordCtrl',
+			title: '非法关键词维护'
+    	})).state('slideImage', angularAMD.route({
 			// 首页展示(轮播图片管理)
 			url: '/operation/slideImage',
 			templateUrl: 'static/view/admin/operation/slideImage.html',
@@ -921,13 +927,6 @@
              }
          }
      });
-
-     // 币别filter
-     app.filter('currencyStr', function () {
-         return function (str) {
-             return typeof str == 'string' && str != 'RMB' && str != 'USD' ? str.startsWith('RMB') ? '¥' + str.substring(3, str.length) : '$' + str.substring(3, str.length) : '-';
-         }
-     });
-
+	
 	return app;
 });

+ 153 - 0
src/main/webapp/resources/js/admin/controllers/SupplierSubmitDetailCtrl.js

@@ -0,0 +1,153 @@
+define([ 'app/app' ], function(app) {
+	//供应商维护
+	app.register.controller('SupplierSubmitDetailCtrl', ['$scope', 'ngTableParams', 'toaster', 'BrandActive', '$stateParams', 'SupplierSubmit', 'Supplier', 'BaseService', '$window', 'StoreInfo', function($scope, ngTableParams, toaster, BrandActive, $stateParams, SupplierSubmit, Supplier, BaseService, $window, StoreInfo) {
+
+		// 获取申请信息
+		var getData = function () {
+			SupplierSubmit.get({id: $stateParams.id}, function (data) {
+				$scope.supplier = data;
+				getBrand($scope.supplier.branduuid);
+			}, function (response) {
+				toaster.pop('数据获取失败,请刷新重试');
+			})
+		};
+		
+		// 获取品牌信息
+		var getBrand = function (uuid) {
+			BrandActive.get({uuid : uuid}, {}, function(data){
+				$scope.brand = data;
+			}, function(res){
+				toaster.pop('error', '品牌详情数据加载失败', res.data);
+			});
+		};
+
+		getData();
+
+		// 获取供应商列表
+		$scope.supplierTableParams = new ngTableParams({
+			page : 1,
+			count : 5,
+			sorting : {
+				nameEn : 'ASC'
+			}
+		}, {
+			total : 0,
+			getData : function($defer, params) {
+				var param = BaseService.parseParams(params.url());
+				param.keyword = $scope.keyword;
+				Supplier.getPage(param, function(page) {
+					if (page) {
+						params.total(page.totalElements);
+						$defer.resolve(page.content);
+					}
+				});
+			}
+		});
+
+		/**
+		 * 选择店铺类型
+		 *
+		 * @param type	店铺类型
+		 */
+		$scope.chooseStoreType = function (type) {
+			if (!type || type === '')
+				return 0;
+			$scope.storeType = type;
+			$scope.storeStatus = '';
+
+			$scope.storeTableParams.page(1);
+			$scope.storeTableParams.reload();
+		};
+
+		/**
+		 * 根据关键字进行搜索
+		 */
+		$scope.refreshTableData = function () {
+			$scope.storeTableParams.page(1);
+			$scope.storeTableParams.reload();
+		};
+
+		/**
+		 * 选择店铺
+		 * @param supplier 供应商
+		 * @param store 店铺
+		 */
+		$scope.chooseStore = function (supplier, store) {
+			supplier.storeIn = store;
+			supplier.chooseStoreAssociated = false;
+		};
+
+		/**
+		 * 获取店铺信息
+		 */
+		var getStoreData = function () {
+			$scope.storeTableParams = new ngTableParams({
+				page : 1,
+				count : 5,
+				sorting : {
+					updateTime : 'DESC'
+				}
+			}, {
+				total : 0,
+				getData : function($defer, params) {
+					$scope.loading = true;
+					var param = BaseService.parseParams(params.url());
+					// 过滤店铺类型
+					if ($scope.storeType && $scope.storeType !== '' && $scope.storeType !== 'ALL') {
+						param.type = $scope.storeType;
+					}
+					// 根据关键字进行搜索
+					if ($scope.keyword && $scope.keyword !== '') {
+						param.keyword = $scope.keyword;
+					}
+					StoreInfo.pageStoreInfoWhenAdminQuery(param, function (data) {
+						if (!data.content || !Array.isArray(data.content)) {
+							data.content = [];
+						}
+						angular.forEach(data.content, function (store) {
+							var tags = JSON.parse(store.tags || '[]');
+							store.tagsObject = {};
+							for (var i = 0; i < tags.length; i++) {
+								store.tagsObject[tags[i]] = true;
+							}
+						});
+						$defer.resolve(data.content);
+						params.total(data.totalElements);
+					});
+				}
+			});
+		};
+
+		/**
+		 * 开关关联店铺
+		 * @param supplier 供应商
+		 */
+		$scope.storeAssociated = function (supplier){
+			supplier.chooseStoreAssociated = typeof supplier.chooseStoreAssociated == 'undefined' ? true : !supplier.chooseStoreAssociated;
+			if (supplier.chooseStoreAssociated) {
+				getStoreData();
+			}
+		};
+
+		// 审核通过
+		$scope.audit = function () {
+			$scope.supplier.storeuuid = $scope.supplier.storeIn == null ? null : $scope.supplier.storeIn.uuid;
+			SupplierSubmit.audit({}, $scope.supplier, function (data) {
+				toaster.pop('success', '审核通过');
+				$window.location.reload();
+			}, function (response) {
+				toaster.pop('error', response.data);
+			});
+		};
+
+		// 审核不通过
+		$scope.unaudit = function () {
+			SupplierSubmit.unaudit({id: $scope.supplier.id}, {}, function (data) {
+				toaster.pop('success', '审核不通过');
+				$window.location.reload();
+			}, function (response) {
+				toaster.pop('error', response.data);
+			});
+		};
+	}]);
+});

+ 60 - 0
src/main/webapp/resources/js/admin/controllers/SupplierSubmitListCtrl.js

@@ -0,0 +1,60 @@
+define([ 'app/app' ], function(app) {
+    //品牌审批
+    app.register.controller('SupplierSubmitListCtrl', ['$scope', 'ngTableParams', 'SupplierSubmit', 'BaseService', function($scope, ngTableParams, SupplierSubmit, BaseService) {
+        BaseService.scrollBackToTop();
+
+        $scope.active = 'unAudited';
+
+        $scope.keyword = "";
+        $scope.setActive = function(state) {
+            if($scope.active != state) {
+                $scope.active = state;
+                if($scope.supplierTableParams.page() == 1)
+                    $scope.supplierTableParams.reload();
+                else
+                    $scope.supplierTableParams.page(1);
+            }
+        };
+
+        var getStatus = function() {
+            var status = 601;
+            switch($scope.active) {
+                case 'all' :
+                    break;
+                case 'unAudited' :
+                    status = 101; break;
+                case 'allow' :
+                    status = 102; break;
+                case 'notAllow' :
+                    status = 103; break;
+            }
+            return  status;
+        };
+
+        $scope.supplierTableParams = new ngTableParams({
+            page : 1,
+            count : 50,
+            sorting : {
+                updatetime: 'DESC'
+            }
+        }, {
+            total : 0,
+            getData : function($defer, params) {
+                var param = BaseService.parseParams(params.url());
+                param.keyword = $scope.keyword;
+                param.status = getStatus();
+                SupplierSubmit.getPage(param, function(page) {
+                    if (page) {
+                        params.total(page.totalElements);
+                        $defer.resolve(page.content);					}
+                });
+            }
+        });
+
+        $scope.onSearch = function() {
+            $scope.supplierTableParams.page(1);
+            $scope.supplierTableParams.reload();
+        }
+
+    }]);
+});

+ 53 - 13
src/main/webapp/resources/js/admin/controllers/help/HelpDetailCtrl.js

@@ -3,7 +3,7 @@
  */
 define(['app/app'], function(app) {
     'use strict';
-    app.register.controller('HelpDetailCtrl', ['$scope', '$modal', 'HelpIssue', 'toaster', '$stateParams', 'HelpAPI', '$state', function ($scope, $modal, HelpIssue, toaster, $stateParams, HelpAPI, $state) {
+    app.register.controller('HelpDetailCtrl', ['$scope', '$modal', 'HelpIssue', 'toaster', '$stateParams', 'HelpAPI', '$state', '$http', 'BaseService', 'HelpUpload', '$q', function ($scope, $modal, HelpIssue, toaster, $stateParams, HelpAPI, $state, $http, BaseService, HelpUpload, $q) {
 
         HelpIssue.get({id : $stateParams.id}, function (data) {
             $scope.issue = data;
@@ -31,6 +31,26 @@ define(['app/app'], function(app) {
             }
         });
 
+        $scope.rootPath = BaseService.getRootPath();
+        function switchBase64ToImg(el) {
+            var deferred = $q.defer();
+            var data = el.src;
+            var arr = data.split(','), mime = arr[0].match(/:(.*?);/)[1],
+                bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
+            while(n--){
+                u8arr[n] = bstr.charCodeAt(n);
+            }
+            var obj = new Blob([u8arr], {type:mime});
+            var fd = new FormData();
+            fd.append("upfile", obj, "image.png");
+            return HelpUpload.upload(fd, function (data) {
+                el.src = data[0].path;
+                // console.log(el);
+            }, function (err) {
+                toaster.pop('error', '上传失败');
+            })
+        }
+
         // 选择导航
         $scope.chooseNav = function() {
             var modalInstance = $modal.open({
@@ -52,12 +72,22 @@ define(['app/app'], function(app) {
         $scope.save = function () {
             $scope.issue.article = quill.container.innerHTML.replace('\<input type="text" data-formula="e=mc^2" data-link="https://quilljs.com" data-video="Embed URL">','').replace('contenteditable="true"', 'contenteditable="false"');
             $scope.issue.content = angular.toJson(quill.getContents());
-            HelpIssue.update({}, $scope.issue, function (data) {
-                toaster.pop('success', '保存成功');
-                $state.go('helpPublish');
-                window.location.href ='admin_n#/help/publish';// quilljs锁定了跳转 必须这样跳两次才有效
-            }, function(response) {
-                toaster.pop('error', response.data);
+            var els = $($scope.issue.article);
+            var imgs = els.find('img');
+            var promises = [];
+            angular.forEach(imgs, function (img) {
+                promises.push(switchBase64ToImg(img).$promise);
+            })
+            $q.all(promises).then(function () {
+                // console.log(els.html());
+                $scope.issue.article = els.html()
+                HelpIssue.update({}, $scope.issue, function (data) {
+                    toaster.pop('success', '保存成功');
+                    $state.go('helpPublish');
+                    window.location.href ='admin_n#/help/publish';// quilljs锁定了跳转 必须这样跳两次才有效
+                }, function(response) {
+                    toaster.pop('error', response.data);
+                });
             });
         };
 
@@ -65,12 +95,22 @@ define(['app/app'], function(app) {
         $scope.publish = function () {
             $scope.issue.article = quill.container.innerHTML.replace('\<input type="text" data-formula="e=mc^2" data-link="https://quilljs.com" data-video="Embed URL">','').replace('contenteditable="true"', 'contenteditable="false"');
             $scope.issue.content = angular.toJson(quill.getContents());
-            HelpIssue.publish({}, $scope.issue, function (data) {
-                toaster.pop('success', '发布成功');
-                $state.go('helpPublish');
-                window.location.href = 'admin_n#/help/publish';
-            }, function(response) {
-                toaster.pop('error', response.data);
+            var els = $($scope.issue.article);
+            var imgs = els.find('img');
+            var promises = [];
+            angular.forEach(imgs, function (img) {
+                promises.push(switchBase64ToImg(img).$promise);
+            })
+            $q.all(promises).then(function () {
+                // console.log(els.html());
+                $scope.issue.article = els.html()
+                HelpIssue.publish({}, $scope.issue, function (data) {
+                    toaster.pop('success', '发布成功');
+                    $state.go('helpPublish');
+                    window.location.href = 'admin_n#/help/publish';
+                }, function(response) {
+                    toaster.pop('error', response.data);
+                });
             });
         };
         

+ 37 - 7
src/main/webapp/resources/js/admin/controllers/help/HelpEditCtrl.js

@@ -1,6 +1,6 @@
 define(['app/app'], function(app) {
     'use strict';
-    app.register.controller('HelpEditCtrl', ['$scope', '$modal', 'HelpIssue', 'toaster', '$state', function ($scope, $modal, HelpIssue, toaster, $state) {
+    app.register.controller('HelpEditCtrl', ['$scope', '$modal', 'HelpIssue', 'toaster', '$state', '$http', 'BaseService', 'HelpUpload', '$q', function ($scope, $modal, HelpIssue, toaster, $state, $http, BaseService, HelpUpload, $q) {
 
         $scope.issue = {};
 
@@ -31,16 +31,46 @@ define(['app/app'], function(app) {
             });
         };
 
+        $scope.rootPath = BaseService.getRootPath();
+        function switchBase64ToImg(el) {
+            var deferred = $q.defer();
+            var data = el.src;
+            var arr = data.split(','), mime = arr[0].match(/:(.*?);/)[1],
+                bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
+            while(n--){
+                u8arr[n] = bstr.charCodeAt(n);
+            }
+            var obj = new Blob([u8arr], {type:mime});
+            var fd = new FormData();
+            fd.append("upfile", obj, "image.png");
+            return HelpUpload.upload(fd, function (data) {
+                el.src = data[0].path;
+                // console.log(el);
+            }, function (err) {
+                toaster.pop('error', '上传失败');
+            })
+        }
+        
         // 保存
         $scope.save = function () {
             $scope.issue.article = quill.container.innerHTML.replace('\<input type="text" data-formula="e=mc^2" data-link="https://quilljs.com" data-video="Embed URL">','').replace('contenteditable="true"', 'contenteditable="false"');
             $scope.issue.content = angular.toJson(quill.getContents());
-            HelpIssue.save({}, $scope.issue, function (data) {
-                toaster.pop('success', '保存成功');
-                $state.go('helpDetail',{id : data.id});
-                window.location.href = '#/help/issue/' + data.id;// quilljs锁定了跳转 必须这样跳两次才有效
-            }, function(response) {
-                toaster.pop('error', response.data);
+            var els = $($scope.issue.article);
+            var imgs = els.find('img');
+            var promises = [];
+            angular.forEach(imgs, function (img) {
+                promises.push(switchBase64ToImg(img).$promise);
+            })
+            $q.all(promises).then(function () {
+                // console.log(els.html());
+                $scope.issue.article = els.html()
+                HelpIssue.save({}, $scope.issue, function (data) {
+                    toaster.pop('success', '保存成功');
+                    $state.go('helpDetail',{id : data.id});
+                    window.location.href = '#/help/issue/' + data.id;// quilljs锁定了跳转 必须这样跳两次才有效
+                }, function(response) {
+                    toaster.pop('error', response.data);
+                });
             });
         };
 

+ 319 - 0
src/main/webapp/resources/js/admin/controllers/supplierMaintenanceCtrl.js

@@ -0,0 +1,319 @@
+define([ 'app/app' ], function(app) {
+	//供应商维护
+	app.register.controller('supplierMaintenanceCtrl', ['$scope', 'ngTableParams', 'toaster', 'BrandActive', '$stateParams', 'SupplierSubmit', 'Loading', 'BaseService', '$window', 'Supplier', 'StoreInfo', '$upload', function($scope, ngTableParams, toaster, BrandActive, $stateParams, SupplierSubmit, Loading, BaseService, $window, Supplier, StoreInfo, $upload) {
+		$scope.storeType = '';
+		$scope.addedSupplier = false;
+		$scope.brandKeyword = '';
+
+		// 根据路由地址获取品牌信息
+		var getBrand = function () {
+			BrandActive.get({uuid : $stateParams.uuid}, {}, function(data){
+				$scope.brand = data;
+			}, function(res){
+				toaster.pop('error', '品牌详情数据加载失败', res.data);
+			});
+		};
+		getBrand();
+
+        // 获取供应商信息
+		var loadSupplier = function () {
+			$scope.supplierTableParams = new ngTableParams({
+				page : 1,
+				count : 5,
+				sorting : {
+					submitTime : 'DESC'
+				}
+			}, {
+				total : 0,
+				getData : function($defer, params) {
+					$scope.loading = true;
+					var param = BaseService.parseParams(params.url());
+					param.uuid = $stateParams.uuid;
+					Supplier.getPage(param, function(data){
+						$defer.resolve(data.content);
+						params.total(data.totalElements);
+						$scope.suppliersData = data.content;
+						angular.forEach($scope.suppliersData, function (item) {
+							item.edit = false;
+						})
+						$scope.addedSupplier = false;
+					})
+				}
+			});
+		};
+        loadSupplier();
+
+		// 删除供应商信息
+		$scope.deleteSupplier = function(flag, supplier) {
+			SupplierSubmit.deleteById({id : flag}, function(){
+				toaster.pop('info', '提示', "删除申请已提交待审核");
+			});
+			supplier.edit = false;
+			$scope.supplierTableParams.page(1);
+			$scope.supplierTableParams.reload();
+		};
+
+		// 取消修改供应商信息
+		$scope.cancelSupplier = function (supplier) {
+			supplier.storeIn =supplier.oldStoreIn;
+			toaster.pop('info', '提示', "取消修改");
+			supplier.edit = false;
+		};
+
+		// 下载模板
+		$scope.download = function () {
+			Loading.show();
+			window.location.href = BaseService.getRootPath() + '/produce/vendorSubmit/template';
+			Loading.hide();
+		};
+
+		// 新增供应商信息
+		$scope.addSupplier = function() {
+			angular.forEach($scope.suppliersData, function (item) {
+				item.edit = false;
+			})
+			$scope.addedSupplier = !$scope.addedSupplier
+		};
+
+		// 保存新增供应商信息
+		$scope.sure = function(supplier) {
+			supplier.img = supplier.editImg;
+			supplier.branduuid = $stateParams.uuid;
+			supplier.storeuuid = supplier.storeIn == null ? null : supplier.storeIn.uuid;
+            if (!supplier.vendorName) {
+                toaster.pop('error', '代理商名称不能为空');
+                return;
+            }
+			SupplierSubmit.submit({},supplier,function(data){
+				toaster.pop('success', '提示', "申请成功");
+				data.isSubmited = '2';
+				$scope.supplierTableParams.data.push(data);
+				$scope.supplier = {};
+				$scope.addedSupplier = false;
+			},function(res){
+				toaster.pop('error', '警告', res.data);
+			});
+		};
+
+		// 取消保存新增供应商
+		$scope.cancelAddSupplier = function () {
+			toaster.pop('info', '提示', "取消新增");
+			$scope.supplier = {};
+			$scope.addedSupplier = false;
+		};
+
+		// 更改供应商信息
+		$scope.changeSupplier = function (supplier) {
+			angular.forEach($scope.suppliersData, function (item) {
+				item.edit = false;
+			})
+			supplier.oldStoreIn = supplier.storeIn;
+			supplier.edit = true;
+			supplier.editImg = supplier.img;
+			supplier.editVendorName = supplier.vendorName;
+			supplier.editLicense = supplier.license;
+			supplier.editDetailAddress = supplier.detailAddress;
+			supplier.editTel = supplier.tel;
+			supplier.editFax = supplier.fax;
+			supplier.editWebsite = supplier.website;
+			supplier.editEmail = supplier.email;
+			supplier.vendorid = supplier.id;
+			$scope.addedSupplier = false;
+		};
+
+		// 保存更改后的供应商信息
+		$scope.updateSupplier = function(supplier){
+			var updateSupplier = inverseSupplier(supplier)
+			if (!updateSupplier.vendorName) {
+				toaster.pop('error', '代理商名称不能为空');
+				return;
+			}
+			SupplierSubmit.updateSupplier({}, updateSupplier, function(data){
+				toaster.pop('success', '供应商信息申请成功');
+				supplier.edit = false;
+				$scope.supplierTableParams.page(1);
+				$scope.supplierTableParams.reload();
+			}, function(response){
+				toaster.pop('error', '申请失败', response.data);
+			});
+		};
+
+        /**
+         * 初始化修改的供应商信息
+         * @param supplier 供应商信息
+         */
+		var inverseSupplier = function (supplier) {
+			var a = {};
+            a.img = supplier.editImg;
+            a.vendorName = supplier.editVendorName;
+            a.license = supplier.editLicense;
+            a.detailAddress = supplier.editDetailAddress;
+            a.tel = supplier.editTel;
+            a.fax = supplier.editFax;
+            a.website = supplier.editWebsite;
+            a.email = supplier.editEmail;
+            a.vendorid = supplier.id != null ? supplier.id : null;
+            a.branduuid = $stateParams.uuid;
+            a.storeuuid = supplier.storeIn == null ? null : supplier.storeIn.uuid;
+            return a;
+		};
+
+		/**
+		 * 获取店铺信息
+		 */
+		var getStoreData = function () {
+            $scope.storeTableParams = new ngTableParams({
+                page : 1,
+                count : 5,
+                sorting : {
+                    updateTime : 'DESC'
+                }
+            }, {
+                total : 0,
+                getData : function($defer, params) {
+                    $scope.loading = true;
+                    var param = BaseService.parseParams(params.url());
+                    // 过滤店铺类型
+                    if ($scope.storeType && $scope.storeType !== '' && $scope.storeType !== 'ALL') {
+                        param.type = $scope.storeType;
+                    }
+                    // 根据关键字进行搜索
+                    if ($scope.brandKeyword && $scope.brandKeyword !== '') {
+                        param.keyword = $scope.brandKeyword;
+                    }
+					StoreInfo.pageStoreInfoWhenAdminQuery(param, function (data) {
+						if (!data.content || !Array.isArray(data.content)) {
+							data.content = [];
+						}
+						angular.forEach(data.content, function (store) {
+							var tags = JSON.parse(store.tags || '[]');
+							store.tagsObject = {};
+							for (var i = 0; i < tags.length; i++) {
+								store.tagsObject[tags[i]] = true;
+							}
+						});
+						$defer.resolve(data.content);
+						params.total(data.totalElements);
+					});
+                }
+            });
+        };
+
+		// 上传Excel批量申请(大量)
+		$scope.upload = function() {
+			var file = $scope.myFiles[0];
+			$upload.upload({
+				url: 'produce/vendorSubmit/upload',
+				file: file,
+				method: 'POST'
+			}).success(function(data) {
+				toaster.pop('success', '提示', '提交成功');
+			}).error(function(response) {
+				toaster.pop('error', '提示', response);
+			});
+		};
+
+		/**
+		 * 选择店铺类型
+		 *
+		 * @param type	店铺类型
+		 */
+		$scope.chooseStoreType = function (type) {
+			if (!type || type === '')
+				return 0;
+			$scope.storeType = type;
+			$scope.storeStatus = '';
+
+			$scope.storeTableParams.page(1);
+			$scope.storeTableParams.reload();
+		};
+
+		/**
+		 * 根据关键字进行搜索
+		 */
+		$scope.refreshTableData = function (keyword) {
+      $scope.brandKeyword = keyword;
+			$scope.storeTableParams.page(1);
+			$scope.storeTableParams.reload();
+		};
+
+		/**
+		 * 选择店铺
+		 * @param supplier 供应商
+		 * @param store 店铺
+		 */
+		$scope.chooseStore = function (supplier, store) {
+			supplier.storeIn = store;
+      $scope.brandKeyword = '';
+			supplier.chooseStoreAssociated = false;
+		};
+
+		/**
+		 * 开关关联店铺
+		 * @param supplier 供应商
+		 */
+		$scope.storeAssociated = function (supplier){
+      $scope.brandKeyword = '';
+			supplier.chooseStoreAssociated = typeof supplier.chooseStoreAssociated == 'undefined' ? true : !supplier.chooseStoreAssociated;
+			if (supplier.chooseStoreAssociated) {
+				getStoreData();
+			}
+		};
+
+		/**
+		 * 上传修改供应商图片
+		 */
+		$scope.supplier = {};
+		$scope.onUploadImage = function ($data, supplier) {
+			if (!$data || !$data.path) {
+				toaster.pop('error', '图片上传失败');
+				return ;
+			}
+			supplier.editImg = $data.path;
+		};
+
+		/**
+		 * 删除修改供应商图片
+		 */
+		$scope.deleteImage = function (supplier) {
+			delete supplier.editImg;
+		};
+
+		/**
+		 * 上传新增供应商图片
+		 */
+		$scope.addImg = '';
+		$scope.onUploadImg = function ($data) {
+			if (!$data || !$data.path) {
+				toaster.pop('error', '图片上传失败');
+				return ;
+			}
+			$scope.addImg = $data.path;
+		};
+
+		/**
+		 * 删除新增供应商图片
+		 */
+		$scope.deleteAddImg = function () {
+			delete $scope.addImg;
+		};
+
+		/**
+		 * 查看大图
+		 *
+		 * @param imgUrl		图片链接
+		 */
+		function showImg (imgUrl) {
+			var src = imgUrl, box = $('#image-box'), modal = $('.modal-content');
+			box.show();
+			box.find('img').attr('src', src);
+			box.find('a').click(function(){
+				box.hide();
+			});
+			box.dblclick(function(){
+				box.hide();
+			});
+		}
+
+	}]);
+});

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

@@ -1,6 +1,5 @@
 define([ 'app/app' ], function(app) {
 	'use strict';
-
 	app.config(['$httpProvider', function($httpProvider) {
 		// 设置http拦截器
 		$httpProvider.interceptors.push('httpInterceptor');
@@ -16,7 +15,6 @@ define([ 'app/app' ], function(app) {
 			if(--i < 1) Loading.hide();
 		};
 
-		var url = arguments[0].url;
 		return {
 			request: function(cfg){
 				if(cfg.url) {
@@ -27,10 +25,7 @@ define([ 'app/app' ], function(app) {
 				return cfg;
 			},
 			requestError: function(rejection) {
-				if(url && url.indexOf('api/chat/message') < 0) {
-					endLoading();
-				}
-				// endLoading();
+				endLoading();
 				return $q.reject(rejection);
 			},
 			response: function(res) {
@@ -42,10 +37,7 @@ define([ 'app/app' ], function(app) {
 				return res;
 			},
 			responseError: function(rejection) {
-				if(url && url.indexOf('api/chat/message') < 0) {
-					endLoading();
-				}
-				// endLoading();
+				endLoading();
 				if(rejection.status == 401) {
 					window.location.href = rejection.data.loginUrl || 'index';
 				}
@@ -969,6 +961,21 @@ define([ 'app/app' ], function(app) {
 		}
 	}]);
 
+	// 我的店铺侧边栏的Controller
+	app.controller('goCartCtrl', ['$scope', 'StoreInfo', 'AuthenticationService', function($scope, StoreInfo, AuthenticationService) {
+		$scope.uuid = false;
+    if(AuthenticationService.isAuthed()) {
+      StoreInfo.existStore({}, {}, function (result) {
+        $scope.uuid = result.uuid;
+      })
+    }
+		$scope.openMystore = function(){
+			var uuid = $scope.uuid;
+			window.open('store/' + uuid, '_self');
+		}
+	}])
+
+
 	// Web Chat侧边栏的Controller
 	app.controller('WebChatCtrl', ['$scope', '$interval', 'AuthenticationService', 'ChatBusinessLayer', 'toaster','$rootScope', function($scope, $interval, AuthenticationService, ChatBusinessLayer, toaster ,$rootScope) {
 		$scope.userInfo = null;

+ 1 - 1
src/main/webapp/resources/js/common/directives.js

@@ -847,7 +847,7 @@ define(['angular', 'showdown', 'angular-toaster'], function(angular) {
 				var errorSizeMsg = attr.errorSizeMsg;
 
 				// 设置图片预览
-				element.append('<img class=previewImage title="请上传附件"/>');
+				element.append('<img class=previewImage title=""/>');
 				var previewImage = $(element).find('.previewImage');
 				previewImage.attr('src', attr.src);
 

+ 4 - 0
src/main/webapp/resources/js/common/query/enterprise.js

@@ -164,6 +164,10 @@ define([ 'angular', 'ui-bootstrap', 'ngResource' ], function(angular) {
             findUsersByKeyword : {
                 url : 'basic/user/enterprise/keywordinfo',
 				method : 'GET'
+            },
+            findUserByUserNameLikeAndEnUU: {
+                url: 'basic/user/enterprise/username',
+                method: 'GET'
             },
 			saveUser : {
 				url : 'basic/user',

+ 10 - 0
src/main/webapp/resources/js/common/query/help.js

@@ -115,5 +115,15 @@ define([ 'ngResource' ], function() {
                 method: 'GET'
             }
         })
+    }]).factory('HelpUpload', ['$resource', 'BaseService', function ($resource) {
+        //文章编辑图片处理
+        return $resource('file', {}, {
+            upload: {
+                url: 'file',
+                method: 'POST',
+                headers : {'Content-Type' : undefined},
+                isArray: true
+            }
+        })
     }]);
 });

+ 83 - 0
src/main/webapp/resources/js/common/query/supplier.js

@@ -0,0 +1,83 @@
+define([ 'ngResource' ], function() {
+	angular.module('supplierServices', [ 'ngResource' ]).factory('SupplierAPI', ['$resource', 'BaseService', function($resource, BaseService) {
+		const rootPath = BaseService.getRootPath();
+		// 供应商
+		return $resource('api/produce/vendorlist', {}, {
+			/*
+			 * 分页获取品牌供应商信息
+			 */
+			getPage : {
+				url: rootPath + '/api/produce/vendorlist/:uuid',
+				method: 'GET'
+			}
+		});
+	}]).factory('Supplier', ['$resource', 'BaseService', function($resource, BaseService) {
+		const rootPath = BaseService.getRootPath();
+		// 供应商
+		return $resource('produce/vendorlist', {}, {
+			/*
+			 * 分页获取品牌供应商信息
+			 */
+			getPage : {
+				url: rootPath + '/produce/vendorlist/:uuid',
+				method: 'GET'
+			}
+		});
+	}]).factory('SupplierSubmit', ['$resource', 'BaseService', function($resource, BaseService) {
+		const rootPath = BaseService.getRootPath();
+		// 供应商申请
+		return $resource('/produce/vendorSubmit', {}, {
+			/*
+			 * 获取品牌供应商申请信息
+			 */
+			get: {
+				url: rootPath + '/produce/vendorSubmit/:id',
+				method: 'GET'
+			},
+
+			/*
+			 * 删除品牌供应商申请信息
+			 */
+			deleteById: {
+				url: rootPath + '/produce/vendorSubmit/:id',
+				method: 'DELETE'
+			},
+
+			/*
+			 * 分页获取品牌供应商申请信息
+			 */
+			getPage : {
+				url: rootPath + '/produce/vendorSubmit/page',
+				method: 'GET'
+			},
+			/*
+			 * 保存
+			 */
+			submit: {
+				url : rootPath + '/produce/vendorSubmit',
+				method : 'POST'
+			},
+			/*
+			 * 更新供应商申请
+			 */
+			updateSupplier: {
+				url : rootPath + '/produce/vendorSubmit/update',
+				method : 'POST'
+			},
+			/*
+			 * 审核通过
+			 */
+			audit: {
+				url : rootPath + '/produce/vendorSubmit/audit',
+				method : 'POST'
+			},
+			/*
+			 * 审核不通过
+			 */
+			unaudit: {
+				url : rootPath + '/produce/vendorSubmit/unaudit/:id',
+				method : 'POST'
+			}
+		});
+	}])
+});

+ 2 - 0
src/main/webapp/resources/js/usercenter/controllers/forstore/query_logistics_ctrl.js

@@ -49,6 +49,8 @@ define(['app/app', 'calendar'], function(app) {
                             $scope.logisticsInfo = eval ("(" + response.traces + ")");
                             statusOfLogistics($scope.logisticsInfo[$scope.logisticsInfo.length - 1].AcceptStation);
                             $scope.hasInfo = true;
+                        } else {
+                            $scope.logisticsInfo = [];
                         }
                     }, function(){
                         $scope.logisticsInfo = [];

+ 7 - 7
src/main/webapp/resources/js/vendor/app.js

@@ -512,17 +512,17 @@ define([ 'angularAMD', 'ngLocal', 'common/services', 'common/directives', 'commo
             controllerUrl : "app/controllers/forstore/vendor_materialPersonCtrl",
             controller : 'vendor_materialPersonCtrl'
         })).state('vendor_material_erp', angularAMD.route({
-			title : '可上架产品toErp',
+			title : '企业产品库toErp',
 			url : '/vendor_material_erp?standardParam',
 			templateUrl : 'static/view/vendor/forstore/erp/vendor_material_erp.html',
 			controllerUrl : "app/controllers/forstore/vendor_materialCtrl",
 			controller : 'vendor_materialCtrl'
-		})).state('vendor_material_unstandard_erp', angularAMD.route({
-			title : '暂不可上架产品toErp',
-			url : '/vendor_material_unstandard_erp?standardParam',
-			templateUrl : 'static/view/vendor/forstore/erp/vendor_material_unstandard_erp.html',
-			controllerUrl : "app/controllers/forstore/vendor_materialCtrl",
-			controller : 'vendor_materialCtrl'
+		})).state('vendor_material_person_erp', angularAMD.route({
+			title : '个人产品库toErp',
+			url : '/vendor_material_person_erp?standardParam',
+			templateUrl : 'static/view/vendor/forstore/erp/vendor_material_person_erp.html',
+			controllerUrl : "app/controllers/forstore/vendor_materialPersonCtrl",
+			controller : 'vendor_materialPersonCtrl'
 		})).state('vendor_onSale', angularAMD.route({
             title : '在售产品',
             url : '/vendor_onSale',

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

@@ -48,6 +48,8 @@ define(['app/app', 'calendar'], function(app) {
                                 $scope.logisticsInfo = eval ("(" + response.traces + ")");
                                 statusOfLogistics($scope.logisticsInfo[$scope.logisticsInfo.length - 1].AcceptStation);
                                 $scope.hasInfo = true;
+                            } else {
+                                $scope.logisticsInfo = [];
                             }
                         }, function(){
                             $scope.logisticsInfo = [];

+ 74 - 16
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_materialCtrl.js

@@ -221,21 +221,25 @@ define([ 'app/app', 'jquery-uploadify' ], function(app) {
         /**
          * 获取批量上架的配置信息
          */
-        UASBatchPutOnPropertyServices.get(null, function (data) {
-            if (data && typeof data.fluctuateRate != 'undefined') {
-                $scope.uasBatchPutOnProperty = data;
-                $scope.uasBatchPutOnProperty.editFluctuateRate = NumberService.mul($scope.uasBatchPutOnProperty.fluctuateRate, 100) || 100;
-                $scope.uasBatchPutOnProperty.editMaxDelivery = $scope.uasBatchPutOnProperty.maxDelivery || 10;
-                $scope.uasBatchPutOnProperty.editMinDelivery = $scope.uasBatchPutOnProperty.minDelivery || 1;
-            } else {
-				$scope.uasBatchPutOnProperty = {};
-                $scope.uasBatchPutOnProperty.editFluctuateRate = 100;
-                $scope.uasBatchPutOnProperty.editMaxDelivery = 10;
-                $scope.uasBatchPutOnProperty.editMinDelivery = 1;
-            }
-        }, function (response) {
-            console.log(response);
-        });
+        $scope.getUASBatchPutOnPropertyData = function () {
+			UASBatchPutOnPropertyServices.get(null, function (data) {
+				if (data && typeof data.fluctuateRate != 'undefined') {
+					$scope.uasBatchPutOnProperty = data;
+					$scope.uasBatchPutOnProperty.editFluctuateRate = NumberService.mul($scope.uasBatchPutOnProperty.fluctuateRate, 100) || 100;
+					$scope.uasBatchPutOnProperty.editMaxDelivery = $scope.uasBatchPutOnProperty.maxDelivery || 10;
+					$scope.uasBatchPutOnProperty.editMinDelivery = $scope.uasBatchPutOnProperty.minDelivery || 1;
+				} else {
+					$scope.uasBatchPutOnProperty = {};
+					$scope.uasBatchPutOnProperty.editFluctuateRate = 100;
+					$scope.uasBatchPutOnProperty.editMaxDelivery = 10;
+					$scope.uasBatchPutOnProperty.editMinDelivery = 1;
+				}
+			}, function (response) {
+				console.log(response);
+			});
+		};
+
+		$scope.getUASBatchPutOnPropertyData();
 
 		/**
 		 * 切换标准/非标准
@@ -272,11 +276,18 @@ define([ 'app/app', 'jquery-uploadify' ], function(app) {
 
 		// 进入批量操作
 		$scope.enterBatch = function () {
+			if (!$scope.isBatch) {
+				$scope.getUASBatchPutOnPropertyData();
+			}
 			closeAllEditStatus();
-			$scope.isBatch = true;
+			$scope.isBatch = !$scope.isBatch;
 			$scope.isChoosedAll = false;
 		};
 
+		$scope.onProgress = function () {
+			$scope.uasBatchPutOnProperty.editFluctuateRate = Number($scope.uasBatchPutOnProperty.editFluctuateRate);
+		}
+
 		// 取消批量操作
 		$scope.exitBatch =function () {
 			$scope.isBatch = false;
@@ -1254,7 +1265,51 @@ define([ 'app/app', 'jquery-uploadify' ], function(app) {
 			loadDataReload();
 		};
 
+		$scope.enUser = {
+			prodName:''
+		};
+		$scope.showSimilarUser = false;
+		$scope.similarUser = [];
+		$scope.similarUserObj = {
+			isInSimilarUser: false
+		};
+		$scope.onUserUUChange = function () {
+            $scope.param.userUU = null;
+		    if ($scope.enUser.prodName && $scope.enUser.prodName.length) {
+                Enterprise.findUserByUserNameLikeAndEnUU({page: 1, count: 8, userName: $scope.enUser.prodName, enuu: $rootScope.userInfo.enterprise.uu }, function (page) {
+                    if (page.content && page.content.length) {
+                        $scope.similarUser = page;
+                        $scope.showSimilarUser = true;
+                    } else {
+                        $scope.similarUser.content = [];
+                        $scope.showSimilarUser = false;
+                    }
+                })
+            } else {
+                $scope.showSimilarUser = false;
+			}
+
+        }
+        $scope.onUserUUBlur = function () {
+			if (!$scope.similarUserObj.isInSimilarUser) {
+				$scope.showSimilarUser = false;
+			}
+		};
+        $scope.setProdName = function (item) {
+			$scope.enUser.prodName = item.userName;
+			$scope.param.userUU = item.userUU;
+			$scope.showSimilarUser = false;
+        }
+
 		var loadDataReload = function () {
+            $scope.currentNull = false;
+            if ($scope.enUser.prodName != "" && $scope.param.userUU == null) {
+                toaster.pop('error', '请选择正确的人员姓名!');
+                $scope.materialAll = null;
+                $scope.currenctMaterial = null;
+                $scope.currentDataNull = true;
+                return;
+            }
 			$scope.param.page = 1;
 			loadData();
 		};
@@ -2977,6 +3032,8 @@ define([ 'app/app', 'jquery-uploadify' ], function(app) {
 						$scope.deleteModal = false;
                         $modalInstance.close(data);
                     }, function (response) {
+                        $scope.deleteModal = false;
+                        $modalInstance.dismiss();
                         toaster.pop('error', response.data);
                     });
                 }
@@ -2991,6 +3048,7 @@ define([ 'app/app', 'jquery-uploadify' ], function(app) {
                         toaster.pop('success', '提示', '删除成功');
                     }, function (response) {
                         toaster.pop('error', '错误', response.data);
+
                     });
                 }, function (response) {
                     toaster.pop('error',  '错误', response.data);

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

@@ -1033,14 +1033,13 @@ define([ 'app/app', 'jquery-uploadify' ], function(app) {
                 }
 				productReplaceList[i].detno = i + 1;
 			}
-            console.log($scope.errorObj);
             for (var i = 0; i < productReplaceList.length; i++) {
                 if ($scope.errorObj[i].code == 1 || $scope.errorObj[i].brand == 1) {
                     toaster.pop('error', '请填完整信息');
                     return;
                 }
 			}
-			Material.setProductReplacesByPerson(productReplaceList , function (data) {
+			Material.setProductReplacesByPerson({productId:$scope.replaceMaterialId}, productReplaceList , function (data) {
 				loadDataReload();
 				$scope.setActiveIndex(-1);
             }, function (response) {
@@ -2491,6 +2490,7 @@ define([ 'app/app', 'jquery-uploadify' ], function(app) {
                 $scope.editCmp = material.pcmpcode;
                 $scope.editBrand = material.pbranden;
                 $scope.replaceMaterialList = angular.copy(material.productReplaceList);
+				$scope.replaceMaterialId = material.id;
 				for (var i = 0; i < $scope.replaceMaterialList.length; i++) {
 					$scope.errorObj.push({
 						code: 0,
@@ -2563,7 +2563,7 @@ define([ 'app/app', 'jquery-uploadify' ], function(app) {
 				} else {
 					toaster.pop('error', '请填完整信息');
 				}
-			} else if (type === 'sub' && $scope.replaceMaterialList.length > 1) {
+			} else if (type === 'sub' && $scope.replaceMaterialList.length > 0) {
 				$scope.replaceMaterialList.splice(index, 1);
 				$scope.errorObj.splice(index, 1);
 				$scope.isInCodeList.splice(index, 1);

+ 833 - 0
src/main/webapp/resources/view/admin/brand_add.html

@@ -0,0 +1,833 @@
+<style type="text/css">
+	.padding-left-5 {
+		padding: 5px 30px;
+	}
+
+	.dashboard-avatar-brand {
+		height: 50px;
+		width: 50px;
+		padding: 1px;
+		float: left;
+		margin-left: 15px;
+		margin-right: 15px;
+		border: 1px solid #EBEBEB;
+	}
+
+	.border_top {
+		/*border-top: 1px solid #f5f5f5;*/
+	}
+	.border_top .pull-right {
+		margin-top: 45px;
+	}
+	.border_bottom {
+		border-bottom: 1px solid #f5f5f5;
+	}
+
+	.margintop {
+		margin-top: 2px;
+	}
+
+	.box-content .form-horizontal .span12 {
+		margin-left: 0px;
+	}
+
+	.radio-inline {
+		position: relative;
+		display: inline-block;
+		padding-left: 20px;
+		font-weight: 400;
+		vertical-align: middle;
+		cursor: pointer;
+	}
+
+	.width100 {
+		width: 100%;
+	}
+	.box-header h2{
+		float: none;
+	}
+	/*供应商维护*/
+	.box-contents{
+		padding: 0 ;
+	}
+	.box-top{
+		overflow: hidden;
+		padding: 0 10px;
+		height: 50px;
+		line-height: 50px;
+		border-bottom: 1px solid #dcdcdc;
+	}
+	.box-top .maintenance{
+		margin: 0;
+		float: left;
+		height: 50px;
+		line-height: 50px;
+		font-size: 16px;
+		color: #317eac;
+	}
+	.box-top .load{
+		float: right;
+		height: 50px;
+		line-height: 50px;
+	}
+	.box-top .load div:first-child {
+		float: left;
+		font-size: 14px;
+		color: #666;
+	}
+	.box-top .load div:first-child a{
+		font-size: 14px;
+		color: #4fb2eb;
+	}
+	.box-top .load div:last-child{
+		margin-top: 8px;
+		margin-left: 20px;
+		position: relative;
+		float: left;
+		width: 290px;
+	}
+	.box-top .load div:last-child input[type='text']{
+		padding-left: 7px;
+		width: 190px;
+		height: 34px;
+		line-height: 34px;
+		border: 1px solid #c0c6ca;
+	}
+	.box-top .load div:last-child input[type='file']{
+		position: absolute;
+		top: 7px;
+		left: 7px;
+		width: 190px;
+		height: 20px;
+	}
+	.box-top .load div:last-child button{
+		position: absolute;
+		right: 0;
+		top: 5px;
+		width: 79px;
+		height: 25px;
+		line-height: 25px;
+		font-size: 14px;
+		color: #fff;
+		background: #3caae8;
+		border-radius: 3px;
+		border: none;
+		outline: none;
+	}
+	.box-bottom table{
+		table-layout: fixed ;
+	}
+	.box-bottom table thead{
+		width: 100%;
+		height: 40px;
+		line-height: 40px;
+		background: #f1f1f1;
+		border-bottom: 1px solid #dcdcdc;
+	}
+	.box-bottom table thead th{
+		font-size: 14px;
+		color: #333;
+		text-align: center;
+		vertical-align: middle ;
+
+	}
+	.box-bottom table thead th:nth-child(2){
+		text-align: left;
+		padding-left: 60px;
+	}
+	.box-bottom table tbody tr{
+		text-align: center ;
+		border-bottom: 1px solid #dcdcdc;
+	}
+	.box-bottom table td .agency{
+		height: 73px;
+		line-height: 73px;
+	}
+	/*遮罩层*/
+	.box-bottom table td .agency .uploadImg .hover-show{
+		position: absolute;
+		width: 100%;
+		height: 100%;
+		top: 0;
+		left: 0;
+		background: rgba(0,0,0,.5);
+		z-index: 100;
+		display: block;
+	}
+	.box-bottom table td .agency .uploadImg .hover-show .delete{
+		position: absolute;
+		top: -12px;
+		right: 0px;
+		padding: 0;
+		width: 20px;
+		height: 20px;
+		float: right;
+		text-align: center;
+		cursor: pointer;
+	}
+	.box-bottom table td .agency .uploadImg .hover-show .delete i{
+		color: #fff;
+		font-size: 18px;
+	}
+	.box-bottom table td .agency .uploadImg .hover-show a i{
+		position: absolute;
+		left: 5px;
+		top: 22px;
+		margin-right: 5px;
+		font-size: 16px;
+	}
+	.box-bottom table td .agency .uploadImg{
+		position: relative ;
+		margin: 12px 0 0 20px;
+		float: left;
+		width: 100px;
+		height: 50px;
+		line-height: 50px;
+		border: 1px solid #dcdcdc;
+	}
+	.box-bottom table td .agency .uploadImg img{
+		width: 100%;
+		height: 100%;
+	}
+	.box-bottom table td .agency .uploadImg	div{
+		position: relative;
+		width: 98px;
+		height: 22px;
+	}
+	.box-bottom table td .agency .uploadImg	div input{
+		position: absolute;
+		top: 15px;
+		left: 18px;
+		width: 53px;
+		height: 100%;
+		opacity: 0;
+	}
+	.box-bottom table td .agency .uploadImg span{
+		position: absolute;
+		top: 0;
+		right: 34%;
+		font-size: 12px;
+		color: #fff;
+		cursor: pointer;
+	}
+	.box-bottom table td input{
+		/*padding: 0 15px;*/
+		width: 80%;
+		height: 29px;
+		line-height: 29px;
+		text-align: center;
+		font-size: 12px;
+		color: #666;
+		background: #f4f4f4;
+		border: 1px solid #dcdcdc;
+	}
+
+	.box-bottom table td select{
+		padding: 0;
+		width: 98px;
+		height: 29px;
+		background: #f4f4f4;
+		border: 1px solid #dcdcdc;
+	}
+	.box-bottom table td span{
+		font-size: 14px;
+		color: #2fa4e7;
+	}
+	.box-bottom table tbody tr td span.operate {
+		display: inline-block;
+		height: 25px;
+		line-height: 25px;
+		width: 42px!important ;
+		font-size: 14px;
+		color: #2fa4e7!important ;
+		border-radius: 3px;
+		cursor: pointer;
+	}
+	.box-bottom table tbody tr td span.operate:hover {
+		background: #2fa4e7;
+		color: #fff!important ;
+	}
+	.box-bottom table tbody.add-supply{
+		height: 55px;
+	}
+	.box-bottom table tbody.add-supply tr{
+		height: 32px;
+		border-bottom: 1px dashed #d2d2d2;
+	}
+	.box-bottom table tbody.add-supply tr td{
+		position: relative;
+	}
+	.box-bottom table tbody.add-supply tr td span{
+		position: absolute;
+		width: 206px;
+		font-size: 14px;
+		color: #2fa4e7;
+		display: inline-block;
+		background: #fff;
+		cursor: pointer;
+	}
+	.box-bottom table tbody.add-supply tr td span em{
+		font-size: 14px;
+		font-style: normal;
+		color: #2fa4e7;
+		background: none;
+	}
+	.box-bottom table tbody.add-supply tr td span i{
+		margin-right: 5px;
+		font-size: 24px;
+		color: #2fa4e7;
+	}
+	.box-bottom table tbody.add-supply tr td img{
+		position: absolute;
+		top: -4px;
+		cursor: pointer;
+	}
+
+	.upImg img{
+		width: 100%;
+		height: 100%;
+	}
+	.box-bottom table tbody.edit tr td span{
+		display: inline-block;
+		max-width: 180px;
+		text-overflow: ellipsis;
+		white-space: nowrap ;
+		overflow: hidden ;
+		font-size: 12px;
+		color: #333333;
+	}
+	.box-bottom table tbody.edit tr td .agency span{
+		display: inline-block;
+		width: 200px;
+		text-overflow: ellipsis;
+		white-space: nowrap ;
+		overflow: hidden ;
+		font-size: 12px;
+		color: #333333;
+	}
+	/*选择关联店铺*/
+
+	.box-bottom table td .choose{
+		position: absolute;
+		top: 52px;
+		left: -55px;
+		z-index: 1000;
+		background: #fff;
+		border: 1px solid #2fa4e7;
+		width: 375px;
+		/*height: 220px;*/
+	}
+	.box-bottom table td .choose .top{
+		padding-left: 10px;
+		overflow: hidden;
+		width: 100%;
+		height: 34px;
+		line-height: 34px;
+	}
+	.box-bottom table td .choose .top span{
+		float: left;
+		font-size: 12px;
+		color: #2fa4e7;
+	}
+	.box-bottom table td .choose .top label{
+		float: left;
+		margin-left: 10px;
+	}
+	.box-bottom table td .choose .top label input{
+		float: left;
+		margin-top: 13px;
+		width: 10px;
+		height: 10px;
+	}
+	.box-bottom table td .choose .top label span{
+		margin-left: 5px;
+		font-size: 12px;
+		color: #666;
+		font-weight: normal;
+		float: left;
+	}
+	.box-bottom table td .choose .top .form-search{
+		float: left;
+		position: relative;
+		width: 176px;
+		height: 20px;
+	}
+	.box-bottom table td .choose .top .form-search input{
+		width: 156px;
+		height: 20px;
+		border-radius: 0;
+		border : 1px solid #2fa4e7;
+	}
+	.box-bottom table td .choose .top .form-search button{
+		position: absolute;
+		top: 8px;
+		right: 0;
+		width: 21px;
+		height: 20px;
+		line-height: 20px;
+		text-align: center;
+		background: #2fa4e7;
+		border: none;
+		outline: none;
+	}
+	.box-bottom table td .choose .top .form-search i{
+		font-size:12px;
+		color: #fff;
+	}
+	.box-bottom table td .choose table{
+		table-layout: fixed ;
+		width: 100%;
+	}
+	.box-bottom table td .choose table thead{
+		width: 100%;
+		height: 25px;
+		background: #e9e9e9;
+	}
+	.box-bottom table td .choose table thead tr{
+		width: 100%;
+		height: 25px;
+		line-height: 25px;
+		font-size: 14px;
+		font-weight: normal;
+		color: #333333;
+		text-align: center;
+	}
+	.box-bottom table td .choose table thead tr th:nth-child(2){
+		padding-left: 0;
+	}
+	.box-bottom table td .choose table tbody tr{
+		height: 25px;
+		vertical-align: middle ;
+	}
+	.box-bottom table td .choose table tr td{
+		border-bottom: 1px solid #e9e9e9;
+		font-size: 12px;
+		color: #666666;
+	}
+	.box-bottom table td .choose table td input{
+		width: 10px;
+		height: 10px;
+	}
+	/*上传图片*/
+	#uploadImg{
+		position: relative;
+		width: 150px;
+		height: 90px;
+		line-height: 90px;
+		text-align: center;
+		border-radius: 5px;
+		background: #7f7f7f;
+	}
+	#uploadImg .fa-upload{
+		font-size: 12px;
+		color: #fff;
+	}
+	#uploadImg span{
+		font-size: 12px;
+		color: #fff;
+	}
+	#uploadImg input{
+		position: absolute ;
+		top: 0;
+		left: 0;
+		width: 100%;
+		height: 100%;
+		outline: none;
+		opacity: 0;
+	}
+</style>
+<div class="row-fluid-fluid sortable">
+	<!-- 品牌维护详情Start -->
+	<div class="box span9 page-header">
+		<div class="box-header well" data-original-title>
+			<h2><i class="icon-user"></i> 品牌维护详情</h2>
+		</div>
+		<div class="box-content">
+			<form class="form-horizontal" name="form1" novalidate>
+				<div class="span12">
+					<label class="span2 control-label">
+						<span class="text-required">*</span>中文品牌:
+					</label>
+					<div class="span9">
+						<input type="text" class="form-control input-sm" name="nameCn" required autofocus ng-blur="exist('Cn')"
+							   ng-model="BrandActiveData.nameCn" placeholder="输入品牌名称,例如:松下">
+					</div>
+				</div>
+				<div class="span12">
+					<label class="span2 control-label">
+						<span class="text-required">*</span>英文品牌:
+					</label>
+					<div class="span9">
+						<input type="text" class="form-control input-sm" name="nameEn" required autofocus ng-blur="exist('En')"
+							   ng-model="BrandActiveData.nameEn" placeholder="输入品牌名称,例如:Panasonic">
+					</div>
+				</div>
+				<div class="span12">
+					<label class="control-label"><span
+							class="text-required">*</span>官网地址:</label>
+					<div class="">
+						<input type="text" class="form-control input-sm" name="vendor" required
+							   ng-model="BrandActiveData.url" placeholder="输入品牌官网地址,例如:http://panasonic.cn/" autocomplete="off">
+					</div>
+				</div>
+				<div class="span12">
+					<label class="span2 control-label"><span
+							class="text-required">*</span>Logo:</label>
+					<div class="span9">
+						<div id="uploadImg">
+							<span><i class="fa fa-upload"></i>上传</span>
+							<input type="file">
+						</div>
+						<span class="help-block">品牌Logo,建议图片尺寸在150*90像素左右</span>
+					</div>
+				</div>
+				<div class="span12">
+					<label class="span2 control-label"><span
+							class="text-required">*</span>简介:</label>
+					<div class="span9">
+						<textarea ng-model="BrandActiveData.brief" required style="width:100%; height: 190px; float: left;border: #ccc 1px solid;"></textarea>
+					</div>
+				</div>
+				<div class="span12">
+					<label class="span2 control-label"><span
+							class="text-required">*</span>销售区域:</label>
+					<div class="span9">
+						<label class="radio-inline" ng-repeat="area in areas">
+							<input type="checkbox" name="area" ng-model="area.checked" value="area" style="margin-top: 2px;">
+							<span ng-bind="area.name"></span>
+						</label>
+						<hr>
+						<div class="well well-sm">
+							<div class="span12" ng-repeat="e in extraAreas">
+								<div class="span4">
+									<div class="input-group">
+										<input type="text" class="form-control input-sm" ng-model="e.name">
+										<span class="input-group-btn">
+											<button class="btn btn-default btn-sm" type="button" ng-click="removeExtraAreas($index)">删除</button>
+										</span>
+									</div>
+								</div>
+							</div>
+							<div class="span12">
+								<div class="span3">
+									<a ng-click="addExtraAreas()"><span
+											class="fa fa-plus-square fa-fw"></span>&nbsp;其他销售区域</a>
+								</div>
+								<div class="span8 text-muted">
+									如果您的品牌销售区域不在上述范围,您可以手动添加其他销售区域</div>
+							</div>
+						</div>
+					</div>
+				</div>
+			</form>
+
+			<form class="form-horizontal" name="form2" novalidate>
+				<div class="span12">
+					<label class="span2 control-label"><span
+							class="text-required">*</span>主打产品:</label>
+					<div class="span9">
+						<textarea rows="3" class="width100" name="series"
+								  ng-model="BrandActiveData.series" placeholder="输入主要生产产品,例如:车载继电器" required></textarea>
+					</div>
+				</div>
+				<div class="span12">
+					<label class="span2 control-label"><span
+							class="text-required">*</span>应用领域:</label>
+					<div class="span9">
+						<div>
+							<label class="radio-inline" ng-repeat="app in applications">
+								<input type="checkbox" name="application" ng-model="app.checked"
+									   value="app" style="margin-top: 1px;"> <span ng-bind="app.name"></span>
+							</label>
+						</div>
+						<hr>
+						<div class="well well-sm">
+							<div class="span12" ng-repeat="e in extraApp">
+								<div class="span4">
+									<div class="input-group">
+										<input type="text" class="form-control input-sm" ng-model="e.name">
+										<span class="input-group-btn">
+											<button class="btn btn-default btn-sm" type="button" ng-click="removeExtraApp($index)">删除</button>
+										</span>
+									</div>
+								</div>
+							</div>
+							<div class="span12">
+								<div class="span2">
+									<a ng-click="addExtraApp()"><span
+											class="fa fa-plus-square fa-fw"></span>&nbsp;其他领域</a>
+								</div>
+								<div class="span9 text-muted">
+									如果您的品牌应用领域不在上述范围,您可以手动添加其他领域</div>
+							</div>
+						</div>
+					</div>
+				</div>
+			</form>
+			<!-- <div class="page-header">
+				<h1>{{BrandActiveData.name}} </h1>
+				<h1><small class="padding-left-5" ng-bind-html="BrandActiveData.brief"></small></h1>
+			</div>
+			<ul class="dashboard-list">
+				<li style="border-bottom-width: 0px;">
+					<img class="dashboard-avatar-brand" alt="" ng-src="{{BrandActiveData.logoUrl}}">
+					<strong>品牌 : </strong> {{BrandActiveData.nameCn}}
+					<br>
+					<strong>制造商 : </strong> {{BrandActiveData.vendor}}<br>
+					<strong>地区 : </strong> {{BrandActiveData.area}}
+				</li>
+			</ul>
+			<div class="row-fluid-fluid">
+				<div class="span12">
+					<h3>主要产品</h3>
+					<p class="padding-left-5">
+						{{BrandActiveData.series}}
+					</p>
+				</div>
+			</div>
+			<div class="row-fluid-fluid">
+				<div class="span12">
+					<h3>应用领域</h3>
+					<p class="padding-left-5">
+						{{BrandActiveData.application}}
+					</p>
+				</div>
+			</div>
+			<div class="row-fluid-fluid">
+				<div class="span12">
+					<h3>经营成果</h3>
+					<p class="padding-left-5" ng-bind-html="BrandActiveData.achievement"></p>
+				</div>
+			</div> -->
+
+			<!--<div class="row-fluid-fluid border_top">-->
+			<!--<div class="span6"></div>-->
+			<!--<div class="span6">-->
+			<!--<p class="pull-right">-->
+			<!--<button ng-click="brandUpdate()" class="btn btn-large btn-danger"-->
+			<!--ng-disabled="form1.$invalid || form2.$invalid || nameExist">-->
+			<!--<i class="icon-ok icon-white"></i> 更新品牌-->
+			<!--</button>-->
+			<!--<a ng-href="#/brandmaintenance">-->
+			<!--<button type="button" class="btn btn-large btn-primary">-->
+			<!--<i class="icon-remove icon-white"></i> 返回列表-->
+			<!--</button>-->
+			<!--</a>-->
+			<!--</p>-->
+			<!--</div>-->
+			<!--</div>-->
+
+		</div>
+	</div>
+	<!-- 品牌维护详情End -->
+	<!--供应商维护 Start-->
+	<div class="box span9 page-header" style="padding-bottom: 27px;">
+		<div class="box-header well" data-original-title></div>
+		<div class="box-content box-contents">
+			<div class="box-top">
+				<h2 class="maintenance"><i class="icon-user"></i> 供应商维护</h2>
+				<div class="load">
+					<div>批量导入:<a href="">下载模板</a></div>
+					<div>
+						<input type="text" class="form-control"/>
+						<input type="file"/>
+						<button>确认上传</button>
+					</div>
+				</div>
+			</div>
+			<div class="box-bottom">
+				<table>
+					<thead>
+					<tr>
+						<th width="10%"></th>
+						<th width="15%">代理商</th>
+						<th width="5%">营业执照号</th>
+						<th width="20%">地址</th>
+						<th width="10%">电话</th>
+						<th width="10%">传真</th>
+						<th width="12%">网址</th>
+						<th width="5%">关联店铺</th>
+						<th width="10%">邮箱</th>
+						<th width="5%"></th>
+					</tr>
+					</thead>
+					<!--非修改状态-->
+					<tbody class="edit">
+					<tr>
+						<td>
+							<div class="agency">
+								<div class="uploadImg">
+									<img src="static/img/all/admin.png" alt=""/>
+								</div>
+							</div>
+						</td>
+						<td>
+							<span>深圳市华商龙商务互联科技有限公司</span>
+						</td>
+						<td>
+							<span>000000567</span>
+						</td>
+						<td>
+							<span>深圳市南山区科技园科技南五路英唐大厦一楼</span>
+						</td>
+						<td>
+							<span>0755-12345678</span>
+						</td>
+						<td>
+							<span>0755-12345678</span>
+						</td>
+						<td>
+							<span>http://www.wordshine.net.com</span>
+						</td>
+						<td>
+							<select name="" id="">
+								<option value="">选择关联店铺</option>
+							</select>
+						</td>
+						<td>
+							<span>12345678@qq.com</span>
+						</td>
+						<td><span class="operate">修改</span></td>
+					</tr>
+					</tbody>
+					<!--修改状态-->
+					<tbody>
+					<tr>
+						<td>
+							<div class="agency">
+								<div class="uploadImg">
+									<img src="static/img/all/admin.png" alt=""/>
+									<div class="hover-show">
+										<span class="delete" title="删除"><i class="fa fa-trash"></i></span>
+										<span class="update"><i class="fa fa-refresh" style="margin-right: 5px;"></i>更新</span>
+									</div>
+								</div>
+							</div>
+						</td>
+						<td>
+							<input type="text" class="comName"/>
+						</td>
+						<td>
+							<input type="text" class="license"/>
+						</td>
+						<td>
+							<input type="text" class="address"/>
+						</td>
+						<td>
+							<input type="text" class="phone"/>
+						</td>
+						<td>
+							<input type="text" class="fax"/>
+						</td>
+						<td>
+							<input type="text" class="network"/>
+						</td>
+						<td style="position: relative ">
+							<select name="" id="">
+								<option value="">选择关联店铺</option>
+							</select>
+							<div class="choose">
+								<div class="top">
+									<span>类型选择</span>
+									<label for="">
+										<input type="checkbox" class="fl">
+										<span class="fl">代理商</span>
+									</label>
+									<label for="">
+										<input type="checkbox" class="fl">
+										<span class="fl">经销商</span>
+									</label>
+									<div class="form-search">
+										<input type="text">
+										<button><i class="fa fa-search"></i></button>
+									</div>
+								</div>
+								<table>
+									<thead>
+									<tr>
+										<th width="30"></th>
+										<th width="70">店铺编号</th>
+										<th width="170">公司名称</th>
+										<th width="60">类型</th>
+									</tr>
+									</thead>
+									<tbody>
+									<tr>
+										<td><input type="checkbox"></td>
+										<td>000000501</td>
+										<td>深圳市萨科微科技有限公司</td>
+										<td>代理商</td>
+									</tr>
+									</tbody>
+								</table>
+								<div ng-table-pagination="params" template-url="templates.pagination" class="ng-scope ng-isolate-scope">
+									<div ng-include="templateUrl" class="ng-scope">
+										<div class="ng-table-pager ng-scope" ng-if="params.data.length">
+											<ul ng-if="pages.length" class="pagination ng-table-pagination ng-scope" style="float:right;margin-left:20px;">
+												<li><input type="number" class="page-number ng-pristine ng-untouched ng-valid" ng-model="page.redirectPage"></li>
+												<li><a href="" class="page-a" ng-click="params.page(page.redirectPage)">GO</a></li>
+											</ul>
+											<ul ng-if="pages.length" class="pagination ng-table-pagination ng-scope" style="float: right;">
+												<li ng-class="{'disabled': !page.active &amp;&amp; !page.current, 'active': page.current}" ng-repeat="page in pages" ng-switch="page.type" class="ng-scope disabled">
+													<a ng-switch-when="prev" ng-click="params.page(page.number)" href="" class="ng-scope">«</a>
+												</li>
+												<li ng-class="{'disabled': !page.active &amp;&amp; !page.current, 'active': page.current}" ng-repeat="page in pages" ng-switch="page.type" class="ng-scope active">
+													<a ng-switch-when="first" ng-click="params.page(page.number)" href="" class="ng-scope"><span ng-bind="page.number" class="ng-binding">1</span></a>
+												</li>
+												<li ng-class="{'disabled': !page.active &amp;&amp; !page.current, 'active': page.current}" ng-repeat="page in pages" ng-switch="page.type" class="ng-scope">
+													<a ng-switch-when="page" ng-click="params.page(page.number)" href="" class="ng-scope"><span ng-bind="page.number" class="ng-binding">2</span></a>
+												</li>
+												<li ng-class="{'disabled': !page.active &amp;&amp; !page.current, 'active': page.current}" ng-repeat="page in pages" ng-switch="page.type" class="ng-scope">
+													<a ng-switch-when="page" ng-click="params.page(page.number)" href="" class="ng-scope"><span ng-bind="page.number" class="ng-binding">3</span></a>
+												</li>
+												<li ng-class="{'disabled': !page.active &amp;&amp; !page.current, 'active': page.current}" ng-repeat="page in pages" ng-switch="page.type" class="ng-scope">
+													<a ng-switch-when="page" ng-click="params.page(page.number)" href="" class="ng-scope"><span ng-bind="page.number" class="ng-binding">4</span></a>
+												</li>
+												<li ng-class="{'disabled': !page.active &amp;&amp; !page.current, 'active': page.current}" ng-repeat="page in pages" ng-switch="page.type" class="ng-scope">
+													<a ng-switch-when="page" ng-click="params.page(page.number)" href="" class="ng-scope"><span ng-bind="page.number" class="ng-binding">5</span></a>
+												</li>
+												<li ng-class="{'disabled': !page.active &amp;&amp; !page.current, 'active': page.current}" ng-repeat="page in pages" ng-switch="page.type" class="ng-scope">
+													<a ng-switch-when="next" ng-click="params.page(page.number)" href="" class="ng-scope">»</a>
+												</li>
+											</ul>
+										</div>
+									</div>
+								</div>
+							</div>
+						</td>
+						<td>
+							<input type="text" class="mail"/>
+						</td>
+						<td><span class="operate">确认</span></td>
+					</tr>
+					</tbody>
+					<tbody class="add-supply">
+					<tr>
+						<td colspan="8">
+							<span><i class="fa fa-plus-circle"></i><em>新增供应商</em></span>
+							<img src="static/img/all/border_line.png" alt=""/>
+						</td>
+					</tr>
+					</tbody>
+				</table>
+			</div>
+		</div>
+	</div>
+	<div class="row-fluid-fluid border_top">
+		<div class="span6"></div>
+		<div class="span6">
+			<p class="pull-right">
+				<button ng-click="brandUpdate()" class="btn btn-large btn-danger"
+						ng-disabled="form1.$invalid || form2.$invalid || nameExist">
+					<i class="icon-ok icon-white"></i> 更新品牌
+				</button>
+				<a ng-href="#/brandmaintenance">
+					<button type="button" class="btn btn-large btn-primary">
+						<i class="icon-remove icon-white"></i> 返回列表
+					</button>
+				</a>
+			</p>
+		</div>
+	</div>
+	<!--供应商维护 End-->
+</div><!--/row-fluid-->

+ 43 - 5
src/main/webapp/resources/view/admin/brand_maintenance.html

@@ -118,15 +118,47 @@ div.row.total button:HOVER {
 /* 品牌搜索框 */
 .brand-search {
 	width: 30%;
+	float: left;
+}
+/*新增品牌*/
+.clearfix{
+	overflow: hidden;
+}
+.addBrand {
+	float: right;
+}
+.addBrand a{
+	display: inline-block;
+	width: 96px;
+	height: 38px;
+	line-height: 38px;
+	text-align: center;
+	font-size: 14px;
+	color: #fff;
+	background: #4fb2eb;
+	border-radius: 3px;
+}
+.addBrand a:visited, .addBrand a:hover, .addBrand a.active{
+	text-decoration: none;
+}
+.addBrand a i{
+	margin-right: 8px;
+	font-size: 14px;
+	color: #fff;
+}
+	table tbody tr td button{
+		float: left;
+	}
+table tbody tr td button:first-child {
+	margin-right: 5px;
 }
-
 </style>
 <div class="row">
 	<div class="col-xs-6">
 		<h2>品牌列表</h2>
 	</div>
 </div>
-<div>
+<div class="clearfix">
 	<div class="col-xs-1">
 		<p style="margin-top: 8px; font-weight: bold;">
 			共<span class="totalNum">{{brandTableParams.total()}}</span>条
@@ -139,7 +171,9 @@ div.row.total button:HOVER {
 			<button ng-click="onSearch()" class="btn btn-primary" type="button">搜索</button>
 		</span>
 	</div>
-	
+	<!--<div class="addBrand">-->
+		<!--<a href=""><i class="fa fa-plus-circle"></i>新增品牌</a>-->
+	<!--</div>-->
 </div>
 </br>
 <table ng-table="brandTableParams"
@@ -150,7 +184,7 @@ div.row.total button:HOVER {
 			<th class="text-center" style="width: 180px">品牌名</th>
 			<th class="text-center" style="width: 180px">英文品牌名</th>
 			<th class="text-center">制造商</th>
-			<th class="text-center" style="width: 120px">操作</th>
+			<th class="text-center" style="width: 250px">操作</th>
 		</tr>
 	</thead>
 	<tbody class="text-center">
@@ -159,11 +193,15 @@ div.row.total button:HOVER {
 			<td class="text-center">{{brand.nameCn}}</td>
 			<td class="text-center">{{brand.nameEn}}</td>
 			<td class="text-center">{{brand.vendor}}</td>
-			<td class="text-center">
+			<td class="text-left">
 				<a target="_blank" ng-href="#/brandmaintenance/{{brand.uuid}}">
 					<button type="button" class="btn btn-default">查看详情及更新
 					</button>
 				</a>
+				<a target="_blank" ng-href="#/suppliermaintenance/{{brand.uuid}}">
+					<button type="button" class="btn btn-default">供应商维护
+					</button>
+				</a>
 			</td>
 		</tr>
 		<tr ng-if="$data.length == 0">

+ 8 - 3
src/main/webapp/resources/view/admin/brand_maintenance_detail.html

@@ -14,9 +14,11 @@
 }
 
 .border_top {
-	border-top: 1px solid #f5f5f5;
+	/*border-top: 1px solid #f5f5f5;*/
+}
+.border_top .pull-right {
+	margin-top: 45px;
 }
-
 .border_bottom {
 	border-bottom: 1px solid #f5f5f5;
 }
@@ -41,6 +43,9 @@
 .width100 {
 	width: 100%;
 }
+.box-header h2{
+	float: none;
+}
 </style>
 <div class="row-fluid-fluid sortable">
 	<!-- 品牌维护详情Start -->	
@@ -203,6 +208,7 @@
 					<p class="padding-left-5" ng-bind-html="BrandActiveData.achievement"></p>
 				</div>
 			</div> -->
+
 			<div class="row-fluid-fluid border_top">
 				<div class="span6"></div>
 				<div class="span6">
@@ -223,5 +229,4 @@
 		</div>
 	</div>
 	<!-- 品牌维护详情End -->
-
 </div><!--/row-fluid-->

+ 899 - 0
src/main/webapp/resources/view/admin/supplier_maintenance.html

@@ -0,0 +1,899 @@
+<style type="text/css">
+	.padding-left-5 {
+		padding: 5px 30px;
+	}
+
+	.dashboard-avatar-brand {
+		height: 50px;
+		width: 50px;
+		padding: 1px;
+		float: left;
+		margin-left: 15px;
+		margin-right: 15px;
+		border: 1px solid #EBEBEB;
+	}
+
+	.border_top {
+		/*border-top: 1px solid #f5f5f5;*/
+	}
+	.border_top .pull-right {
+		margin-top: 45px;
+	}
+	.border_bottom {
+		border-bottom: 1px solid #f5f5f5;
+	}
+
+	.margintop {
+		margin-top: 2px;
+	}
+
+	.box-content .form-horizontal .row {
+		margin-left: 0px;
+	}
+
+	.radio-inline {
+		position: relative;
+		display: inline-block;
+		padding-left: 20px;
+		font-weight: 400;
+		vertical-align: middle;
+		cursor: pointer;
+	}
+
+	.width100 {
+		width: 100%;
+	}
+	.box-header h2{
+		float: none;
+	}
+	/*供应商维护*/
+	.box-contents{
+		padding: 0 ;
+	}
+	.box-top{
+		padding: 0 10px;
+		height: 50px;
+		line-height: 50px;
+		overflow: hidden;
+		border-bottom: 1px solid #dcdcdc;
+	}
+	.box-top .maintenance{
+		float: left;
+		margin: 0;
+		height: 50px;
+		line-height: 50px;
+		font-size: 16px;
+		color: #317eac;
+	}
+	.box-bottom table{
+		width: 100%;
+		table-layout: fixed ;
+	}
+	.box-bottom table thead{
+		width: 100%;
+		height: 40px;
+		line-height: 40px;
+		background: #f1f1f1;
+		border-bottom: 1px solid #dcdcdc;
+	}
+	.box-bottom table thead th{
+		font-size: 14px;
+		color: #333;
+		text-align: center;
+		vertical-align: middle ;
+
+	}
+	.box-bottom table thead th:nth-child(2){
+		padding-left: 60px;
+		text-align: left;
+	}
+	.box-bottom table tbody tr{
+		text-align: center ;
+		border-bottom: 1px solid #dcdcdc;
+	}
+	.box-bottom table td .agency{
+		height: 73px;
+		line-height: 73px;
+	}
+	/*遮罩层*/
+	.box-bottom table td .agency .uploadImg .hover-show{
+		position: absolute;
+		width: 100%;
+		height: 100%;
+		top: 0;
+		left: 0;
+		background: rgba(0,0,0,.5);
+		z-index: 100;
+		display: none;
+	}
+	.box-bottom table td .agency .uploadImg .hover-shows{
+		display: block;
+	}
+	.box-bottom table td .agency .uploadImg:hover .hover-show{
+		display: block;
+	}
+	.box-bottom table td .agency .uploadImg .hover-show .delete{
+		float: right;
+		position: absolute;
+		top: 0;
+		right: 0;
+		padding: 0;
+		width: 20px;
+		height: 20px;
+		text-align: center;
+		overflow: visible;
+		cursor: pointer;
+		z-index: 10000000;
+	}
+	.box-bottom table td .agency .uploadImg .hover-show .update{
+		position: absolute;
+		top: 0;
+		left: 0;
+		width: 98px;
+		height: 48px;
+		color: #fff;
+		font-size: 14px;
+		cursor: pointer;
+	}
+	.box-bottom table td .agency .uploadImg .hover-show .update i{
+		color: #fff;
+		font-size: 14px;
+	}
+	.box-bottom table td .agency .uploadImg .hover-show .delete i{
+		color: #fff;
+		font-size: 18px;
+	}
+	.box-bottom table td .agency .uploadImg .hover-show a i{
+		position: absolute;
+		left: 5px;
+		top: 22px;
+		margin-right: 5px;
+		font-size: 16px;
+	}
+	.box-bottom table td .agency .uploadImg{
+		float: left;
+		position: relative ;
+		margin: 12px 0 0 20px;
+		width: 100px;
+		height: 50px;
+		line-height: 50px;
+		overflow: hidden ;
+		border: 1px solid #dcdcdc;
+	}
+	.box-bottom table td .agency .uploadImg img{
+		width: 100%;
+		height: 100%;
+	}
+	.box-bottom table td .agency .uploadImg img.uploadNew {
+		position: absolute;
+		top: 0;
+		left: 0;
+		z-index: 0;
+	}
+	.box-bottom table td .agency .uploadImg	div{
+		position: relative;
+		width: 98px;
+		height: 22px;
+	}
+	.box-bottom table td .agency .uploadImg	div.preview {
+		width: 98px;
+		height: 50px;
+		z-index: 10000 !important;
+	}
+	.box-bottom table td .agency .uploadImg	div input{
+		position: absolute;
+		top: 15px;
+		left: 18px;
+		width: 53px;
+		height: 100%;
+		opacity: 0;
+	}
+	.box-bottom table tbody.edit tr td .agency .uploadImg span{
+		position: absolute;
+		top: 10px;
+		right: 34%;
+		width: auto;
+		font-size: 12px;
+		color: #fff;
+		cursor: pointer;
+		z-index: 10;
+	}
+	.box-bottom table td .agency .uploadImg .hover-show .update .preview {
+		z-index: 10000;
+	}
+	.box-bottom table td input{
+		/*padding: 0 15px;*/
+		width: 80%;
+		height: 29px;
+		line-height: 29px;
+		text-align: center;
+		font-size: 12px;
+		color: #666;
+		background: #f4f4f4;
+		border: 1px solid #dcdcdc;
+	}
+	.box-bottom table td input.mail {
+		margin-left: 53%;
+		width: 50%;
+	}
+
+	.box-bottom table td select{
+		padding: 0;
+		width: 98px;
+		height: 29px;
+		background: #f4f4f4;
+		border: 1px solid #dcdcdc;
+	}
+	.box-bottom table td button{
+		padding: 0;
+		width: 98px;
+		height: 29px;
+		background: #f4f4f4;
+		border: 1px solid #dcdcdc;
+		outline: none;
+		overflow: hidden;
+		text-overflow: ellipsis ;
+		white-space: nowrap ;
+	}
+	.box-bottom table td span{
+		font-size: 14px;
+		color: #2fa4e7;
+	}
+	.box-bottom table tbody tr td span.operate {
+		display: inline-block;
+		height: 25px;
+		line-height: 25px;
+		width: 42px !important;
+		font-size: 14px;
+		color: #2fa4e7 !important;
+		border-radius: 3px;
+		cursor: pointer;
+	}
+	.box-bottom table tbody tr td span.operate:hover {
+		background: #2fa4e7;
+		color: #fff !important ;
+	}
+	.box-bottom table tbody.add-supply{
+		height: 55px;
+	}
+	.box-bottom table tbody.add-supply tr{
+		height: 32px;
+		border-bottom: 1px dashed #d2d2d2;
+	}
+	.box-bottom table tbody.add-supply tr td{
+		position: relative;
+	}
+	.box-bottom table tbody.add-supply tr td span{
+		display: inline-block;
+		position: absolute;
+		bottom: -5px;
+		width: 206px;
+		font-size: 14px;
+		color: #2fa4e7;
+		background: #fff;
+		cursor: pointer;
+	}
+	.box-bottom table tbody.add-supply tr td span em{
+		font-size: 14px;
+		font-style: normal;
+		color: #2fa4e7;
+		background: none;
+	}
+	.box-bottom table tbody.add-supply tr td span i{
+		margin-right: 5px;
+		font-size: 18px;
+		color: #2fa4e7;
+	}
+	.box-bottom table tbody.add-supply tr td img{
+		position: absolute;
+		top: -4px;
+		cursor: pointer;
+		z-index: -1;
+	}
+
+	.upImg img{
+		width: 100%;
+		height: 100%;
+	}
+	.box-bottom table tbody.edit tr td span{
+		display: inline-block;
+		max-width: 90px;
+		height: 30px;
+		line-height: 30px;
+		font-size: 12px;
+		color: #333333;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+		overflow: hidden;
+	}
+	.box-bottom table tbody.edit tr td span.emails {
+		margin-left: 60px;
+		max-width: 50px;
+	}
+	.box-bottom table tbody.edit tr td .agency span{
+		display: inline-block;
+		width: 200px;
+		font-size: 12px;
+		color: #333333;
+		text-overflow: ellipsis;
+		white-space: nowrap ;
+		overflow: hidden ;
+	}
+	/*选择关联企业*/
+
+	.box-bottom table td .choose{
+		position: absolute;
+		top: 52px;
+		left: -55px;
+		width: 375px;
+		/*height: 220px;*/
+		background: #fff;
+		border: 1px solid #2fa4e7;
+		z-index: 1000;
+	}
+	.box-bottom table td .choose .top{
+		padding-left: 10px;
+		width: 100%;
+		height: 34px;
+		line-height: 34px;
+		overflow: hidden;
+	}
+	.box-bottom table td .choose .top span{
+		float: left;
+		font-size: 12px;
+		color: #2fa4e7;
+	}
+	.box-bottom table td .choose .top label{
+		float: left;
+		margin-left: 10px;
+	}
+	.box-bottom table td .choose .top label input{
+		float: left;
+		margin-top: 13px;
+		width: 10px;
+		height: 10px;
+	}
+	.box-bottom table td .choose .top label span{
+		float: left;
+		margin-left: 5px;
+		font-size: 12px;
+		color: #666;
+		font-weight: normal;
+	}
+	.box-bottom table td .choose .top .form-search{
+		float: left;
+		position: relative;
+		width: 176px;
+		height: 20px;
+	}
+	.box-bottom table td .choose .top .form-search input{
+		width: 156px;
+		height: 20px;
+		border-radius: 0;
+		border : 1px solid #2fa4e7;
+	}
+	.box-bottom table td .choose .top .form-search button{
+		position: absolute;
+		top: 8px;
+		right: 0;
+		width: 21px;
+		height: 20px;
+		line-height: 20px;
+		text-align: center;
+		background: #2fa4e7;
+		border: none;
+		outline: none;
+	}
+	.box-bottom table td .choose .top .form-search i{
+		font-size:12px;
+		color: #fff;
+	}
+	.box-bottom table td .choose table{
+		table-layout: fixed ;
+		width: 100%;
+	}
+	.box-bottom table td .choose table thead{
+		width: 100%;
+		height: 25px;
+		background: #e9e9e9;
+	}
+	.box-bottom table td .choose table thead tr{
+		width: 100%;
+		height: 25px;
+		line-height: 25px;
+		text-align: center;
+		font-size: 14px;
+		font-weight: normal;
+		color: #333333;
+	}
+	.box-bottom table td .choose table thead tr th:nth-child(2){
+		padding-left: 0;
+	}
+	.box-bottom table td .choose table tbody tr{
+		height: 25px;
+		vertical-align: middle ;
+	}
+	.box-bottom table td .choose table tr td{
+		font-size: 12px;
+		color: #666666;
+		border-bottom: 1px solid #e9e9e9;
+	}
+	.box-bottom table td .choose table td input{
+		width: 10px;
+		height: 10px;
+	}
+	.box-top {
+		margin-top: -20px;
+		overflow: hidden;
+	}
+	.box-top .load{
+		float: left;
+	}
+	.box-top .load span{
+		font-size: 16px;
+		color: #317eac;
+	}
+	.box-top div.upload{
+		float: right;
+	}
+	.box-top div.upload div:first-child {
+		float: left;
+		font-size: 14px;
+		color: #666;
+	}
+	.box-top div.upload div:first-child a{
+		font-size: 14px;
+		color: #4fb2eb;
+	}
+	.box-top div.upload div:last-child {
+		float: left;
+		position: relative;
+		margin: 8px 0 0 20px;
+		width: 290px;
+	}
+	.box-top .upload div:last-child input[type='text']{
+		padding-left: 7px;
+		width: 190px;
+		height: 34px;
+		line-height: 34px;
+		border: 1px solid #c0c6ca;
+	}
+	.box-top .upload div:last-child input[type='file']{
+		position: absolute;
+		top: -3px;
+		left: 7px;
+		width: 190px;
+		height: 20px;
+	}
+	.box-top .upload div:last-child button{
+		position: absolute;
+		right: 0;
+		top: 5px;
+		width: 79px;
+		height: 25px;
+		line-height: 25px;
+		font-size: 14px;
+		color: #fff;
+		background: #3caae8;
+		border-radius: 3px;
+		border: none;
+		outline: none;
+	}
+	.box-bottom table td .agency .uploadImg img {
+		width: 100%;
+		height: 100%;
+		vertical-align: baseline;
+	}
+	/*查看大图*/
+	.image-box .x-floating-wrap {
+		position: fixed;
+		z-index: 99998;
+		background: #000;
+		top: 0;
+		left: 0;
+		width: 100%;
+		height: 100%;
+		opacity: 0.5;
+	}
+	.image-box{
+		display:table; overflow:hidden; margin-left:50px; _position:relative;  width: 1200px;height: 700px;
+		position: fixed;
+		top: 50%;
+		margin-top: -300px;
+		left: 50%;
+		margin-left: -600px;
+		z-index: 2000;
+	}
+	.image-box .x-floating {
+		vertical-align:middle !important;
+		display:table-cell;
+		text-align:center;
+		_position:absolute;
+		_top:50%; _left:50%;
+		top: inherit !important;
+		left: inherit !important;
+	}
+	.image-box .x-floating img {
+		margin: auto auto;
+		max-width: 970px !important;
+		max-height: 600px !important;
+		-webkit-user-select: none;
+		-moz-user-select: none;
+		-ms-user-select: none;
+		user-select: none;
+	}
+	.image-box .x-floating-wrap{
+		z-index: 1000000 !important;
+	}
+	/*分页样式*/
+	body .ng-table-pager .ng-table-pagination li a span{
+		height: 10px !important;
+		line-height: 10px !important;
+	}
+	body div.ng-table-pager input.page-number {
+		width: 30px !important;
+	}
+	.pagination>li>a, .pagination>li>span {
+		padding: 6px 7px;
+	}
+	.ng-table-pager{
+		margin-top: 15px;
+	}
+	body .ng-table-pager .ng-table-pagination li.active a span {
+		color: #fff;
+	}
+</style>
+	<!-- 品牌维护详情Start -->
+	<div class="box">
+		<div class="box-header well" data-original-title>
+			<i class="icon-user"></i> 品牌详情
+		</div>
+		<div class="box-content">
+			<div class="fullscreen" style="padding: 10px;">
+				<div class="form-group">
+					<span>中文品牌:</span>
+					<span ng-bind="brand.nameCn"></span>
+				</div>
+				<div class="form-group">
+					<span>英文品牌:</span>
+					<span ng-bind="brand.nameEn"></span>
+				</div>
+				<div class="form-group">
+					<span>官网地址:</span>
+					<span ng-bind="brand.url"></span>
+				</div>
+				<div class="form-group">
+					<span>Logo:</span>
+					<span class="thumbnail" style="width: 200px; height: 150px; vertical-align: middle; display: table-cell;">
+						<img ng-src="{{brand.logoUrl}}" alt="" style="max-width: 200px; max-height: 150px;">
+					</span>
+				</div>
+				<div class="form-group">
+					<span>简介:</span>
+					<span ng-bind="brand.brief"></span>
+				</div>
+				<div class="form-group">
+					<span>销售区域:</span>
+					<span ng-bind="brand.area"></span>
+				</div>
+				<div class="form-group">
+					<span>主打产品:</span>
+					<span ng-bind="brand.series"></span>
+				</div>
+				<div class="form-group">
+					<span>应用领域:</span>
+					<span ng-bind="brand.application"></span>
+				</div>
+			</div>
+		</div>
+	</div>
+	<!-- 品牌维护详情End -->
+	<!--供应商维护 Start-->
+	<div class="box">
+		<div class="box-header well" data-original-title>
+		</div>
+		<div class="box-content">
+			<!-- ng-tableStart -->
+			<div class="fullscreen" style="padding: 50px;">
+				<div class="box-top">
+					<div class="load">
+						<span>供应商维护</span>
+					</div>
+					<div class="upload">
+						<div>批量导入:<a href="javascript:void(0)" ng-click="download()">下载模板</a></div>
+						<div>
+							<input required="" ng-file-select="" accept=".xls,.xlsx" ng-model="myFiles" type="file" ng-multiple="false" class="form-control input-sm ng-pristine ng-invalid ng-invalid-required ng-touched" id="xlsFile" name="xlsFile" placeholder="请上传.xls或.xlsx文件" style="height: 40px; padding: 9px 10px;">
+							<button ng-click="upload()">确认上传</button>
+						</div>
+					</div>
+				</div>
+				<div class="box-bottom">
+					<table ng-table="supplierTableParams">
+						<thead>
+						<tr>
+							<th width="10%">供应商logo</th>
+							<th width="15%">代理商</th>
+							<th width="5%">营业执照号</th>
+							<th width="20%">地址</th>
+							<th width="10%">电话</th>
+							<th width="10%">传真</th>
+							<th width="12%">网址</th>
+							<th width="5%">关联企业</th>
+							<th width="10%">邮箱</th>
+							<th width="5%"></th>
+						</tr>
+						</thead>
+						<tbody class="edit" ng-repeat="supplier in $data">
+                        	<!--非修改状态-->
+							<tr ng-if="!supplier.edit">
+								<td>
+									<div class="agency">
+										<div class="uploadImg">
+											<img ng-src="{{supplier.img || 'static/img/store/common/default.png'}}"/>
+										</div>
+									</div>
+								</td>
+								<td>
+									<span ng-bind="supplier.vendorName" title="{{supplier.vendorName}}"></span>
+								</td>
+								<td>
+									<span ng-bind="supplier.license" title="{{supplier.license}}">000000567</span>
+								</td>
+								<td>
+									<span ng-bind="supplier.detailAddress" title="{{supplier.detailAddress}}">深圳市南山区科技园科技南五路英唐大厦一楼</span>
+								</td>
+								<td>
+									<span ng-bind="supplier.tel" title="{{supplier.tel}}">0755-12345678</span>
+								</td>
+								<td>
+									<span ng-bind="supplier.fax" title="{{supplier.fax}}">0755-12345678</span>
+								</td>
+								<td>
+									<span ng-bind="supplier.website" title="{{supplier.website}}">http://www.wordshine.net.com</span>
+								</td>
+								<td>
+									<button ng-click="storeAssociated(supplier)" ng-bind="supplier.storeIn.storeName">选择关联企业 <i class="fa fa-angle-down"></i></button>
+								</td>
+								<td>
+									<span ng-bind="supplier.email" class="emails" title="{{supplier.email}}">12345678@qq.com</span>
+								</td>
+								<td>
+									<span class="operate" ng-if="supplier.isSubmited==0" ng-click="changeSupplier(supplier)">修改</span>
+									<span ng-if="supplier.isSubmited==1">申请中</span>
+									<span ng-if="supplier.isSubmited==2">待审核</span>
+								</td>
+							</tr>
+							<!--修改状态-->
+							<tr ng-if="supplier.edit">
+								<td>
+									<div class="agency">
+										<div class="uploadImg">
+											<img ng-src="{{supplier.editImg || 'static/img/store/common/default.png'}}" alt=""/>
+											<div class="hover-show hover-shows" ng-if="supplier.edit">
+												<span class="delete" title="删除" ng-click="deleteImage(supplier)"><i class="fa fa-trash"></i></span>
+												<span class="update">
+													<input type="file" image-upload on-success="onUploadImage($data, supplier)" title="" non-preview="true"/>
+													<span><i class="fa fa-refresh"></i> 更新</span>
+												</span>
+											</div>
+										</div>
+									</div>
+								</td>
+								<td>
+									<input type="text" class="comName" ng-model="supplier.editVendorName" required/>
+								</td>
+								<td>
+									<input type="text" class="license" ng-model="supplier.editLicense"/>
+								</td>
+								<td>
+									<input type="text" class="address" ng-model="supplier.editDetailAddress" required/>
+								</td>
+								<td>
+									<input type="text" class="phone" ng-model="supplier.editTel"/>
+								</td>
+								<td>
+									<input type="text" class="fax" ng-model="supplier.editFax"/>
+								</td>
+								<td>
+									<input type="text" class="network" ng-model="supplier.editWebsite"/>
+								</td>
+								<td style="position: relative ">
+									<button ng-click="storeAssociated(supplier)" ng-bind="supplier.storeIn.storeName ? supplier.storeIn.storeName : '选择关联企业'"><i class="fa fa-angle-down"></i></button>
+									<div class="choose" ng-if="supplier.chooseStoreAssociated">
+										<div class="top">
+											<span>类型选择</span>
+											<label>
+												<input type="checkbox" class="fl" ng-click="chooseStoreType('AGENCY')">
+												<span class="fl">代理商</span>
+											</label>
+											<label>
+												<input type="checkbox" class="fl" ng-click="chooseStoreType('DISTRIBUTION')">
+												<span class="fl">经销商</span>
+											</label>
+											<div class="form-search">
+												<input type="text" ng-model="brandKeyword">
+												<button><i class="fa fa-search" ng-click="refreshTableData(brandKeyword)"></i></button>
+											</div>
+										</div>
+										<table ng-table="storeTableParams">
+											<thead>
+											<tr>
+												<th width="30"></th>
+												<th width="70">店铺编号</th>
+												<th width="170">公司名称</th>
+												<th width="60">类型</th>
+											</tr>
+											</thead>
+											<tbody>
+												<tr ng-repeat="store in $data" >
+													<td><input type="checkbox" ng-click="chooseStore(supplier, store)"></td>
+													<td ng-bind="store.id | storeId">000000501</td>
+													<td ng-bind="store.enterprise &amp;&amp; store.enterprise.enName &amp;&amp; store.enterprise.enName !== '' ? store.enterprise.enName : '暂无公司名称'" >深圳市萨科微科技有限公司</td>
+													<td ng-bind="store.type | storeType" >代理商</td>
+												</tr>
+											</tbody>
+										</table>
+									</div>
+								</td>
+								<td>
+									<input type="text" class="mail" ng-model="supplier.editEmail"/>
+								</td>
+								<td>
+									<span class="operate" ng-click="updateSupplier(supplier)">确认</span>
+									<span class="operate" ng-click="deleteSupplier(supplier.id, supplier)">删除</span>
+									<span class="operate" ng-click="cancelSupplier(supplier)">取消</span>
+								</td>
+							</tr>
+						</tbody>
+						<!--新增供应商-->
+						<tbody ng-if="addedSupplier">
+						<tr>
+							<td>
+								<div class="agency">
+									<div class="uploadImg">
+										<!--<input type="file" ng-if="!supplier.editImg" image-upload on-success="onUploadImage(supplier)" non-preview="true" />-->
+										<img ng-src="{{supplier.editImg || 'static/img/store/common/default.png'}}" alt=""/>
+										<div class="hover-show hover-shows" ng-if="supplier.editImg || 'static/img/store/common/default.png'">
+											<span class="delete" title="删除" ng-click="deleteImage(supplier)"><i class="fa fa-trash"></i></span>
+											<!--<span class="update" ng-click="showImg(supplier.editImg, $index); refreshImg()"><i class="fa fa-refresh"></i> 查看</span>-->
+											<span class="update">
+												<input type="file" image-upload on-success="onUploadImage($data, supplier)" title="" non-preview="true"/>
+												<span><i class="fa fa-refresh"></i> 更新</span>
+											</span>
+										</div>
+									</div>
+								</div>
+							</td>
+							<td>
+								<input type="text" class="comName" ng-model="supplier.vendorName" required/>
+							</td>
+							<td>
+								<input type="text" class="license" ng-model="supplier.license"/>
+							</td>
+							<td>
+								<input type="text" class="address" ng-model="supplier.detailAddress" required/>
+							</td>
+							<td>
+								<input type="text" class="phone" ng-model="supplier.tel"/>
+							</td>
+							<td>
+								<input type="text" class="fax" ng-model="supplier.fax"/>
+							</td>
+							<td>
+								<input type="text" class="network" ng-model="supplier.website"/>
+							</td>
+							<td style="position: relative ">
+								<button ng-click="storeAssociated(supplier)" ng-bind="supplier.storeIn.storeName ? supplier.storeIn.storeName : '选择关联企业'"> <i class="fa fa-angle-down"></i></button>
+								<div class="choose" ng-if="supplier.chooseStoreAssociated">
+									<div class="top">
+										<span>类型选择</span>
+										<label>
+											<input type="checkbox" class="fl" ng-click="chooseStoreType('AGENCY')">
+											<span class="fl">代理商</span>
+										</label>
+										<label>
+											<input type="checkbox" class="fl" ng-click="chooseStoreType('DISTRIBUTION')">
+											<span class="fl">经销商</span>
+										</label>
+										<div class="form-search">
+											<input type="text" ng-model="brandKeyword">
+											<button><i class="fa fa-search"  ng-click="refreshTableData(brandKeyword)"></i></button>
+										</div>
+									</div>
+									<table ng-table="storeTableParams">
+										<thead>
+										<tr>
+											<th width="30"></th>
+											<th width="70">店铺编号</th>
+											<th width="170">公司名称</th>
+											<th width="60">类型</th>
+										</tr>
+										</thead>
+										<tbody>
+										<tr ng-repeat="store in $data" >
+											<td><input type="checkbox" ng-click="chooseStore(supplier, store)"></td>
+											<td ng-bind="store.id | storeId">000000501</td>
+											<td ng-bind="store.enterprise &amp;&amp; store.enterprise.enName &amp;&amp; store.enterprise.enName !== '' ? store.enterprise.enName : '暂无公司名称'" >深圳市萨科微科技有限公司</td>
+											<td ng-bind="store.type | storeType" >代理商</td>
+										</tr>
+										</tbody>
+									</table>
+									<div ng-table-pagination="params" template-url="templates.pagination" class="ng-scope ng-isolate-scope">
+										<div ng-include="templateUrl" class="ng-scope">
+											<div class="ng-table-pager ng-scope" ng-if="params.data.length">
+												<ul ng-if="pages.length" class="pagination ng-table-pagination ng-scope" style="float:right;margin-left:20px;">
+													<li><input type="number" class="page-number ng-pristine ng-untouched ng-valid" ng-model="page.redirectPage"></li>
+													<li><a href="" class="page-a" ng-click="params.page(page.redirectPage)">GO</a></li>
+												</ul>
+												<ul ng-if="pages.length" class="pagination ng-table-pagination ng-scope" style="float: right;">
+													<li ng-class="{'disabled': !page.active &amp;&amp; !page.current, 'active': page.current}" ng-repeat="page in pages" ng-switch="page.type" class="ng-scope disabled">
+														<a ng-switch-when="prev" ng-click="params.page(page.number)" href="" class="ng-scope">«</a>
+													</li>
+													<li ng-class="{'disabled': !page.active &amp;&amp; !page.current, 'active': page.current}" ng-repeat="page in pages" ng-switch="page.type" class="ng-scope active">
+														<a ng-switch-when="first" ng-click="params.page(page.number)" href="" class="ng-scope"><span ng-bind="page.number" class="ng-binding">1</span></a>
+													</li>
+													<li ng-class="{'disabled': !page.active &amp;&amp; !page.current, 'active': page.current}" ng-repeat="page in pages" ng-switch="page.type" class="ng-scope">
+														<a ng-switch-when="page" ng-click="params.page(page.number)" href="" class="ng-scope"><span ng-bind="page.number" class="ng-binding">2</span></a>
+													</li>
+													<li ng-class="{'disabled': !page.active &amp;&amp; !page.current, 'active': page.current}" ng-repeat="page in pages" ng-switch="page.type" class="ng-scope">
+														<a ng-switch-when="page" ng-click="params.page(page.number)" href="" class="ng-scope"><span ng-bind="page.number" class="ng-binding">3</span></a>
+													</li>
+													<li ng-class="{'disabled': !page.active &amp;&amp; !page.current, 'active': page.current}" ng-repeat="page in pages" ng-switch="page.type" class="ng-scope">
+														<a ng-switch-when="page" ng-click="params.page(page.number)" href="" class="ng-scope"><span ng-bind="page.number" class="ng-binding">4</span></a>
+													</li>
+													<li ng-class="{'disabled': !page.active &amp;&amp; !page.current, 'active': page.current}" ng-repeat="page in pages" ng-switch="page.type" class="ng-scope">
+														<a ng-switch-when="page" ng-click="params.page(page.number)" href="" class="ng-scope"><span ng-bind="page.number" class="ng-binding">5</span></a>
+													</li>
+													<li ng-class="{'disabled': !page.active &amp;&amp; !page.current, 'active': page.current}" ng-repeat="page in pages" ng-switch="page.type" class="ng-scope">
+														<a ng-switch-when="next" ng-click="params.page(page.number)" href="" class="ng-scope">»</a>
+													</li>
+												</ul>
+											</div>
+										</div>
+									</div>
+								</div>
+							</td>
+							<td>
+								<input type="text" class="mail" ng-model="supplier.email"/>
+							</td>
+							<td>
+								<span class="operate" ng-click="sure(supplier)">确认</span>
+								<span class="operate" ng-click="cancelAddSupplier(supplier)">取消</span>
+							</td>
+						</tr>
+						</tbody>
+						<tbody class="add-supply">
+						<tr>
+							<td colspan="10">
+								<span ng-click="addSupplier()"><i class="fa fa-plus-circle"></i><em>新增供应商</em></span>
+								<img src="static/img/all/border_line.png" alt=""/>
+							</td>
+						</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="row border_top">
+		<div class="col-xs-6"></div>
+		<div class="col-xs-6">
+			<p class="pull-right">
+				<a ng-href="#/brandmaintenance">
+					<button type="button" class="btn btn-large btn-primary">
+						<i class="icon-remove icon-white"></i> 返回列表
+					</button>
+				</a>
+			</p>
+		</div>
+	</div>
+	<!--供应商维护 End-->
+	<div id="image-box" style="display: none">
+		<div class="x-floating-wrap"></div>
+		<div class="x-floating">
+			<div id="item-content">
+				<div class="x-close-wrap"><a href="javascript:void(0);">&times;</a></div>
+				<div class="img"><img/></div>
+			</div>
+		</div>
+	</div>

+ 573 - 0
src/main/webapp/resources/view/admin/supplier_submit_detail.html

@@ -0,0 +1,573 @@
+<style type="text/css">
+	.padding-left-5 {
+		padding: 5px 30px;
+	}
+
+	.dashboard-avatar-brand {
+		height: 50px;
+		width: 50px;
+		padding: 1px;
+		float: left;
+		margin-left: 15px;
+		margin-right: 15px;
+		border: 1px solid #EBEBEB;
+	}
+
+	.border_top {
+		/*border-top: 1px solid #f5f5f5;*/
+	}
+	.border_top .pull-right {
+		margin-top: 45px;
+	}
+	.border_bottom {
+		border-bottom: 1px solid #f5f5f5;
+	}
+
+	.margintop {
+		margin-top: 2px;
+	}
+
+	.box-content .form-horizontal .row {
+		margin-left: 0px;
+	}
+
+	.radio-inline {
+		position: relative;
+		display: inline-block;
+		padding-left: 20px;
+		font-weight: 400;
+		vertical-align: middle;
+		cursor: pointer;
+	}
+
+	.width100 {
+		width: 100%;
+	}
+	.box-header h2{
+		float: none;
+	}
+	/*供应商维护*/
+	.box-contents{
+		padding: 0 ;
+	}
+	.box-top{
+		overflow: hidden;
+		padding: 0 10px;
+		height: 50px;
+		line-height: 50px;
+		border-bottom: 1px solid #dcdcdc;
+	}
+	.box-top .maintenance{
+		margin: 0;
+		float: left;
+		height: 50px;
+		line-height: 50px;
+		font-size: 16px;
+		color: #317eac;
+	}
+	.box-bottom table{
+		table-layout: fixed ;
+	}
+	.box-bottom table thead{
+		width: 100%;
+		height: 40px;
+		line-height: 40px;
+		background: #f1f1f1;
+		border-bottom: 1px solid #dcdcdc;
+	}
+	.box-bottom table thead th{
+		font-size: 14px;
+		color: #333;
+		text-align: center;
+		vertical-align: middle ;
+
+	}
+	.box-bottom table thead th:nth-child(2){
+		text-align: left;
+		padding-left: 60px;
+	}
+	.box-bottom table tbody tr{
+		text-align: center ;
+		border-bottom: 1px solid #dcdcdc;
+	}
+	.box-bottom table td .agency{
+		height: 73px;
+		line-height: 73px;
+	}
+	/*遮罩层*/
+	.box-bottom table td .agency .uploadImg .hover-show{
+		position: absolute;
+		width: 100%;
+		height: 100%;
+		top: 0;
+		left: 0;
+		background: rgba(0,0,0,.5);
+		z-index: 100;
+		display: block;
+	}
+	.box-bottom table td .agency .uploadImg .hover-show .delete{
+		position: absolute;
+		top: -12px;
+		right: 0;
+		padding: 0;
+		width: 20px;
+		/*height: 20px;*/
+		float: right;
+		text-align: center;
+		cursor: pointer;
+	}
+	.box-bottom table td .agency .uploadImg .hover-show .delete i{
+		color: #fff;
+		font-size: 18px;
+	}
+	.box-bottom table td .agency .uploadImg .hover-show a i{
+		position: absolute;
+		left: 5px;
+		top: 22px;
+		margin-right: 5px;
+		font-size: 16px;
+	}
+	.box-bottom table td .agency .uploadImg{
+		position: relative ;
+		margin: 12px 0 0 20px;
+		float: left;
+		width: 100px;
+		height: 50px;
+		line-height: 50px;
+		border: 1px solid #dcdcdc;
+	}
+	.box-bottom table td .agency .uploadImg img{
+		width: 100%;
+		height: 100%;
+	}
+	.box-bottom table td .agency .uploadImg	div{
+		position: relative;
+	}
+	.box-bottom table td .agency .uploadImg	div input{
+		position: absolute;
+		top: 15px;
+		left: 18px;
+		width: 53px;
+		height: 100%;
+		opacity: 0;
+	}
+	.box-bottom table td .agency .uploadImg span.update{
+		position: absolute;
+		top: 0;
+		right: 50%;
+		margin-right: -20px;
+		font-size: 12px;
+		color: #fff;
+		cursor: pointer;
+	}
+	.box-bottom table td .agency .uploadImg span.update span{
+		font-size: 12px;
+		color: #fff;
+	}
+	.box-bottom table td input{
+		/*padding: 0 15px;*/
+		width: 80%;
+		height: 29px;
+		line-height: 29px;
+		text-align: center;
+		font-size: 12px;
+		color: #666;
+		background: #f4f4f4;
+		border: 1px solid #dcdcdc;
+	}
+
+	.box-bottom table td select{
+		padding: 0;
+		width: 98px;
+		height: 29px;
+		background: #f4f4f4;
+		border: 1px solid #dcdcdc;
+	}
+	.box-bottom table td span{
+		font-size: 14px;
+		color: #2fa4e7;
+	}
+	.box-bottom table tbody tr td span.operate {
+		display: inline-block;
+		height: 25px;
+		line-height: 25px;
+		width: 42px!important ;
+		font-size: 14px;
+		color: #2fa4e7!important ;
+		border-radius: 3px;
+		cursor: pointer;
+	}
+	.box-bottom table tbody tr td span.operate:hover {
+		background: #2fa4e7;
+		color: #fff!important ;
+	}
+	.box-bottom table tbody.add-supply{
+		height: 55px;
+	}
+	.box-bottom table tbody.add-supply tr{
+		height: 32px;
+		border-bottom: 1px dashed #d2d2d2;
+	}
+	.box-bottom table tbody.add-supply tr td{
+		position: relative;
+	}
+	.box-bottom table tbody.add-supply tr td span{
+		position: absolute;
+		width: 206px;
+		font-size: 14px;
+		color: #2fa4e7;
+		display: inline-block;
+		background: #fff;
+		cursor: pointer;
+	}
+	.box-bottom table tbody.add-supply tr td span em{
+		font-size: 14px;
+		font-style: normal;
+		color: #2fa4e7;
+		background: none;
+	}
+	.box-bottom table tbody.add-supply tr td span i{
+		margin-right: 5px;
+		font-size: 24px;
+		color: #2fa4e7;
+	}
+	.box-bottom table tbody.add-supply tr td img{
+		position: absolute;
+		top: -4px;
+		cursor: pointer;
+	}
+
+	.upImg img{
+		width: 100%;
+		height: 100%;
+	}
+	.box-bottom table tbody.edit tr td span{
+		display: inline-block;
+		max-width: 180px;
+		text-overflow: ellipsis;
+		white-space: nowrap ;
+		overflow: hidden ;
+		font-size: 12px;
+		color: #333333;
+	}
+	.box-bottom table tbody.edit tr td button.choose-store {
+		padding: 0;
+		width: 98px;
+		height: 29px;
+		background: #f4f4f4;
+		border: 1px solid #dcdcdc;
+		outline: none;
+		overflow: hidden;
+		text-overflow: ellipsis ;
+		white-space: nowrap ;
+	}
+	/*选择关联店铺*/
+
+	.box-bottom table td .choose{
+		position: absolute;
+		top: 52px;
+		left: -55px;
+		z-index: 1000;
+		background: #fff;
+		border: 1px solid #2fa4e7;
+		width: 375px;
+		/*height: 220px;*/
+	}
+	.box-bottom table td .choose .top{
+		padding-left: 10px;
+		overflow: hidden;
+		width: 100%;
+		height: 34px;
+		line-height: 34px;
+	}
+	.box-bottom table td .choose .top span{
+		float: left;
+		font-size: 12px;
+		color: #2fa4e7;
+	}
+	.box-bottom table td .choose .top label{
+		float: left;
+		margin-left: 10px;
+	}
+	.box-bottom table td .choose .top label input{
+		float: left;
+		margin-top: 13px;
+		width: 10px;
+		height: 10px;
+	}
+	.box-bottom table td .choose .top label span{
+		margin-left: 5px;
+		font-size: 12px;
+		color: #666;
+		font-weight: normal;
+		float: left;
+	}
+	.box-bottom table td .choose .top .form-search{
+		float: left;
+		position: relative;
+		width: 176px;
+		height: 20px;
+	}
+	.box-bottom table td .choose .top .form-search input{
+		width: 156px;
+		height: 20px;
+		border-radius: 0;
+		border : 1px solid #2fa4e7;
+	}
+	.box-bottom table td .choose .top .form-search button{
+		position: absolute;
+		top: 8px;
+		right: 0;
+		width: 21px;
+		height: 20px;
+		line-height: 20px;
+		text-align: center;
+		background: #2fa4e7;
+		border: none;
+		outline: none;
+	}
+	.box-bottom table td .choose .top .form-search i{
+		font-size:12px;
+		color: #fff;
+	}
+	.box-bottom table td .choose table{
+		table-layout: fixed ;
+		width: 100%;
+	}
+	.box-bottom table td .choose table thead{
+		width: 100%;
+		height: 25px;
+		background: #e9e9e9;
+	}
+	.box-bottom table td .choose table thead tr{
+		width: 100%;
+		height: 25px;
+		line-height: 25px;
+		font-size: 14px;
+		font-weight: normal;
+		color: #333333;
+		text-align: center;
+	}
+	.box-bottom table td .choose table thead tr th:nth-child(2){
+		padding-left: 0;
+	}
+	.box-bottom table td .choose table tbody tr{
+		height: 25px;
+		vertical-align: middle ;
+	}
+	.box-bottom table td .choose table tr td{
+		border-bottom: 1px solid #e9e9e9;
+		font-size: 12px;
+		color: #666666;
+	}
+	.box-bottom table td .choose table td input{
+		width: 10px;
+		height: 10px;
+	}
+	.box-top {
+		overflow: hidden;
+		margin-top: -20px;
+	}
+	.box-top .load{
+		float: left;
+	}
+	.box-top .load span{
+		font-size: 16px;
+		color: #317eac;
+	}
+	.box-top div.upload{
+		float: right;
+	}
+	.box-top div.upload div:first-child {
+		float: left;
+		font-size: 14px;
+		color: #666;
+	}
+	.box-top div.upload div:first-child a{
+		font-size: 14px;
+		color: #4fb2eb;
+	}
+	.box-top div.upload div:last-child {
+		margin-top: 8px;
+		margin-left: 20px;
+		position: relative;
+		float: left;
+		width: 290px;
+	}
+	.box-top .upload div:last-child input[type='text']{
+		padding-left: 7px;
+		width: 190px;
+		height: 34px;
+		line-height: 34px;
+		border: 1px solid #c0c6ca;
+	}
+	.box-top .upload div:last-child input[type='file']{
+		position: absolute;
+		top: 7px;
+		left: 7px;
+		width: 190px;
+		height: 20px;
+	}
+	.box-top .upload div:last-child button{
+		position: absolute;
+		right: 0;
+		top: 5px;
+		width: 79px;
+		height: 25px;
+		line-height: 25px;
+		font-size: 14px;
+		color: #fff;
+		background: #3caae8;
+		border-radius: 3px;
+		border: none;
+		outline: none;
+	}
+</style>
+	<!-- 品牌维护详情Start -->
+	<div class="box">
+		<div class="box-header well" data-original-title>
+			<i class="icon-user"></i> 品牌详情
+		</div>
+		<div class="box-content">
+			<div class="fullscreen" style="padding: 10px;">
+				<div class="form-group">
+					<span>中文品牌:</span>
+					<span ng-bind="brand.nameCn"></span>
+				</div>
+				<div class="form-group">
+					<span>英文品牌:</span>
+					<span ng-bind="brand.nameEn"></span>
+				</div>
+				<div class="form-group">
+					<span>官网地址:</span>
+					<span ng-bind="brand.url"></span>
+				</div>
+				<div class="form-group">
+					<span>Logo:</span>
+					<span class="thumbnail" style="width: 200px; height: 150px; vertical-align: middle; display: table-cell;">
+						<img ng-src="{{brand.logoUrl}}" alt="" style="max-width: 200px; max-height: 150px;">
+					</span>
+				</div>
+				<div class="form-group">
+					<span>简介:</span>
+					<span ng-bind="brand.brief"></span>
+				</div>
+				<div class="form-group">
+					<span>销售区域:</span>
+					<span ng-bind="brand.area"></span>
+				</div>
+				<div class="form-group">
+					<span>主打产品:</span>
+					<span ng-bind="brand.series"></span>
+				</div>
+				<div class="form-group">
+					<span>应用领域:</span>
+					<span ng-bind="brand.application"></span>
+				</div>
+			</div>
+		</div>
+	</div>
+	<!-- 品牌维护详情End -->
+	<!--供应商维护 Start-->
+	<div class="box">
+		<div class="box-header well" data-original-title>
+		</div>
+		<div class="box-content">
+			<!-- ng-tableStart -->
+			<div class="fullscreen" style="padding: 10px;">
+				<div class="box-bottom">
+					<table>
+						<thead>
+						<tr>
+							<th width="10%"></th>
+							<th width="15%">代理商</th>
+							<th width="5%">营业执照号</th>
+							<th width="20%">地址</th>
+							<th width="10%">电话</th>
+							<th width="10%">传真</th>
+							<th width="12%">网址</th>
+							<th width="5%">关联店铺</th>
+							<th width="10%">邮箱</th>
+							<th width="5%"></th>
+						</tr>
+						</thead>
+						<tbody class="edit">
+							<tr>
+								<td>
+									<div class="agency">
+										<div class="uploadImg">
+											<img ng-src="{{supplier.img || 'static/img/store/common/default.png'}}" alt=""/>
+										</div>
+									</div>
+								</td>
+								<td>
+									<input type="text" class="comName" ng-model="supplier.vendorName" required/>
+								</td>
+								<td>
+									<input type="text" class="license" ng-model="supplier.license"/>
+								</td>
+								<td>
+									<input type="text" class="address" ng-model="supplier.detailAddress" required/>
+								</td>
+								<td>
+									<input type="text" class="phone" ng-model="supplier.tel"/>
+								</td>
+								<td>
+									<input type="text" class="fax" ng-model="supplier.fax"/>
+								</td>
+								<td>
+									<input type="text" class="network" ng-model="supplier.website"/>
+								</td>
+								<td style="position: relative ">
+									<button ng-click="storeAssociated(supplier)" ng-bind="supplier.storeIn.storeName ? supplier.storeIn.storeName : '选择关联店铺'" class="choose-store"><i class="fa fa-angle-down"></i></button>
+									<div class="choose" ng-if="supplier.chooseStoreAssociated">
+										<div class="top">
+											<span>类型选择</span>
+											<label>
+												<input type="checkbox" class="fl" ng-click="chooseStoreType('AGENCY')">
+												<span class="fl">代理商</span>
+											</label>
+											<label>
+												<input type="checkbox" class="fl" ng-click="chooseStoreType('DISTRIBUTION')">
+												<span class="fl">经销商</span>
+											</label>
+											<div class="form-search">
+												<input type="text" ng-click="refreshTableData()">
+												<button><i class="fa fa-search" ng-click="refreshTableData()"></i></button>
+											</div>
+										</div>
+										<table ng-table="storeTableParams">
+											<thead>
+											<tr>
+												<th width="30"></th>
+												<th width="70">店铺编号</th>
+												<th width="170">公司名称</th>
+												<th width="60">类型</th>
+											</tr>
+											</thead>
+											<tbody>
+											<tr ng-repeat="store in $data" >
+												<td><input type="checkbox" ng-click="chooseStore(supplier, store)"></td>
+												<td ng-bind="store.id | storeId">000000501</td>
+												<td ng-bind="store.enterprise &amp;&amp; store.enterprise.enName &amp;&amp; store.enterprise.enName !== '' ? store.enterprise.enName : '暂无公司名称'" >深圳市萨科微科技有限公司</td>
+												<td ng-bind="store.type | storeType" >代理商</td>
+											</tr>
+											</tbody>
+										</table>
+									</div>
+								</td>
+								<td>
+									<input type="text" class="mail" ng-model="supplier.email"/>
+								</td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="text-center" ng-if="supplier.status == 101">
+				<button class="btn btn-success" ng-click="audit()">审核通过</button>
+				<button class="btn btn-danger" ng-click="unaudit()">审核不通过</button>
+			</div>
+		</div>
+	</div>
+	<!--供应商维护 End-->

+ 68 - 0
src/main/webapp/resources/view/admin/supplier_submit_list.html

@@ -0,0 +1,68 @@
+<div class="box">
+    <div class="box-header well" data-original-title>
+        <i class="icon-user"></i> 供应商审批
+    </div>
+    <div class="box-content">
+        <!-- ng-tableStart -->
+        <div class="fullscreen" style="padding: 10px;">
+            <div class="row">
+                <div class="col-sm-1">
+                    共<span class="badge">{{supplierTableParams.total()}} </span>条
+                </div>
+                <div class="col-sm-5">
+                    <div class="btn-group" role="group" aria-label="...">
+                        <button type="button" class="btn btn-default" ng-class="{'btn-primary':active=='all'}" ng-click="setActive('all')">全部</button>
+                        <button type="button" class="btn btn-default" ng-class="{'btn-primary':active=='unAudited'}" ng-click="setActive('unAudited')">待审核</button>
+                        <button type="button" class="btn btn-default" ng-class="{'btn-primary':active=='allow'}" ng-click="setActive('allow')">已通过</button>
+                        <button type="button" class="btn btn-default" ng-class="{'btn-primary':active=='notAllow'}" ng-click="setActive('notAllow')">未通过</button>
+                    </div>
+                </div>
+                <div class="col-sm-6">
+                    <div class="input-group" style="float: right">
+                        <input type="search" class="form-control ng-pristine ng-valid ng-touched" ng-model="keyword"
+                               ng-search="onSearch()" placeholder="按供应商名称搜索">
+                        <div class="input-group-btn">
+                            <button ng-click="onSearch()" class="btn btn-primary" type="button">搜索</button>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <table ng-table="supplierTableParams" class="table table-bordered table-striped" style="margin-top: 10px;">
+                <thead>
+                <tr>
+                    <th width="30"></th>
+                    <th width="150">品牌英文名</th>
+                    <th width="auto">供应商名称</th>
+                    <th width="80">提交人</th>
+                    <th width="150">提交时间</th>
+                    <th width="80">审核状态</th>
+                    <th width="80">操作</th>
+                </tr>
+                </thead>
+                <tbody>
+                <tr ng-repeat="supplier in $data">
+                    <td class="text-center">{{($index + 1)}}</td>
+                    <td width="150" style="word-break: break-all">{{supplier.brand.nameEn}}
+                        <span class="label label-success f12" ng-if="supplier.type == 818">新增</span>
+                        <span class="label label-warning f12" ng-if="supplier.type == 815">更新</span>
+                        <span class="label label-danger f12" ng-if="supplier.type == 112">删除</span>
+                    </td>
+                    <td ng-bind="supplier.vendorName"></td>
+                    <td ng-bind="supplier.updater.userName"></td>
+                    <td ng-bind="supplier.updatetime | date: 'yyyy-MM-dd HH:mm'"></td>
+                    <td ng-bind="supplier.status | statusAndTypeFilter"></td>
+                    <td>
+                        <a ui-sref="supplierSubmitDetail({id: supplier.id})" target="_blank">
+                            <button type="button" class="btn btn-default btn-sm">查 看</button>
+                        </a>
+                    </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>
+        <!-- ng-tableEnd -->
+    </div>
+</div><!--/span-->

+ 4 - 0
src/main/webapp/resources/view/common/sidebar.html

@@ -348,6 +348,10 @@
 </style>
 <div id="sidebar">
 	<ul class="sidebar-content">
+		<li ng-controller="goCartCtrl" ng-show="uuid">
+			<a ng-click="openMystore()"><img src="static/img/icon/shop_icon.png"/></a>
+			<div class="massage sidebar-menu" style="width: 100px" ng-click="openMystore()" title="我的店铺">我的店铺</div>
+		</li>
 		<li>
 			<a href="user#/cart" target="_blank"><img src="static/img/icon/cart.png"/></a>
 			<div class="sidebar-menu" style="width: 100px"><a href="user#/cart" title="我的购物车" target="_blank">我的购物车<em><span ng-if="userInfo">(<span ng-bind="countCart || 0 | number"></span>)</span></em></a></div>

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

@@ -266,7 +266,8 @@
                                     <img src="static/img/all/empty-cart.png">
                                 </p>
                                 <div class="empty-info">
-                                    <p class="grey"> 暂时获取不到订单的物流信息 </p>
+                                    <p class="grey" ng-if="order.deliverytype == 1301">暂时获取不到物流信息,请到快递公司官网进行查询</p>
+                                    <p class="grey" ng-if="order.deliverytype != 1301">暂无物流信息,请<a style="color: #5078cb;" ng-controller="ChatContactCtrl as chat" ng-click="chat.contactWithOther(order.sellPhone, order.sellerenuu, chat.UserType.STORE)">联系卖家</a>咨询</p>
                                     <!--<a href="user#/order"><i class="fa fa-mail-reply fa-xs"></i>返回上一页</a>-->
                                 </div>
                             </div>

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

@@ -458,12 +458,12 @@
         padding-right: 15px;
         margin: 20px 0 12px 0;
     }
-    .seek-purchase .seek-purchase-content >table >tbody tr.empty td div {
+    .seek-purchase tr.empty td div {
         text-align: center;
         height: 200px;
         line-height: 200px;
     }
-    .seek-purchase .seek-purchase-content >table >tbody tr.empty td div span {
+    .seek-purchase tr.empty td div span {
         color: #999;
         margin-left: 10px;
     }
@@ -535,6 +535,11 @@
         vertical-align: middle;
         margin: 0 0 0 21px;
     }
+    .seek-purchase .bom-manage tr.empty div{
+        line-height: 200px;
+        display: block;
+        margin: 0;
+    }
     .seek-purchase .bom-manage > table tbody tr td > div p {
         font-size: 14px;
         font-weight: bold;
@@ -1017,6 +1022,14 @@
                     <a href="user#/bomDetail/{{bom.id}}" class="fr">查看详情</a>
                 </td>
             </tr>
+            <tr ng-if="!$data.length" class="empty">
+                <td>
+                    <div>
+                        <img src="static/img/all/empty-cart.png">
+                        <span>暂无求购信息</span>
+                    </div>
+                </td>
+            </tr>
             </tbody>
         </table>
     </div>

+ 405 - 197
src/main/webapp/resources/view/vendor/forstore/erp/vendor_material_erp.html

@@ -171,16 +171,15 @@
 	}
 	.search-check{
 		width: 100%;
-		min-height: 54px;
 		height: auto;
+		min-height: 54px;
 		background: #fff;
 		padding-top: 10px;
 		margin-bottom: 16px;
 	}
 	.search-check .search{
-		width: 550px;
+		width: 438px;
 		margin-left: 150px;
-		margin-bottom: 10px;
 	}
 	.search-check .search .form-control{
 		width: 340px;
@@ -217,103 +216,58 @@
 		font-size: 14px;
 		line-height: 35px;
 	}
-	.search-check .check a{
+	.search-check .check > .operate-btn{
 		font-size: 14px;
-		margin-right: 20px;
-		color: #333;
-	}
-	.search-check .check a:hover{
-		color: #5078cb;
-	}
-	.search-check .check .check-active{
-		margin-right: 15px;
-	}
-	.search-check .check .check-active span{
-		font-weight: normal;
-		color: #333;
-	}
-	.search-check .check .check-active span:hover{
-		color: #5078cb;
-		cursor: pointer;
-	}
-	.search-check .check .check-active label{
-		margin-right: 0 !important;
-	}
-	.search-check .batch-operate {
-		clear: both;
-		background: #99FFFF;
-	}
-	.search-check .batch-operate .operate-head {
-		height: 40px;
-		line-height: 40px;
-		margin: 0 10px;
-		border-bottom: 1px solid;
-		padding: 0 20px;
-	}
-	.search-check .batch-operate .operate-head .check-active {
-		font-weight: normal;
-		height: 40px;
-	}
-	.search-check .batch-operate .operate-head .red-text {
-		color: #ee4312;
-	}
-	.search-check .batch-operate .operate-content {
-		height: 70px;
-		line-height: 30px;
-	}
-	.search-check .batch-operate .operate-content > div {
+		margin-right: 12px;
+		color: #fff !important;
+		background: #5078cb;
+		position: relative;
 		display: inline-block;
+		height: 30px;
+		line-height: 30px;
+		padding: 0 10px;
+		cursor: pointer;
 	}
-	.search-check .batch-operate .operate-content > div:first-child {
-		margin-right: 111px;
-		margin-left: 28px;
-	}
-	.search-check .batch-operate .operate-content > div p {
-		font-weight: bold;
-	}
-	.search-check .batch-operate .operate-content > div p .batch-price-title {
-		margin-right: 91px;
-	}
-	.search-check .batch-operate .operate-content > div p .batch-progress {
-		width: 108px;
-		height: 5px;
+	.search-check .check > .operate-btn .expander {
+		position: absolute;
+		color: #333;
+		right: 0;
+		display: none;
+		height: 57px;
+		line-height: 26px;
+		text-align: center;
 		background: #fff;
-		display: inline-block;
-		position: relative;
+		bottom: -57px;
+		width: 98px;
+		z-index: 10;
+		border: 1px solid #e4e5e5;
 	}
-	.search-check .batch-operate .operate-content > div p .batch-progress i {
-		width: 5px;
-		height: 10px;
-		background: #169BD5;
+	.search-check .check > .operate-btn.more-operate {
+		padding: 0;
+		width: 98px;
+		height: 30px;
+		line-height: 30px;
+		text-align: center;
 		display: inline-block;
-		position: absolute;
-		top: -3px;
 	}
-	.search-check .batch-operate .operate-content > div p em {
-		margin: 0 5px;
+	.search-check .check > .operate-btn.more-operate:hover .expander {
+		display: block;
 	}
-	.search-check .batch-operate .operate-content > div > div input {
-		padding: 0 5px;
-		height: 25px;
+	.search-check .check > .operate-btn.more-operate .expander span {
+		display: block;
 	}
-	.search-check .batch-operate .operate-content .batch-sale input {
-		width: 60px;
-		margin-right: 10px;
-		padding-right: 12px;
-	}
-	.search-check .batch-operate .operate-content .batch-sale div .com-btn-submit {
-		margin-right: 10px;
+	.search-check .check > .operate-btn.more-operate .expander span:hover {
+		color: #5078cb;
 	}
-	.search-check .batch-operate .operate-content .batch-sale > div {
-		position: relative;
+	.pro_management .table .check-active {
+		margin-right: 15px;
+		user-select: none;
 	}
-	.search-check .batch-operate .operate-content .batch-sale div i {
-		position: absolute;
-		left: 234px;
-		top: 2px;
+	.pro_management .table .check-active span {
+		color: #333 !important;
 	}
-	.search-check .batch-operate .operate-content .batch-date input {
-		width: 56px;
+	.pro_management .table .check-active label {
+		margin-right: 0 !important;
 	}
 	.check-input input{
 		display: none;
@@ -440,6 +394,43 @@
 	.edit-content div.floatLeft .input-list{
 		float: left;
 	}
+	.edit-content .input-list .dropdown{
+		position: relative;
+	}
+	.edit-content .input-list .button-select{
+		width: 96px;
+		height: 24px;
+		border: 1px solid #a9a9a9;
+		font-size: 12px;
+		text-align: center;
+		padding: 0;
+	}
+	.edit-content .input-list .select-package{
+		width: 96px;
+		height: 24px;
+		border: 1px solid #a9a9a9;
+		font-size: 12px;
+		text-align: center;
+		border-radius: 3px;
+		padding-left: 6px;
+	}
+	.edit-content .input-list .button-option{
+		position: absolute;
+		top: 22px;
+		left: 69px;
+		height: 63px;
+		min-width: 119px;
+		overflow: auto;
+	}
+	.edit-content .input-list .button-option li{
+		height: 30px;
+		line-height: 30px;
+		padding: 0;
+	}
+	.edit-content .produceDate-fix{
+		position: relative;
+		top: 4px;
+	}
 	.edit-content div.margin10{
 		padding-top: 24px;
 	}
@@ -1045,7 +1036,7 @@
 	}
 	.edit-contents .content .title span:first-child {
 		float: left;
-		width: 80px;
+		width: 70px;
 		text-align: right;
 	}
 	.edit-contents .content .title span:last-child {
@@ -1558,10 +1549,10 @@
 	#wanted-list02{
 		display: none;
 	}
-	.modal-backdrop {
-		background-color: transparent ;
-		bottom: unset!important;
-	}
+	/*.modal-backdrop {
+        background-color: transparent ;
+        bottom: unset!important;
+    }*/
 	.modal{
 		bottom: unset!important;
 	}
@@ -1572,6 +1563,141 @@
 		position: absolute;
 		top: 45px;
 	}
+
+	.no-hover:hover {
+		background: none !important;
+	}
+	.standard-tab.table > tbody > tr.batch-tr {
+		height: 30px;
+	}
+	.standard-tab.table > tbody > tr.batch-tr.active {
+		position: fixed;
+		bottom: 0;
+		z-index: 2000;
+	}
+	.standard-tab.table > tbody > tr.batch-tr.active td {
+		width: 1029px;
+		border-top: 0;
+	}
+	.standard-tab.table > tbody > tr.batch-tr td {
+		padding: 0;
+		border-top: #dff3fd 1px solid;
+	}
+	.standard-tab.table>tbody>tr>td .batch-line {
+		width: 100%;
+		height: 30px;
+		background: #fdd6d6;
+		line-height: 30px;
+	}
+	.wanted_list01 .tab table th {
+		color: #333 !important;
+	}
+	.search-check .batch-operate {
+		clear: both;
+		background: #99FFFF;
+		position: relative;
+		z-index: 1;
+	}
+	.search-check .batch-operate .operate-head {
+		height: 40px;
+		line-height: 40px;
+		margin: 0 10px;
+		border-bottom: 1px solid;
+		padding: 0 20px;
+		text-align: right;
+	}
+	.search-check .batch-operate .operate-head .check-active {
+		font-weight: normal;
+		height: 40px;
+	}
+	.search-check .batch-operate .operate-head .red-text {
+		color: #008000;
+		float: left;
+		font-size: 14px;
+		font-weight: bold;
+	}
+	.search-check .batch-operate .operate-head .red-text i {
+		font-size: 20px;
+		color: #e07d34;
+	}
+	.search-check .batch-operate .operate-content {
+		height: 70px;
+		line-height: 30px;
+	}
+	.search-check .batch-operate .operate-content > div {
+		display: inline-block;
+	}
+	.search-check .batch-operate .operate-content > div:first-child {
+		margin-right: 111px;
+		margin-left: 28px;
+	}
+	.search-check .batch-operate .operate-content > div p {
+		font-weight: bold;
+	}
+	.search-check .batch-operate .operate-content > div p .batch-price-title {
+		margin-right: 91px;
+	}
+	.search-check .batch-operate .operate-content > div p input[type=range] {
+		padding: 0;
+		display: inline-block;
+		width: 108px;
+	}
+	.search-check .batch-operate .operate-content > div p input[type=range]::-webkit-slider-runnable-track {
+		background: #4054ff;
+		height: 5px;
+	}
+	.search-check .batch-operate .operate-content > div p input[type=range]::-webkit-slider-thumb {
+		position: relative;
+		bottom: 7px;
+	}
+	.search-check .batch-operate .operate-content > div p .batch-progress {
+		width: 108px;
+		height: 5px;
+		background: #fff;
+		display: inline-block;
+		position: relative;
+	}
+	.search-check .batch-operate .operate-content > div p .batch-progress i {
+		width: 5px;
+		height: 10px;
+		background: #169BD5;
+		display: inline-block;
+		position: absolute;
+		top: -3px;
+	}
+	.search-check .batch-operate .operate-content > div p em {
+		margin: 0 5px;
+	}
+	.search-check .batch-operate .operate-content > div > div input {
+		padding: 0 5px;
+		height: 25px;
+	}
+	.search-check .batch-operate .operate-content .batch-sale input {
+		width: 60px;
+		margin-right: 10px;
+		padding-right: 12px;
+	}
+	.search-check .batch-operate .operate-content .batch-sale div .com-btn-submit {
+		margin-right: 10px;
+	}
+	.search-check .batch-operate .operate-content .batch-sale > div {
+		position: relative;
+	}
+	.search-check .batch-operate .operate-content .batch-sale div i {
+		position: absolute;
+		left: 234px;
+		top: 2px;
+	}
+	.search-check .batch-operate .operate-content .batch-date input {
+		width: 56px;
+	}
+	.search-check .batch-operate > .fr {
+		margin-right: 30px;
+	}
+	.search-check .batch-operate > .fr .com-btn-level1 {
+		display: block;
+		margin-top: 8px;
+	}
 	.pro_management .table tr th .erp-reserve {
 		cursor: pointer;
 	}
@@ -1588,109 +1714,151 @@
 	<div class="pro_management device">
 		<div class="com_tab">
 			<ul class="fl" style="width: 100%">
-				<li><a ui-sref="vendor_material_unstandard_erp({standardParam:'unstandard'})">非标产品</a></li>
-				<li class="active"><a ui-sref="vendor_material_erp({standardParam:'standard'})">标准产品</a></li>
+				<li class="active"><a ui-sref="vendor_material_erp">企业产品库</a></li>
+				<li><a ui-sref="vendor_material_person_erp">个人产品库</a></li>
 				<li><a ui-sref="vendor_onSale_erp">在售产品</a></li>
 				<li><a ui-sref="vendor_undercarriage_erp">上下架历史</a></li>
 			</ul>
 		</div>
+		<div class="com_tab">
+			<ul class="fl distance" style="width: 100%">
+				<li ng-class="{active : standard_tab == 'unstandard'}"  ng-click="toggleStandard('unstandard')" title="非标产品({{nCount}})"><a href="" class="standard">非标产品(<em class="count">{{nCount}}</em>)</a></li>
+				<li ng-class="{active : standard_tab =='standard'}" ng-click="toggleStandard('standard')" title="标准产品({{sCount}})"><a href="" class="standard">标准产品(<em class="count">{{sCount}}</em>)</a></li>
+			</ul>
+			<!--匹配结果导航-->
+			<div class="match-menu" ng-if="resultFrame">
+                <span>
+                    <a ng-click="toggleTab('matchResult')">匹配结果</a>
+                    <i class="fa fa-remove" ng-click="closeResultFrame('unstandard')"></i>
+                </span>
+			</div>
+		</div>
 		<!--非标和标准产品列表页-->
 		<div ng-if="standard_tab == 'unstandard' || standard_tab =='standard'">
 			<div class="search-check">
 				<div class="search fl">
 					<input type="text" class="form-control" ng-model="param.keyword" ng-search="onSearch()" placeholder="类目/型号/品牌"/>
 					<button ng-click="onSearch()">搜索</button>
-					<a ng-click="download()">批量导出</a>
+					<!--<a ng-click="download()">批量导出</a>-->
 				</div>
 				<div class="check fr">
-					<a ng-show="!isBatch && standard_tab == 'unstandard'" ng-click="matchAll()"><span ng-show="!isBatch && standard_tab == 'unstandard'">一键匹配</span></a>
-					<a ng-show="!isBatch" ng-click="enterBatch()"><span ng-show="!isBatch">批量操作</span></a>
+					<div class="operate-btn" ng-click="enterBatch()"><span>批量上架</span></div>
+					<div class="operate-btn" ng-click="setAllInPerson()"><span>加入个人产品库</span></div>
+					<div class="operate-btn" ng-show="standard_tab == 'unstandard'" ng-click="matchAll()"><span ng-show="standard_tab == 'unstandard'">匹配</span></div>
+					<div class="operate-btn more-operate">
+						<span>更多操作</span>
+						<span class="expander">
+							<span ng-click="download()">导出选中</span>
+							<span ng-click="deleteBatch()" name="delete-material">删除选中</span>
+						</span>
+					</div>
 					<!--<span class="check-btn" ng-show="isBatch">
-						<label class="check-active">
-							<input type="checkbox"  ng-click="chooseAll()" ng-checked="isChoosedAll" id="AllChoose"/>
-							<label for="AllChoose"></label>
-							<span>全选</span>
-						</label>
-						<a
-								ng-click="deleteBatch()" name="delete-material">删除</a>
+						<a ng-click="deleteBatch()" name="delete-material">删除</a>
 						<a ng-click="exitBatch()">取消</a>
 					</span>-->
 				</div>
 				<div class="batch-operate" ng-show="isBatch">
-					<div class="operate-head">
-						<label class="check-active fl">
-							<input type="checkbox"  ng-click="chooseAll()" ng-checked="isChoosedAll" id="AllChoose"/>
-							<label for="AllChoose"></label>
-							<span>全选</span>
-						</label>
-						<div class="fr">
-							<span class="red-text">批量上架仅作用于未上架的产品,已上架的不再重复上架!</span>
-							<span class="com-btn-level1 com-btn-submit" ng-click="batchPutOn()">批量上架</span>
-							<span class="com-btn-level1 com-btn-submit" ng-mouseenter="enterBatchPutOnPropertySaveButton()" ng-mouseleave="leaveBatchPutOnPropertySaveButton()" ng-click="saveBatchPutOnProperty()">保存</span>
-							<span class="com-btn-level1 com-btn-red" ng-click="deleteBatch()">删除</span>
-							<span class="com-btn-level1 com-btn-cancel" ng-click="exitBatch()">取消</span>
+					<div class="fl">
+						<div class="operate-head">
+							<!--<label class="check-active fl">
+                                <input type="checkbox"  ng-click="chooseAll()" ng-checked="isChoosedAll" id="AllChoose"/>
+                                <label for="AllChoose"></label>
+                                <span>全选</span>
+                            </label>-->
+							<span class="red-text"><i class="fa fa-warning"></i> 批量上架仅作用于未上架的产品,已上架的不再重复上架!</span>
 						</div>
-					</div>
-					<div class="operate-content">
-						<div class="batch-sale">
-							<p><span class="batch-price-title">批量设置销售价:</span><em>1</em><span class="batch-progress"><i style="left: {{uasBatchPutOnProperty.editFluctuateRate ? uasBatchPutOnProperty.editFluctuateRate > 200 ? '100%' : uasBatchPutOnProperty.editFluctuateRate / 2 + '%' : 0}}"></i></span><em>200</em></p>
-							<div><span>销售价 = 近一个月的平均销售价 X </span><input type="number" ng-model="uasBatchPutOnProperty.editFluctuateRate" ng-change="onSalePriceChange()"><i>%</i>
-								<span class="com-btn-level2 com-btn-submit" ng-click="setSalePrice(100)">100%</span>
-								<span class="com-btn-level2 com-btn-submit" ng-click="setSalePrice(120)">120%</span>
-								<span class="com-btn-level2 com-btn-submit" ng-click="setSalePrice(130)">130%</span>
-								<span class="com-btn-level2 com-btn-submit" ng-click="setSalePrice(150)">150%</span>
+						<div class="operate-content">
+							<div class="batch-sale">
+								<!--<p><span class="batch-price-title">批量设置销售价:</span><em>1</em><span class="batch-progress"><i style="left: {{uasBatchPutOnProperty.editFluctuateRate ? uasBatchPutOnProperty.editFluctuateRate > 200 ? '100%' : uasBatchPutOnProperty.editFluctuateRate / 2 + '%' : 0}}"></i></span><em>200</em></p>-->
+								<p><span class="batch-price-title">批量设置销售价:</span><em>1</em><input type="range" min="1" max="200" ng-model="uasBatchPutOnProperty.editFluctuateRate" ng-change="onProgress()" class="form-control"><em>200</em></p>
+								<div><span>销售价 = 近一个月的平均销售价 X </span><input type="number" ng-model="uasBatchPutOnProperty.editFluctuateRate" ng-change="onSalePriceChange()"><i>%</i>
+									<span class="com-btn-level2 com-btn-submit" ng-click="setSalePrice(100)">100%</span>
+									<span class="com-btn-level2 com-btn-submit" ng-click="setSalePrice(120)">120%</span>
+									<span class="com-btn-level2 com-btn-submit" ng-click="setSalePrice(130)">130%</span>
+									<span class="com-btn-level2 com-btn-submit" ng-click="setSalePrice(150)">150%</span>
+								</div>
+							</div>
+							<div class="batch-date">
+								<p>批量设置交期:</p>
+								<div><span>交期(天)= </span><input type="number" ng-model="uasBatchPutOnProperty.editMinDelivery" ng-blur="uasBatchChangeDeliver(uasBatchPutOnProperty.editMinDelivery, uasBatchPutOnProperty.editMaxDelivery, false)"> - <input type="number" ng-model="uasBatchPutOnProperty.editMaxDelivery" ng-blur="uasBatchChangeDeliver(uasBatchPutOnProperty.editMinDelivery, uasBatchPutOnProperty.editMaxDelivery, true)"></div>
 							</div>
-						</div>
-						<div class="batch-date">
-							<p>批量设置交期:</p>
-							<div><span>交期(天)= </span><input type="number" ng-model="uasBatchPutOnProperty.editMinDelivery" ng-blur="uasBatchChangeDeliver(uasBatchPutOnProperty.editMinDelivery, uasBatchPutOnProperty.editMaxDelivery, false)"> - <input type="number" ng-model="uasBatchPutOnProperty.editMaxDelivery" ng-blur="uasBatchChangeDeliver(uasBatchPutOnProperty.editMinDelivery, uasBatchPutOnProperty.editMaxDelivery, true)"></div>
 						</div>
 					</div>
+					<div class="fr">
+						<span class="com-btn-level1 com-btn-submit" ng-click="batchPutOn()">上架</span>
+						<span class="com-btn-level1 com-btn-red" ng-mouseenter="enterBatchPutOnPropertySaveButton()" ng-mouseleave="leaveBatchPutOnPropertySaveButton()" ng-click="saveBatchPutOnProperty()">保存</span>
+						<span class="com-btn-level1 com-btn-cancel" ng-click="exitBatch()">取消</span>
+					</div>
+					<div style="clear: both;"></div>
 				</div>
 			</div>
 			<div class="wanted_list01">
 				<!--在售产品-->
 				<div class="tab">
-					<table class="public-tab table">
+					<table class="public-tab standard-tab table">
 						<thead>
 						<tr>
+							<th width="80">
+								<label class="check-active">
+									<input ng-disabled="currenctMaterial.length == 0" type="checkbox"  ng-click="chooseAllItem()" ng-checked="chooseAll || chooseAllPage" id="AllChoose12"/>
+									<label for="AllChoose12"></label>
+									<span>全选</span>
+								</label>
+							</th>
 							<th width="80">序号</th>
-							<th width="100">
+							<th width="120">
 								<div class="erp-reserve"  ng-click="sortByERPReserve()">
-									ERP空闲库存
+									闲库存
 									<a class="sort-area" href="javascript:void(0)">
 										<i class=" fa fa-long-arrow-up" ng-class="{'active': sortByERP == 'ASC'}"></i>
 										<i class=" fa fa-long-arrow-down" ng-class="{'active': sortByERP == 'DESC'}"></i>
 									</a>
 								</div>
 							</th>
-							<th width="180">产品名称(类目)</th>
-							<th width="200">产品型号</th>
-							<th width="150">品牌</th>
+							<th width="140">产品名称(类目)</th>
+							<th width="180">产品型号</th>
+							<th width="130">品牌</th>
 							<th width="100">单位</th>
+							<!--<th width="80">封装</th>-->
 							<th width="180">操作</th>
 						</tr>
 						</thead>
 						<tbody class="bg-show">
 						<!--<tr style="height: 14px;" ng-show="!isBatch && standard_tab == 'standard'">-->
 						<tr style="height: 14px;">
-							<td colspan="7" class="hei18"></td>
+							<td colspan="8" class="hei18"></td>
 						</tr>
 						</tbody>
 						<tbody>
 						<tr style="height: 14px;" ng-show="currenctMaterial.length > 0 && standard_tab == 'unstandard' && showTip">
-							<td colspan="7" class="hei17">
+							<td colspan="8" class="hei17">
 								<span>*匹配成为标准产品方可通过器件选型、参数搜索展示</span><a ng-click="cancelTip()">&times;</a>
 							</td>
 						</tr>
+						<tr class="no-hover batch-tr" ng-if="(chooseAll || chooseAllPage) && currenctMaterial.length != 0">
+							<td colspan="8">
+								<div class="batch-line" ng-if="chooseAll && !chooseAllPage">
+									已选中当前页
+									<em class="red" ng-bind="materialAll.numberOfElements"></em>个产品,
+									<a ng-click="turnAllPage()" class="blue">点击此处</a>切换选中所有页面<em class="red" ng-bind="materialAll.totalElements"></em>个产品
+								</div>
+								<div class="batch-line" ng-if="chooseAllPage">
+									已选中所有页面
+									<em class="red" ng-bind="materialAll.totalElements"></em>个产品,
+									<a ng-click="cancelAllPage()" class="blue">点击此处</a>全部取消选中
+								</div>
+							</td>
+						</tr>
 						</tbody>
 						<tbody ng-repeat="material in currenctMaterial">
 						<!--<tr ng-class="{ 'active': material.selected }" class="gre-bg">-->
 						<tr ng-class="{ 'active': material.selected, 'gre-bg' : material.exPandOper}">
 							<td class="check-input">
-								<span ng-show="isBatch"><input type="checkbox" ng-checked="material.isChoosed"  ng-click="chooseOne(material)"  id="{{$index+1}}"/><label for="{{$index+1}}"></label><br/></span>
-								<span
-										ng-show="!isBatch" ng-bind="(param.page - 1) * 10 + $index + 1"></span>
+								<span><input type="checkbox" ng-checked="material.isChoosed"  ng-click="chooseOne(material)"  id="{{$index+1}}"/><label for="{{$index+1}}"></label><br/></span>
+							</td>
+							<td>
+								<!--<span ng-show="isBatch"><input type="checkbox" ng-checked="material.isChoosed"  ng-click="chooseOne(material)"  id="{{$index+1}}"/><label for="{{$index+1}}"></label><br/></span>-->
+								<span ng-bind="(param.page - 1) * 10 + $index + 1"></span>
 							</td>
 							<td><span ng-bind="material.erpReserve ? material.erpReserve : 0" title="{{material.erpReserve}}"></span></td>
 							<td>
@@ -1706,12 +1874,15 @@
 								<div class="ellipsis-div" ng-if="!material.pbranden" ng-bind="material.pbrand" title="{{material.pbrand}}"></div>
 							</td>
 							<td ng-bind="material.unit || 'PCS'" title="{{material.unit  || 'PCS'}}"></td>
+							<!--<td>-->
+							<!--<span ng-bind="material.encapsulation || '-'" title="{{material.encapsulation || '-'}}"></span>-->
+							<!--</td>-->
 							<td class="edit">
 								<span name="delete-material" ng-show="!isBatch && !material.exPandOper && !material.addGoodsOper" ng-click="deleteMaterial(material)"><span>删除</span></span>
 								<span ng-show="!isBatch && !material.exPandOper && !material.addGoodsOper" ng-click="showShelfArea(material)">
-									<span ng-if="material.batchCount">添加产品</span>
-									<span ng-if="!material.batchCount">编辑上架</span>
-								</span>
+								<span ng-if="material.batchCount">添加产品</span>
+								<span ng-if="!material.batchCount">编辑上架</span>
+							</span>
 								<span ng-if="material.batchCount" ng-show="!isBatch && !material.exPandOper && !material.addGoodsOper" ng-click="expandGoods(material)"><span>展开<i class="fa fa-angle-down" style="margin-left:2px;"></i></span></span>
 								<!--收起-->
 								<span ng-show="!isBatch && material.exPandOper" ng-click="disExpandGoods(material)" class="packUp"><span>收起<i class="fa fa-angle-up" style="margin-left:2px;"></i></span></span>
@@ -1720,8 +1891,8 @@
 							</td>
 						</tr>
 						<!--展开内容-->
-						<tr ng-if="material.addGoodsOper  || (material.exPandOper && material.goodsArr.length > 0)">
-							<td colspan="7" style="padding: 0;">
+						<tr ng-show="material.addGoodsOper  || (material.exPandOper && material.goodsArr.length > 0)">
+							<td colspan="8" style="padding: 0;">
 								<div class="show-content">
 									<div class="content-body">
 										<table class="public-tab table">
@@ -1741,7 +1912,7 @@
 													<div class="blue-bg">
 														<div></div>
 														<div class="img">
-															<a><img ng-src="{{goods.editPic || material.cmpImg || 'static/img/store/common/default.png'}}" alt="img"/></a>
+															<a><img ng-src="{{goods.editPic || 'static/img/store/common/default.png'}}" alt="img"/></a>
 															<div class="edit-img">
 																<a ng-click="deleteImg(goods)" class="delete-img" title="删除" ng-if="goods.editPic"><i class="fa fa-trash"></i></a>
 																<a ng-click="editGoodsPicture(goods.editPic || 'static/img/store/common/default.png', goods)" title="修改图片"><img ng-src="static/img/icon/update-img.png" /></a>
@@ -1750,15 +1921,24 @@
 														<div class="content margin10">
 															<!--<p class="title">包装/生产日期</p>-->
 															<div class="input-list">
-																<span class="tit">包装:</span><input type="text" class="form-control" name="packaging" ng-maxlength="10" title="包装" maxlength="10" placeholder="包装方式" style="width: 96px;" ng-model="goods.editPackaging"
-																								   ng-class="{'error' : goods.editPackagingInvalid}" ng-blur="editPackaging(goods, true)" ng-change="changePackaging(goods)"/>
+																<span class="tit">包装:</span><!--<input type="text" class="form-control" name="packaging" ng-maxlength="10" title="包装" maxlength="10" placeholder="包装方式" style="width: 96px;" ng-model="goods.editPackaging"
+                                                                                               ng-class="{'error' : goods.editPackagingInvalid}" ng-blur="editPackaging(goods, true)" ng-change="changePackaging(goods)"/>-->
+																<select ng-model="goods.editPackaging" ng-init="goods.editPackaging='请选择'"  class="select-adder select-package" title="包装">
+																	<option ng-repeat="item in packageArray" ng-click="showText(item)">{{item}}</option>
+																</select>
+																<!--<div class="dropdown">
+                                                                    <input class="btn btn-default dropdown-toggle button-select select-adder" id="dropdownMenu2" type="text" ng-model="goods.editPackaging" placeholder="包装方式" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" readonly="readonly">
+                                                                    <ul class="dropdown-menu .dropdown-menu-left button-option" aria-labelledby="dropdownMenu2">
+                                                                        <li ng-repeat="item in packageArray" ng-click="showText(item)">{{item}}</li>
+                                                                    </ul>
+                                                                </div>-->
 															</div>
-															<div class="input-list">
+															<div class="input-list produceDate-fix">
 																<span class="tit">生产日期:</span><input type="text" class="form-control" name="produceDate" ng-maxlength="11" title="生产日期" maxlength="11" placeholder="生产日期" style="width: 96px;" ng-model="goods.editProduceDate"
 																									 ng-class="{'error' : goods.editProduceDateInvalid}"
 																									 ng-change="editProduceDateFa(goods, false)"/>
 															</div>
-															<div class="clearfix">
+															<div class="clearfix produceDate-fix">
 																<span>可拆卖:</span>
 																<span class="switch"><button ng-class="{'active' : goods.editBreakUp}"
 																							 ng-click="toggleIsBreadUp(goods, false)"></button></span>
@@ -1767,8 +1947,8 @@
 														<div class="content margin10">
 															<!--<p class="title">库存</p>-->
 															<div class="input-list">
-																<span class="tit">上架数量:</span><input type="number" class="wid70 form-control" name="reserve" title="上架数量" placeholder="数量"
-																									 ng-model="goods.editReserve" maxlength="9" ng-blur="setPriceMaxAmount(goods, false)" ng-class="{'error' : goods.editReserveInvalid}" oninput="if(value.length>9)value=value.slice(0,9)"/>
+																<span class="tit">库存:</span><input type="number" class="wid70 form-control" name="reserve" title="库存" placeholder="数量"
+																								   ng-model="goods.editReserve" maxlength="9" ng-blur="setPriceMaxAmount(goods, false)" ng-class="{'error' : goods.editReserveInvalid}" oninput="if(value.length>9)value=value.slice(0,9)"/>
 															</div>
 															<div class="input-list">
 																<span class="tit">起订量:</span><input type="number" class="wid70 form-control" name="minBuyQty" title="起拍"  placeholder="数量"
@@ -1817,12 +1997,12 @@
 															<p class="title height29">交期(天):</p>
 															<div class="input-list">
 																<p>
-											<span><input type="number" class="wid36 form-control" name="minDelivery" title="最小交期" placeholder="天数" oninput="if(value.length>2)value=value.slice(0,2)"
+											<span><input type="number" class="wid36 form-control" name="minDelivery" title="最小交期" placeholder="天数" oninput="if(value.length>3)value=value.slice(0,3)"
 														 ng-model="goods.editMinDelivery"
 														 ng-blur="changeDelivery(goods.editMinDelivery, goods.editMaxDelivery, true, goods)"
 														 ng-class="{'error' : goods.editMinDeliveryinValid}"/></span>
 																	<span style="margin-left: 4px;">–</span>
-																	<span><input type="number" class="wid36 form-control" name="maxDelivery" title="最大交期" placeholder="天数" oninput="if(value.length>2)value=value.slice(0,2)" ng-model="goods.editMaxDelivery" ng-blur="changeDelivery(goods.editMinDelivery, goods.editMaxDelivery, false, goods)"
+																	<span><input type="number" class="wid36 form-control" name="maxDelivery" title="最大交期" placeholder="天数" oninput="if(value.length>3)value=value.slice(0,3)" ng-model="goods.editMaxDelivery" ng-blur="changeDelivery(goods.editMinDelivery, goods.editMaxDelivery, false, goods)"
 																				 ng-class="{'error' : goods.editMaxDeliveryinValid}"/></span>
 																</p>
 															</div>
@@ -1870,12 +2050,10 @@
 														<div class="content width140">
 															<p class="title"><span>包装:</span><span ng-bind="goods.packaging">盘装</span></p>
 															<p class="title"><span>生产日期:</span><span ng-bind="goods.produceDate">20160123</span></p>
-															<p class="title" ng-class="{'noBreak' : !goods.breakUp}">
-																<span ng-bind="goods.breakUp ? '可拆卖' : '不可拆卖'"></span>
-															</p>
+															<p class="title" ng-class="{'noBreak' : !goods.breakUp}" ng-if="goods.breakUp" ng-bind="goods.breakUp ? '可拆卖' : '不可拆卖'">不可拆卖</p>
 														</div>
 														<div class="content width130">
-															<p class="title"><span>已上架数量:</span><span ng-bind="goods.reserve">9023492</span></p>
+															<p class="title"><span>库存:</span><span ng-bind="goods.reserve">9023492</span></p>
 															<p class="title"><span>起订量:</span><span ng-bind="goods.minBuyQty">90492</span></p>
 															<p class="title"><span>包装数量:</span><span ng-bind="goods.minPackQty">980</span></p>
 														</div>
@@ -1902,9 +2080,7 @@
 															<div class="input-list">
 																<button class="off" ng-click="editGoods(material, goods)">编辑</button>
 																<button ng-if="goods.status != 601 && goods.status != 602" class="ok" ng-click="putOn(material, goods)">上架</button>
-																<button class="ok" ng-click="isRecommendGoods(goods)" name =
-																		"delete-goods">删除
-																</button>
+																<button class="ok" ng-click="isRecommendGoods(goods)" name ="delete-goods">删除</button>
 															</div>
 														</div>
 													</div>
@@ -1923,7 +2099,7 @@
 													<span>近一个月的销售平均价:<em ng-bind="material.averMonthSalePrice |  formateNumber : 6"></em></span>
 												</td>
 											</tr>
-											<tr class="edit-content edits" ng-if="goods.edit">
+											<tr class="edit-content edits" ng-show="goods.edit">
 												<td colspan="10" style="background:#f0f7fd;">
 													<div class="blue-bg">
 														<div></div>
@@ -1931,18 +2107,26 @@
 															<a><img ng-src="{{goods.editPic || 'static/img/store/common/default.png'}}" alt="img"/></a>
 															<div class="edit-img">
 																<a ng-if="goods.editPic" ng-click="deleteImg(goods)" class="delete-img" title="删除"><i class="fa fa-trash"></i></a>
-																<a
-																		ng-click="editGoodsPicture(goods.editPic || 'static/img/store/common/default.png', goods)" title="修改图片"><img ng-src="static/img/icon/update-img.png" /></a>
+																<a ng-click="editGoodsPicture(goods.editPic || 'static/img/store/common/default.png', goods)" title="修改图片"><img ng-src="static/img/icon/update-img.png" /></a>
 															</div>
 														</div>
 														<div class="content margin10">
 															<!--<p class="title">包装/生产日期</p>-->
 															<div class="input-list">
-																<span class="tit">包装:</span><input type="text" class="form-control" name="packaging" ng-maxlength="10" title="包装" maxlength="10" placeholder="包装方式" style="width: 96px;" ng-model="goods.editPackaging"
-																								   ng-class="{'error' : goods.editPackagingInvalid}"
-																								   ng-blur="editPackaging(goods, true)" ng-change="changePackaging(goods)"/>
+																<span class="tit">包装:</span><!--<input type="text" class="select" name="packaging" ng-maxlength="10" title="包装" maxlength="10" placeholder="包装方式" style="width: 96px;" ng-model="goods.editPackaging"
+																							   ng-class="{'error' : goods.editPackagingInvalid}"
+																							   ng-blur="editPackaging(goods, true)" ng-change="changePackaging(goods)"/>-->
+																<select ng-model="goods.editPackaging" ng-init="goods.editPackaging='请选择'" class="select-adder select-package" title="包装">
+																	<option ng-repeat="item in packageArray" ng-click="showClickText(goods, item)">{{item}}</option>
+																</select>
+																<!--<div class="dropdown">
+                                                                    <input class="btn btn-default dropdown-toggle button-select select-adder" type="text" id="dropdownMenu1" ng-model="goods.editPackaging" placeholder="包装方式" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" readonly="readonly">
+                                                                    <ul class="dropdown-menu .dropdown-menu-left button-option" aria-labelledby="dropdownMenu1">
+                                                                        <li ng-repeat="item in packageArray" ng-click="showClickText(goods, item)">{{item}}</li>
+                                                                    </ul>
+                                                                </div>-->
 															</div>
-															<div class="input-list">
+															<div class="input-list produceDate-fix">
 																<span class="tit">生产日期:</span><input type="text" class="form-control" name="produceDate" ng-maxlength="11" title="生产日期" maxlength="11" placeholder="生产日期" style="width: 96px;" ng-model="goods.editProduceDate"
 																									 ng-class="{'error' : goods.editProduceDateInvalid}"
 																									 ng-change="editProduceDateFa(goods, true)"/>
@@ -1951,7 +2135,7 @@
 																<!--<option value="0">不可拆卖</option>-->
 																<!--</select>-->
 															</div>
-															<div class="clearfix">
+															<div class="clearfix produceDate-fix ">
 																<span>可拆卖:</span>
 																<span class="switch"><button ng-class="{'active' : goods.editBreakUp}"
 																							 ng-click="toggleIsBreadUp(goods, true)"></button></span>
@@ -1960,9 +2144,9 @@
 														<div class="content margin10">
 															<!--<p class="title">库存</p>-->
 															<div class="input-list">
-																<span class="tit">上架数量:</span><input type="number" class="wid70 form-control" name="reserve" title="上架数量" placeholder="数量" ng-model="goods.editReserve" ng-blur="setPriceMaxAmount(goods, true)"
-																									 maxlength="9" oninput="if(value.length>9)value=value.slice(0,9)"
-																									 ng-class="{'error' : goods.editReserveInvalid}"/>
+																<span class="tit">库存:</span><input type="number" class="wid70 form-control" name="reserve" title="库存" placeholder="数量" ng-model="goods.editReserve" ng-blur="setPriceMaxAmount(goods, true)"
+																								   maxlength="9" oninput="if(value.length>9)value=value.slice(0,9)"
+																								   ng-class="{'error' : goods.editReserveInvalid}"/>
 															</div>
 															<div class="input-list">
 																<span class="tit">起订量:</span><input type="number" class="wid70 form-control" name="minBuyQty"
@@ -2015,10 +2199,10 @@
 															<p class="title height29">交期(天):</p>
 															<div class="input-list">
 																<p>
-																<span><input type="number" class="wid36 form-control" name="minDelivery" title="最小交期" placeholder="天数" oninput="if(value.length>2)value=value.slice(0,2)" ng-model="goods.editMinDelivery"
+																<span><input type="number" class="wid36 form-control" name="minDelivery" title="最小交期" placeholder="天数" oninput="if(value.length>3)value=value.slice(0,3)" ng-model="goods.editMinDelivery"
 																			 ng-blur="changeDelivery(goods.editMinDelivery, goods.editMaxDelivery, true, goods)" ng-class="{'error' : goods.editMinDeliveryinValid}"/></span>
 																	<span style="margin-left: 4px;">–</span>
-																	<span><input type="number" class="wid36 form-control" name="maxDelivery" title="最大交期" placeholder="天数" oninput="if(value.length>2)value=value.slice(0,2)" ng-model="goods.editMaxDelivery"
+																	<span><input type="number" class="wid36 form-control" name="maxDelivery" title="最大交期" placeholder="天数" oninput="if(value.length>3)value=value.slice(0,3)" ng-model="goods.editMaxDelivery"
 																				 ng-blur="changeDelivery(goods.editMinDelivery, goods.editMaxDelivery, false, goods)" ng-class="{'error' : goods.editMaxDeliveryinValid}"/></span>
 																</p>
 															</div>
@@ -2026,7 +2210,7 @@
 														<div class="content margin10">
 															<!--<p class="title">自营 / 寄售</p>-->
 															<div class="input-list">
-																<select name="editSelfSale" ng-change="changeSaleMode(goods)" class="wid56 select-adder form-control" ng-model="goods.editSelfSale" ng-disabled="$$nonProduct.canSelfSale">
+																<select name="editSelfSale" ng-change="changeSaleMode(goods)" class="wid56 select-adder form-control" ng-model="goods.editSelfSale" ng-disabled="!$$nonProduct.canSelfSale">
 																	<option value="1">自营</option>
 																	<option value="2">寄售</option>
 																</select>
@@ -2050,7 +2234,7 @@
 											<!--空状态-->
 											<tbody ng-if="currenctMaterial.length == 0">
 											<tr style="height: 190px;">
-												<td colspan="7" style="border-bottom: none;">
+												<td colspan="8" style="border-bottom: none;">
 													<div class="col-xs-2"  style="margin-left: 34%; margin-top: 65px;">
 														<img src="static/img/all/empty-cart.png">
 													</div>
@@ -2066,6 +2250,9 @@
 							</td>
 						</tr>
 						</tbody>
+						<tbody>
+						<!--<tr class="no-hover batch-tr" ng-if="chooseAll && !chooseAllPage" ng-class="{'active': $data.length > 10}">-->
+						</tbody>
 					</table>
 					<div class="empty" ng-if="currenctMaterial.length == 0">
 						<p class="empty-img">
@@ -2073,7 +2260,7 @@
 						</p>
 						<div class="empty-info">
 							<p class="grey"> 暂无产品信息,赶快上传让更多人看到你的产品吧 </p>
-							<a href="/vendor#/vendor_upload"><i></i>马上去上传</a>
+							<a href="vendor#/vendor_upload?type=company"><i></i>马上去上传</a>
 						</div>
 					</div>
 					<div class="record-line text-right" ng-if="currenctMaterial.length != 0">
@@ -2161,7 +2348,7 @@
 							<th width="120">产品名称(类目)</th>
 							<th width="120">品牌</th>
 							<th width="100">型号</th>
-							<th width="100">封装</th>
+							<!--<th width="100">封装</th>-->
 							<th width="80"></th>
 						</tr>
 						</thead>
@@ -2183,30 +2370,31 @@
 								</select>
 							</td>
 							<td title="{{product.pcmpcode}}" ng-bind="product.pcmpcode || '-'">Lhhjhj-3</td>
-							<td title="{{product.encapsulation}}" ng-bind="product.encapsulation  || '-'">BGA</td>
+							<!--<td title="{{product.encapsulation}}" ng-bind="product.encapsulation  || '-'">BGA</td>-->
 							<td class="confirm"><span ng-if="product.matchresults.length != 0 && product.canMatch" ng-click="updateNStandardOne(product)">确认</span></td>
 						</tr>
 						</tbody>
 						<tr style="height: 40px;" class="no-hover">
-							<td colspan="7" style="border-bottom: none; padding: 0;">
-								<div class="record-line text-right">
-								<span class="set-count">
-									每页显示:
-									<!--<input type="text" value="10" class="form-control">-->
-									<!--<ul>-->
-									<!--<li>15</li>-->
-									<!--</ul>-->
-									<select ng-model="$$nonProduct.count" ng-change="fitCountToTable($$nonProduct.count)">
-										<option value="10">10</option>
-										<option value="15">15</option>
-										<option value="20">20</option>
-									</select>
-								</span>
+							<td colspan="8" style="border-bottom: none; padding: 0;">
+								<div class="record-line text-right" ng-if="chooseAllPage">
+									<span class="set-count">
+										每页显示:
+										<select ng-model="$$nonProduct.count" ng-change="fitCountToTable($$nonProduct.count)">
+											<option value="10">10</option>
+											<option value="15">15</option>
+											<option value="20">20</option>
+										</select>
+									</span>
 									显示<span>{{(param.currentPage - 1) * param.count + 1}}</span>-
 									<span ng-if="param.currentPage != materialAll.totalPages">{{param.currentPage * param.count}}</span>
 									<span ng-if="param.currentPage == materialAll.totalPages">{{materialAll.totalElements}}</span>
 									,共:<span style="color: #5078cb;">{{materialAll.totalElements}}</span>个
 								</div>
+								<div class="record-line text-right" ng-if="!chooseAllPage">
+									显示<span>1</span>-
+									<span ng-bind="currenctMaterial.length"></span>
+									,共:<span style="color: #5078cb;">{{currenctMaterial.length}}</span>个
+								</div>
 							</td>
 						</tr>
 						</tbody>
@@ -2254,7 +2442,7 @@
 						<div class="clearfix">
 							<div class="detail">
 								<div class="detail-title">包装:<span ng-bind="goods.packaging">盘装</span></div>
-								<div class="detail-title">已上架数量:<span ng-bind="goods.reserve">9023492</span></div>
+								<div class="detail-title">库存:<span ng-bind="goods.reserve">9023492</span></div>
 								<div class="detail-title">起订量:<span ng-bind="goods.minBuyQty">90492</span></div>
 							</div>
 							<div class="detail distance">
@@ -2267,7 +2455,7 @@
 							</div>
 							<div class="detail">
 								<div class="detail-title">销售方式:<span ng-bind="goods.selfSale">寄售</span></div>
-								<div class="detail-title" ng-bind="goods.breakUp ? '可拆卖':'不可拆卖'">不可拆卖</div>
+								<div class="detail-title" ng-bind="goods.breakUp ? '可拆卖':'不可拆卖'"></div>
 							</div>
 							<div class="detail width100">
 								<div class="title-price"><span>梯度/pcs</span><span>单价(<i ng-bind="goods.currencyName == 'RMB' ? '¥':'$'"></i>)</span></div>
@@ -2322,4 +2510,24 @@
 		position: relative;
 		top: 7px;
 	}
-</style>
+</style>
+
+<!--
+<script>
+	$(function(){
+		$(document).on('click', function () {
+			if ($(document).scrollTop() + $(window).height() < $('.record-line').offset().top + $('.record-line').height()) {
+				$('.standard-tab.table>tbody>tr.batch-tr').addClass('active')
+			} else {
+				$('.standard-tab.table>tbody>tr.batch-tr').removeClass('active')
+			}
+		})
+		$(window).bind("scroll",function() {
+			if ($(document).scrollTop() + $(window).height() < $('.record-line').offset().top + $('.record-line').height()) {
+				$('.standard-tab.table>tbody>tr.batch-tr').addClass('active')
+			} else {
+				$('.standard-tab.table>tbody>tr.batch-tr').removeClass('active')
+			}
+		});
+	})
+</script>-->

+ 442 - 202
src/main/webapp/resources/view/vendor/forstore/erp/vendor_material_unstandard_erp.html → src/main/webapp/resources/view/vendor/forstore/erp/vendor_material_person_erp.html

@@ -109,6 +109,10 @@
 	.public-tab.table>tbody>tr>td{
 		border-top: none;
 		border-bottom: #e8e8e8 1px solid;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+		padding: 0 10px;
 	}
 	.public-tab.table>tbody>tr>td a{
 		margin: 0;
@@ -125,14 +129,14 @@
 	.public-tab.table>tbody>tr>td span{
 		margin: 0;
 	}
-	.public-tab.table>tbody>tr>td span.brand-type{
+	/*.public-tab.table>tbody>tr>td span.brand-type{
 		display: inline-block;
 		margin: 0;
-		width: 80%;
+		width: 180px;
 		overflow: hidden;
 		text-overflow: ellipsis;
 		white-space: nowrap;
-	}
+	}*/
 	.public-tab.table>tbody>tr>td span:hover span {
 		color: #fff;
 		background: #5078cb;
@@ -171,8 +175,7 @@
 	}
 	.search-check{
 		width: 100%;
-		min-height: 54px;
-		height: auto;
+		height: 54px;
 		background: #fff;
 		padding-top: 10px;
 		margin-bottom: 16px;
@@ -180,7 +183,6 @@
 	.search-check .search{
 		width: 550px;
 		margin-left: 150px;
-		margin-bottom: 10px;
 	}
 	.search-check .search .form-control{
 		width: 340px;
@@ -239,92 +241,9 @@
 	.search-check .check .check-active label{
 		margin-right: 0 !important;
 	}
-	.search-check .batch-operate {
-		clear: both;
-		background: #99FFFF;
-	}
-	.search-check .batch-operate .operate-head {
-		height: 40px;
-		line-height: 40px;
-		margin: 0 10px;
-		border-bottom: 1px solid;
-		padding: 0 20px;
-	}
-	.search-check .batch-operate .operate-head .check-active {
-		font-weight: normal;
-		height: 40px;
-	}
-	.search-check .batch-operate .operate-head .red-text {
-		color: #ee4312;
-	}
-	.search-check .batch-operate .operate-content {
-		height: 70px;
-		line-height: 30px;
-	}
-	.search-check .batch-operate .operate-content > div {
-		display: inline-block;
-	}
-	.search-check .batch-operate .operate-content > div:first-child {
-		margin-right: 111px;
-		margin-left: 28px;
-	}
-	.search-check .batch-operate .operate-content > div p {
-		font-weight: bold;
-	}
-	.search-check .batch-operate .operate-content > div p .batch-price-title {
-		margin-right: 91px;
-	}
-	.search-check .batch-operate .operate-content > div p .batch-progress {
-		width: 108px;
-		height: 5px;
-		background: #fff;
-		display: inline-block;
+	.check-input {
 		position: relative;
 	}
-	.search-check .batch-operate .operate-content > div p .batch-progress i {
-		width: 5px;
-		height: 10px;
-		background: #169BD5;
-		display: inline-block;
-		position: absolute;
-		top: -3px;
-	}
-	.search-check .batch-operate .operate-content > div p em {
-		margin: 0 5px;
-	}
-	.search-check .batch-operate .operate-content > div > div input {
-		padding: 0 5px;
-		height: 25px;
-	}
-	.search-check .batch-operate .operate-content .batch-sale input {
-		width: 60px;
-		margin-right: 10px;
-		padding-right: 12px;
-	}
-	.search-check .batch-operate .operate-content .batch-sale div .com-btn-submit {
-		margin-right: 10px;
-	}
-	.search-check .batch-operate .operate-content .batch-sale > div {
-		position: relative;
-	}
-	.search-check .batch-operate .operate-content .batch-sale div i {
-		position: absolute;
-		left: 234px;
-		top: 2px;
-	}
-	.search-check .batch-operate .operate-content .batch-date input {
-		width: 56px;
-	}
-	/*.search-check .batch-operate .operate-content .batch-sale > div > input::-webkit-outer-spin-button,
-	.search-check .batch-operate .operate-content .batch-sale > div > input::-webkit-inner-spin-button {
-		-webkit-appearance: revert !important;
-		margin: unset !important;
-		opacity: 1 !important;
-		height: auto !important;
-	}*/
-	/*.search-check .batch-operate .operate-content .batch-sale input {
-		-webkit-appearance: textfield !important;
-	}*/
 	.check-input input{
 		display: none;
 	}
@@ -344,6 +263,11 @@
 	.check-input input[type="checkbox"]:checked + label{
 		background-position: -15px 0;
 	}
+	.check-input .standard {
+		position: absolute;
+		top: 0;
+		left: 0;
+	}
 	.record-line{
 		min-height: 30px;
 		font-size: 12px;
@@ -357,6 +281,9 @@
 	.wanted_list01 .pagination{
 		margin: 0;
 	}
+	.wanted_list01 .tab table th {
+		color: #333 !important;
+	}
 	.ng-table-pager{
 		padding-bottom: 20px;
 	}
@@ -580,7 +507,7 @@
 		background: url("static/img/icon/check-ok.png") no-repeat center;
 	}
 	/*分页鼠标悬停效果*/
-	.device .wanted_list01 a:hover {
+	.device .wanted_list01 .pagination a:hover {
 		border-bottom: 1px solid #ddd!important;
 	}
 	.device .wanted_list01 a.page-a:hover{
@@ -614,7 +541,7 @@
 		color: #a10606!important;
 	}
 	.public-tab.table>tbody>tr>td.edit{
-		text-align: left;
+		text-align: center;
 		padding: 8px 0;
 		overflow: visible;
 	}
@@ -765,13 +692,16 @@
 		font-size: 14px;
 		color: #f15601;
 	}
-	.result a{
+	.result a.fr{
 		padding-right: 10px;
-		float: right;
 		font-size: 20px;
 		font-weight: bold;
 		color: #ef1d1d;
 	}
+	.result .operate-introduce {
+		font-size: 14px;
+		color: #5078cb;
+	}
 	.tab-head{
 		width: 100%;
 		height: 40px;
@@ -1055,7 +985,7 @@
 	}
 	.edit-contents .content .title span:first-child {
 		float: left;
-		width: 80px;
+		width: 70px;
 		text-align: right;
 	}
 	.edit-contents .content .title span:last-child {
@@ -1340,13 +1270,6 @@
 	#define-content .labelling em{
 		color: #f00;
 	}
-	#define-content td > span {
-		float: left;
-		margin-left: 20px;
-		font-size: 13px;
-		color: #008000;
-		line-height: 24px;
-	}
 	#define-content .labelling input{
 		padding-left: 10px;
 		width: 157px;
@@ -1568,10 +1491,10 @@
 	#wanted-list02{
 		display: none;
 	}
-	.modal-backdrop {
-		background-color: transparent ;
-		bottom: unset!important;
-	}
+	/* .modal-backdrop {
+         background-color: transparent ;
+         bottom: unset!important;
+     }*/
 	.modal{
 		bottom: unset!important;
 	}
@@ -1582,83 +1505,335 @@
 		position: absolute;
 		top: 45px;
 	}
-	.pro_management .table tr th .erp-reserve {
+	.replace-row:hover {
+		background: #fff !important;
+	}
+	.replace-row td {
+		padding: 0 21px !important;
+	}
+	.replace-row td > div {
+		/*height: 67px;*/
+	}
+	.replace-row td > div > p {
+		display: inline-block;
+		float: left;
+		font-size: 14px;
+		height: 32px;
+		line-height: 32px;
+		padding-left: 10px;
+	}
+	.replace-row td > div > div {
+		display: inline-block;
+		float: left;
+		line-height: 32px;
+		width: 884px;
+	}
+	.replace-row td > div > div .replace-item {
+		display: inline-block;
+		width: 50%;
+		text-align: left;
+		background: #f6fbfe;
+		float: left;
+		height: 32px;
+	}
+	.replace-row td > div > div .replace-item:nth-child(2n-1) {
+		border-right: 1px solid #dde9fc;
+	}
+	.replace-row td > div > div .replace-item:nth-child(4n-1),
+	.replace-row td > div > div .replace-item:nth-child(4n) {
+		background: #eff4fd;
+	}
+	.replace-row td > div > div .replace-item i {
+		width: 18px;
+		height: 18px;
+		display: inline-block;
+		border-radius: 100%;
+		background: #9fd4ff;
+		color: #fff;
+		text-align: center;
+		line-height: 18px;
+		margin-left: 10px;
+		font-size: 12px;
+	}
+	.replace-row td > div > div .replace-item span {
+		display: inline-block;
+		width: 200px;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+		vertical-align: middle;
+	}
+	.edit-replace-box {
+		position: fixed;
+		width: 510px;
+		top: 10%;
+		left: 33%;
+		/*-webkit-box-shadow: 0 5px 15px rgba(0,0,0,.5);*/
+		/*-moz-box-shadow: 0 5px 15px rgba(0,0,0,.5);*/
+		/*box-shadow: 0 5px 15px rgba(0,0,0,.5);*/
+		z-index: 1;
+		font-size: 14px;
+	}
+	.edit-replace-box .title {
+		position: relative;
+		height: 44px;
+		background: #5078cb;
+		line-height: 44px;
+		color: #fff;
+		border-top-right-radius: 5px;
+		border-top-left-radius: 5px;
+	}
+	.edit-replace-box .title > div {
+		display: inline-block;
+		padding-left: 57px;
+		width: 47%;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+	}
+	.edit-replace-box .title i {
+		position: absolute;
+		right: 10px;
+		top: 8px;
 		cursor: pointer;
 	}
-	.pro_management .table tr th .erp-reserve .sort-area,
-	.pro_management .table tr th .erp-reserve .sort-area:hover{
-		color: inherit !important;
+	.edit-replace-box .content {
+		padding: 9px 0;
+		background: #fff;
 	}
-	.pro_management .table tr th .erp-reserve .sort-area .active{
+	.edit-replace-box .content .content-line {
+		margin: 0 0 14px 0;
+		position: relative;
+	}
+	.edit-replace-box .content .content-line p {
+		margin-left: 16px;
+		font-size: 14px;
+	}
+	.edit-replace-box .content .content-line .form-item {
+		display: inline-block;
+		width: 49%;
+	}
+	.edit-replace-box .content .content-line .form-item span em {
+		color: #e30e16
+	}
+	/*.edit-replace-box .content .content-line .form-item > span i {*/
+	/*color: #fd2637;*/
+	/*margin-right: 4px;*/
+	/*}*/
+	.edit-replace-box .content .content-line .form-item input {
+		border: 1px solid #bfbfbf;
+		border-radius: 2px;
+		height: 28px;
+		padding: 0 8px;
+		display: inline-block;
+		width: 140px;
+		padding: 0 8px;
+	}
+	.edit-replace-box .content .content-line .form-item.form-left span {
+		display: inline-block;
+		width: 85px;
+		text-align: right;
+	}
+	.edit-replace-box .content .content-line .form-item.form-left span i {
+		width: 18px;
+		height: 18px;
+		display: inline-block;
+		border-radius: 100%;
+		background: #9fd4ff;
+		color: #fff;
+		text-align: center;
+		line-height: 18px;
+		margin-left: 10px;
+		font-size: 12px;
+		margin-right: 4px;
+	}
+	/*.edit-replace-box .content .content-line .form-item.form-left input {
+		width: 140px;
+		padding: 0 8px;
+	}*/
+	.edit-replace-box .content .content-line .form-item.form-right {
+		padding-left: 13px;
+		position: relative;
+	}
+	/*.edit-replace-box .content .content-line .form-item.form-right input {*/
+	/*width: 101px;*/
+	/*padding: 0 8px;*/
+	/*}*/
+	.edit-replace-box .content .content-line .form-item.form-right i {
+		cursor: pointer;
+	}
+	.edit-replace-box .operate {
+		background: #fff;
+		height: 62px;
+		text-align: center;
+		padding-top: 15px;
+		border-top: 1px solid #e4e5e6;
+		border-bottom-left-radius: 5px;
+		border-bottom-right-radius: 5px;
+	}
+	.edit-replace-box .operate span {
+		display: inline-block;
+		width: 64px;
+		height: 28px;
+		line-height: 28px;
+		text-align: center;
+		background: #5078cb;
+		color: #fff;
+		cursor: pointer;
+	}
+	.edit-replace-box .operate span:last-child {
+		margin-left: 15px;
+		background: #acabab;
+	}
+
+	.edit-replace-box .content .content-line .form-item ul.similar-list {
+		position: absolute;
+		top: 27px;
+		left: 89px;
+		background: #fff;
+		border: 1px solid #b5b5b5;
+		z-index: 1;
+		max-height: 120px;
+		overflow-y: auto;
+		overflow-x: hidden;
+		border-radius: 3px;
+		width: 141px;
+		font-size: 14px;
+	}
+	.edit-replace-box .content .content-line .form-item.form-right ul.similar-list {
+		width: 140px;
+		left: 65px;
+	}
+	.edit-replace-box .content .content-line .form-item ul.similar-list li {
+		height: 30px;
+		line-height: 30px;
+		cursor: pointer;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+		padding: 0 5px;
+	}
+	.edit-replace-box .content .content-line .form-item ul.similar-list li:hover {
+		background: #5078cb;
+		color: #fff;
+	}
+	.edit-replace-box .content .content-line .form-item input.error {
+		border-color: #e30e16;
+	}
+	.open-more{
+		text-align: center;
+		background: #f6f9ff;
+		clear: both;
+		height: 27px;
+		line-height: normal !important;
+		margin-right: 7px;
+		margin-left: 94px;
+	}
+	.open-more a{
+		font-size: 12px;
+		width: 200px;
+		height: 15px;
+		display: inline-block;
+		border: #5e9fcb 1px dashed;
+		border-top: 0;
+		font-weight: inherit;
+		background: #f6f9ff;
+		border-bottom-left-radius: 50px;
+		border-bottom-right-radius: 50px;
+		line-height: 15px;
+		text-decoration: none;
+		position: relative;
+		top: -3px;
+		z-index: 1;
+	}
+	.open-more a i{
+		margin-right: 5px;
+		font-size: 20px;
+		vertical-align: middle;
+		position: relative;
+		top: -5px;
+		color: #4290f7;
+	}
+	.open-more div {
+		position: relative;
+		height: 27px;
+		border-top: 1px dashed #5e9fcb;
+		top: 9px;
+	}
+	.open-more div.active {
+		top: 19px;
+	}
+	.open-more div.active a{
+		border-top-left-radius: 50px;
+		border-top-right-radius: 50px;
+		position: relative;
+		top: -12px;
+		border-bottom: none;
+		border-top: #5e9fcb 1px dashed;
+		border-bottom-left-radius: 0;
+		border-bottom-right-radius: 0;
+		background: #f1f6ff;
+	}
+	.open-more div.active em{
+		top: 3px;
+	}
+	.open-more div.active i{
+		top: 0;
+	}
+	.open-more a em{
+		position: relative;
+		top: -4px;
 		color: #5078cb;
 	}
+	.device .wanted_list01 .open-more a:hover {
+		border-bottom: 1px dashed !important;
+	}
 </style>
 <div class="user_right fr">
 	<!--货品管理-->
 	<div class="pro_management device">
 		<div class="com_tab">
 			<ul class="fl" style="width: 100%">
-				<li class="active"><a ui-sref="vendor_material_unstandard_erp({standardParam:'unstandard'})">非标产品</a></li>
-				<li><a ui-sref="vendor_material_erp({standardParam:'standard'})">标准产品</a></li>
+				<li><a ui-sref="vendor_material_erp">企业产品库</a></li>
+				<li class="active"><a ui-sref="vendor_material_person_erp">个人产品库</a></li>
 				<li><a ui-sref="vendor_onSale_erp">在售产品</a></li>
 				<li><a ui-sref="vendor_undercarriage_erp">上下架历史</a></li>
 			</ul>
 		</div>
+		<!--<div class="com_tab">
+			&lt;!&ndash;<ul class="fl distance" style="width: 100%">
+				<li ng-class="{active : standard_tab == 'unstandard'}"  ng-click="toggleStandard('unstandard')" title="非标产品({{nCount}})"><a href="" class="standard">非标产品(<em class="count">{{nCount}}</em>)</a></li>
+				<li ng-class="{active : standard_tab =='standard'}" ng-click="toggleStandard('standard')" title="标准产品({{sCount}})"><a href="" class="standard">标准产品(<em class="count">{{sCount}}</em>)</a></li>
+			</ul>&ndash;&gt;
+			&lt;!&ndash;匹配结果导航&ndash;&gt;
+			<div class="match-menu" ng-if="resultFrame">
+                <span>
+                    <a ng-click="toggleTab('matchResult')">匹配结果</a>
+                    <i class="fa fa-remove" ng-click="closeResultFrame('unstandard')"></i>
+                </span>
+			</div>
+		</div>-->
 		<!--非标和标准产品列表页-->
 		<div ng-if="standard_tab == 'unstandard' || standard_tab =='standard'">
 			<div class="search-check">
 				<div class="search fl">
 					<input type="text" class="form-control" ng-model="param.keyword" ng-search="onSearch()" placeholder="类目/型号/品牌"/>
 					<button ng-click="onSearch()">搜索</button>
-					<a ng-click="download()">批量导出</a>
+					<!--<a ng-click="download()">批量导出</a>-->
 				</div>
 				<div class="check fr">
-					<a ng-click="matchAllForERP()" ng-show="!isBatch"><span>一键匹配</span></a>
-					<a ng-click="enterBatch()" ng-show="!isBatch"><span>批量操作</span></a>
-					<!--<span class="check-btn" ng-show="isBatch">-->
-						<!--<label class="check-active">-->
-							<!--<input type="checkbox"  ng-click="chooseAll()" ng-checked="isChoosedAll" id="AllChoose"/>-->
-							<!--<label for="AllChoose"></label>-->
-							<!--<span>全选</span>-->
-						<!--</label>-->
-						<!--<a-->
-								<!--ng-click="deleteBatch()" name="delete-material">删除</a>-->
-						<!--<a ng-click="exitBatch()">取消</a>-->
-					<!--</span>-->
-				</div>
-				<div class="batch-operate" ng-show="isBatch">
-					<div class="operate-head">
-						<label class="check-active fl">
-							<input type="checkbox"  ng-click="chooseAll()" ng-checked="isChoosedAll" id="AllChoose"/>
+					<!--<a ng-show="!isBatch && standard_tab == 'unstandard'" ng-click="matchAll()"><span ng-show="!isBatch && standard_tab == 'unstandard'">一键匹配</span></a>-->
+					<!--<a ng-show="!isBatch" ng-click="enterBatch()"><span ng-show="!isBatch">批量操作</span></a>-->
+					<a ng-click="deleteBatch()"><span>批量删除</span></a>
+					<!--<span class="check-btn" ng-show="isBatch">
+						<label class="check-active">
+							<input type="checkbox"  ng-click="chooseAll()" ng-checked="isChoosedAll" ng-disabled="currenctMaterial.length == 0" id="AllChoose"/>
 							<label for="AllChoose"></label>
 							<span>全选</span>
 						</label>
-						<div class="fr">
-							<span class="red-text">批量上架仅作用于未上架的产品,已上架的不再重复上架!</span>
-							<span class="com-btn-level1 com-btn-submit" ng-click="batchPutOn()">批量上架</span>
-							<span class="com-btn-level1 com-btn-submit" ng-mouseenter="enterBatchPutOnPropertySaveButton()" ng-mouseleave="leaveBatchPutOnPropertySaveButton()" ng-click="saveBatchPutOnProperty()">保存</span>
-							<span class="com-btn-level1 com-btn-red" ng-click="deleteBatch()">删除</span>
-							<span class="com-btn-level1 com-btn-cancel" ng-click="exitBatch()">取消</span>
-						</div>
-					</div>
-					<div class="operate-content">
-						<div class="batch-sale">
-							<p><span class="batch-price-title">批量设置销售价:</span><em>1</em><span class="batch-progress"><i style="left: {{uasBatchPutOnProperty.editFluctuateRate ? uasBatchPutOnProperty.editFluctuateRate > 200 ? '100%' : uasBatchPutOnProperty.editFluctuateRate / 2 + '%' : 0}}"></i></span><em>200</em></p>
-							<div>
-								<span>销售价 = 近一个月的平均销售价 X </span>
-								<input type="number" ng-model="uasBatchPutOnProperty.editFluctuateRate" ng-change="onSalePriceChange()">
-								<i>%</i>
-								<span class="com-btn-level2 com-btn-submit" ng-click="setSalePrice(100)">100%</span>
-								<span class="com-btn-level2 com-btn-submit" ng-click="setSalePrice(120)">120%</span>
-								<span class="com-btn-level2 com-btn-submit" ng-click="setSalePrice(130)">130%</span>
-								<span class="com-btn-level2 com-btn-submit" ng-click="setSalePrice(150)">150%</span>
-							</div>
-						</div>
-						<div class="batch-date">
-							<p>批量设置交期:</p>
-							<div><span>交期(天)= </span><input type="number" ng-model="uasBatchPutOnProperty.editMinDelivery" ng-blur="uasBatchChangeDeliver(uasBatchPutOnProperty.editMinDelivery, uasBatchPutOnProperty.editMaxDelivery, false)"> - <input type="number" ng-model="uasBatchPutOnProperty.editMaxDelivery" ng-blur="uasBatchChangeDeliver(uasBatchPutOnProperty.editMinDelivery, uasBatchPutOnProperty.editMaxDelivery, true)"></div>
-						</div>
-					</div>
+						<a ng-click="deleteBatch()" name="delete-material">删除</a>
+						<a ng-click="exitBatch()">取消</a>
+					</span>-->
 				</div>
 			</div>
 			<div class="wanted_list01">
@@ -1667,67 +1842,75 @@
 					<table class="public-tab table">
 						<thead>
 						<tr>
-							<th width="80">序号</th>
-							<th width="100">
-								<div class="erp-reserve"  ng-click="sortByERPReserve()">
-									ERP空闲库存
-									<a class="sort-area" href="javascript:void(0)">
-										<i class=" fa fa-long-arrow-up" ng-class="{'active': sortByERP == 'ASC'}"></i>
-										<i class=" fa fa-long-arrow-down" ng-class="{'active': sortByERP == 'DESC'}"></i>
-									</a>
-								</div>
+							<th width="80">
+								<label class="check-active">
+									<input type="checkbox"  ng-click="chooseAll()" ng-checked="isChoosedAll" ng-disabled="currenctMaterial.length == 0" id="AllChoose"/>
+									<label for="AllChoose"></label>
+									<span>全选</span>
+								</label>
 							</th>
+							<th width="80">序号</th>
 							<th width="180">产品名称(类目)</th>
 							<th width="200">产品型号</th>
 							<th width="150">品牌</th>
-							<th width="100">单位</th>
+							<!--<th width="100">单位</th>-->
+							<th width="80">规格</th>
 							<th width="180">操作</th>
 						</tr>
 						</thead>
 						<tbody class="bg-show">
+						<div class="result" ng-if="resultTip"><span class="fl"><em>*</em>创建您的个人产品库,可为您精准推送客户需求</span>
+							<a href="help/helpDetail/56" target="_blank" class="operate-introduce">操作说明</a>
+							<a ng-click="closeTip()" class="fr">&times;</a>
+						</div>
 						<!--<tr style="height: 14px;" ng-show="!isBatch && standard_tab == 'standard'">-->
 						<tr style="height: 14px;">
 							<td colspan="7" class="hei18"></td>
 						</tr>
 						</tbody>
-						<tbody>
-						<tr style="height: 14px;" ng-show="currenctMaterial.length > 0 && standard_tab == 'unstandard' && showTip">
-							<td colspan="7" class="hei17">
-								<span>*匹配成为标准产品方可通过器件选型、参数搜索展示</span><a ng-click="cancelTip()">&times;</a>
-							</td>
-						</tr>
-						</tbody>
-						<tbody ng-repeat="material in currenctMaterial">
+						<!--<tbody>
+                        <tr style="height: 14px;" ng-show="currenctMaterial.length > 0 && standard_tab == 'unstandard' && showTip">
+                            <td colspan="7" class="hei17">
+                                <span>*匹配成为标准产品方可通过器件选型、参数搜索展示</span><a ng-click="cancelTip()">&times;</a>
+                            </td>
+                        </tr>
+                        </tbody>-->
+						<tbody ng-repeat="material in currenctMaterial track by $index">
 						<!--<tr ng-class="{ 'active': material.selected }" class="gre-bg">-->
 						<tr ng-class="{ 'active': material.selected, 'gre-bg' : material.exPandOper}">
 							<td class="check-input">
-								<span ng-show="isBatch"><input type="checkbox" ng-checked="material.isChoosed"  ng-click="chooseOne(material)"  id="{{$index+1}}"/><label for="{{$index+1}}"></label><br/></span>
-								<span
-										ng-show="!isBatch" ng-bind="(param.page - 1) * 10 + $index + 1"></span>
+								<img ng-if="material.standard == 0" src="static/img/store/common/nonstandard.png" alt="" class="standard"/>
+								<img ng-if="material.standard != 0" src="static/img/store/common/standard.png" alt="" class="standard"/>
+								<span><input type="checkbox" ng-checked="material.isChoosed"  ng-click="chooseOne(material)"  id="{{$index+1}}"/><label for="{{$index+1}}"></label><br/></span>
+							</td>
+							<td class="check-input">
+								<span ng-bind="(param.page - 1) * 10 + $index + 1"></span>
 							</td>
-							<td><span ng-bind="material.erpReserve ? material.erpReserve : 0" title="{{material.erpReserve}}"></span></td>
 							<td>
 								<span ng-if="material.kind" ng-bind="material.kind" title="{{material.kind}}"></span>
 								<span ng-if="!material.kind" ng-bind="material.kinden || '-'" title="{{material.kinden || '-'}}"></span>
 							</td>
 							<td>
-								<a class="brand-type" ng-if="material.cmpUuId" ng-href="product/component/{{material.cmpUuId}}/" ng-bind="material.pcmpcode" title="{{material.pcmpcode}}" target="_blank"></a>
+							<span ng-if="material.cmpUuId">
+								<a class="brand-type" ng-bind="material.pcmpcode" ng-href="product/component/{{material.cmpUuId}}/" title="{{material.pcmpcode}}" target="_blank"></a>
+							</span>
 								<span class="brand-type" ng-if="!material.cmpUuId" ng-bind="material.pcmpcode" title="{{material.pcmpcode}}"></span>
 							</td>
 							<td>
 								<div class="ellipsis-div" ng-if="material.pbranden" ng-bind="material.pbranden" title="{{material.pbranden}}"></div>
 								<div class="ellipsis-div" ng-if="!material.pbranden" ng-bind="material.pbrand" title="{{material.pbrand}}"></div>
 							</td>
-							<td ng-bind="material.unit || 'PCS'" title="{{material.unit  || 'PCS'}}"></td>
+							<!--<td ng-bind="material.unit || 'PCS'" title="{{material.unit  || 'PCS'}}"></td>-->
+							<td>
+								<span ng-bind="material.spec || '-'" title="{{material.spec || '-'}}"></span>
+							</td>
 							<td class="edit">
 								<span name="delete-material" ng-show="!isBatch && !material.exPandOper && !material.addGoodsOper" ng-click="deleteMaterial(material)"><span>删除</span></span>
-								<span ng-show="!isBatch && !material.exPandOper && !material.addGoodsOper" ng-click="showShelfArea(material)">
-									<span ng-if="material.batchCount">添加产品</span>
-									<span ng-if="!material.batchCount">编辑上架</span>
-								</span>
-								<span ng-if="material.batchCount" ng-show="!isBatch && !material.exPandOper && !material.addGoodsOper" ng-click="expandGoods(material)"><span>展开<i class="fa fa-angle-down" style="margin-left:2px;"></i></span></span>
+								<!--<span ng-show="!isBatch && !material.exPandOper && !material.addGoodsOper" ng-click="showShelfArea(material)"><span>添加产品</span></span>-->
+								<!--<span ng-if="material.batchCount" ng-show="!isBatch && !material.exPandOper && !material.addGoodsOper" ng-click="expandGoods(material)"><span>展开<i class="fa fa-angle-down" style="margin-left:2px;"></i></span></span>-->
 								<!--收起-->
 								<span ng-show="!isBatch && material.exPandOper" ng-click="disExpandGoods(material)" class="packUp"><span>收起<i class="fa fa-angle-up" style="margin-left:2px;"></i></span></span>
+								<span ng-click="setActiveIndex($index,material)"><span>编辑可替代型号</span></span>
 								<!--<a ng-show="!isBatch" ng-click="showShelfArea(material)"><span ng-if="!isBatch">编辑</span></a>-->
 								<!--<span ng-show="!isBatch && (material.sold == 0 && material.canSell == 1)" ng-click="publishGoods(material)"><span ng-if="!isBatch">上架</span></span>-->
 							</td>
@@ -1746,7 +1929,6 @@
 													<div class="labelling">
 														<!--<em>*</em>-->
 														自定义标签 : <input maxlength="20" type="text" ng-model="goods.editTag" ng-blur="blurTag(goods)" ng-change="changeTag(goods)" placeholder="请设置产品标签"></div>
-													<span>近一个月的销售平均价:<em ng-bind="material.averMonthSalePrice |  formateNumber : 6"></em></span>
 												</td>
 											</tr>
 											<tr class="edit-content edits" >
@@ -1754,7 +1936,7 @@
 													<div class="blue-bg">
 														<div></div>
 														<div class="img">
-															<a><img ng-src="{{goods.editPic || material.cmpImg || 'static/img/store/common/default.png'}}" alt="img"/></a>
+															<a><img ng-src="{{goods.editPic || 'static/img/store/common/default.png'}}" alt="img"/></a>
 															<div class="edit-img">
 																<a ng-click="deleteImg(goods)" class="delete-img" title="删除" ng-if="goods.editPic"><i class="fa fa-trash"></i></a>
 																<a ng-click="editGoodsPicture(goods.editPic || 'static/img/store/common/default.png', goods)" title="修改图片"><img ng-src="static/img/icon/update-img.png" /></a>
@@ -1780,8 +1962,8 @@
 														<div class="content margin10">
 															<!--<p class="title">库存</p>-->
 															<div class="input-list">
-																<span class="tit">上架数量:</span><input type="number" class="wid70 form-control" name="reserve" title="上架数量" placeholder="数量"
-																									 ng-model="goods.editReserve" maxlength="9" ng-blur="setPriceMaxAmount(goods, false)" ng-class="{'error' : goods.editReserveInvalid}" oninput="if(value.length>9)value=value.slice(0,9)"/>
+																<span class="tit">库存:</span><input type="number" class="wid70 form-control" name="reserve" title="库存" placeholder="数量"
+																								   ng-model="goods.editReserve" maxlength="9" ng-blur="setPriceMaxAmount(goods, false)" ng-class="{'error' : goods.editReserveInvalid}" oninput="if(value.length>9)value=value.slice(0,9)"/>
 															</div>
 															<div class="input-list">
 																<span class="tit">起订量:</span><input type="number" class="wid70 form-control" name="minBuyQty" title="起拍"  placeholder="数量"
@@ -1843,7 +2025,7 @@
 														<div class="content margin10">
 															<!--<p class="title">自营 / 寄售</p>-->
 															<div class="input-list">
-																<select ng-disabled="!$$nonProduct.canSelfSale" name="selfSale" class="wid56 select-adder form-control" ng-model="goods.editSelfSale">
+																<select ng-disabled="$$nonProduct.canSelfSale" name="selfSale" class="wid56 select-adder form-control" ng-model="goods.editSelfSale" ng-disabled="$$nonProduct.canSelfSale">
 																	<option value="1">自营</option>
 																	<option value="2">寄售</option>
 																</select>
@@ -1883,12 +2065,10 @@
 														<div class="content width140">
 															<p class="title"><span>包装:</span><span ng-bind="goods.packaging">盘装</span></p>
 															<p class="title"><span>生产日期:</span><span ng-bind="goods.produceDate">20160123</span></p>
-															<p class="title" ng-class="{'noBreak' : !goods.breakUp}">
-																<span ng-bind="goods.breakUp ? '可拆卖' : '不可拆卖'"></span>
-															</p>
+															<p class="title" ng-class="{'noBreak' : !goods.breakUp}" ng-bind="goods.breakUp ? '可拆卖' : '不可拆卖'">不可拆卖</p>
 														</div>
 														<div class="content width130">
-															<p class="title"><span>已上架数量:</span><span ng-bind="goods.reserve">9023492</span></p>
+															<p class="title"><span>库存:</span><span ng-bind="goods.reserve">9023492</span></p>
 															<p class="title"><span>起订量:</span><span ng-bind="goods.minBuyQty">90492</span></p>
 															<p class="title"><span>包装数量:</span><span ng-bind="goods.minPackQty">980</span></p>
 														</div>
@@ -1933,7 +2113,6 @@
 													<div class="labelling">
 														<!--<em>*</em>-->
 														自定义标签 : <input maxlength="20" type="text" ng-model="goods.editTag" ng-blur="blurTag(goods)" ng-change="changeTag(goods)" placeholder="请设置产品标签"></div>
-													<span>近一个月的销售平均价:<em ng-bind="material.averMonthSalePrice |  formateNumber : 6"></em></span>{{material.b2cDownStatus}}
 												</td>
 											</tr>
 											<tr class="edit-content edits" ng-if="goods.edit">
@@ -1973,9 +2152,9 @@
 														<div class="content margin10">
 															<!--<p class="title">库存</p>-->
 															<div class="input-list">
-																<span class="tit">上架数量:</span><input type="number" class="wid70 form-control" name="reserve" title="上架数量" placeholder="数量" ng-model="goods.editReserve" ng-blur="setPriceMaxAmount(goods, true)"
-																									 maxlength="9" oninput="if(value.length>9)value=value.slice(0,9)"
-																									 ng-class="{'error' : goods.editReserveInvalid}"/>
+																<span class="tit">库存:</span><input type="number" class="wid70 form-control" name="reserve" title="库存" placeholder="数量" ng-model="goods.editReserve" ng-blur="setPriceMaxAmount(goods, true)"
+																								   maxlength="9" oninput="if(value.length>9)value=value.slice(0,9)"
+																								   ng-class="{'error' : goods.editReserveInvalid}"/>
 															</div>
 															<div class="input-list">
 																<span class="tit">起订量:</span><input type="number" class="wid70 form-control" name="minBuyQty"
@@ -2078,6 +2257,30 @@
 								</div>
 							</td>
 						</tr>
+						<tr class="replace-row" ng-if="material.productReplaceList.length > 0">
+							<td colspan="7">
+								<div>
+									<p>可替代型号:</p>
+									<div class="replace-list">
+										<div class="replace-item" ng-repeat="replace in material.productReplaceList" ng-if="material.showMoreReplace || (!material.showMoreReplace && replace.detno < 5) ">
+											<i>{{replace.detno}}</i>
+											<span title="{{replace.ptrCmpcode}}">型号:{{replace.ptrCmpcode}}</span>
+											<span title="{{replace.ptrBranden}}">品牌:{{replace.ptrBranden}}</span>
+										</div>
+										<div ng-if="(material.productReplaceList.length < 4 && material.productReplaceList.length % 2 !== 0) || (material.productReplaceList.length > 4 && material.showMoreReplace && material.productReplaceList.length % 2 !== 0)" class="replace-item"></div>
+									</div>
+									<div class="open-more" ng-if="material.productReplaceList.length > 4">
+										<div>
+											<a href="javascript:void(0)" ng-click="material.showMoreReplace = !material.showMoreReplace" ng-if="material.productReplaceList.length > 4" ng-class="{'active': material.showMoreReplace}">
+												<em ng-bind="!material.showMoreReplace ? '查看更多' : '收起'"></em>
+												<i class="fa fa-angle-up" ng-if="material.showMoreReplace"></i>
+												<i class="fa fa-angle-down" ng-if="!material.showMoreReplace"></i>
+											</a>
+										</div>
+									</div>
+								</div>
+							</td>
+						</tr>
 						</tbody>
 					</table>
 					<div class="empty" ng-if="currenctMaterial.length == 0">
@@ -2085,8 +2288,8 @@
 							<img src="static/img/all/empty-cart.png">
 						</p>
 						<div class="empty-info">
-							<p class="grey"> 暂无产品信息,赶快上传让更多人看到你的产品吧 </p>
-							<a href="/vendor#/vendor_upload"><i></i>马上去上传</a>
+							<p class="grey"> 创建您的个人产品库,可为您精准推送客户需求 </p>
+							<a href="vendor#/vendor_upload?type=self"><i></i>马上去上传</a>
 						</div>
 					</div>
 					<div class="record-line text-right" ng-if="currenctMaterial.length != 0">
@@ -2267,7 +2470,7 @@
 						<div class="clearfix">
 							<div class="detail">
 								<div class="detail-title">包装:<span ng-bind="goods.packaging">盘装</span></div>
-								<div class="detail-title">已上架数量:<span ng-bind="goods.reserve">9023492</span></div>
+								<div class="detail-title">库存:<span ng-bind="goods.reserve">9023492</span></div>
 								<div class="detail-title">起订量:<span ng-bind="goods.minBuyQty">90492</span></div>
 							</div>
 							<div class="detail distance">
@@ -2302,6 +2505,43 @@
 	</div>
 </div>
 
+<div class="com-modal-wrap" ng-if="activeIndex > -1">
+	<div class="edit-replace-box">
+		<div class="title">
+			<div>型号:<span>{{editCmp}}</span></div>
+			<div>品牌:<span>{{editBrand}}</span></div>
+			<i class="fa fa-close" ng-click="setActiveIndex(-1)"></i>
+		</div>
+		<div class="content">
+			<div class="content-line">
+				<p>可替代型号:</p>
+			</div>
+			<div class="content-line" ng-repeat="(key, mate) in replaceMaterialList">
+				<div class="form-item form-left">
+					<span><i>{{key + 1}}</i><em>*</em>型号:</span>
+					<input type="text" class="form-control" ng-model="mate.ptrCmpcode" ng-change="onCodeChange(mate.ptrCmpcode, key)" ng-blur="onCodeBlur(key)" ng-class="{'error': errorObj[key].code == 1}" placeholder="请输入型号名称">
+					<ul class="similar-list" ng-show="mate.showSimilarCodeList && similarCode.length > 0 && mate.ptrCmpcode" ng-mouseenter="setIsInCodeList(true, key)" ng-mouseleave="setIsInCodeList(false, key)">
+						<li ng-repeat="sCode in similarCode" ng-bind="sCode.code" title="{{sCode.code}}" ng-click="setCode(key, sCode.code)"></li>
+					</ul>
+				</div>
+				<div class="form-item form-right">
+					<span><em>*</em>品牌:</span>
+					<input type="text" class="form-control" ng-model="mate.ptrBranden" ng-change="onBrandChange(mate.ptrBranden, key)" ng-blur="onBrandBlur(key)" ng-class="{'error': errorObj[key].brand == 1}" placeholder="请输入品牌名称">
+					<ul class="similar-list" ng-show="mate.showSimilarBrandList && similarBrand.length > 0 && mate.ptrBranden" ng-mouseenter="setIsInBrandList(true, key)" ng-mouseleave="setIsInBrandList(false, key)">
+						<li ng-repeat="sBrand in similarBrand" ng-bind="sBrand.nameEn" title="{{sBrand.nameEn}}" ng-click="setBrand(key, sBrand.nameEn)"></li>
+					</ul>
+					<i class="fa fa-minus-circle" ng-if="replaceMaterialList.length > 1" ng-click="setReplies('sub', key)"></i>
+					<i class="fa fa-plus-circle" ng-if="replaceMaterialList.length -1 == key && replaceMaterialList.length < 10" ng-click="setReplies('add', key)"></i>
+				</div>
+			</div>
+		</div>
+		<div class="operate">
+			<span ng-click="setProductReplacesByPerson(replaceMaterialList)">确定</span>
+			<span ng-click="setActiveIndex(-1)">取消</span>
+		</div>
+	</div>
+</div>
+
 <style>
 	/**/
 	.wanted_list01 .empty{

File diff suppressed because it is too large
+ 694 - 172
src/main/webapp/resources/view/vendor/forstore/erp/vendor_onSale_erp.html


+ 39 - 35
src/main/webapp/resources/view/vendor/forstore/erp/vendor_undercarriage_erp.html

@@ -219,6 +219,13 @@
         line-height: 15px;
         left: 18px;
     }
+    .check-input .standard{
+        position: absolute;
+        top: 0;
+        left: 0;
+        width: 27px;
+        height: 27px;
+    }
     .pro_management .product_off dd:last-of-type{
         border-bottom: #cfcfcf 1px solid;
     }
@@ -533,16 +540,23 @@
     .text-more-80 span.text-more{
         width: 50px;
     }
+    /*分页鼠标悬停效果*/
+    .device .wanted_list01 a:hover {
+        border-bottom: 1px solid #ddd!important;
+    }
+    .device .wanted_list01 a.page-a:hover{
+        color: #fff!important;
+    }
 </style>
 <div class="user_right fr">
     <!--货品管理-->
     <div class="pro_management device">
         <div class="com_tab">
             <ul class="fl" style="width: 100%">
-                <li ng-class="{'active': tab == 'unstandard_material'}"><a ui-sref="vendor_material_unstandard_erp({standardParam:'unstandard'})">非标产品</a></li>
-                <li ng-class="{'active': tab == 'vendor_material'}"><a ui-sref="vendor_material_erp({standardParam:'standard'})">标准产品</a></li>
-                <li ng-class="{'active': tab == 'onSale'}"><a ui-sref="vendor_onSale_erp">在售产品</a></li>
-                <li ng-class="{'active': tab == 'undercarriage'}"><a ui-sref="vendor_undercarriage_erp">上下架历史</a></li>
+                <li><a ui-sref="vendor_material_erp">企业产品库</a></li>
+                <li><a ui-sref="vendor_material_person_erp">个人产品库</a></li>
+                <li><a ui-sref="vendor_onSale_erp">在售产品</a></li>
+                <li class="active"><a ui-sref="vendor_undercarriage_erp">上下架历史</a></li>
             </ul>
         </div>
         <div class="search-check">
@@ -554,19 +568,19 @@
                     <input type="hidden" name="ids" ng-value="localInfo.ids">
                 </form>
             </div>
-<!--            <div class="check fr">
-                <a  ng-click="">批量操作</a>
-                <span class="check-btn">
-                    <label class="check-active">
-                        <input type="checkbox" id="AllChoose"/>
-                        <label for="AllChoose"></label>
-                        <span>全选</span>
-                    </label>
-                    <a href="#">上架</a>
-                    <a href="#">取消</a>
-                    <a href="#">确定</a>
-                </span>
-            </div>-->
+            <!--            <div class="check fr">
+                            <a  ng-click="">批量操作</a>
+                            <span class="check-btn">
+                                <label class="check-active">
+                                    <input type="checkbox" id="AllChoose"/>
+                                    <label for="AllChoose"></label>
+                                    <span>全选</span>
+                                </label>
+                                <a href="#">上架</a>
+                                <a href="#">取消</a>
+                                <a href="#">确定</a>
+                            </span>
+                        </div>-->
         </div>
         <!--<div class="search-check">
             <a ng-click="" class="down-goods-btn">批量操作</a>
@@ -620,6 +634,10 @@
                         <td class="middle padding0 check-input">
                             <!-- <span><input type="checkbox" id="{{$index+1}}"/><label for="{{$index+1}}"></label><br/></span>-->
                             <div>{{$index + 1}}</div>
+                            <!--非标产品标志-->
+                            <img ng-if="!commodity.uuid" src="static/img/store/common/nonstandard.png" alt="" class="standard"/>
+                            <!--标产品标志-->
+                            <img ng-if="commodity.uuid" src="static/img/store/common/standard.png" alt="" class="standard"/>
                         </td>
                         <td class="middle"  style="vertical-align: top !important;">
                             <div class="fl img">
@@ -700,24 +718,10 @@
                         </td>
                     </tr>
                     </tbody>
-                   <!-- <tbody>
-                    <tr style="height: 252px;" ng-if="!currenctGoods || currenctGoods.length <= 0">
-                        <td colspan="10" style="padding: 74px 0;">
-                            <div style="line-height: 106px;">
-                                <div class="col-xs-2" style="margin-left: 35%;">
-                                    <img src="static/img/all/empty-cart.png">
-                                </div>
-                                <div class="col-xs-4" style="line-height: 124px;">
-                                    <p class="grey f16">暂无下架产品信息</p>
-                                </div>
-                            </div>
-                        </td>
-                    </tr>
-                    </tbody>-->
                     <tbody class="no-record-list" ng-if="!currenctGoods || currenctGoods.length <= 0">
-                        <tr class="height200">
-                            <td colspan="10"><img src="static/img/all/empty-cart.png"><span>暂无下架产品信息</span></td>
-                        </tr>
+                    <tr style="height:378px!important;">
+                        <td colspan="10"><img src="static/img/all/empty-cart.png"><span class="f14">暂无下架产品信息</span></td>
+                    </tr>
                     </tbody>
                 </table>
                 <div class="record-line text-right" ng-if="currenctGoods.length != 0">显示<span ng-bind="goodsAll.start"></span>-<span ng-bind="goodsAll.numberOfElements"></span>个,共:<span ng-bind="goodsAll.totalElements" cl style="color: #5078cb;"></span>个</div>
@@ -733,7 +737,7 @@
                         </li>
                     </ul>
                     <div class="page-go-block">
-                        <input class="page-number" type="text" ng-model="param.currentPage" ng-keydown="listenEnter()"/>
+                        <input class="page-number" type="number" ng-model="param.currentPage" ng-keydown="listenEnter()"/>
                         <a class="page-a" ng-click="setPage('page', param.currentPage)" href="">GO</a>
                     </div>
                 </div>

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

@@ -270,7 +270,8 @@
                                         <img src="static/img/all/empty-cart.png">
                                     </p>
                                     <div class="empty-info">
-                                        <p class="grey"> 暂时获取不到订单的的物流信息 </p>
+                                        <p class="grey" ng-if="purchase.sendType == 1301">暂时获取不到物流信息,请到快递公司官网进行查询</p>
+                                        <p class="grey" ng-if="purchase.sendType != 1301">暂无物流信息</p>
                                         <!--<a href="javascript:history.go(-1)"><i class="fa fa-mail-reply fa-xs"></i>返回上一页</a>-->
                                     </div>
                                 </div>

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

@@ -457,7 +457,6 @@
         position: relative;
         top: -15px;
         height: 80px;
-        margin-top: -10px;
     }
     #oder-detail .line60.logistic-input.h125{
         height: 125px;
@@ -692,7 +691,7 @@
                             <i ng-bind="takeSelf.takename"></i> &nbsp;&nbsp;营业时间:<em ng-bind="takeSelf.businesstime">周一至周五 8:30-18:00</em><br/>
                             地址:<em ng-bind="takeSelf.area">广东省  深圳市  南山区</em>&nbsp;&nbsp;<em ng-bind="takeSelf.detailAddress">科技园英唐大厦6楼 优软商城科技园英唐大厦6楼 优软商城</em>
                         </div>
-                        <div style="width: 100%;margin: 0 auto;height: 45px;">
+                        <div style="width: 100%;margin: 0 auto;height: 45px;position: relative;top: -10px;">
                             <span style="width: 10%; margin-left: 22px;">物流公司 :&nbsp;</span>
                             <span class="input-ul">
                                 <input id="addr" style="border: #5078cb 1px solid;" type="text" class="form-control select-adder" ng-focus="getItemFocus()" ng-blur="onItemBlur()" ng-keydown="onKeyup()" ng-model="logistics.companyName" placeholder="请选择物流公司" autocomplete="off" maxlength="15" readonly="readonly" >

+ 56 - 6
src/main/webapp/resources/view/vendor/forstore/vendor_material.html

@@ -177,8 +177,32 @@
 		margin-bottom: 16px;
 	}
 	.search-check .search{
-		width: 532px;
-		margin-left: 150px;
+		width: 628px;
+		margin-left: 52px;
+		position: relative;
+	}
+	.search-check .search .prodUserList {
+		position: absolute;
+		left: 27px;
+		top: 35px;
+		font-size: 14px;
+		width: 155px;
+		max-height: 200px;
+		color: #666;
+		-webkit-box-shadow: 0 1px 6px 1px #323232a3;
+		-moz-box-shadow: 0 1px 6px 1px #323232a3;
+		box-shadow: 0 1px 6px 1px #323232;
+        z-index: 999;
+	}
+	.search-check .search .prodUserList li {
+		height: 25px;
+		line-height: 25px;
+		text-align: center;
+		background: #fff;
+	}
+	.search-check .search .prodUserList li:hover {
+		background: #e8e8e8;
+        cursor: default;
 	}
 	.search-check .search .form-control{
 		width: 340px;
@@ -188,6 +212,22 @@
 		box-shadow: none;
 		border-right: none;
 	}
+	.search-check .search label {
+		position: absolute;
+		left: 5px;
+		font-size: 14px;
+		color: #666;
+		font-weight: normal;
+		height: 34px;
+		line-height: 34px;
+	}
+	.search-check .search .prod-name {
+		width: 183px;
+		padding: 0 5px 0 75px;
+	}
+	.search-check .search .keyword-material {
+		width: 260px;
+	}
 	.search-check .search button,.search-check .search a{
 		display: inline-block;
 		width: 94px;
@@ -1613,7 +1653,14 @@
 		<div ng-if="standard_tab == 'unstandard' || standard_tab =='standard'">
 			<div class="search-check">
 				<div class="search fl">
-					<input type="text" class="form-control" ng-model="param.keyword" ng-search="onSearch()" placeholder="类目/型号/品牌"/>
+					<label>人员选择:</label>
+					<input type="text" class="form-control prod-name" ng-model="enUser.prodName" ng-change="onUserUUChange()" placeholder="姓名"/>
+					<ul ng-if="showSimilarUser" class="prodUserList" ng-mouseenter="similarUserObj.isInSimilarUser = true" ng-mouseleave="similarUserObj.isInSimilarUser = false">
+						<li ng-repeat="item in similarUser.content" ng-click="setProdName(item)">
+							{{item.userName}}({{item.userUU}})
+						</li>
+					</ul>
+					<input type="text" class="form-control keyword-material" ng-model="param.keyword" ng-search="onSearch()" placeholder="类目/型号/品牌"/>
 					<button ng-click="onSearch()">搜索</button>
 					<!--<a ng-click="download()">批量导出</a>-->
 				</div>
@@ -2084,16 +2131,19 @@
 					<!--<tr class="no-hover batch-tr" ng-if="chooseAll && !chooseAllPage" ng-class="{'active': $data.length > 10}">-->
 					</tbody>
 				</table>
-				<div class="empty" ng-if="currenctMaterial.length == 0">
+				<div class="empty" ng-if="!currenctMaterial || currenctMaterial.length == 0">
 					<p class="empty-img">
 						<img src="static/img/all/empty-cart.png">
 					</p>
-					<div class="empty-info">
+					<div class="empty-info" ng-if="currentDataNull || param.userUU">
+						<p class="grey"> 该业务员暂时没有绑定产品</p>
+					</div>
+					<div class="empty-info" ng-if="!currentDataNull && !param.userUU">
 						<p class="grey"> 暂无产品信息,赶快上传让更多人看到你的产品吧 </p>
 						<a href="vendor#/vendor_upload?type=company"><i></i>马上去上传</a>
 					</div>
 				</div>
-				<div class="record-line text-right" ng-if="currenctMaterial.length != 0">
+				<div class="record-line text-right" ng-if="currenctMaterial && currenctMaterial.length != 0">
 					<!--<div class="prompt" ng-show="standard_tab == 'unstandard'">-->
 						<!--<strong class="text-inverse">*</strong>商城暂未收录的 品牌/器件,”原厂型号“将会显示为空且不可上架售卖,<br/>-->
 						<!--如需上架可先点击 【匹配】按钮,若匹配不成功,可前往<a ui-sref="vendor_brand_apply" target="_blank"> 品牌申请/</a><a ui-sref="vendor_component_apply" target="_blank">器件申请</a>,提出申请-->

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

@@ -2521,7 +2521,7 @@
                     <ul class="similar-list" ng-show="mate.showSimilarBrandList && similarBrand.length > 0 && mate.ptrBranden" ng-mouseenter="setIsInBrandList(true, key)" ng-mouseleave="setIsInBrandList(false, key)">
                         <li ng-repeat="sBrand in similarBrand" ng-bind="sBrand.nameEn" title="{{sBrand.nameEn}}" ng-click="setBrand(key, sBrand.nameEn)"></li>
                     </ul>
-                    <i class="fa fa-minus-circle" ng-if="replaceMaterialList.length > 1" ng-click="setReplies('sub', key)"></i>
+                    <i class="fa fa-minus-circle" ng-if="replaceMaterialList.length >= 1" ng-click="setReplies('sub', key)"></i>
 					<i class="fa fa-plus-circle" ng-if="replaceMaterialList.length -1 == key && replaceMaterialList.length < 10" ng-click="setReplies('add', key)"></i>
 				</div>
 			</div>

Some files were not shown because too many files changed in this diff