Explorar el Código

Merge remote-tracking branch 'origin/release-B2bOrSsr-wangcz' into dev

wangcz hace 7 años
padre
commit
0e69dd6b49
Se han modificado 100 ficheros con 7799 adiciones y 376 borrados
  1. 2 2
      src/main/resources/dev/sys.properties
  2. 1 0
      src/main/webapp/WEB-INF/views/normal/sso.html
  3. 59 2
      src/main/webapp/resources/css/b2bCommon.css
  4. 12 12
      src/main/webapp/resources/css/b2bPublic.css
  5. 5 5
      src/main/webapp/resources/css/common.css
  6. BIN
      src/main/webapp/resources/img/approvalFlow/1.png
  7. BIN
      src/main/webapp/resources/img/approvalFlow/2.png
  8. BIN
      src/main/webapp/resources/img/approvalFlow/3.png
  9. BIN
      src/main/webapp/resources/img/approvalFlow/4.png
  10. BIN
      src/main/webapp/resources/img/approvalFlow/5.png
  11. BIN
      src/main/webapp/resources/img/approvalFlow/6.png
  12. BIN
      src/main/webapp/resources/img/approvalFlow/add_user.png
  13. BIN
      src/main/webapp/resources/img/approvalFlow/add_user01.png
  14. BIN
      src/main/webapp/resources/img/approvalFlow/close.png
  15. BIN
      src/main/webapp/resources/img/approvalFlow/comm_bg01.png
  16. BIN
      src/main/webapp/resources/img/approvalFlow/comm_bg02.png
  17. BIN
      src/main/webapp/resources/img/approvalFlow/dot01.png
  18. BIN
      src/main/webapp/resources/img/approvalFlow/dot02.png
  19. BIN
      src/main/webapp/resources/img/approvalFlow/inco_list.png
  20. BIN
      src/main/webapp/resources/img/approvalFlow/lizi.jpg
  21. BIN
      src/main/webapp/resources/img/approvalFlow/sreach_bt.png
  22. BIN
      src/main/webapp/resources/img/empty/uas_empty.png
  23. BIN
      src/main/webapp/resources/img/full_ico.png
  24. 521 177
      src/main/webapp/resources/js/common/b2bServices.js
  25. 112 1
      src/main/webapp/resources/js/common/controllers/b2bCommonCtrls.js
  26. 2 2
      src/main/webapp/resources/js/common/services.js
  27. 0 1
      src/main/webapp/resources/js/common/services/File.js
  28. 29 29
      src/main/webapp/resources/js/common/services/Make.js
  29. 2 2
      src/main/webapp/resources/js/common/services/Token.js
  30. 71 3
      src/main/webapp/resources/js/sso/app.js
  31. 55 0
      src/main/webapp/resources/js/sso/controllers/b2b/LogCtrl.js
  32. 2 0
      src/main/webapp/resources/js/sso/controllers/b2b/addPartnerRequestCtrl.js
  33. 269 0
      src/main/webapp/resources/js/sso/controllers/b2b/approvalFlowCtrl.js
  34. 2 0
      src/main/webapp/resources/js/sso/controllers/b2b/customersInfoCtrl.js
  35. 251 0
      src/main/webapp/resources/js/sso/controllers/b2b/enterpriseSearchCtrl.js
  36. 101 0
      src/main/webapp/resources/js/sso/controllers/b2b/invitationCtrl.js
  37. 266 0
      src/main/webapp/resources/js/sso/controllers/b2b/newPartnerCtrl.js
  38. 2 0
      src/main/webapp/resources/js/sso/controllers/b2b/servicerInfoCtrl.js
  39. 3 1
      src/main/webapp/resources/js/sso/controllers/b2b/vendorsInfoCtrl.js
  40. 60 26
      src/main/webapp/resources/js/sso/controllers/rolePermissionCtrl.js
  41. 130 6
      src/main/webapp/resources/js/sso/controllers/staffManagementCtrl.js
  42. 1 1
      src/main/webapp/resources/js/sso/main.js
  43. 23 3
      src/main/webapp/resources/js/usercenter/app.js
  44. 1 1
      src/main/webapp/resources/js/usercenter/controllers/b2b/Purc/CartDetailController.js
  45. 1 1
      src/main/webapp/resources/js/usercenter/controllers/b2b/Purc/PurcInquiryNewCtrl.js
  46. 1 1
      src/main/webapp/resources/js/usercenter/controllers/b2b/Purc/PurcNewOrderCtrl.js
  47. 1 1
      src/main/webapp/resources/js/usercenter/controllers/b2b/Purc/purchaseInquiryCtrl.js
  48. 1 1
      src/main/webapp/resources/js/usercenter/controllers/b2b/Purc/tender.js
  49. 207 0
      src/main/webapp/resources/js/usercenter/controllers/b2b/fa/arCheck.js
  50. 46 0
      src/main/webapp/resources/js/usercenter/controllers/b2b/fa/arCheck_detail.js
  51. 1 1
      src/main/webapp/resources/js/usercenter/controllers/b2b/order/purcChangeListCtrl.js
  52. 1 1
      src/main/webapp/resources/js/usercenter/controllers/b2b/order/purcMakeOutOrderCtrl.js
  53. 1 1
      src/main/webapp/resources/js/usercenter/controllers/b2b/order/usercenterOrderCtrl.js
  54. 18 27
      src/main/webapp/resources/js/vendor/app.js
  55. 1 1
      src/main/webapp/resources/js/vendor/controllers/b2b/apBill.js
  56. 1 1
      src/main/webapp/resources/js/vendor/controllers/b2b/apCheck.js
  57. 3 3
      src/main/webapp/resources/js/vendor/controllers/b2b/change/sale_inquiry_details.js
  58. 2 2
      src/main/webapp/resources/js/vendor/controllers/b2b/change/sale_inquiry_mould_detail.js
  59. 220 0
      src/main/webapp/resources/js/vendor/controllers/b2b/sale/approval.js
  60. 3 3
      src/main/webapp/resources/js/vendor/controllers/b2b/sale/saleQuotationNewCtrl.js
  61. 1 1
      src/main/webapp/resources/js/vendor/controllers/b2b/sale/sale_accept.js
  62. 1 1
      src/main/webapp/resources/js/vendor/controllers/b2b/sale/sale_badIn.js
  63. 1 1
      src/main/webapp/resources/js/vendor/controllers/b2b/sale/sale_badOut.js
  64. 1 1
      src/main/webapp/resources/js/vendor/controllers/b2b/sale/sale_make_accept.js
  65. 1 1
      src/main/webapp/resources/js/vendor/controllers/b2b/sale/sale_make_returns.js
  66. 1 1
      src/main/webapp/resources/js/vendor/controllers/b2b/sale/sale_returns.js
  67. 368 0
      src/main/webapp/resources/js/vendor/controllers/b2b/sale/sample.js
  68. 109 0
      src/main/webapp/resources/js/vendor/controllers/b2b/sale/sample_detail.js
  69. 2 2
      src/main/webapp/resources/js/vendor/controllers/b2b/saleChangeCtrl.js
  70. 10 3
      src/main/webapp/resources/js/vendor/controllers/b2b/saleInquiryCtrl.js
  71. 8 2
      src/main/webapp/resources/js/vendor/controllers/b2b/saleInquiryMouldCtrl.js
  72. 2 2
      src/main/webapp/resources/js/vendor/controllers/b2b/saleMakechangeCtrl.js
  73. 3 3
      src/main/webapp/resources/js/vendor/controllers/b2b/saleMaketodoCtrl.js
  74. 1 1
      src/main/webapp/resources/js/vendor/controllers/b2b/saleNoticeCtrl.js
  75. 1 1
      src/main/webapp/resources/js/vendor/controllers/b2b/saleOrderCtrl.js
  76. 3 1
      src/main/webapp/resources/js/vendor/controllers/b2b/saleQuotationListCtrl.js
  77. 1 1
      src/main/webapp/resources/js/vendor/controllers/b2b/saleSendCtrl.js
  78. 2 0
      src/main/webapp/resources/js/vendor/controllers/b2b/saleTenderCtrl.js
  79. 2 0
      src/main/webapp/resources/js/vendor/controllers/b2b/saleTenderQuestionListCtrl.js
  80. 14 4
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_account_management_ctrl.js
  81. 151 0
      src/main/webapp/resources/view/sso/b2b/addPartnerAndRecord.html
  82. 30 5
      src/main/webapp/resources/view/sso/b2b/customersInfo.html
  83. 1 1
      src/main/webapp/resources/view/sso/b2b/enMenu.html
  84. 98 0
      src/main/webapp/resources/view/sso/b2b/home.html
  85. 210 0
      src/main/webapp/resources/view/sso/b2b/invitation.html
  86. 127 0
      src/main/webapp/resources/view/sso/b2b/log.html
  87. 89 0
      src/main/webapp/resources/view/sso/b2b/modal/QQshare_modal.html
  88. 45 0
      src/main/webapp/resources/view/sso/b2b/modal/add_vendor.html
  89. 2307 0
      src/main/webapp/resources/view/sso/b2b/modal/enterpirseInfo.html
  90. 739 0
      src/main/webapp/resources/view/sso/b2b/modal/step1.html
  91. 28 4
      src/main/webapp/resources/view/sso/b2b/myRequest.html
  92. 472 0
      src/main/webapp/resources/view/sso/b2b/newPartner.html
  93. 390 0
      src/main/webapp/resources/view/sso/b2b/searchresult.html
  94. 30 5
      src/main/webapp/resources/view/sso/b2b/servicerInfo.html
  95. 1 1
      src/main/webapp/resources/view/sso/b2b/vendorAndCustomer.html
  96. 31 7
      src/main/webapp/resources/view/sso/b2b/vendorsInfo.html
  97. 3 0
      src/main/webapp/resources/view/sso/left_nav.html
  98. 6 1
      src/main/webapp/resources/view/sso/rolePermission.html
  99. 17 6
      src/main/webapp/resources/view/sso/staffManagement.html
  100. 2 2
      src/main/webapp/resources/view/usercenter/b2b/Purc/addOrder.html

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

@@ -53,8 +53,8 @@ inquiryServiceInnerUrl=http://218.17.158.219:24000
 messageServiceUrl=http://192.168.253.12:24000/message/
 
 #b2b
-b2b=http://218.17.158.219/b2b_test
-b2bDomain=218.17.158.219:9000/b2b_test
+b2b=http://192.168.253.12:9000/b2b-test
+b2bDomain=218.17.158.219:9000/b2b-test
 
 #lottery
 lottery=http://192.168.253.3:26789/

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

@@ -25,6 +25,7 @@
     <link rel="stylesheet" href="static/css/commonComponent.css" />
 	<link rel="stylesheet" href="static/css/common/linkSaler.css" />
 	<link rel="stylesheet" href="static/css/vendor/sell.css" />
+	<link rel="stylesheet" href="static/css/b2bCommon.css">
 </head>
 <body>
 

+ 59 - 2
src/main/webapp/resources/css/b2bCommon.css

@@ -475,13 +475,70 @@ table.b2b-modal-table > tbody > tr > td {
     margin: 60px auto 0;
 }
 .no-padding {
-    padding: 0;
+    padding: 0 !important;
 }
 .no-margin {
-    margin: 0;
+    margin: 0 !important;
 }
 .btn-warning {
     color: #5078cb;
     background-color: #fff;
     border-color: #5078cb;
+}
+
+/** 空状态 **/
+#empty {
+    padding: 70px 0;
+    margin: 0 auto;
+    text-align: center;
+}
+#empty .left_img {
+    display: inline-block;
+    color: #3f84f6;
+}
+#empty .left_img a {
+    font-size: 25px;
+    color: #3f84f6;
+}
+#empty .left_img a:last-child:before {
+    content: '';
+    position: relative;
+    top: 6px;
+    display: inline-block;
+    width: 2px;
+    height: 27px;
+    background: #3f84f6;
+    margin: 0 10px;
+}
+#empty .right_link {
+    display: inline-block;
+    margin-left:10px;
+}
+#empty .right_link a {
+    color: #3f84f6;
+    font-size: 14px;
+}
+#empty .right_link p {
+    margin: 0;
+    font-size: 14px;
+    color: #666;
+}
+#empty_info {
+    padding-left: 60px;
+    padding-bottom: 40px;
+}
+#empty_info .empty_title p{
+    color: #3f84f6;
+    font-size: 18px;
+}
+#empty_info .empty_explain {
+    font-size: 16px;
+    color: #999;
+}
+#empty_info .empty_explain .info {
+    text-indent: -22px;
+    margin-bottom: 5px;
+}
+#empty_info .empty_explain .info p{
+    line-height: 20px;
 }

+ 12 - 12
src/main/webapp/resources/css/b2bPublic.css

@@ -207,18 +207,18 @@ tbody td.enddate span{
     color: red;
 }
 /*历史报价*/
-.dropdown>.dropdown-toggle.text-default {
-    color: #333333;
-}
-.dropdown>.dropdown-toggle:hover {
-    display: inline-block;
-    width: 78px;
-    height: 21px;
-    line-height: 21px;
-    color: #ff0101;
-    font-size: 13px;
-    background-color: #e8e8e8;
-}
+/*.dropdown>.dropdown-toggle.text-default {*/
+    /*color: #333333;*/
+/*}*/
+/*.dropdown>.dropdown-toggle:hover {*/
+    /*display: inline-block;*/
+    /*width: 78px;*/
+    /*height: 21px;*/
+    /*line-height: 21px;*/
+    /*color: #ff0101;*/
+    /*font-size: 13px;*/
+    /*background-color: #e8e8e8;*/
+/*}*/
 #public .tender-table{
     width: 1026px;
 }

+ 5 - 5
src/main/webapp/resources/css/common.css

@@ -1488,12 +1488,12 @@ i.must {
 }
 
 /*开关按钮*/
-.checkbox{
+.switch .checkbox{
 	width:54px;
 	margin:0px auto;
 	text-align: center;
 }
-.checkbox span{
+.switch .checkbox span{
 	width: 38px;
 	height: 19px;
 	display: inline-block;
@@ -1505,7 +1505,7 @@ i.must {
 	box-shadow: 1px 1px 5px #eee;
 	transition: background-color .1s ease-out;
 }
-.checkbox span:after{
+.switch .checkbox span:after{
 	content: "";
 	position: absolute;
 	width: 19px;
@@ -1521,12 +1521,12 @@ i.must {
 	color: #666;
 	font-size: 12px;
 }
-.checkbox span.off{
+.switch .checkbox span.off{
 	background-color: #4bd562;
 	transition: background-color .1s ease-in;
 	border: #4bd562 1px solid;
 }
-.checkbox span.off:after{
+.switch .checkbox span.off:after{
 	content: "";
 	left: 20px;
 	transition: left .1s ease-in;

BIN
src/main/webapp/resources/img/approvalFlow/1.png


BIN
src/main/webapp/resources/img/approvalFlow/2.png


BIN
src/main/webapp/resources/img/approvalFlow/3.png


BIN
src/main/webapp/resources/img/approvalFlow/4.png


BIN
src/main/webapp/resources/img/approvalFlow/5.png


BIN
src/main/webapp/resources/img/approvalFlow/6.png


BIN
src/main/webapp/resources/img/approvalFlow/add_user.png


BIN
src/main/webapp/resources/img/approvalFlow/add_user01.png


BIN
src/main/webapp/resources/img/approvalFlow/close.png


BIN
src/main/webapp/resources/img/approvalFlow/comm_bg01.png


BIN
src/main/webapp/resources/img/approvalFlow/comm_bg02.png


BIN
src/main/webapp/resources/img/approvalFlow/dot01.png


BIN
src/main/webapp/resources/img/approvalFlow/dot02.png


BIN
src/main/webapp/resources/img/approvalFlow/inco_list.png


BIN
src/main/webapp/resources/img/approvalFlow/lizi.jpg


BIN
src/main/webapp/resources/img/approvalFlow/sreach_bt.png


BIN
src/main/webapp/resources/img/empty/uas_empty.png


BIN
src/main/webapp/resources/img/full_ico.png


+ 521 - 177
src/main/webapp/resources/js/common/b2bServices.js

@@ -540,15 +540,15 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
             },
             getAll: {
               url: rootPath + '/make/changes/info/search',
-              method: 'GET',
+              method: 'GET'
             },
             getItem: {
               url: rootPath + '/make/changes/:id/info',
-              method: 'GET',
+              method: 'GET'
             },
             exportXls: {
               url: rootPath + '/make/changes/xls/permission',
-              method: 'GET',
+              method: 'GET'
             }
           });
       }])
@@ -695,9 +695,9 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                         cache: false,
                         headers: {
                             'Cache-Control': 'no-cache',
-                            'Pragma': 'no-cache',
+                            'Pragma': 'no-cache'
                         },
-                        ifModified :true ,
+                        ifModified :true
                     };
                     var logout = $http.get(rootPath + "/logout", config);
                     var refresh = function(data) {
@@ -791,9 +791,9 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
         }])
         .factory('B2bSaleSend', ['$resource', 'BaseService', function($resource, BaseService) {
           var b2bPath = BaseService.getB2bUrl();
-          return $resource(b2bPath + 'sale/notice/sends/info/search', {}, {
+          return $resource(b2bPath + '/sale/notice/sends/info/search', {}, {
             getItem: {
-              url: b2bPath + 'sale/notice/sends/:id/info',
+              url: b2bPath + '/sale/notice/sends/:id/info',
               method: 'GET'
             },
             getTodo: {
@@ -802,7 +802,7 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
               }
             },
             update: {
-              url: b2bPath + 'sale/notice/sends/:id',
+              url: b2bPath + '/sale/notice/sends/:id',
               method: 'POST'
             },
             getDone: {
@@ -811,7 +811,7 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
               }
             },
             printCount:{
-              url: b2bPath + 'sale/notice/sends/print/:id',
+              url: b2bPath + '/sale/notice/sends/print/:id',
               method: 'POST'
             },
             printPermission:{
@@ -819,34 +819,34 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
               method: 'POST'
             },
             generateBarcodes :{
-              url: b2bPath + 'sale/notice/generateBarcodes',
+              url: b2bPath + '/sale/notice/generateBarcodes',
               method: 'POST'
             },
             getPrintBarcodes :{
-              url: b2bPath + 'sale/notice/getPrintBarcodes',
+              url: b2bPath + '/sale/notice/getPrintBarcodes',
               method: 'POST'
             },
             getPrintTemplate:{
-              url: b2bPath + 'sale/notice/getPrintTemplate',
+              url: b2bPath + '/sale/notice/getPrintTemplate',
               method: 'GET'
             },
             getSPrintBarcode:{
-              url: b2bPath + 'sale/notice/getSPrintBarcode',
+              url: b2bPath + '/sale/notice/getSPrintBarcode',
               method: 'GET'
             },
             updatePrintStatus: {
-              url: b2bPath + 'sale/notice/updatePrintStatus',
+              url: b2bPath + '/sale/notice/updatePrintStatus',
               method: 'POST'
             },
             exportXls: {
-              url: b2bPath + 'sale/notice/sends/xls/permission',
+              url: b2bPath + '/sale/notice/sends/xls/permission',
               method: 'GET'
             }
           });
     }])
         .factory('B2bPurcNotice', ['$resource', 'BaseService', function($resource, BaseService) {
           var b2bPath = BaseService.getB2bUrl();
-          return $resource(b2bPath + 'sale/notice/info/search', {}, {
+          return $resource(b2bPath + '/sale/notice/info/search', {}, {
             getTodo: {
               params: {
                 _state: 'todo'
@@ -868,40 +868,40 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
               }
             },
             save: {
-              url: b2bPath + 'sale/notice/:id/sends',
+              url: b2bPath + '/sale/notice/:id/sends',
               method: 'POST'
             },
             getSends: {
-              url: b2bPath + 'sale/notice/:id/sendItems',
+              url: b2bPath + '/sale/notice/:id/sendItems',
               method: 'GET',
               isArray: true
             },
             sendByBatch: {
-              url: b2bPath + 'sale/notice/sendByBatch',
+              url: b2bPath + '/sale/notice/sendByBatch',
               method: 'POST'
             },
             setRead:{
-              url: b2bPath + 'sale/notice/setRead',
+              url: b2bPath + '/sale/notice/setRead',
               method: 'POST'
             },
             setReadByState:{
-              url: b2bPath + 'sale/notice/setReadByState',
+              url: b2bPath + '/sale/notice/setReadByState',
               method: 'GET'
             },
             getUnreadIds:{
-              url: b2bPath + 'sale/notice/getUnreadIds',
+              url: b2bPath + '/sale/notice/getUnreadIds',
               method: 'GET'
             },
             getUnreadCount:{
-              url: b2bPath + 'sale/notice/unread',
+              url: b2bPath + '/sale/notice/unread',
               method: 'GET'
             },
             exportXls: {
-              url: b2bPath + 'sale/notice/xls/permission',
+              url: b2bPath + '/sale/notice/xls/permission',
               method: 'GET'
             },
             findByIds: {
-              url: b2bPath + 'sale/notice/findByIds',
+              url: b2bPath + '/sale/notice/findByIds',
               method: 'GET',
               isArray: true
             }
@@ -909,15 +909,15 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
         }])
         .factory('B2bPurcNoticeInfo', ['$resource', 'BaseService', function($resource, BaseService) {
           var b2bPath = BaseService.getB2bUrl();
-          return $resource(b2bPath + 'sale/notice/info/search', {}, {
+          return $resource(b2bPath + '/sale/notice/info/search', {}, {
             getTodo: {
-              url: b2bPath + 'sale/notice/info/nosearch',
+              url: b2bPath + '/sale/notice/info/nosearch',
               params: {
                 _state: 'todo'
               }
             },
             getDone: {
-              url: b2bPath + 'sale/notice/info/nosearch',
+              url: b2bPath + '/sale/notice/info/nosearch',
               params: {
                 _state: 'done'
               }
@@ -933,10 +933,9 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
               }
             }
           });
-        }])
-        .factory('B2bSaleTruck', ['$resource', 'BaseService', function($resource, BaseService) {
+        }]).factory('B2bSaleTruck', ['$resource', 'BaseService', function($resource, BaseService) {
             var b2bPath = BaseService.getB2bUrl();
-            return $resource(b2bPath + 'sale/truck', {}, {
+            return $resource(b2bPath + '/sale/truck', {}, {
               save: {
                 isArray: true,
                 method: 'POST'
@@ -946,12 +945,11 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                 method: 'DELETE'
               },
               detail: {
-                url: b2bPath +  'sale/truck/items',
+                url: b2bPath + '/sale/truck/items',
                 isArray: true
               }
             });
-        }])
-        .factory('B2bPurcInquiry', ['$resource', 'BaseService', function($resource, BaseService) {
+        }]).factory('B2bPurcInquiry', ['$resource', 'BaseService', function($resource, BaseService) {
             var b2bPath = BaseService.getB2bUrl();
             return $resource(b2bPath + '/sale/inquiry/info/search', {}, {
                 getAll: {
@@ -1048,8 +1046,7 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                 }
             });
             // 数据库直接获取
-        }])
-        .factory('B2bPurcInquiryInfo', ['$resource', 'BaseService', function($resource, BaseService) {
+        }]).factory('B2bPurcInquiryInfo', ['$resource', 'BaseService', function($resource, BaseService) {
             var b2bPath = BaseService.getB2bUrl();
             return $resource(b2bPath + '/sale/inquiry/info/nosearch', {}, {
                 getAll: {
@@ -1087,8 +1084,7 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                 }
             });
             // 数据库直接获取
-        }])
-        .factory('B2bCurrentRole', ['$resource', 'BaseService', function($resource, BaseService) {
+        }]).factory('B2bCurrentRole', ['$resource', 'BaseService', function($resource, BaseService) {
             var b2bPath = BaseService.getB2bUrl();
             return $resource(b2bPath + '/account/role', {}, {
                 //当前企业对应的角色是否是销售经理或管理员
@@ -1105,8 +1101,7 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                     method: 'GET'
                 }
             })
-        }])
-        .factory('B2bPurcInquiryMould', ['$resource', 'BaseService', function($resource, BaseService) {
+        }]).factory('B2bPurcInquiryMould', ['$resource', 'BaseService', function($resource, BaseService) {
             var b2bPath = BaseService.getB2bUrl();
             return $resource(b2bPath + '/sale/mould/info/search', {}, {
                 getAll: {
@@ -1185,8 +1180,7 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                     method: 'GET'
                 }
             });
-        }])
-        .factory('B2bPurcInquiryMouldSql', ['$resource', 'BaseService', function($resource, BaseService) {
+        }]).factory('B2bPurcInquiryMouldSql', ['$resource', 'BaseService', function($resource, BaseService) {
             var b2bPath = BaseService.getB2bUrl();
             return $resource(b2bPath + '/sale/mould/info/nosearch', {}, {
                 getAll: {
@@ -1208,8 +1202,7 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                     }
                 }
             });
-        }])
-        .factory('B2bQuotationInfo', ['$resource', 'BaseService', function($resource, BaseService){
+        }]).factory('B2bQuotationInfo', ['$resource', 'BaseService', function($resource, BaseService){
             var b2bPath = BaseService.getB2bUrl();
             return $resource(b2bPath + '/sale/quotation/info/nosearch', {}, {
                 getTodo: {
@@ -1238,8 +1231,7 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                     }
                 }
             });
-        }])
-        .factory('B2bPurcTender', ['$resource', 'BaseService', function($resource, BaseService) {
+        }]).factory('B2bPurcTender', ['$resource', 'BaseService', function($resource, BaseService) {
             var b2bPath = BaseService.getB2bUrl();
             return $resource(b2bPath + '/tender/sale/info/search', {}, {
                 getMyAll: {
@@ -1430,8 +1422,7 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                     method: 'GET'
                 }
             });
-        }])
-        .factory('B2bAccountEnterprise', ['$resource', 'BaseService', function($resource, BaseService) {
+        }]).factory('B2bAccountEnterprise', ['$resource', 'BaseService', function($resource, BaseService) {
             var b2bPath = BaseService.getB2bUrl();
             return $resource(b2bPath + '/account/enterprise', {}, {
                 growth: {
@@ -1506,8 +1497,7 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                     }
                 }
             });
-        }])
-        .factory('B2bSaleTenderQuestion', ['$resource', 'BaseService', function($resource, BaseService) {
+        }]).factory('B2bSaleTenderQuestion', ['$resource', 'BaseService', function($resource, BaseService) {
             var b2bPath = BaseService.getB2bUrl();
             return $resource(b2bPath + '/tender/question', {}, {
                 getAll: {
@@ -1552,10 +1542,9 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                     }
                 }
             });
-        }])
-        .factory('B2bPagingRelease', ['$resource', 'BaseService', function($resource, BaseService){
+        }]).factory('B2bPagingRelease', ['$resource', 'BaseService', function($resource, BaseService){
           var b2bPath = BaseService.getB2bUrl();
-          return $resource(b2bPath + 'api/paging', {}, {
+          return $resource(b2bPath + '/api/paging', {}, {
             getTodo: {
               params: {
                 _state: 'todo'
@@ -1568,34 +1557,33 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
             },
             // 设置消息已读(公共消息服务)
             setMessageRead: {
-              url: b2bPath + 'api/paging/message/setRead',
+              url: b2bPath + '/api/paging/message/setRead',
               method: 'POST'
             },
             // 设置当前页已读(公共消息服务)
             setPageRead: {
-              url: b2bPath + 'api/paging/message/setRead/page',
+              url: b2bPath + '/api/paging/message/setRead/page',
               method: 'POST'
             },
             setRead:{
-              url: b2bPath + 'api/paging/setRead',
+              url: b2bPath + '/api/paging/setRead',
               method: 'POST'
             },
             getUnreadIds:{
-              url: b2bPath + 'api/paging/getUnreadIds',
+              url: b2bPath + '/api/paging/getUnreadIds',
               method: 'POST'
             },
             setReadByOrder:{
-              url: b2bPath + 'api/paging/setRead/order',
+              url: b2bPath + '/api/paging/setRead/order',
               method: 'POST'
             },
             setOneRead:{
-              url: b2bPath + 'api/paging/setOneRead/:id',
+              url: b2bPath + '/api/paging/setOneRead/:id',
               method: 'POST'
             }
           });
-        }])
-        .factory('B2bSnapshotService', ['$http', 'BaseService', function($http, BaseService) {
-          var rootPath = BaseService.getB2bUrl();
+        }]).factory('B2bSnapshotService', ['$http', 'BaseService', function($http, BaseService) {
+          var rootPath = BaseService.getRootPath();
           return {
             getTodo: function(success) {
               var request = $http.get(rootPath + '/snapshot/todo', {cache: true});
@@ -1636,10 +1624,9 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
 
             }
           };
-        }])
-        .factory('B2bPurcOrderItemInfo', ['$resource', 'BaseService', function($resource, BaseService){
+        }]).factory('B2bPurcOrderItemInfo', ['$resource', 'BaseService', function($resource, BaseService){
           var rootPath = BaseService.getB2bUrl();
-          return $resource(rootPath + 'sale/orders/info/nosearch', {}, {
+          return $resource(rootPath + '/sale/orders/info/nosearch', {}, {
             getTodo: {
               params: {
                 _state: 'todo'
@@ -1671,73 +1658,69 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
               }
             },
             getUnreadIds:{
-              url: rootPath + 'sale/orders/getUnreadIds',
+              url: rootPath + '/sale/orders/getUnreadIds',
               method: 'GET'
             },
             getUnreadCount:{
-              url: rootPath + 'sale/orders/unread',
+              url: rootPath + '/sale/orders/unread',
               method: 'GET'
             },
             setRead:{
-              url:rootPath +  'sale/orders/setRead',
+              url:rootPath +  '/sale/orders/setRead',
               method: 'POST'
             }
           });
         }])
         .factory('B2bPurcBadOut', ['$resource', 'BaseService', function($resource, BaseService) {
           var rootPath = BaseService.getB2bUrl();
-          return $resource(rootPath + 'sale/badOut/:id', {}, {
+          return $resource(rootPath + '/sale/badOut/:id', {}, {
             exportXls: {
-              url: rootPath + 'sale/badOut/xls/permission',
+              url: rootPath + '/sale/badOut/xls/permission',
               method:'GET'
             }
           });
-        }])
-        .factory('B2bPurcBadIn', ['$resource', 'BaseService', function($resource, BaseService){
+        }]).factory('B2bPurcBadIn', ['$resource', 'BaseService', function($resource, BaseService){
           var rootPath = BaseService.getB2bUrl();
-          return $resource(rootPath + 'sale/badIn/:id', {}, {
+          return $resource(rootPath + '/sale/badIn/:id', {}, {
             exportXls: {
-              url: rootPath + 'sale/badIn/xls/permission',
+              url: rootPath + '/sale/badIn/xls/permission',
               method:'GET'
             }
           });
-        }])
-        .factory('B2bPurcAccept', ['$resource', 'BaseService', function($resource, BaseService) {
+        }]).factory('B2bPurcAccept', ['$resource', 'BaseService', function($resource, BaseService) {
           var rootPath = BaseService.getB2bUrl();
-          return $resource(rootPath + 'sale/accept/:id', {}, {
+          return $resource(rootPath + '/sale/accept/:id', {}, {
             getAll: {
             },
             getDetail : {
-              url: rootPath +  'sale/accept/:id/info',
+              url: rootPath + '/sale/accept/:id/info',
               method: 'GET'
             },
             exportXls: {
-              url: rootPath +  'sale/accept/xls/permission',
+              url: rootPath + '/sale/accept/xls/permission',
               method: 'GET'
             }
           });
-        }])
-        .factory('B2bPurcReturn', ['$resource',  'BaseService', function($resource, BaseService) {
+        }]).factory('B2bPurcReturn', ['$resource',  'BaseService', function($resource, BaseService) {
           var rootPath = BaseService.getB2bUrl();
-          return $resource(rootPath + 'sale/return/:id', {}, {
+          return $resource(rootPath + '/sale/return/:id', {}, {
             getAll: {},
             getEnterpriseName: {
-              url: rootPath +  "sale/return/:id/enname",
+              url: rootPath + "/sale/return/:id/enname",
               method: "GET"
             },
             getDetail: {
-              url: rootPath +  'sale/return/:id/info',
+              url: rootPath + '/sale/return/:id/info',
               method: 'GET'
             },
             exportXls: {
-              url: rootPath +  'sale/return/xls/permission',
+              url: rootPath + '/sale/return/xls/permission',
               method: 'GET'
             }
           });
-        }])
-        .factory('B2bVendorPerformanceAssessService', ['$resource', 'BaseService', function($resource, BaseService) {
+        }]).factory('B2bVendorPerformanceAssessService', ['$resource', 'BaseService', function($resource, BaseService) {
             var b2bUrl = BaseService.getB2bUrl();
-        return $resource(b2bUrl + '/vendorPerformanceAssess/info/search', {}, {
+            return $resource(b2bUrl + '/vendorPerformanceAssess/info/search', {}, {
             getAll: {
                 url: b2bUrl + '/vendorPerformanceAssess/info/search',
                 method: 'GET'
@@ -1749,9 +1732,8 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                 url: b2bUrl + '/vendorPerformanceAssess/:id/info',
                 method: 'GET'
             }
-        });
-    }])
-        .factory('B2bAddtoCart', ['$resource', 'BaseService', function($resource, BaseService) {
+          });
+        }]).factory('B2bAddtoCart', ['$resource', 'BaseService', function($resource, BaseService) {
             var b2bUrl = BaseService.getB2bUrl();
             return $resource(b2bUrl + '/product/baseInfo/addtoCart', {}, {
                 save: {
@@ -1760,10 +1742,9 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                     headers: {
                         'Content-Type' : 'application/json;charset=UTF-8'
                     }
-                },
+                }
             })
-        }])
-        .factory('B2bNewPurcOrder', ['$resource', 'BaseService', function($resource, BaseService) {
+        }]).factory('B2bNewPurcOrder', ['$resource', 'BaseService', function($resource, BaseService) {
             var b2bUrl = BaseService.getB2bUrl();
             return $resource(b2bUrl + '/product/baseInfo/newPurcOrder', {}, {
                 save: {
@@ -1778,8 +1759,7 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                     method: 'GET'
                 }
             })
-        }])
-        .factory('B2bCartOperation', ['$resource', 'BaseService', function($resource, BaseService) {
+        }]).factory('B2bCartOperation', ['$resource', 'BaseService', function($resource, BaseService) {
             var b2bUrl = BaseService.getB2bUrl();
             return $resource(b2bUrl + '/cart', {}, {
                 addToOrder: {
@@ -1837,7 +1817,7 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                     url: b2bUrl + '/sale/inquiry/recentPrice/:prId',
                     method: 'GET'
                 }
-        });
+            });
         }]).factory('B2bToken', ['$resource', 'BaseService', function($resource, BaseService) {
             var b2bUrl = BaseService.getB2bUrl();
             return $resource(b2bUrl + '/token', {}, {
@@ -1919,8 +1899,7 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                     method: 'GET'
                 }
             })
-        }])
-        .factory('B2bPurcOrdersInfo', ['$resource', 'BaseService', function($resource, BaseService) {
+        }]).factory('B2bPurcOrdersInfo', ['$resource', 'BaseService', function($resource, BaseService) {
             var b2bUrl = BaseService.getB2bUrl();
             return $resource(b2bUrl + '/sale/orders/purc/info/nosearch', {}, {
                 getAll: {
@@ -1953,8 +1932,7 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                     }
                 }
             });
-        }])
-        .factory('B2bDeputyOrder', ['$resource', 'BaseService', function($resource, BaseService) {
+        }]).factory('B2bDeputyOrder', ['$resource', 'BaseService', function($resource, BaseService) {
             var b2bUrl = BaseService.getB2bUrl();
             return $resource(b2bUrl + '/deputyOrder', {}, {
                 saveDeOrder: {
@@ -2154,7 +2132,7 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
             return $resource(b2bUrl + '/deputy', {}, {
                 getValue: {
                     url: b2bUrl + '/deputy/getKeyValue',
-                    method: 'GET',
+                    method: 'GET'
                 },
             })
         }])
@@ -2190,8 +2168,7 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                     }
                 }
             })
-        }])
-        .factory('B2bMakeOutOrder', ['$resource', 'BaseService', function($resource, BaseService){
+        }]).factory('B2bMakeOutOrder', ['$resource', 'BaseService', function($resource, BaseService){
             var b2bUrl = BaseService.getB2bUrl();
             return $resource(b2bUrl + '/make/outorders/info/search', {}, {
                 getReply: {
@@ -2212,54 +2189,52 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                     method: 'GET'
                 }
             })
-        }])
-        .factory('B2bPurcOrders', ['$resource', 'BaseService', function($resource, BaseService) {
-        var b2bUrl = BaseService.getB2bUrl();
-        return $resource(b2bUrl + '/sale/orders/purc/info/search', {}, {
-            getTodo: {
-                params: {
-                    _state: 'todo'
-                }
-            },
-            getDone: {
-                params: {
-                    _state: 'done'
-                }
-            },
-            getEnd: {
-                params: {
-                    _state: 'end'
-                }
-            },
-            getReceived:{
-                params: {
-                    _state: 'received'
-                }
-            },
-            getWaiting: {
-                params: {
-                    _state: 'waiting'
+        }]).factory('B2bPurcOrders', ['$resource', 'BaseService', function($resource, BaseService) {
+            var b2bUrl = BaseService.getB2bUrl();
+            return $resource(b2bUrl + '/sale/orders/purc/info/search', {}, {
+                getTodo: {
+                    params: {
+                        _state: 'todo'
+                    }
+                },
+                getDone: {
+                    params: {
+                        _state: 'done'
+                    }
+                },
+                getEnd: {
+                    params: {
+                        _state: 'end'
+                    }
+                },
+                getReceived:{
+                    params: {
+                        _state: 'received'
+                    }
+                },
+                getWaiting: {
+                    params: {
+                        _state: 'waiting'
+                    }
+                },
+                setRead:{
+                    url: b2bUrl + '/sale/orders/setRead/purc',
+                    method: 'POST'
+                },
+                getUnreadIds:{
+                    url: b2bUrl + '/sale/orders/getUnreadIds/purc',
+                    method: 'GET'
+                },
+                getUnreadCount:{
+                    url: b2bUrl + '/sale/orders/unread/purc',
+                    method: 'GET'
+                },
+                exportXls: {
+                    url: b2bUrl + '/sale/orders/purc/xls/permission',
+                    method: 'GET'
                 }
-            },
-            setRead:{
-                url: b2bUrl + '/sale/orders/setRead/purc',
-                method: 'POST'
-            },
-            getUnreadIds:{
-                url: b2bUrl + '/sale/orders/getUnreadIds/purc',
-                method: 'GET'
-            },
-            getUnreadCount:{
-                url: b2bUrl + '/sale/orders/unread/purc',
-                method: 'GET'
-            },
-            exportXls: {
-                url: b2bUrl + '/sale/orders/purc/xls/permission',
-                method: 'GET'
-            }
-        });
-    }])
-        .factory('B2bPurchaseInquiry', ['$resource', 'BaseService', function($resource, BaseService){
+            });
+        }]).factory('B2bPurchaseInquiry', ['$resource', 'BaseService', function($resource, BaseService){
             var b2bUrl = BaseService.getB2bUrl();
             return $resource(b2bUrl + '/purc/inquiry/info/search', {}, {
                 getTodo: {
@@ -2392,8 +2367,7 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                     }
                 }
             });
-        }])
-        .factory('B2bGetProductInfo', ['$resource', 'BaseService', function($resource, BaseService) {
+        }]).factory('B2bGetProductInfo', ['$resource', 'BaseService', function($resource, BaseService) {
             var b2bUrl = BaseService.getB2bUrl();
             return $resource(b2bUrl + '/product/baseInfo/info/search', {}, {
             getSaleProduct: {
@@ -2668,7 +2642,7 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
             return $resource(b2bUrl + '/addpartner', {}, {
                 addPartner: {
                     url: b2bUrl + '/addpartner/request/nameAndBusCode',
-                    method : 'POST',
+                    method : 'POST'
                 },
                 agreeRequest: {
                     url: b2bUrl + '/addpartner/agree/:id',
@@ -2782,7 +2756,7 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
         return $resource(b2bUrl + '/sale/inquiry', {}, {
             // 获取最新的已采纳的价信息
             agreed: {
-                url: 'sale/inquiry/recentPrice/:prId',
+                url: b2bUrl + 'sale/inquiry/recentPrice/:prId',
                 method: 'GET'
             }
         });
@@ -2793,64 +2767,71 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
                 isArray: false
             }
         })
+    }]).factory('B2bGetAccountUserSpace', ['$resource', 'BaseService', function($resource, BaseService) {
+        var b2bUrl = BaseService.getB2bUrl();
+        return $resource(b2bUrl + '/product/baseInfo/getUserSpaceDetails', {}, {
+            getAll: {
+                isArray: false
+            }
+        })
     }])
         .factory('B2bFaApBill', ['$resource',  'BaseService', function($resource, BaseService) {
           var b2bUrl = BaseService.getB2bUrl();
-          return $resource(b2bUrl + 'sale/apBill/info/search', {}, {
+          return $resource(b2bUrl + '/sale/apBill/info/search', {}, {
             getAll: {
-              url: b2bUrl + 'sale/apBill/:id/info',
+              url: b2bUrl + '/sale/apBill/:id/info',
               method: 'GET'
             },
             exportXls: {
-              url: b2bUrl + 'sale/apBill/xls/permission',
+              url: b2bUrl + '/sale/apBill/xls/permission',
               method: 'GET'
             }
           });
         }])
         .factory('B2bFaApCheck', ['$resource', 'BaseService', function($resource, BaseService) {
           var b2bUrl = BaseService.getB2bUrl();
-          return $resource(b2bUrl + 'sale/apCheck/info/search', {}, {
+          return $resource(b2bUrl + '/sale/apCheck/info/search', {}, {
             getItem: {
-              url: b2bUrl + 'sale/apCheck/:id/info',
-              method: 'GET',
+              url: b2bUrl + '/sale/apCheck/:id/info',
+              method: 'GET'
             },
             getAll: {
-              url: b2bUrl + 'sale/apCheck/getAll',
+              url: b2bUrl + '/sale/apCheck/getAll',
               method: 'GET',
               isArray: true
             },
             getAllCustomers: {
-              url: b2bUrl + 'sale/apCheck/getAllCustomers',
+              url: b2bUrl + '/sale/apCheck/getAllCustomers',
               method: 'GET',
               isArray: true
             },
             getAllByKeywords: {
-              url:b2bUrl +  'sale/apCheck/getAllByKeywords',
+              url:b2bUrl +  '/sale/apCheck/getAllByKeywords',
               method: 'GET',
               isArray: true
             },
             saveApCheck: {
-              url : b2bUrl + 'sale/apCheck/operation/save',
+              url : b2bUrl + '/sale/apCheck/operation/save',
               method: 'POST'
             },
             update: {
-              url: b2bUrl + 'sale/apCheck/update',
+              url: b2bUrl + '/sale/apCheck/update',
               method: 'POST'
             },
             deleteApCheck: {
-              url: b2bUrl + 'sale/apCheck/operation/deleteApCheck',
+              url: b2bUrl + '/sale/apCheck/operation/deleteApCheck',
               method: 'POST'
             },
             updateStatus: {
-              url: b2bUrl + 'sale/apCheck/operation/updateStatus',
+              url: b2bUrl + '/sale/apCheck/operation/updateStatus',
               method: 'POST'
             },
             printCount: {
-              url: b2bUrl + 'sale/apCheck/printCount/:id',
+              url: b2bUrl + '/sale/apCheck/printCount/:id',
               method: 'POST'
             },
             printPermission: {
-              url: b2bUrl + 'sale/apCheck/printCount/permission',
+              url: b2bUrl + '/sale/apCheck/printCount/permission',
               method: 'POST'
             },
     //			getTodoApCheck: {
@@ -2875,29 +2856,392 @@ define([ 'angular', 'common/services', 'common/utils', 'big'], function(angular,
               }
             },
             cancel: {
-              url: b2bUrl + 'sale/apCheck/operation/cancel',
+              url: b2bUrl + '/sale/apCheck/operation/cancel',
               method: 'POST'
             },
             setRead:{
-              url: b2bUrl + 'sale/apCheck/setRead',
+              url: b2bUrl + '/sale/apCheck/setRead',
               method: 'POST'
             },
             getUnreadIds:{
-              url: b2bUrl + 'sale/apCheck/getUnreadIds',
+              url: b2bUrl + '/sale/apCheck/getUnreadIds',
               method: 'GET'
             },
             getUnreadCount:{
-              url: b2bUrl + 'sale/apCheck/unread',
+              url: b2bUrl + '/sale/apCheck/unread',
               method: 'GET'
             },
             getBilled: {
-              url: b2bUrl + 'sale/apCheck/getBilled',
-              method: 'GET',
+              url: b2bUrl + '/sale/apCheck/getBilled',
+              method: 'GET'
             },
             exportXls: {
-              url: b2bUrl + 'sale/apCheck/xls/permission',
+              url: b2bUrl + '/sale/apCheck/xls/permission',
+              method: 'GET'
+            }
+          });
+        }])
+        .factory('B2bFaArCheck', ['$resource', 'BaseService', function($resource, BaseService) {
+          var b2bUrl = BaseService.getB2bUrl();
+          return $resource(b2bUrl + '/purchase/arCheck/:id', {}, {
+            agree: {
+              url: b2bUrl + '/purchase/arCheck/items/:itemId/reply',
+              method: 'POST',
+              params: {
+                itemId: 'itemId',
+                agreed: true
+              }
+            },
+            disagree: {
+              url: b2bUrl + '/purchase/arCheck/items/:itemId/reply',
+              method: 'POST',
+              params: {
+                orderItemId: 'itemId',
+                agreed: false
+              }
+            },
+            getReplies: {
+              url: b2bUrl + '/purchase/arCheck/items/:itemId/reply',
+              method: 'GET',
+              isArray: true
+            },
+            getDone: {
+              url : b2bUrl + '/purchase/arCheck/page/done'
+            },
+            getTodo: {
+              url : b2bUrl + '/purchase/arCheck/page/todo'
+            },
+            getWaiting: {
+              url : b2bUrl + '/purchase/arCheck/page/waiting'
+            }
+          });
+        }])
+        .factory('B2bErpLog', ['$resource', 'BaseService', function($resource, BaseService) {
+            var b2bUrl = BaseService.getB2bUrl();
+            return $resource(b2bUrl + '/log/erp', {});
+        }])
+        .factory('B2bUsageLog', ['$resource', 'BaseService', function($resource, BaseService) {
+            var b2bUrl = BaseService.getB2bUrl();
+            return $resource(b2bUrl + '/log/usage', {});
+        }])
+        .factory('B2bAppFlow', ['$resource', 'BaseService', function($resource, BaseService) {
+            var b2bUrl = BaseService.getB2bUrl();
+            return $resource(b2bUrl + '/office/ApprovalFlow', {}, {
+                saveAppFlowSet: {
+                    url: b2bUrl + '/office/ApprovalFlow/saveAppFlowSet',
+                    method: 'POST'
+                },
+                viewAppFlow: {
+                    url: b2bUrl + '/office/ApprovalFlow/viewAppFlow',
+                    method: 'GET',
+                    isArray: true
+                },
+                viewAppFlowItem: {
+                    url: b2bUrl + '/office/ApprovalFlow/viewAppFlowItem/:id',
+                    method: 'GET'
+                },
+                saveCopy: {
+                    url: b2bUrl + '/office/ApprovalFlow/saveCopy',
+                    method: 'POST'
+                },
+                getUserByDep: {
+                    url: b2bUrl + '/office/ApprovalFlow/getUserByDep',
+                    method: 'GET',
+                    isArray: true
+                },
+                setCopy: {
+                    url: b2bUrl + '/office/ApprovalFlow/setCopy',
+                    method: 'POST'
+                },
+                getUserByPosition: {
+                    url: b2bUrl + '/office/ApprovalFlow/getUserByPosition',
+                    method: 'GET',
+                    isArray: true
+                },
+                getPositions: {
+                    url: b2bUrl + '/office/ApprovalFlow/getPositions',
+                    method: 'GET',
+                    isArray: true
+                },
+                getPositionInfo: {
+                    url: b2bUrl + '/office/ApprovalFlow/getPositionInfo',
+                    method: 'GET',
+                    isArray: true
+                },
+                getNodeByName: {
+                    url: b2bUrl + '/office/ApprovalFlow/getNodeByName',
+                    method: 'GET'
+                }
+            })
+        }])
+        .factory('B2bPurcSample', ['$resource', 'BaseService', function($resource, BaseService) {
+          var b2bUrl = BaseService.getB2bUrl();
+          return $resource(b2bUrl + '/sale/sample/info/search', {}, {
+            getItem: {
+              url: b2bUrl +  '/sale/sample/:id/info',
+              method: 'GET'
+            },
+            printCount: {
+              url: b2bUrl + '/sale/sample/printCount/:id',
+              method: 'POST'
+            },
+            printPermission: {
+              url: b2bUrl + '/sale/sample/printCount/permission',
+              method: 'POST'
+            },
+            getSend: {
+              url: b2bUrl + '/sale/sample/:id/send',
               method: 'GET',
+              params: {
+                id: 'id'
+              },
+              isArray: true
+            },
+            getTodo: {
+              params: {
+                _state: 'todo'
+              }
+            },
+            getDone: {
+              params: {
+                _state: 'done'
+              }
+            },
+            getInvalid: {
+              params: {
+                _state: 'invalid'
+              }
+            },
+            setRead:{
+              url: b2bUrl + '/sale/sample/setRead',
+              method: 'POST'
+            },
+            getUnreadIds:{
+              url: b2bUrl + '/sale/sample/getUnreadIds',
+              method: 'GET'
+            },
+            getUnreadCount:{
+              url: b2bUrl + '/sale/sample/unread',
+              method: 'GET'
+            },
+            exportXls: {
+              url: b2bUrl + '/sale/sample/xls/permission',
+              method: 'GET'
+            }
+          });
+        }]).factory('B2bPurcSampleInfo', ['$resource', 'BaseService', function($resource, BaseService) {
+          var b2bUrl = BaseService.getB2bUrl();
+          return $resource(b2bUrl + '/sale/sample/info/nosearch', {}, {
+            getTodo: {
+              params: {
+                _state: 'todo'
+              }
+            },
+            getDone: {
+              params: {
+                _state: 'done'
+              }
+            },
+            getInvalid: {
+              params: {
+                _state: 'invalid'
+              }
             }
           });
         }])
+        .factory('B2bPurcApproval', ['$resource',  'BaseService', function($resource, BaseService) {
+          var b2bUrl = BaseService.getB2bUrl();
+          return $resource(b2bUrl + '/sale/sample/approval/info/search', {}, {
+            getItem: {
+              url: b2bUrl + '/sale/sample/approval/:id/info',
+              method: 'GET'
+            },
+            getAgreed: {
+              params: {
+                _state: 'agreed'
+              }
+            },
+            getRefused: {
+              params: {
+                _state: 'refused'
+              }
+            },
+            exportXls: {
+              url: b2bUrl + '/sale/sample/approval/xls/permission',
+              method: 'GET'
+            }
+          });
+        }])
+        .factory('B2bAccountRole', ['$resource', 'BaseService', function($resource, BaseService) {
+        		var b2bUrl = BaseService.getB2bUrl();
+        		return $resource(b2bUrl + '/account/role/:id', {}, {
+        			// 确认修改
+        			save: {
+        				url: b2bUrl + '/account/role',
+        				method: 'POST'
+        			},
+        			// 确认删除
+                    remove: {
+        				url: b2bUrl + '/account/role/:id',
+        				method: 'DELETE'
+        			},
+        			// 恢复默认
+                    recover: {
+                        url: b2bUrl + '/account/role/recover/:roleId',
+                        method: 'POST'
+                    },
+                    // 获取默认权限
+                    getDefaultRole: {
+                        url: b2bUrl + '/account/role/default/:roleId',
+                        method: 'GET'
+                    },
+        			updateDefault: {
+        				url: b2bUrl + '/account/role/updateDefault',
+        				method: 'POST'
+        			}
+        		});
+        	}])
+        .factory('B2bAccountResource', ['$resource', 'BaseService', function($resource, BaseService) {
+            return $resource(BaseService.getB2bUrl() + '/account/resource', {});
+        }]).factory('B2bUser', ['$resource', 'BaseService', function($resource, BaseService) {
+            var b2bUrl = BaseService.getB2bUrl();
+            return $resource(b2bUrl + '/user/findByUserUUList', {}, {
+                getUsersByUU: {
+                    url: b2bUrl + '/user/findByUserUUList',
+                    method: 'GET',
+                    isArray: true
+                }
+            });
+        }]).factory('B2bMakeOrder', ['$resource', 'BaseService', function($resource, BaseService) {
+        var b2bPath = BaseService.getB2bUrl();
+        return $resource(b2bPath + '/make/orders/info/search', {}, {
+            getItem: {
+                url: b2bPath + '/make/orders/:id/info',
+                method: 'GET'
+            },
+            reply: {
+                url: b2bPath + '/make/orders/:orderId/reply',
+                method: 'POST',
+                params: {
+                    orderId: 'orderId'
+                }
+            },
+            getReply: {
+                url: b2bPath + '/make/orders/:orderId/reply',
+                method: 'GET',
+                isArray: true,
+                params: {
+                    orderId: 'orderId'
+                }
+            },
+            getTodo: {
+                url: b2bPath + '/make/orders/info/search',
+                method: 'GET',
+                params: {
+                    _state: 'todo'
+                }
+            },
+            getDone: {
+                url: b2bPath + '/make/orders/info/search',
+                method: 'GET',
+                params: {
+                    _state: 'done'
+                }
+            },
+            printCount: {
+                url: b2bPath + '/make/orders/printCount/:id',
+                method: 'POST'
+            },
+            getEnd: {
+                url: b2bPath + '/make/orders/info/search',
+                method: 'GET',
+                params: {
+                    _state: 'end'
+                }
+            },
+            getAll: {},
+            setRead:{
+                url: b2bPath + '/make/orders/setRead',
+                method: 'POST'
+            },
+            setReadByState:{
+                url: b2bPath + '/make/orders/setReadByState',
+                method: 'GET'
+            },
+            getUnreadIds:{
+                url: b2bPath + '/make/orders/getUnreadIds',
+                method: 'GET'
+            },
+            getUnreadCount:{
+                url: b2bPath + '/make/orders/unread',
+                method: 'GET'
+            },
+            exportXls: {
+                url: b2bPath + '/make/orders/xls/permission',
+                method: 'GET'
+            }
+        });
+    }]).factory('B2bMakeChange', ['$resource', 'BaseService', function($resource, BaseService) {
+        var b2bPath = BaseService.getB2bUrl();
+        return $resource(b2bPath + '/make/changes/info/search', {}, {
+            reply: {
+                url: b2bPath + '/make/changes/:itemId/reply',
+                method: 'POST',
+                params: {
+                    itemId: 'itemId'
+                }
+            },
+            getAll: {
+                url: b2bPath + '/make/changes/info/search',
+                method: 'GET'
+            },
+            getItem: {
+                url: b2bPath + '/make/changes/:id/info',
+                method: 'GET'
+            },
+            exportXls: {
+                url: b2bPath + '/make/changes/xls/permission',
+                method: 'GET'
+            }
+        });
+    }]).factory('B2bMakeAccept',['$resource', 'BaseService', function($resource, BaseService){
+        var b2bPath = BaseService.getB2bUrl();
+        return $resource(b2bPath + '/make/accept/:id',{},{
+            getAll: {},
+            exportXls: {
+                url: b2bPath + '/make/accept/xls/permission',
+                method: 'GET'
+            }
+        });
+    }]).factory('B2bMakeReturn',['$resource', 'BaseService', function($resource, BaseService){
+        var b2bPath = BaseService.getB2bUrl();
+        return $resource(b2bPath + '/make/return/:id',{},{
+            getAll: {},
+            exportXls: {
+                url: b2bPath + '/make/return/xls/permission',
+                method: 'GET'
+            }
+        });
+    }]).factory('B2bMakeOutOrder', ['$resource', 'BaseService', function($resource, BaseService){
+        var b2bPath = BaseService.getB2bUrl();
+        return $resource(b2bPath + '/make/outorders/info/search', {}, {
+            getReply: {
+                url: b2bPath + '/make/orders/:orderId/reply',
+                method: 'GET',
+                isArray: true,
+                params: {
+                    orderId: 'orderId'
+                }
+            },
+            getAll: {},
+            getItem: {
+                url: b2bPath + '/make/outorders/:id/info',
+                method: 'GET'
+            },
+            exportXls: {
+                url: b2bPath + '/make/outorders/xls/permission',
+                method: 'GET'
+            }
+        })
+    }]);
 });

+ 112 - 1
src/main/webapp/resources/js/common/controllers/b2bCommonCtrls.js

@@ -476,7 +476,7 @@ define([ 'app/app' ], function(app) {
         $scope.invite = function () {
             var modalInstance = $modal.open({
                 animation: true,
-                templateUrl: 'static/tpl/index/search/enterpirseInfo.html',
+                templateUrl: 'static/view/sso/b2b/modal/enterpirseInfo.html',
                 controller: 'InviteCtrl',
                 resolve: {
                     enname: function () {
@@ -499,4 +499,115 @@ define([ 'app/app' ], function(app) {
             });
         }
     }]);
+    app.controller('InviteCtrl', ['$scope', 'toaster', '$modalInstance', 'enname', 'B2bInvitationRecord', '$modal', function ($scope, toaster, $modalInstance, enname, InvitationRecord, $modal) {
+        $scope.enter = {
+            vendname: enname
+        };
+
+        $scope.save = function (enter) {
+            // 先检验是否已注册
+            InvitationRecord.enterpriseList({name: enter.vendname}, {},  function(data) {
+                $scope.existEn = data;
+                if ($scope.existEn.length == 0) {
+                    $modalInstance.close(enter);
+                    var modalInstance = $modal.open({
+                        animation: true,
+                        templateUrl: 'static/view/sso/b2b/modal/QQshare_modal.html',
+                        controller: 'QQShareCtrl',
+                    });
+                } else {
+                    $scope.enterprise = $scope.existEn[0];
+                }
+            });
+        }
+
+        $scope.viewDetail = function() {
+            $scope.exist = 1;
+        }
+        $scope.cancel = function () {
+            $modalInstance.dismiss();
+        }
+        $scope.closeDetail = function() {
+            $scope.exist = 0;
+        }
+
+        /**
+         * 添加合作伙伴
+         * @param enterprise
+         */
+        $scope.addPartner = function(en) {
+            InvitationRecord.addPart({inviteEnUU: $scope.enterprise.uu, inviteUserName: en.vendusername, inviteUserTel: en.vendusertel}, {}, function(data) {
+                if (data.success) {
+                    toaster.pop('success', data.success);
+                    $modalInstance.dismiss();
+                } else if (data.error) {
+                    toaster.pop('error', data.error);
+                }
+            }, function(response) {
+                toaster.pop('error', response.data);
+            });
+        }
+    }]);
+
+    /**
+     * 再次邀请
+     */
+    app.controller('ReInviteCtrl', ['$scope', 'toaster', '$modalInstance', 'id', 'B2bInvitationRecord', function ($scope, toaster, $modalInstance, id, InvitationRecord) {
+        var loadData = function (id) {
+            InvitationRecord.getRecordById({id: id}, {}, function (data) {
+                if (data.user !== null) {
+                    data.user = {};
+                }
+                $scope.enter = data;
+            });
+        };
+        loadData(id);
+
+        $scope.save = function (enter) {
+            if (!enter.vendusertel && !enter.venduseremail) {
+                toaster.pop('info', '提示', '手机号或邮箱至少填写一个才能通知到客户');
+            } else {
+                $modalInstance.close(enter);
+            }
+        };
+
+        $scope.cancel = function () {
+            $modalInstance.dismiss();
+        }
+
+    }]);
+
+    /**
+     * QQ分享
+     */
+    app.controller('QQShareCtrl', ['$scope', 'B2bInvitationRecord', '$modalInstance',  function($scope, InvitationRecord, $modalInstance) {
+        InvitationRecord.getInviteUrl({}, function(data) {
+            $scope.inviteUrl = data.url;
+            var p = {
+                url: $scope.inviteUrl, /*获取URL,可加上来自分享到QQ标识,方便统计*/
+                // desc: 'hejq', /*分享理由(风格应模拟用户对话),支持多分享语随机展现(使用|分隔)*/
+                // title: '', /*分享标题(可选)*/
+                // summary: '', /*分享摘要(可选)*/
+                // pics: '', /*分享图片(可选)*/
+                // flash: '', /*视频地址(可选)*/
+                // site: '', /*分享来源(可选) 如:QQ分享*/
+                // style: '201',
+                // width: 32,
+                // height: 32
+            };
+            var s = [];
+            for(var i in p){
+                s.push(i + '=' + encodeURIComponent(p[i]||''));
+            }
+            s.join('&');
+            $scope.QQshare = function() {
+                window.open("http://connect.qq.com/widget/shareqq/index.html?" + s)
+            }
+        });
+
+        $scope.close = function() {
+            $modalInstance.dismiss();
+        }
+    }]);
+
 });

+ 2 - 2
src/main/webapp/resources/js/common/services.js

@@ -144,14 +144,14 @@ define([ 'angular', 'common/utils', 'big'], function(angular, utils, Big) {
 					// 	method: 'get',
 					// 	url: 'b2b/sale/accessUrl'
 					// }).success(function (data) {
-					// 	defer.resolve(data);
+					// 	defer.resolve(data);sty
 					// }).error(function (error) {
 					// 	defer.reject(error);
 					// });
 					// defer.promise.then(function (resolve) {
 					// 	$rootScope.b2bUrl = resolve.url;
 					// });
-					$rootScope.b2bUrl = this.getRootPath().indexOf('usoftmall.com') > -1 ? 'http://uas.ubtob.com' : 'http://10.1.51.91:8090/platform-b2b/';
+					$rootScope.b2bUrl = this.getRootPath().indexOf('usoftchina.com') > -1 ? 'http://b2b.usoftchina.com' : 'http://192.168.253.12:9000/b2b-test';
 				}
 				return $rootScope.b2bUrl;
 			}

+ 0 - 1
src/main/webapp/resources/js/common/services/File.js

@@ -84,7 +84,6 @@ define([ 'ngResource'], function() {
               document.documentElement.innerHTML = "Error:" + strHtmInstall + document.documentElement.innerHTML;
             return LODOP;
           }
-          ;
         }
       }
     })

+ 29 - 29
src/main/webapp/resources/js/common/services/Make.js

@@ -2,20 +2,20 @@ define([ 'ngResource'], function() {
 	angular.module('MakeServices', [ 'ngResource'
 	]).factory('B2bMakeOrder', ['$resource', 'BaseService', function($resource, BaseService) {
     var b2bPath = BaseService.getB2bUrl();
-		return $resource(b2bPath + 'make/orders/info/search', {}, {
+		return $resource(b2bPath + '/make/orders/info/search', {}, {
 			getItem: {
-				url: b2bPath +  'make/orders/:id/info',
+				url: b2bPath + '/make/orders/:id/info',
 				method: 'GET'
 			},
 			reply: {
-				url: b2bPath + 'make/orders/:orderId/reply',
+				url: b2bPath + '/make/orders/:orderId/reply',
 				method: 'POST',
 				params: {
 					orderId: 'orderId'
 				}
 			}, 
 			getReply: {
-				url: b2bPath + 'make/orders/:orderId/reply',
+				url: b2bPath + '/make/orders/:orderId/reply',
 				method: 'GET',
 				isArray: true,
 				params: {
@@ -23,25 +23,25 @@ define([ 'ngResource'], function() {
 				}
 			},	
 			getTodo: {
-				url: b2bPath + 'make/orders/info/search',
+				url: b2bPath + '/make/orders/info/search',
 				method: 'GET',
 				params: {
 					_state: 'todo'
 				}
 			},
 			getDone: {
-				url: b2bPath + 'make/orders/info/search',
+				url: b2bPath + '/make/orders/info/search',
 				method: 'GET',
 				params: {
 					_state: 'done'
 				}
 			},
 			printCount: {
-				url: b2bPath + 'make/orders/printCount/:id',
+				url: b2bPath + '/make/orders/printCount/:id',
 				method: 'POST'
 			},
 			getEnd: {
-				url: b2bPath + 'make/orders/info/search',
+				url: b2bPath + '/make/orders/info/search',
 				method: 'GET',
 				params: {
 					_state: 'end'
@@ -49,72 +49,72 @@ define([ 'ngResource'], function() {
 			},
 			getAll: {},
 			setRead:{
-				url: b2bPath + 'make/orders/setRead',
+				url: b2bPath + '/make/orders/setRead',
 				method: 'POST'
 			},
 			setReadByState:{
-				url: b2bPath + 'make/orders/setReadByState',
+				url: b2bPath + '/make/orders/setReadByState',
 				method: 'GET'
 			},
 			getUnreadIds:{
-				url: b2bPath + 'make/orders/getUnreadIds',
+				url: b2bPath + '/make/orders/getUnreadIds',
 				method: 'GET'
 			},
 			getUnreadCount:{
-				url: b2bPath + 'make/orders/unread',
+				url: b2bPath + '/make/orders/unread',
 				method: 'GET'
 			},
 			exportXls: {
-				url: b2bPath + 'make/orders/xls/permission',
+				url: b2bPath + '/make/orders/xls/permission',
 				method: 'GET'
 			}
 		});
 	}]).factory('B2bMakeChange', ['$resource', 'BaseService', function($resource, BaseService) {
     var b2bPath = BaseService.getB2bUrl();
-		return $resource(b2bPath + 'make/changes/info/search', {}, {
+		return $resource(b2bPath + '/make/changes/info/search', {}, {
 			reply: {
-				url: b2bPath + 'make/changes/:itemId/reply',
+				url: b2bPath + '/make/changes/:itemId/reply',
 				method: 'POST',
 				params: {
 					itemId: 'itemId'
 				}
 			},
 			getAll: {
-				url: b2bPath + 'make/changes/info/search',
-				method: 'GET',
+				url: b2bPath + '/make/changes/info/search',
+				method: 'GET'
 			},
 			getItem: {
-				url: b2bPath + 'make/changes/:id/info',
-				method: 'GET',
+				url: b2bPath + '/make/changes/:id/info',
+				method: 'GET'
 			},
 			exportXls: {
-				url: b2bPath + 'make/changes/xls/permission',
-				method: 'GET',
+				url: b2bPath + '/make/changes/xls/permission',
+				method: 'GET'
 			}
 		});
 	}]).factory('B2bMakeAccept',['$resource', 'BaseService', function($resource, BaseService){
     var b2bPath = BaseService.getB2bUrl();
-		return $resource(b2bPath + 'make/accept/:id',{},{
+		return $resource(b2bPath + '/make/accept/:id',{},{
 			getAll: {},
 			exportXls: {
-				url: b2bPath + 'make/accept/xls/permission',
+				url: b2bPath + '/make/accept/xls/permission',
 				method: 'GET'
 			}
 		});
 	}]).factory('B2bMakeReturn',['$resource', 'BaseService', function($resource, BaseService){
     var b2bPath = BaseService.getB2bUrl();
-		return $resource(b2bPath + 'make/return/:id',{},{
+		return $resource(b2bPath + '/make/return/:id',{},{
 			getAll: {},
 			exportXls: {
-				url: b2bPath + 'make/return/xls/permission',
+				url: b2bPath + '/make/return/xls/permission',
 				method: 'GET'
 			}
 		});
 	}]).factory('B2bMakeOutOrder', ['$resource', 'BaseService', function($resource, BaseService){
     var b2bPath = BaseService.getB2bUrl();
-		return $resource(b2bPath + 'make/outorders/info/search', {}, {
+		return $resource(b2bPath + '/make/outorders/info/search', {}, {
             getReply: {
-                url: b2bPath + 'make/orders/:orderId/reply',
+                url: b2bPath + '/make/orders/:orderId/reply',
                 method: 'GET',
                 isArray: true,
                 params: {
@@ -123,11 +123,11 @@ define([ 'ngResource'], function() {
             },
 			getAll: {},
 			getItem: {
-				url: b2bPath + 'make/outorders/:id/info',
+				url: b2bPath + '/make/outorders/:id/info',
 				method: 'GET'
 			},
 			exportXls: {
-				url: b2bPath + 'make/outorders/xls/permission',
+				url: b2bPath + '/make/outorders/xls/permission',
 				method: 'GET'
 			}
 		})

+ 2 - 2
src/main/webapp/resources/js/common/services/Token.js

@@ -1,9 +1,9 @@
 define([ 'ngResource'], function() {
 	angular.module('TokenService', [ 'ngResource']).factory('token', ['$resource', 'BaseService', function($resource, BaseService) {
     var rootPath = BaseService.getB2bUrl();
-		return $resource(rootPath + 'token', {}, {
+		return $resource(rootPath + '/token', {}, {
 			info: {
-				url: rootPath + 'token',
+				url: rootPath + '/token',
 				mehtod: 'GET'
 			}
 		})

+ 71 - 3
src/main/webapp/resources/js/sso/app.js

@@ -1,7 +1,7 @@
 
-define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'common/services', 'common/directives','common/query/kind', 'common/query/brand', 'common/query/component', 'common/query/order', 'common/query/cart', 'common/query/goods', 'common/query/return' ,'angular-toaster', 'common/query/urlencryption', 'ui-jquery', 'common/query/bankTransfer', 'common/query/bankInfo', 'common/query/change', 'common/query/rate', 'common/query/logistics', 'common/query/address' ,'angular-toaster','common/query/collection', 'common/query/proofing', 'common/query/bill', 'common/query/user','file-upload', 'file-upload-shim', 'common/query/bankInfo' , 'common/query/responseLogistics', 'common/query/payment', 'common/query/afterSale', 'common/query/messageBoard', 'common/query/importDeclaration', 'common/query/enterprise', 'common/query/invoice', 'common/query/refund', 'common/query/recommendation', 'common/query/logisticsPort', 'common/query/storeInfo', 'common/query/tradeMessageNotice', 'common/query/tradeBasicProperties', 'common/query/browsingHistory', 'common/query/internalMessage', 'common/module/chat_web_module', 'angular-filter', 'common/query/vendor','common/query/seekPurchase', 'common/query/search', 'angular-sanitize', 'common/query/authority','common/query/purchase'], function(angularAMD) {
+define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'common/services', 'common/directives','common/query/kind', 'common/query/brand', 'common/query/component', 'common/query/order', 'common/query/cart', 'common/query/goods', 'common/query/return' ,'angular-toaster', 'common/query/urlencryption', 'ui-jquery', 'common/query/bankTransfer', 'common/query/bankInfo', 'common/query/change', 'common/query/rate', 'common/query/logistics', 'common/query/address' ,'angular-toaster','common/query/collection', 'common/query/proofing', 'common/query/bill', 'common/query/user','file-upload', 'file-upload-shim', 'common/query/bankInfo' , 'common/query/responseLogistics', 'common/query/payment', 'common/query/afterSale', 'common/query/messageBoard', 'common/query/importDeclaration', 'common/query/enterprise', 'common/query/invoice', 'common/query/refund', 'common/query/recommendation', 'common/query/logisticsPort', 'common/query/storeInfo', 'common/query/tradeMessageNotice', 'common/query/tradeBasicProperties', 'common/query/browsingHistory', 'common/query/internalMessage', 'common/module/chat_web_module', 'angular-filter', 'common/query/vendor','common/query/seekPurchase', 'common/query/search', 'angular-sanitize', 'common/query/authority','common/query/purchase', 'common/b2bServices'], function(angularAMD) {
 	'use strict';
-	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ng.local', 'ngTable', 'common.services', 'common.directives', 'tool.directives', 'common.query.kind', 'brandServices', 'componentServices', 'orderServices', 'cartServices', 'goodsServices', 'returnServices' , 'toaster', 'urlencryptionServices', 'ui.jquery', 'bankTransfer', 'bankInfo', 'changeServices','rateServices', 'logisticsServices', 'addressServices', 'toaster','collection','proofingServices', 'billServices', 'common.query.user', 'angularFileUpload', 'bankInfo', 'responseLogisticsService', 'PaymentService', 'afterSaleService', 'messageBoardServices', 'table.directives', 'importDeclaration', 'common.query.enterprise', 'invoiceServices', 'refundModule', 'recommendation','logisticsPortService', 'storeInfoServices', 'tradeMessageNoticeModule', 'tradeBasicPropertiesServices', 'BrowsingHistory', 'internalMessageServices', 'WebChatModule', 'angular.filter', 'vendorServices','seekPurchaseServices', 'searchService', 'ngSanitize', 'authorityServices', 'purchaseServices']);
+	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ng.local', 'ngTable', 'common.services', 'common.directives', 'tool.directives', 'common.query.kind', 'brandServices', 'componentServices', 'orderServices', 'cartServices', 'goodsServices', 'returnServices' , 'toaster', 'urlencryptionServices', 'ui.jquery', 'bankTransfer', 'bankInfo', 'changeServices','rateServices', 'logisticsServices', 'addressServices', 'toaster','collection','proofingServices', 'billServices', 'common.query.user', 'angularFileUpload', 'bankInfo', 'responseLogisticsService', 'PaymentService', 'afterSaleService', 'messageBoardServices', 'table.directives', 'importDeclaration', 'common.query.enterprise', 'invoiceServices', 'refundModule', 'recommendation','logisticsPortService', 'storeInfoServices', 'tradeMessageNoticeModule', 'tradeBasicPropertiesServices', 'BrowsingHistory', 'internalMessageServices', 'WebChatModule', 'angular.filter', 'vendorServices','seekPurchaseServices', 'searchService', 'ngSanitize', 'authorityServices', 'purchaseServices', 'common.b2bServices']);
 	app.init = function() {
 		angularAMD.bootstrap(app);
 	};
@@ -19,8 +19,10 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'commo
 
 
 	// ui-router 路由配置
-	app.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider){
+	app.config(['$stateProvider', '$urlRouterProvider', '$httpProvider', function($stateProvider, $urlRouterProvider, $httpProvider){
 		$urlRouterProvider.otherwise("/index");
+        // 设置该app下js访问带cookie
+        $httpProvider.defaults.withCredentials = true;
 		$stateProvider.state('ssoIndex', angularAMD.route({
 			url: '/index',
 			templateUrl: 'static/view/sso/forstore/ssoCenter.html',
@@ -75,9 +77,75 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'commo
 			title: '收款账户',
 			controller: 'vendorPayCenterCtrl',
 			controllerUrl: 'js/vendor/controllers/forstore/pay_center_ctrl'
+		})).state('approvalflow_log', angularAMD.route({
+			url: "/approvalflow/log",
+			templateUrl: "static/view/sso/b2b/log.html",
+			controller: 'LogCtrl',
+			controllerUrl: 'js/sso/controllers/b2b/LogCtrl'
+		})).state('approvalflow_flow', angularAMD.route({
+			url: "/approvalflow/flow",
+			templateUrl: "static/view/sso/b2b/home.html",
+			controller: 'approvalFlowCtrl',
+			controllerUrl: 'js/sso/controllers/b2b/approvalFlowCtrl'
+        })).state('baseInfo_myRequest', angularAMD.route({
+            url: "/myRequest",
+            title: 'b2b企业圈-我的合作伙伴(全部)',
+            templateUrl: 'static/view/sso/b2b/myRequest.html',
+            controller: 'AddPartnerRequestCtrl',
+            controllerUrl: 'app/controllers/b2b/addPartnerRequestCtrl'
+        })).state('baseInfo_vendorInfo', angularAMD.route({
+            url: "/enume/vendorInfo",
+            title: 'b2b企业圈-我的合作伙伴(供应商)',
+            templateUrl: 'static/view/sso/b2b/vendorsInfo.html',
+            controller: 'VendorsInfoCtrl',
+            controllerUrl: 'app/controllers/b2b/vendorsInfoCtrl'
+        })).state('baseInfo_customerInfo', angularAMD.route({
+            url: "/enume/customerInfo",
+            title: 'b2b企业圈-我的合作伙伴(客户)',
+            templateUrl: 'static/view/sso/b2b/customersInfo.html',
+            controller: 'CustomersInfoCtrl',
+            controllerUrl: 'app/controllers/b2b/customersInfoCtrl'
+        })).state('baseInfo_servicerInfo', angularAMD.route({
+            url: "/enume/servicerInfo",
+            title: 'b2b企业圈-我的合作伙伴(服务商)',
+            templateUrl: 'static/view/sso/b2b/servicerInfo.html',
+            controller: 'ServicerInfoCtrl',
+            controllerUrl: 'app/controllers/b2b/servicerInfoCtrl'
+        })).state('baseInfo_newPartner', angularAMD.route({
+            url: "/newPartner",
+			title: 'b2b企业圈-新的合作伙伴',
+            templateUrl: "static/view/sso/b2b/newPartner.html",
+            controller: 'NewPartnerCtrl',
+            controllerUrl: 'app/controllers/b2b/newPartnerCtrl'
+        })).state('baseInfo_invitation', angularAMD.route({
+            url: "/enume/invitation",
+            title: 'b2b企业圈-邀请注册记录',
+            templateUrl: "static/view/sso/b2b/invitation.html",
+            controller: 'InvitationCtrl',
+            controllerUrl: 'app/controllers/b2b/invitationCtrl'
+        })).state('partner_searchresult', angularAMD.route({
+            url: "/enume/searchresult",
+            title: 'b2b企业圈-邀请注册记录',
+            templateUrl: "static/view/sso/b2b/searchresult.html",
+            controller: 'EnterpriseSearchCtrl',
+            controllerUrl: 'app/controllers/b2b/enterpriseSearchCtrl'
 		}))
 	}]);
 
+    // 高亮显示关键词
+    app.filter('getkey', ['$sce', '$rootScope', function ($sce, $rootScope) {
+        var search = $rootScope.searchKeyword;
+        return function (content, search) {
+            content = encodeURI(content);
+            search = encodeURI(search);
+            var reg = new RegExp(search, 'gim');
+            var result = content.replace(reg, '<font color="red">$&</font>');
+            result = decodeURIComponent(result);
+            return $sce.trustAsHtml(result);
+        };
+        $rootScope.searchKeyword = null;// 清除缓存的关键字
+    }]);
+
 	// 状态码  -> 描述
 	app.filter('status', function(){
 		var statusConfig = {

+ 55 - 0
src/main/webapp/resources/js/sso/controllers/b2b/LogCtrl.js

@@ -0,0 +1,55 @@
+define(['app/app'], function(app) {
+    app.register.controller('LogCtrl', ['$scope', '$rootScope', 'BaseService', 'ngTableParams', 'B2bErpLog', 'B2bUsageLog',
+        function ($scope, $rootScope, BaseService, ngTableParams, ErpLog, UsageLog) {
+        $rootScope.active = 'approvalflow_log';
+        $scope.exportXls = function () {
+           window.open(BaseService.getB2bUrl() + '/log/erp/xls');
+        };
+        $scope.erpParams = new ngTableParams({
+            page: 1,
+            count: 20,
+            sorting: {
+                time: 'desc'
+            }
+        }, {
+            total: 0,
+            counts: [5, 10, 25, 50],
+            getData: function ($defer, params) {
+                $scope.loading = true;
+                ErpLog.get(BaseService.parseParams(params.url()), function (page) {
+                    $scope.loading = false;
+                    if (page) {
+                        params.total(page.totalElements);
+                        $defer.resolve(page.content);
+                    }
+                }, function (response) {
+                    $scope.loading = false;
+                    toaster.pop('error', '数据加载失败', response.data);
+                });
+            }
+        });
+        $scope.usageParams = new ngTableParams({
+            page: 1,
+            count: 20,
+            sorting: {
+                time: 'desc'
+            }
+        }, {
+            total: 0,
+            counts: [5, 10, 25, 50],
+            getData: function($defer, params) {
+                $scope.loading = true;
+                UsageLog.get(BaseService.parseParams(params.url()), function (page) {
+                    $scope.loading = false;
+                    if (page) {
+                        params.total(page.totalElements);
+                        $defer.resolve(page.content);
+                    }
+                }, function (response) {
+                    $scope.loading = false;
+                    toaster.pop('error', '数据加载失败', response.data);
+                });
+            }
+        });
+    }])
+});

+ 2 - 0
src/main/webapp/resources/js/vendor/controllers/b2b/baseInfo/addPartnerRequestCtrl.js → src/main/webapp/resources/js/sso/controllers/b2b/addPartnerRequestCtrl.js

@@ -62,6 +62,8 @@ define(['app/app'], function (app) {
                   if (page) {
                       params.total(page.totalElement);
                       $defer.resolve(page.content);
+                    $scope.infoCommon = page
+                    $scope.infoCommon.all = page.content.length
                       $scope.keywordXls = angular.copy(pageParams.keyword);//保存当前取值的关键词
                   }
               }, function (response) {

+ 269 - 0
src/main/webapp/resources/js/sso/controllers/b2b/approvalFlowCtrl.js

@@ -0,0 +1,269 @@
+define(['app/app'], function(app) {
+    /**
+     * 审批流
+     */
+    app.register.controller('approvalFlowCtrl', ['$scope', '$rootScope', 'toaster', '$modal', 'B2bAppFlow', 'BaseService', function ($scope, $rootScope, toaster, $modal, appFlow, BaseService) {
+        BaseService.scrollBackToTop();
+        $rootScope.active = 'approvalflow_flow';
+        $scope.vacation = false;
+        $scope.workovertime = false;
+        $scope.workdaily = false;
+        $scope.feeplease = false;
+        $scope.signapp = false;
+        appFlow.viewAppFlow({}, function (data) {// 获取已设置的列表
+            $scope.nodes = data;
+            angular.forEach($scope.nodes, function (node) {
+                if (node.appname = '请假单') {
+                    $scope.vacation = true;
+                }
+                if (node.appname = '加班单') {
+                    $scope.workovertime = true;
+                }
+                if (node.appname = '工作日报') {
+                    $scope.workdaily = true;
+                }
+                if (node.appname = '出差单') {
+                    $scope.feeplease = true;
+                }
+                if (node.appname = '申诉单') {
+                    $scope.signapp = true;
+                }
+            });
+        }, function (response) {
+
+        });
+
+        $scope.NoteSet = function () {
+            var modalInstance = $modal.open({
+                templateUrl: 'static/view/sso/b2b/modal/step1.html',
+                controller: 'NoteStep1Ctrl',
+                size: 'lg',
+                resolve: {
+                    AppName: function () {
+                        return '请假单';
+                    }
+                }
+            });
+
+            modalInstance.result.then(function (data) {
+                appFlow.saveAppFlowSet({json: data}, {}, function (data) {
+                    if (data.error) {
+                        toaster.pop('error', '提示', data.error);
+                    }
+                    if (data.success) {
+                        toaster.pop('success', '提示', data.success);
+                    }
+                }, function (response) {
+
+                });
+            }, function () {
+
+            });
+        }
+
+        $scope.overTimeSet = function () {
+            var modalInstance = $modal.open({
+                templateUrl: 'static/view/sso/b2b/modal/step1.html',
+                controller: 'NoteStep1Ctrl',
+                size: 'lg',
+                resolve: {
+                    AppName: function () {
+                        return '加班单';
+                    }
+                }
+            });
+
+            modalInstance.result.then(function (data) {
+                appFlow.saveAppFlowSet({json: data}, {}, function (data) {
+                    if (data.error) {
+                        toaster.pop('error', '提示', data.error);
+                    }
+                    if (data.success) {
+                        toaster.pop('success', '提示', data.success);
+                    }
+                }, function (response) {
+
+                });
+            }, function () {
+
+            });
+        }
+
+        $scope.feePleaseSet = function () {
+            var modalInstance = $modal.open({
+                templateUrl: 'static/view/sso/b2b/modal/step1.html',
+                controller: 'NoteStep1Ctrl',
+                size: 'lg',
+                resolve: {
+                    AppName: function () {
+                        return '出差单';
+                    }
+                }
+            });
+
+            modalInstance.result.then(function (data) {
+                appFlow.saveAppFlowSet({json: data}, {}, function (data) {
+                    if (data.error) {
+                        toaster.pop('error', '提示', data.error);
+                    }
+                    if (data.success) {
+                        toaster.pop('success', '提示', data.success);
+                    }
+                }, function (response) {
+
+                });
+            }, function () {
+
+            });
+        }
+
+        $scope.workDailySet = function () {
+            var modalInstance = $modal.open({
+                templateUrl: 'static/view/sso/b2b/modal/step1.html',
+                controller: 'NoteStep1Ctrl',
+                size: 'lg',
+                resolve: {
+                    AppName: function () {
+                        return '工作日报';
+                    }
+                }
+            });
+
+            modalInstance.result.then(function (data) {
+                appFlow.saveAppFlowSet({json: data}, {}, function (data) {
+                    if (data.error) {
+                        toaster.pop('error', '提示', data.error);
+                    }
+                    if (data.success) {
+                        toaster.pop('success', '提示', data.success);
+                    }
+                }, function (response) {
+
+                });
+            }, function () {
+
+            });
+        }
+
+        $scope.signAppSet = function () {
+            var modalInstance = $modal.open({
+                templateUrl: 'static/view/sso/b2b/modal/step1.html',
+                controller: 'NoteStep1Ctrl',
+                size: 'lg',
+                resolve: {
+                    AppName: function () {
+                        return '申诉单';
+                    }
+                }
+            });
+
+            modalInstance.result.then(function (data) {
+                appFlow.saveAppFlowSet({json: data}, {}, function (data) {
+                    if (data.error) {
+                        toaster.pop('error', '提示', data.error);
+                    }
+                    if (data.success) {
+                        toaster.pop('success', '提示', data.success);
+                    }
+                }, function (response) {
+
+                });
+            }, function () {
+
+            });
+        }
+    }]);
+
+    /**
+     * 审核条件设置
+     */
+    app.register.controller('NoteStep1Ctrl', ['$scope', 'toaster', '$modalInstance', 'B2bAppFlow', 'AppName', '$filter', '$rootScope', function ($scope, toaster, $modalInstance, appFlow, AppName, $filter, $rootScope) {
+        $scope.appName = AppName;// 标题名称
+        $scope.AppFlow = {
+            appName: $scope.appName,
+            appNodes: {}
+        };
+        $scope.AppFlow.appNodes = [];
+        appFlow.getNodeByName({name: AppName}, {}, function (data) {// 通过单据名称查询单个审批流
+            if (data.appNodes.length != 0) {
+                $scope.node = data;
+                $scope.AppFlow = data;
+            }
+        }, function () {
+
+        });
+
+        $scope.copy = function () {//复制
+            $rootScope.flowcopy = angular.copy($scope.AppFlow);
+            toaster.pop('info', '提示', '复制成功');
+            $modalInstance.dismiss();
+        }
+
+        $scope.paste = function () {
+            $scope.AppFlow = {appName: $scope.appName, appNodes: {}};
+            $scope.AppFlow.appNodes = $rootScope.flowcopy.appNodes;
+        }
+
+        $scope.clear = function () {// 清空
+            $scope.AppFlow = {
+                appName: $scope.appName,
+                appNodes: {}
+            };
+            $scope.AppFlow.appNodes = [];
+        }
+
+        appFlow.getPositions({}, function (data) {// 获取人员信息
+            $scope.users = data;
+        }, function (response) {
+
+        });
+
+        appFlow.getPositionInfo({}, function (data) { // 获取职位信息
+            $scope.roles = data;
+        }, function (response) {
+
+        });
+
+        $scope.SelectUser = function (data) { // 添加人员
+            var item = {
+                useruu: null,
+                username: null,
+                level: null
+            };
+            item.useruu = data.useruu;
+            item.username = data.username;
+            $scope.AppFlow.appNodes.push(item);
+        }
+
+        $scope.SelectRole = function (data) {// 添加职位
+            var item = {
+                position: null,
+                level: null
+            };
+            item.position = data;
+            $scope.AppFlow.appNodes.push(item);
+        }
+
+        $scope.deleteNode = function (index) {// 删除节点
+            $scope.AppFlow.appNodes.splice(index, 1);
+        };
+
+        $scope.saveNode = function () { // 保存
+            angular.forEach($scope.AppFlow.appNodes, function (value, key) {
+                $scope.AppFlow.appNodes[key].level = key;
+            });
+            if ($scope.AppFlow.appNodes.length == 0) {
+                toaster.pop('info', '提示', '您还未设置审批人');
+            } else {
+                $modalInstance.close($scope.AppFlow);
+            }
+            ;
+        };
+
+        $scope.cancel = function () {// 取消
+            $modalInstance.dismiss();
+        }
+
+    }]);
+
+});

+ 2 - 0
src/main/webapp/resources/js/vendor/controllers/b2b/baseInfo/customersInfoCtrl.js → src/main/webapp/resources/js/sso/controllers/b2b/customersInfoCtrl.js

@@ -28,6 +28,8 @@ define(['app/app'], function (app) {
                   if (page) {
                       params.total(page.totalElement);
                       $scope.total = page.totalElement;
+                    $scope.infoCommon = page
+                    $scope.infoCommon.all = page.content.length
                       $defer.resolve(page.content);
                   }
                   $scope.totalCount = page.totalElement;

+ 251 - 0
src/main/webapp/resources/js/sso/controllers/b2b/enterpriseSearchCtrl.js

@@ -0,0 +1,251 @@
+
+define(['app/app'], function (app) {
+    "use strict";
+    /**
+     * 添加合作伙伴
+     */
+    app.register.controller('EnterpriseSearchCtrl', ['$scope', 'B2bGetAccountUserSpace', 'ngTableParams', '$filter', 'BaseService', 'toaster', 'B2bAddPartner', '$rootScope', '$modal', 'B2bInvitationRecord', function ($scope, getAccountUserSpace, ngTableParams, $filter, BaseService, toaster, AddPartner, $rootScope, $modal, InvitationRecord) {
+        $scope.status = 'add';
+        BaseService.scrollBackToTop();
+        $scope.active = 'all';
+        $scope.agreedText = '全部';
+        $scope.dateZoneText = '一个月内';
+        $scope.condition = {dateZone: 1};
+        $scope.currency = Symbol.currency;//将币别转化为对应的符号
+
+        /**
+         * 页面状态按钮过滤
+         */
+        var getState = function (active) {
+            var fn = 'get';
+            switch (active) {
+                case 'done':
+                    fn = 'getDone';
+                    break;
+                case 'todo':
+                    fn = 'getTodo';
+                    break;
+                case 'end':
+                    fn = 'getEnd';
+                    break;
+                case 'waiting':
+                    fn = 'getWaiting';
+                    break;
+                case 'received':
+                    fn = 'getReceived';
+                    break;
+                case 'invalid':
+                    fn = 'getInvalid';
+                    break;
+                // 已采纳
+                case 'agreed':
+                    fn = 'getAgreed';
+                    break;
+                // 未采纳
+                case 'refused':
+                    fn = 'getRefused';
+                    break;
+                // 个人
+                case 'personal':
+                    fn = 'getPersonal';
+                    break;
+                // 集体
+                case 'teams':
+                    fn = 'getTeams';
+                    break;
+                // 非标准
+                case 'nonstandard':
+                    fn = 'getNonstandard';
+                    break;
+                // 标准
+                case 'standard':
+                    fn = 'getStandard';
+                    break;
+                // 变更单无需确认
+                case 'unread':
+                    fn = 'getUnread';
+                    break;
+            }
+            return fn;
+        };
+
+        /**
+         * 改变单据日期范围
+         */
+        var getDateCondition = function (zone, condition) {
+            var fromDate = new Date();
+            var toDate = new Date();
+            //去除时分秒限制,dateFrom设置成0时0分0秒,dateTo设置成23时59分59秒
+            fromDate.setHours(0, 0, 0, 0);
+            toDate.setHours(23, 59, 59, 999);
+            if (zone == -1) { // 自定义时间,什么都不做
+
+            } else if (zone == 1) {
+                fromDate.setMonth(fromDate.getMonth() - 1);
+                condition.dateFrom = fromDate;
+                condition.dateTo = toDate;
+            } else if (zone == 3) {
+                fromDate.setMonth(fromDate.getMonth() - 3);
+                condition.dateFrom = fromDate;
+                condition.dateTo = toDate;
+            } else if (zone == 6) {
+                fromDate.setMonth(fromDate.getMonth() - 6);
+                condition.dateFrom = fromDate;
+                condition.dateTo = toDate;
+            } else {
+                condition.dateFrom = null;
+                condition.dateTo = null;
+            }
+        };
+
+        /**
+         * 改变单据交货日期范围
+         */
+        var getDelveryCondition = function (zone, condition) {
+            var date = new Date();
+            if (zone == -1) {
+                condition.deliveryFrom = null;
+                condition.deliveryTo = null;
+            } else if (zone == 1) {
+                date.setMonth(date.getMonth() + 1);
+                condition.deliveryTo = date;
+                condition.deliveryFrom = new Date();
+            } else if (zone == 2) {
+                date.setMonth(date.getMonth() + 2);
+                condition.deliveryTo = date;
+                condition.deliveryFrom = new Date();
+            }
+        };
+
+        /**
+         * 将日期转化为整数日期
+         */
+        var getDateTime = function (date) {
+            if (angular.isDate(date)) {
+                return date.getTime();
+            } else {
+                return null;
+            }
+        };
+
+        $scope.changeAgreed = function (agreed) {
+            $scope.condition.agreed = agreed;
+            $scope.agreedText = typeof agreed == 'undefined' ? '全部' : (agreed == 1 ? '已同意' : '不同意');
+            $scope.condition.$agreedOpen = false;
+        };
+        $scope.changeDateZone = function (zone) {
+            $scope.condition.dateZone = zone;
+            $scope.dateZoneText = typeof zone == 'undefined' ? '半年前' : (zone == 1 ? '一个月内' : '半年内');
+            $scope.condition.$dateZoneOpen = false;
+            getDateCondition(zone, $scope.condition);
+            $scope.tableParams.reload();
+        };
+        $scope.setActive = function (state) {
+            if ($scope.active != state) {
+                $scope.active = state;
+                if ($scope.tableParams.page() == 1)
+                    $scope.tableParams.reload();
+                else
+                    $scope.tableParams.page(1);
+            }
+        };
+        var getService = function () {
+            return getAccountUserSpace;
+        };
+
+        $scope.tableParams = new ngTableParams({
+            page: 1,
+            count: 20,
+            sorting: {}
+        }, {
+            total: 0,
+            counts: [],
+            getData: function ($defer, params) {
+                $scope.loading = true;
+                var pageParams = params.url();
+                pageParams.keyword = $scope.keyword;
+                $scope.tip = $scope.keyword;
+                getService()[getState($scope.active)].call(null, BaseService.parseParams(pageParams), function (page) {
+                    $scope.loading = false;
+                    if (page) {
+                        params.total(page.totalElement);
+                        $defer.resolve(page.content);
+                        $scope.keywordXls = angular.copy(pageParams.keyword);//保存当前取值的关键词
+                    }
+                }, function (response) {
+                    $scope.loading = false;
+                    toaster.pop('error', '数据加载失败', response.data);
+                });
+            }
+        });
+
+        // 搜索框回车
+        $scope.onSearch = function (keyword) {
+            if (keyword === '') {
+                keyword = null;
+                $rootScope.searchKeyword = keyword;
+                $scope.keyword = keyword;
+                $scope.tableParams.page(1);
+                $scope.tableParams.reload();
+            } else {
+                $rootScope.searchKeyword = keyword;
+                $scope.keyword = keyword;
+                $scope.tableParams.page(1);
+                $scope.tableParams.reload();
+            }
+
+        };
+
+        // 添加合作关系
+        $scope.addPartner = function (name, businessCode) {
+            AddPartner.addPartner({name: name, businessCode: businessCode}, {}, function (data) {
+                if (data.success) {
+                    toaster.pop("success", '添加成功', data.success);
+                    $scope.tableParams.reload();
+                }
+                if (data.error) {
+                    toaster.pop("error", '添加失败', data.error);
+                }
+            }, function (response) {
+                toaster.pop('error', '失败', response.data);
+            });
+        }
+
+        /**
+         * 邀请注册商务平台
+         */
+        $scope.invite = function (name) {
+            var modalInstance = $modal.open({
+                animation: true,
+                templateUrl: 'static/view/sso/b2b/modal/enterpirseInfo.html',
+                controller: 'InviteCtrl',
+                resolve: {
+                    enname: function () {
+                        return name
+                    }
+                }
+            });
+            modalInstance.result.then(function (data) {
+                InvitationRecord.invite({formStore: data}, {}, function (data) {
+                    if (data.success) {
+                        toaster.pop('success', '提示', data.success);
+                        $scope.tableParams.reload();
+                    }
+                    if (data.error) {
+                        toaster.pop('error', '提示', data.error);
+                    }
+                }, function (response) {
+                    toaster.pop('error', '提示', response.data);
+                });
+            });
+        }
+
+        /**
+         * 立即查看
+         */
+        $scope.view = function (name) {
+            $rootScope.vendName = name;
+            window.location.hash = "#/baseInfo/newPartner";
+        }
+    }]);
+})

+ 101 - 0
src/main/webapp/resources/js/sso/controllers/b2b/invitationCtrl.js

@@ -0,0 +1,101 @@
+
+define(['app/app'], function (app) {
+    "use strict";
+  /**
+   * 邀请注册记录
+   */
+  app.register.controller('InvitationCtrl', ['$scope', 'toaster', 'B2bInvitationRecord', 'BaseService', 'ngTableParams', '$modal', function ($scope, toaster, InvitationRecord, BaseService, ngTableParams, $modal) {
+      BaseService.scrollBackToTop();
+      $scope.status = "invitation";
+      $scope.active = "invitation";
+      var getService = function () {
+          if ($scope.active === "invitation") {
+              return InvitationRecord.records;
+          } else if ($scope.active === "invitationTeam") {
+              return InvitationRecord.getActiveRecordsByEn; // 只获取已激活的
+          }
+      };
+
+      $scope.setActive = function (state) {
+          if ($scope.active !== state) {
+              $scope.active = state;
+              if ($scope.tableParams.page() === 1)
+                  $scope.tableParams.reload();
+              else
+                  $scope.tableParams.page(1);
+          }
+      };
+
+      $scope.tableParams = new ngTableParams({ // ng-Table参数
+          page: 1,
+          count: 20,
+          sorting: {}
+      }, {
+          total: 0,
+          counts: [],
+          getData: function ($defer, params) { // 获取数据的方法
+              $scope.loading = true;
+              var pageParams = params.url();
+              pageParams.keyword = $scope.keyword;
+              $scope.tip = $scope.keyword;
+              getService().call(null, BaseService.parseParams(pageParams), function (page) {
+                  $scope.loading = false;
+                  if (page) {
+                      params.total(page.totalElement);
+                      $defer.resolve(page.content);
+                  }
+              }, function (response) {
+                  $scope.loading = false;
+                  toaster.pop('error', '数据加载失败', response.data);
+              });
+          }
+      });
+
+      $scope.onSearch = function (keyword) {
+          $scope.tableParams.page(1);
+          $scope.tableParams.reload();
+          $scope.tip = keyword;
+      }
+
+      $scope.search = function (name) {
+          $modal.open({
+              templateUrl: 'static/tpl/index/baseInfo/modal/fuzzysearch_enterprise_modal.html',
+              controller: 'FuzzySearchCtrl',
+              resolve: {
+                  name: function () {
+                      return name
+                  }
+              }
+          }).result.then(function (data) {
+          });
+      };
+
+      // 再次邀请
+      $scope.reInvite = function (id) {
+          var modalInstance = $modal.open({
+              animation: true,
+              templateUrl: 'static/view/sso/b2b/modal/enterpirseInfo.html',
+              controller: 'ReInviteCtrl',
+              resolve: {
+                  id: function () {
+                      return id
+                  }
+              }
+          });
+          modalInstance.result.then(function (data) {
+              InvitationRecord.invite({formStore: data}, {}, function (data) {
+                  if (data.success) {
+                      toaster.pop('success', '提示', data.success);
+                      $scope.tableParams.reload();
+                  }
+                  if (data.error) {
+                      toaster.pop('error', '提示', data.error);
+                  }
+              }, function (response) {
+                  toaster.pop('error', '提示', response.data);
+              });
+          });
+      }
+  }]);
+
+});

+ 266 - 0
src/main/webapp/resources/js/sso/controllers/b2b/newPartnerCtrl.js

@@ -0,0 +1,266 @@
+
+define(['app/app'], function (app) {
+    "use strict";
+  /**
+   * 新的合作伙伴
+   */
+  app.register.controller('NewPartnerCtrl', ['$scope', 'B2bAddPartnerMyRequest', 'toaster', 'BaseService', 'ngTableParams', 'B2bAddPartner', '$timeout', '$rootScope', 'B2bVendorInfo', '$window', '$modal',
+      function ($scope, AddPartnerMyRequest, toaster, BaseService, ngTableParams, AddPartner, $timeout, $rootScope, VendorInfo, $window, $modal) {
+          BaseService.scrollBackToTop();
+          $scope.status = "partner";
+          $scope.active = 'all'; // 所有申请记录
+
+          var getRequestStatus = function (active) {
+              var fn = 'getAllRequest';
+              switch (active) {
+                  case 'done':
+                      fn = 'getRequestDone';
+                      break;
+                  case 'todo':
+                      fn = 'getRequestTodo';
+                      break;
+                  case 'end':
+                      fn = 'getRequestEnd';
+                      break;
+              }
+              return fn;
+          }
+          // 切换单据类型
+          $scope.setActive = function (state) {
+              if ($scope.active != state) {
+                  $scope.active = state;
+                  if ($scope.tableParams.page() == 1)
+                      $scope.tableParams.reload();
+                  else
+                      $scope.tableParams.page(1);
+              }
+          };
+
+          // 切换数据来源(正常数据 or 历史数据)
+          var getService = function () {
+              return AddPartnerMyRequest;
+          };
+          $scope.tableParams = new ngTableParams({ // ng-Table参数
+              page: 1,
+              count: 20,
+              sorting: {}
+          }, {
+              total: 0,
+              counts: [],
+              getData: function ($defer, params) { // 获取数据的方法
+                  $scope.loading = true;
+                  var pageParams = params.url();
+                  pageParams.keyword = $scope.keyword;
+                  if ($rootScope.vendName) {
+                      pageParams.keyword = $rootScope.vendName;
+                      $scope.keyword = $rootScope.vendName;
+                      $rootScope.vendName = null;
+                  }
+                  $scope.tip = $scope.keyword;
+                  getService()[getRequestStatus($scope.active)].call(null, BaseService.parseParams(pageParams), function (page) {
+                      $scope.loading = false;
+                      if (page) {
+                          params.total(page.totalElement);
+                          $defer.resolve(page.content);
+                        $scope.infoCommon = page
+                        $scope.infoCommon.all = page.content.length
+                          $scope.keywordXls = angular.copy(pageParams.keyword);//保存当前取值的关键词
+                      }
+                  }, function (response) {
+                      $scope.loading = false;
+                      toaster.pop('error', '数据加载失败', response.data);
+                  });
+              }
+          });
+
+          // 再次申请
+          $scope.addAgain = function (name, businessCode) {
+              AddPartner.addPartner({name: name, businessCode: businessCode}, {}, function (data) {
+                  if (data.success) {
+                      toaster.pop("success", '添加成功', data.success);
+                      $scope.tableParams.reload();
+                  }
+                  if (data.error) {
+                      toaster.pop("error", '添加失败', data.error);
+                  }
+              }, function (response) {
+                  toaster.pop('error', '失败', response.data);
+              });
+          }
+
+          // 添加为供应商
+          $scope.addSupplier = function (vendUID) {
+              AddPartner.addSupplier({businessCode: vendUID}, {}, function (data) {
+                  if (data.success) {
+                      toaster.pop('success', '提示', data.success);
+                      $scope.tableParams.reload();
+                  }
+                  if (data.error) {
+                      toaster.pop('error', '提示', data.error);
+                  }
+              }, function (response) {
+                  toaster.pop('error', '失败', response.data);
+              })
+          };
+
+          // 添加为供应商
+          $scope.addServicer = function (vendUID) {
+              AddPartner.addServicer({businessCode: vendUID}, {}, function (data) {
+                  if (data.success) {
+                      toaster.pop('success', '提示', data.success);
+                      $scope.tableParams.reload();
+                  }
+                  if (data.error) {
+                      toaster.pop('error', '提示', data.error);
+                  }
+              }, function (response) {
+                  toaster.pop('error', '失败', response.data);
+              })
+          };
+
+          // 添加客户
+          $scope.addCust = function (vendUID) {
+              AddPartner.addCust({businessCode: vendUID}, {}, function (data) {
+                  if (data.success) {
+                      toaster.pop('success', '提示', data.success);
+                      $scope.tableParams.reload();
+                  }
+                  if (data.error) {
+                      toaster.pop('error', '提示', data.error);
+                  }
+              }, function (response) {
+                  toaster.pop('error', '失败', response.data);
+              })
+          };
+
+          // 搜索框回车
+          $scope.onSearch = function () {
+              $scope.tableParams.page(1);
+              $scope.tableParams.reload();
+          };
+
+          // 同意申请
+          $scope.agree = function (id) {
+              AddPartner.agreeRequest({id: id}, {}, function (data) {
+                  if (data.success) {
+                      toaster.pop('success', '提示', '操作成功');
+                      if (data.result) {
+                          //选择打印模板
+                          var modalInstance = $modal.open({
+                              templateUrl: 'static/tpl/index/baseInfo/modal/partnership_modal.html',
+                              controller: 'PartnerShipCtrl',
+                              resolve: {
+                                  PartnerShipInfo: function () {
+                                      return data.result;
+                                  }
+                              }
+                          });
+                          modalInstance.result.then(function () {
+                              window.location.reload();
+                          });
+                      }
+                  }
+                  if (data.error) {
+                      toaster.pop('error', '提示', '操作失败');
+                  }
+              }, function (response) {
+                  toaster.pop('error', '提示', response.data);
+              });
+          };
+
+          AddPartnerMyRequest.requestAmount({}, function (data) {
+              $scope.requestTodo = data;
+          });
+
+          // 拒绝申请
+          $scope.refuse = function (id, reason) {
+              AddPartner.refuseRequest({id: id, reason: reason}, {}, function (data) {
+                  if (data.success) {
+                      toaster.pop('success', '提示', '操作成功');
+                  }
+                  if (data.error) {
+                      toaster.pop('error', '提示', '操作失败');
+                  }
+                  // $scope.tableParams.reload();
+                  $window.location.reload();
+              }, function (response) {
+                  toaster.pop('error', '提示', response.data);
+              });
+          };
+
+          // 取消供应商关系
+          $scope.relieve = function (id) {
+              VendorInfo.relieve({id: id}, {}, function (data) {
+                  if (data.success) {
+                      toaster.pop('success', '提示', data.success);
+                  }
+                  // $scope.tableParams.page(1);
+                  $scope.tableParams.reload();
+              }, function (response) {
+                  toaster.pop('error', '提示', response.data);
+              });
+          }
+
+          // 建立供应商关系
+          $scope.activeVend = function (id) {
+              VendorInfo.activeVend({id: id}, {}, function (data) {
+                  if (data.success) {
+                      toaster.pop('success', '提示', data.success);
+                  }
+                  // $scope.tableParams.page(1);
+                  $scope.tableParams.reload();
+              }, function (response) {
+                  toaster.pop('error', '提示', response.data);
+              });
+          }
+
+          // 取消服务商
+          $scope.relieveServicer = function (id) {
+              VendorInfo.relieveServicer({id: id}, {}, function (data) {
+                  if (data.success) {
+                      toaster.pop('success', '提示', data.success);
+                  }
+                  $scope.tableParams.reload();
+              }, function (response) {
+                  toaster.pop('error', '提示', response.data);
+              });
+          }
+
+          // 启用服务商
+          $scope.activeServicer = function (id) {
+              VendorInfo.activeServicer({id: id}, {}, function (data) {
+                  if (data.success) {
+                      toaster.pop('success', '提示', data.success);
+                  }
+                  $scope.tableParams.reload();
+              }, function (response) {
+                  toaster.pop('error', '提示', response.data);
+              });
+          }
+
+          // 取消客户关系
+          $scope.disableCust = function (id) {
+              VendorInfo.disableCust({id: id}, {}, function (data) {
+                  if (data.success) {
+                      toaster.pop('success', '提示', data.success);
+                  }
+                  // $scope.tableParams.page(1);
+                  $scope.tableParams.reload();
+              }, function (response) {
+                  toaster.pop('error', '提示', response.data);
+              });
+          }
+
+          // 激活客户关系
+          $scope.activeCust = function (id) {
+              VendorInfo.activeCust({id: id}, {}, function (data) {
+                  if (data.success) {
+                      toaster.pop('success', '提示', data.success);
+                  }
+                  $scope.tableParams.reload();
+              }, function (response) {
+                  toaster.pop('error', '提示', response.data);
+              });
+          }
+      }]);
+});

+ 2 - 0
src/main/webapp/resources/js/vendor/controllers/b2b/baseInfo/servicerInfoCtrl.js → src/main/webapp/resources/js/sso/controllers/b2b/servicerInfoCtrl.js

@@ -29,6 +29,8 @@ define(['app/app'], function (app) {
                   if (page) {
                       params.total(page.totalElement);
                       $scope.total = page.totalElement;
+                    $scope.infoCommon = page
+                    $scope.infoCommon.all = page.content.length
                       $defer.resolve(page.content);
                   }
                   $scope.totalCount = page.totalElement;

+ 3 - 1
src/main/webapp/resources/js/vendor/controllers/b2b/baseInfo/vendorsInfoCtrl.js → src/main/webapp/resources/js/sso/controllers/b2b/vendorsInfoCtrl.js

@@ -29,6 +29,8 @@ define(['app/app'], function (app) {
                   if (page) {
                       params.total(page.totalElement);
                       $scope.total = page.totalElement;
+                    $scope.infoCommon = page
+                    $scope.infoCommon.all = page.content.length
                       $defer.resolve(page.content);
                   }
                   $scope.totalCount = page.totalElement;
@@ -49,7 +51,7 @@ define(['app/app'], function (app) {
       // 向企业购买
       $scope.purcByEn = function (businessCode) {
           $rootScope.businessCode = businessCode;
-          window.location.hash = "#/purc/addOrder";
+          window.location.href = "user#/purc/addOrder";
       }
 
       // 取消合作关系

+ 60 - 26
src/main/webapp/resources/js/sso/controllers/rolePermissionCtrl.js

@@ -4,9 +4,10 @@
  */
 define(['app/app'], function (app) {
     "use strict";
-    app.register.controller('rolePermissionCtrl', ['$scope', '$rootScope', 'Enterprise', 'User', 'toaster', '$modal', 'BaseService', 'ngTableParams', '$http', 'AuthenticationService', '$stateParams','AccountResource','AccountRole', 'Authority', function ($scope, $rootScope, Enterprise, User, toaster, $modal, BaseService, ngTableParams, $http, AuthenticationService, $stateParams, AccountResource, AccountRole, Authority) {
+    app.register.controller('rolePermissionCtrl', ['$scope', '$rootScope', 'Enterprise', 'User', 'toaster', '$modal', 'BaseService', 'ngTableParams', '$http', 'AuthenticationService', '$stateParams','AccountResource','AccountRole', 'Authority', 'B2bAccountRole', 'B2bAccountUser', function ($scope, $rootScope, Enterprise, User, toaster, $modal, BaseService, ngTableParams, $http, AuthenticationService, $stateParams, AccountResource, AccountRole, Authority, B2bAccountRole, B2bAccountUser) {
         $rootScope.active = 'sso_permission';
         document.title = '角色权限';
+        $scope.tab = 'b2c';
         $scope.addingUser = false;
         $scope.setAddingUser = function (status) {
             $scope.addingUser = status;
@@ -363,30 +364,50 @@ define(['app/app'], function (app) {
             $scope.resources = data;
         });
         var getData = function () {
-            AccountRole.findAll({}, function (data) {
-                var defaults = [], custom = [];
-                angular.forEach(data, function (d) {
-                    if (d.isdefault == 1)
-                        defaults.push(d);
-                    else
-                        custom.push(d);
+            if ($scope.tab == 'b2c') {
+                AccountRole.findAll({}, function (data) {
+                    var defaults = [], custom = [];
+                    angular.forEach(data, function (d) {
+                        if (d.isdefault == 1)
+                            defaults.push(d);
+                        else
+                            custom.push(d);
+                    });
+                    $scope.roles = {defaults: defaults, custom: custom};
+                },function (error) {
+                    $scope.rolesExcept = error.data;
                 });
-                $scope.roles = {defaults: defaults, custom: custom};
-            },function (error) {
-                $scope.rolesExcept = error.data;
-            });
-            AccountRole.getByExistRoleAndEnuu({}, function (data) {
-                var defaults = [], custom = [];
-                angular.forEach(data, function (d) {
-                    if (d.isdefault == 1)
-                        defaults.push(d);
-                    else
-                        custom.push(d);
+                // 这个请求不知道干嘛的
+                AccountRole.getByExistRoleAndEnuu({}, function (data) {
+                    var defaults = [], custom = [];
+                    angular.forEach(data, function (d) {
+                        if (d.isdefault == 1)
+                            defaults.push(d);
+                        else
+                            custom.push(d);
+                    });
+                    $scope.existRoles = {defaults: defaults, custom: custom};
                 });
-                $scope.existRoles = {defaults: defaults, custom: custom};
-            });
+            } else {
+                B2bAccountRole.query({}, function (data) {
+                    var defaults = [], custom = [];
+                    angular.forEach(data, function (d) {
+                        if (d.isdefault == 1)
+                            defaults.push(d);
+                        else
+                            custom.push(d);
+                    });
+                    $scope.roles = {defaults: defaults, custom: custom};
+                },function (error) {
+                    $scope.rolesExcept = error.data;
+                })
+            }
         };
         getData();
+        $scope.setTab = function (tab) {
+            $scope.tab = tab;
+            getData();
+        }
         $scope.editRole = function (role) {
             var modalInstance = $modal.open({
                 animation: true,
@@ -395,6 +416,9 @@ define(['app/app'], function (app) {
                 resolve: {
                     role: function () {
                         return role;
+                    },
+                    isB2b: function () {
+                        return $scope.tab == 'b2b';
                     }
                 }
             });
@@ -522,8 +546,8 @@ define(['app/app'], function (app) {
           };
         }]);
 
-//角色管理-编辑角色controller
-    app.register.controller('RoleEditCtrl', ['$scope', '$modalInstance', '$timeout', 'AccountResource', 'AccountRole', 'toaster', 'role', 'BaseService', function ($scope, $modalInstance, $timeout, AccountResource, AccountRole, toaster, role, BaseService) {
+    //角色管理-编辑角色controller
+    app.register.controller('RoleEditCtrl', ['$scope', '$modalInstance', '$timeout', 'AccountResource', 'AccountRole', 'toaster', 'role', 'BaseService', 'isB2b', 'B2bAccountResource', 'B2bAccountRole', function ($scope, $modalInstance, $timeout, AccountResource, AccountRole, toaster, role, BaseService, isB2b, B2bAccountResource, B2bAccountRole) {
         BaseService.scrollBackToTop();
         $scope.role = angular.copy(role || {});
         $scope.master = angular.copy($scope.role);
@@ -558,8 +582,18 @@ define(['app/app'], function (app) {
                 });
             }
         }
+        var getB2bResource = function () {
+            return isB2b ? {
+                AccountResource: B2bAccountResource,
+                AccountRole: B2bAccountRole
+            } : {
+                AccountResource: AccountResource,
+                AccountRole: AccountRole
+            }
+        }
+        var queryObj = getB2bResource();
 
-        AccountResource.query({}, function (data) {
+        queryObj.AccountResource.query({}, function (data) {
             if (data && data.length > 0) {
                 var rs = [];// 已分配的资源的id
                 if (role && role.resourceItems) {
@@ -714,7 +748,7 @@ define(['app/app'], function (app) {
             if (!$scope.master.color || $scope.master.color == '') {
                 $scope.master.color = parseInt(Math.random() * 5) + 1 + '';
             }
-            AccountRole.save($scope.master, function () {
+            queryObj.AccountRole.save($scope.master, function () {
                 toaster.pop('success', '提示', '角色:' + $scope.role.desc + ' 资料' + (isNew ? '添加' : '修改') + '成功');
                 $modalInstance.close(true);
             }, function (response) {
@@ -723,7 +757,7 @@ define(['app/app'], function (app) {
         };
         $scope.del = function () {
             if (confirm('确定删除角色(' + $scope.role.desc + ')吗?')) {
-                AccountRole.remove({id: role.id}, function () {
+                queryObj.AccountRole.remove({id: role.id}, function () {
                     toaster.pop('success', '提示', '角色:' + $scope.role.desc + ' 删除成功');
                     $modalInstance.close(true);
                 }, function (response) {

+ 130 - 6
src/main/webapp/resources/js/sso/controllers/staffManagementCtrl.js

@@ -4,7 +4,7 @@
  */
 define(['app/app'], function (app) {
     "use strict";
-    app.register.controller('staffManagementCtrl', ['$scope', '$rootScope', 'Enterprise', 'User', 'toaster', '$modal', 'BaseService', 'ngTableParams', '$http', 'AuthenticationService', '$stateParams','AccountResource','AccountRole', 'Authority', function ($scope, $rootScope, Enterprise, User, toaster, $modal, BaseService, ngTableParams, $http, AuthenticationService, $stateParams, AccountResource, AccountRole, Authority) {
+    app.register.controller('staffManagementCtrl', ['$scope', '$rootScope', 'Enterprise', 'User', 'toaster', '$modal', 'BaseService', 'ngTableParams', '$http', 'AuthenticationService', '$stateParams','AccountResource','AccountRole', 'Authority', 'B2bUser', 'B2bCurrentRole', function ($scope, $rootScope, Enterprise, User, toaster, $modal, BaseService, ngTableParams, $http, AuthenticationService, $stateParams, AccountResource, AccountRole, Authority, B2bUser, B2bCurrentRole) {
         $rootScope.active = 'sso_management';
         document.title = '员工管理-帐户中心';
         $scope.tab = 'auth';
@@ -142,6 +142,18 @@ define(['app/app'], function (app) {
                             $defer.resolve(page.content);
                             $scope.users = page.content;
                             $scope.reloadUserCheck(false);
+                            var arr = [];
+                            angular.forEach($scope.users, function (item) {
+                                arr.push(item.userUU);
+                            })
+                            B2bUser.getUsersByUU({userUUJson: JSON.stringify(arr)}, function (data) {
+                                angular.forEach($scope.users, function (item, index) {
+                                    item.b2bRoles = data[index].roles;
+                                })
+                                console.log($scope.users);
+                            }, function () {
+                                toaster.pop('获取b2b角色信息失败');
+                            })
                         }
                     },function (error) {
                         toaster.pop('error', '获取企业人员信息失败',error.data);
@@ -464,6 +476,41 @@ define(['app/app'], function (app) {
             });
         };
 
+        // b2b客户分配
+        $scope.addVendor = function (user) {
+            B2bCurrentRole.roles({}, function(data) {
+                var roles = data.count || $scope.userInfo.sys;
+                if (!roles) {
+                    toaster.pop('error', '提示', '你不是管理员或销售经理,无权限分配!请立即联系管理员');
+                } else {
+                    for (var i = 0; i < user.b2bRoles.length; i++) {
+                        if (user.b2bRoles[i].issys == 1 || user.b2bRoles[i].name == 'ROLE_SALEMANAGER') {
+                            toaster.pop('error', '提示', '管理员和销售经理无需分配客户');
+                            return;
+                        }
+                    }
+                    var modalInstance = $modal.open({
+                        animation: true,
+                        templateUrl: 'static/view/sso/b2b/modal/add_vendor.html',
+                        controller: 'AddVendorCtrl',
+                        resolve: {
+                            user: function () {
+                                return user;
+                            }
+                        }
+                    });
+                    // modalInstance.result.then(function (changed, checked) {
+                    //     if (changed) {
+                    //         if (checked)
+                    //             $scope.newUser.roles = checked;
+                    //         else
+                    //             loadUsers();
+                    //     }
+                    // });
+                }
+            });
+        };
+
         $scope.inSelect = false;
         $scope.setInSelect = function (status) {
             $scope.inSelect = status;
@@ -568,7 +615,10 @@ define(['app/app'], function (app) {
                 }]);
     }]);
 
-    app.register.controller('UserRoleEditCtrl', ['$scope', '$modalInstance', '$timeout', 'AccountResource', 'toaster', 'user', 'BaseService', 'AccountRole', 'User', function ($scope, $modalInstance, $timeout, AccountResource, toaster, user, BaseService, AccountRole, User) {
+    app.register.controller('UserRoleEditCtrl', ['$scope', '$modalInstance', '$timeout', 'AccountResource', 'toaster', 'user', 'BaseService', 'AccountRole', 'User', 'B2bAccountRole', 'B2bAccountUser', function ($scope, $modalInstance, $timeout, AccountResource, toaster, user, BaseService, AccountRole, User, B2bAccountRole, B2bAccountUser) {
+
+        // 分b2b和b2c
+        $scope.tab = 'b2c';
 
         $scope.pages = [];
 
@@ -585,16 +635,27 @@ define(['app/app'], function (app) {
             $scope.currentRoles = $scope.rolesData.slice(start, end);
         };
 
+        $scope.queryObj = {};
+        var initQueryObj = function () {
+            $scope.queryObj = $scope.tab == 'b2b' ? {
+                AccountRole: B2bAccountRole,
+                User: B2bAccountUser
+            } : {
+                AccountRole: AccountRole,
+                User: User
+            };
+        }
+        initQueryObj();
         var init = function () {
             $scope.user = angular.copy(user);
-            AccountRole.query({}, function (data) {
+            $scope.queryObj.AccountRole.query({}, function (data) {
                 $scope.rolesData = data;
                 loadCurrentRoles();
                 $scope.params.totalPage = Math.ceil($scope.rolesData.length / 6);
                 $scope.acculatePages(1, $scope.params.totalPage);
                 angular.forEach($scope.rolesData, function (item) {
                     item.checked = false;
-                    angular.forEach($scope.user.roles, function (userItem) {
+                    angular.forEach($scope.user[$scope.tab == 'b2b' ? 'b2bRoles' : 'roles'], function (userItem) {
                         if (item.id === userItem.id) {
                             item.checked = true;
                         }
@@ -604,6 +665,12 @@ define(['app/app'], function (app) {
         }
         init();
 
+        $scope.switchTab = function (tab) {
+            $scope.tab = tab;
+            initQueryObj();
+            init();
+        }
+
         $scope.checked = [];
         //勾选角色
         $scope.checkRole = function (role) {
@@ -623,9 +690,9 @@ define(['app/app'], function (app) {
                         }
                     });
                     $scope.user.roles = $scope.checked;
-                    User.update({}, $scope.user, function () {
+                    $scope.queryObj.User[$scope.tab == 'b2b' ? 'updateRole' : 'update']({}, $scope.user, function () {
                         toaster.pop('success', '提示', '保存成功');
-                        user.roles = $scope.checked
+                        user[$scope.tab == 'b2b' ? 'b2bRoles' : 'roles'] = $scope.checked;
                         $modalInstance.close(true);
                     }, function (response) {
                         toaster.pop('error', '保存失败', response.data);
@@ -824,4 +891,61 @@ define(['app/app'], function (app) {
             $scope.acculatePages($scope.params.page, $scope.params.totalPage);
         };
     }]);
+
+    app.register.controller('AddVendorCtrl', ['$scope', '$modalInstance', 'user', 'B2bAccountUser', 'toaster', function ($scope, $modalInstance, user, AccountUser, toaster) {
+        $scope.checkboxes = {
+            checked: false
+        };
+        $scope.loading = true;
+        AccountUser.findVendor({uu: user.userUU}, function (data) {
+            $scope.enters = data;
+            $scope.loading = false;
+        })
+        // 点击勾选全部的复选框
+        $scope.checkAll = function () {
+            angular.forEach($scope.enters, function (item) {
+                item.distribute = $scope.checkboxes.checked;
+            });
+        };
+        // 点击其中一个明细的复选框
+        $scope.checkOne = function (vendor) {
+            var result = true;
+            angular.forEach($scope.enters, function (item) {
+                if (item.distribute != true) {
+                    result = false;
+                    return;
+                }
+            });
+            $scope.checkboxes.checked = result;
+        };
+        $scope.close = function (save) {
+            var chooseResult = [];
+            if (save) {
+                if (user.userUU) {
+                    angular.forEach($scope.enters, function (item, i) {
+                        chooseResult.push(item);
+                    });
+                    if (chooseResult.length > 0) {
+                        $scope.loading = true;
+                        AccountUser.addVendor({uu: user.userUU}, chooseResult, function (data) {
+                            $scope.loading = false;
+                            toaster.pop('success', '提示', '保存成功');
+                            $modalInstance.close(false);
+                        }, function (response) {
+                            $scope.loading = false;
+                            toaster.pop('error', '保存失败', response.data);
+                            $modalInstance.close(false);
+                        })
+                    } else {
+                        toaster.pop('error', '保存失败', "您未勾选任何记录");
+                    }
+                } else {
+                    $modalInstance.close(true, $scope.checkboxes.checked);
+                }
+            } else {
+                $modalInstance.close(false);
+            }
+        };
+    }]);
+
 });

+ 1 - 1
src/main/webapp/resources/js/sso/main.js

@@ -76,6 +76,6 @@ require.config({
     }
 	}
 });
-require([ 'app/app', 'common/controllers/commonCtrls', 'common/controllers/GoodsPickUpCtrl' ], function(app) {
+require([ 'app/app', 'common/controllers/commonCtrls', 'common/controllers/b2bCommonCtrls', 'common/controllers/GoodsPickUpCtrl' ], function(app) {
 	app.init();
 });

+ 23 - 3
src/main/webapp/resources/js/usercenter/app.js

@@ -1,7 +1,7 @@
 
-define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'common/services', 'common/directives','common/query/kind', 'common/query/brand', 'common/query/component', 'common/query/order', 'common/query/cart', 'common/query/goods', 'common/query/return' ,'angular-toaster', 'common/query/urlencryption', 'ui-jquery', 'common/query/bankTransfer', 'common/query/bankInfo', 'common/query/change', 'common/query/rate', 'common/query/logistics', 'common/query/address' ,'angular-toaster','common/query/collection', 'common/query/proofing', 'common/query/bill', 'common/query/user','file-upload', 'file-upload-shim', 'common/query/bankInfo' , 'common/query/responseLogistics', 'common/query/payment', 'common/query/afterSale', 'common/query/messageBoard', 'common/query/importDeclaration', 'common/query/enterprise', 'common/query/invoice', 'common/query/refund', 'common/query/recommendation', 'common/query/logisticsPort', 'common/query/storeInfo', 'common/query/tradeMessageNotice', 'common/query/tradeBasicProperties', 'common/query/browsingHistory', 'common/query/internalMessage', 'common/module/chat_web_module', 'angular-filter', 'common/query/vendor','common/query/seekPurchase', 'common/query/search', 'angular-sanitize', 'common/query/authority', 'common/query/releaseProInfo', 'common/query/logisticsPort', 'common/b2bServices'], function(angularAMD) {
+define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'common/services', 'common/directives','common/query/kind', 'common/query/brand', 'common/query/component', 'common/query/order', 'common/query/cart', 'common/query/goods', 'common/query/return' ,'angular-toaster', 'common/query/urlencryption', 'ui-jquery', 'common/query/bankTransfer', 'common/query/bankInfo', 'common/query/change', 'common/query/rate', 'common/query/logistics', 'common/query/address' ,'angular-toaster','common/query/collection', 'common/query/proofing', 'common/query/bill', 'common/query/user','file-upload', 'file-upload-shim', 'common/query/bankInfo' , 'common/query/responseLogistics', 'common/query/payment', 'common/query/afterSale', 'common/query/messageBoard', 'common/query/importDeclaration', 'common/query/enterprise', 'common/query/invoice', 'common/query/refund', 'common/query/recommendation', 'common/query/logisticsPort', 'common/query/storeInfo', 'common/query/tradeMessageNotice', 'common/query/tradeBasicProperties', 'common/query/browsingHistory', 'common/query/internalMessage', 'common/module/chat_web_module', 'angular-filter', 'common/query/vendor','common/query/seekPurchase', 'common/query/search', 'angular-sanitize', 'common/query/authority', 'common/query/releaseProInfo', 'common/query/logisticsPort', 'common/b2bServices', 'common/services/File'], function(angularAMD) {
 	'use strict';
-	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ng.local', 'ngTable', 'common.services', 'common.directives', 'tool.directives', 'common.query.kind', 'brandServices', 'componentServices', 'orderServices', 'cartServices', 'goodsServices', 'returnServices' , 'toaster', 'urlencryptionServices', 'ui.jquery', 'bankTransfer', 'bankInfo', 'changeServices','rateServices', 'logisticsServices', 'addressServices', 'toaster','collection','proofingServices', 'billServices', 'common.query.user', 'angularFileUpload', 'bankInfo', 'responseLogisticsService', 'PaymentService', 'afterSaleService', 'messageBoardServices', 'table.directives', 'importDeclaration', 'common.query.enterprise', 'invoiceServices', 'refundModule', 'recommendation','logisticsPortService', 'storeInfoServices', 'tradeMessageNoticeModule', 'tradeBasicPropertiesServices', 'BrowsingHistory', 'internalMessageServices', 'WebChatModule', 'angular.filter', 'vendorServices','seekPurchaseServices', 'searchService', 'ngSanitize', 'authorityServices', 'ReleaseProductByBatchService', 'logisticsPortService', 'common.b2bServices']);
+	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ng.local', 'ngTable', 'common.services', 'common.directives', 'tool.directives', 'common.query.kind', 'brandServices', 'componentServices', 'orderServices', 'cartServices', 'goodsServices', 'returnServices' , 'toaster', 'urlencryptionServices', 'ui.jquery', 'bankTransfer', 'bankInfo', 'changeServices','rateServices', 'logisticsServices', 'addressServices', 'toaster','collection','proofingServices', 'billServices', 'common.query.user', 'angularFileUpload', 'bankInfo', 'responseLogisticsService', 'PaymentService', 'afterSaleService', 'messageBoardServices', 'table.directives', 'importDeclaration', 'common.query.enterprise', 'invoiceServices', 'refundModule', 'recommendation','logisticsPortService', 'storeInfoServices', 'tradeMessageNoticeModule', 'tradeBasicPropertiesServices', 'BrowsingHistory', 'internalMessageServices', 'WebChatModule', 'angular.filter', 'vendorServices','seekPurchaseServices', 'searchService', 'ngSanitize', 'authorityServices', 'ReleaseProductByBatchService', 'logisticsPortService', 'common.b2bServices', 'FileService']);
 	app.init = function() {
 		angularAMD.bootstrap(app);
 	};
@@ -95,7 +95,17 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'commo
 			templateUrl: 'static/view/usercenter/forstore/pay_center.html',
 			controller: 'buyerPayCenterCtrl',
 			controllerUrl: 'app/controllers/forstore/pay_center_ctrl'
-		}))
+		})).state('fa_arCheck', angularAMD.route({
+            url: "/arCheck",
+            templateUrl: 'static/view/usercenter/b2b/fa/arCheck.html',
+            controller: 'SaleArCheckCtrl',
+            controllerUrl: 'app/controllers/b2b/fa/arCheck'
+        })).state('fa_arCheck_detail', angularAMD.route({
+            url: "/arCheck/:id",
+            templateUrl: 'static/view/usercenter/b2b/fa/arCheck_detail.html',
+            controller: 'SaleArCheckDetailCtrl',
+            controllerUrl: 'app/controllers/b2b/fa/arCheck_detail'
+        }))
 		/*	.state('my_seek_purchase', angularAMD.route({
 			url: '/seekPurchase',
 			templateUrl: 'static/view/usercenter/forstore/seek_purchase.html',
@@ -581,6 +591,16 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'commo
             templateUrl: "static/view/usercenter/b2b/Purc/purchaseInquiryCtrl.html",
             controller: 'PurchaseInquiryCtrl',
             controllerUrl: 'app/controllers/b2b/Purc/purchaseInquiryCtrl'
+        })).state('purc_inquiryInfo_detail', angularAMD.route({
+            url: "/purcinquirydetail/:id",
+            templateUrl: "static/view/usercenter/b2b/Purc/inquiryInfo_detail.html",
+            controller: 'PurcInquiryInfoDetailCtrl',
+            controllerUrl: 'app/controllers/b2b/Purc/inquiryInfo_detail'
+        })).state('purc_inquiry_unapply', angularAMD.route({
+            url: "/inquiry_unapply",
+            templateUrl: "static/view/usercenter/b2b/Purc/inquiry_unapply.html",
+            controller: 'UnapplyInquiryCtrl',
+            controllerUrl: 'app/controllers/b2b/Purc/inquiry_unapply'
         })).state('purc_cart', angularAMD.route({
             url: "/purc/cart",
             title: '买家中心-B2b采购购物车',

+ 1 - 1
src/main/webapp/resources/js/usercenter/controllers/b2b/Purc/CartDetailController.js

@@ -38,7 +38,7 @@ define(['app/app'], function(app) {
             getToken();
 
             // 获取地址信息
-            $http.get('resources/js/prod/data/city.json', {
+            $http.get('static/js/prod/data/city.json', {
                 "Accept": "application/json;charset=utf-8", "Accept-Charset": "charset=utf-8"
             }).then(function (response) {
                 $scope.provinces = response.data;

+ 1 - 1
src/main/webapp/resources/js/usercenter/controllers/b2b/Purc/PurcInquiryNewCtrl.js

@@ -76,7 +76,7 @@ define(['app/app'], function(app) {
         loadShipAddress();
 
         // 获取地址信息
-        $http.get('resources/citydata/city.json', {
+        $http.get('static/js/prod/data/city.json', {
             "Accept": "application/json;charset=utf-8", "Accept-Charset": "charset=utf-8"
         }).then(function (response) {
             $scope.provinces = response.data;

+ 1 - 1
src/main/webapp/resources/js/usercenter/controllers/b2b/Purc/PurcNewOrderCtrl.js

@@ -14,7 +14,7 @@ define(['app/app'], function(app) {
             });
 
             // 获取地址信息
-            $http.get('resources/js/prod/data/city.json', {
+            $http.get('static/js/prod/data/city.json', {
                 "Accept": "application/json;charset=utf-8", "Accept-Charset": "charset=utf-8"
             }).then(function (response) {
                 $scope.provinces = response.data;

+ 1 - 1
src/main/webapp/resources/js/usercenter/controllers/b2b/Purc/purchaseInquiryCtrl.js

@@ -189,7 +189,7 @@ define(['app/app'], function(app) {
     $scope.exportXls = function () {
       PurchaseInquiry.exportXls({}, {}, function (data) {
         if (data.success){
-          window.location.href = 'purc/inquiry/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
+          window.location.href = BaseService.getB2bUrl() + '/purc/inquiry/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
         }
       }, function (response) {
         toaster.pop('error', '数据加载失败', response.data);

+ 1 - 1
src/main/webapp/resources/js/usercenter/controllers/b2b/Purc/tender.js

@@ -83,7 +83,7 @@ define(['app/app'], function(app) {
     };
     loadShipAddress();
     // 获取地址信息
-    $http.get('resources/js/prod/data/city.json', {
+    $http.get('static/js/prod/data/city.json', {
       "Accept": "application/json;charset=utf-8", "Accept-Charset": "charset=utf-8"
     }).then(function (response) {
       $scope.provinces = response.data;

+ 207 - 0
src/main/webapp/resources/js/usercenter/controllers/b2b/fa/arCheck.js

@@ -0,0 +1,207 @@
+define(['app/app'], function(app) {
+  /**
+   * 应付对账单
+   */
+  app.register.controller('SaleArCheckCtrl', ['$rootScope', '$scope', '$filter', 'B2bFaArCheck', 'ngTableParams', 'toaster', 'BaseService', 'Symbol', function ($rootScope, $scope, $filter, FaArCheck, ngTableParams, toaster, BaseService, Symbol) {
+    BaseService.scrollBackToTop();
+    $scope.active = 'all';
+    $scope.dateZoneText = '不限';
+    $scope.condition = {dateZone: 1};
+    $rootScope.active = 'buyer_pay_center'
+    /* 时间筛选初始化*/
+    var fromDate = new Date();
+    var toDate = new Date();
+    fromDate.setMonth(fromDate.getMonth() - 1);
+    fromDate.setHours(0, 0, 0, 0);
+    toDate.setHours(23, 59, 59, 999);
+    $scope.condition.dateFrom = fromDate;
+    $scope.condition.dateTo = toDate;
+
+    $scope.changeDateZone = function (zone) {
+      $scope.condition.dateZone = zone;
+      $scope.dateZoneText = zone == 1 ? '最近一个月' : (zone == 3 ? '最近三个月' : (zone == 6 ? '最近六个月' : '自定义'));
+      $scope.condition.$dateZoneOpen = false;
+      getDateCondition(zone, $scope.condition);
+      $scope.tableParams.page(1);
+      $scope.tableParams.reload();
+    };
+    $scope.currency = Symbol.currency;//将币别转化为对应的符号
+    $scope.setActive = function (state) {
+      if ($scope.active != state) {
+        $scope.active = state;
+        if ($scope.tableParams.page() == 1)
+          $scope.tableParams.reload();
+        else
+          $scope.tableParams.page(1);
+      }
+    };
+    var getService = function () {
+      return FaArCheck;
+    };
+
+    $scope.tableParams = new ngTableParams({
+      page: 1,
+      count: 20,
+      sorting: {
+        date: 'desc'
+      }
+    }, {
+      total: 0,
+      counts: [5, 10, 25, 50],
+      getData: function ($defer, params) {
+        $scope.loading = true;
+        var pageParams = params.url();
+        pageParams.searchFilter = {};
+        pageParams.searchFilter.keyword = $scope.keyword;
+        pageParams.searchFilter.fromDate = $scope.condition.dateFrom ? $scope.condition.dateFrom.getTime() : null;
+        pageParams.searchFilter.endDate = $scope.condition.dateTo ? $scope.condition.dateTo.getTime() : null;
+        getService()[getState($scope.active)].call(null, BaseService.parseParams(pageParams), function (page) {
+          $scope.loading = false;
+          if (page) {
+            params.total(page.totalElement);
+            $defer.resolve(page.content);
+            $scope.infoCommon = page
+            $scope.infoCommon.all = page.content.length
+            $scope.keywordXls = angular.copy($scope.keyword);//保存当前取值的关键词
+            $scope.fromDateXls = angular.copy($scope.condition.dateFrom ? $scope.condition.dateFrom.getTime() : null);//保存当前取值的起始日期
+            $scope.endDateXls = angular.copy($scope.condition.dateTo ? $scope.condition.dateTo.getTime() : null);//保存当前取值的截止日期
+
+          }
+        }, function (response) {
+          $scope.loading = false;
+          toaster.pop('error', '数据加载失败', response.data);
+        });
+      }
+    });
+
+    $scope.openDatePicker = function ($event, item, openParam) {
+      $event.preventDefault();
+      $event.stopPropagation();
+      item[openParam] = !item[openParam];
+    };
+
+    $scope.openFilterDatePicker = function ($event, item, openParam) {
+      $event.preventDefault();
+      $event.stopPropagation();
+      item[openParam] = !item[openParam];
+      if ($scope.condition.dateFrom && $scope.condition.dateTo && !item[openParam]) {
+        $scope.tableParams.reload();
+      }
+    };
+
+    // 计算单据的商品总数
+    $scope.getTotalProd = function (check) {
+      var total = 0;
+      if (check.items) {
+        angular.forEach(check.items, function (value) {
+          total += value.qty;
+        });
+      }
+      return total;
+    };
+
+    // 搜索框回车
+    $scope.onSearch = function () {
+      $scope.tableParams.page(1);
+      $scope.tableParams.reload();
+    };
+
+    // 选择查找日期
+    $scope.onDateCondition = function () {
+      $scope.tableParams.page(1);
+      $scope.tableParams.reload();
+    };
+
+    /**
+     * 将日期转化为整数日期
+     */
+    var getDateTime = function (date) {
+      if (angular.isDate(date)) {
+        return date.getTime();
+      } else {
+        return null;
+      }
+    };
+
+    var getState = function (active) {
+      var fn = 'get';
+      switch (active) {
+        case 'done':
+          fn = 'getDone';
+          break;
+        case 'todo':
+          fn = 'getTodo';
+          break;
+        case 'end':
+          fn = 'getEnd';
+          break;
+        case 'waiting':
+          fn = 'getWaiting';
+          break;
+        case 'received':
+          fn = 'getReceived';
+          break;
+        case 'invalid':
+          fn = 'getInvalid';
+          break;
+          // 已采纳
+        case 'agreed':
+          fn = 'getAgreed';
+          break;
+          // 未采纳
+        case 'refused':
+          fn = 'getRefused';
+          break;
+          // 个人
+        case 'personal':
+          fn = 'getPersonal';
+          break;
+          // 集体
+        case 'teams':
+          fn = 'getTeams';
+          break;
+          // 非标准
+        case 'nonstandard':
+          fn = 'getNonstandard';
+          break;
+          // 标准
+        case 'standard':
+          fn = 'getStandard';
+          break;
+          // 变更单无需确认
+        case 'unread':
+          fn = 'getUnread';
+          break;
+      }
+      return fn;
+    };
+
+    var getDateCondition = function (zone, condition) {
+      var fromDate = new Date();
+      var toDate = new Date();
+      //去除时分秒限制,dateFrom设置成0时0分0秒,dateTo设置成23时59分59秒
+      fromDate.setHours(0, 0, 0, 0);
+      toDate.setHours(23, 59, 59, 999);
+      if (zone == -1) { // 自定义时间,什么都不做
+
+      } else if (zone == 1) {
+        fromDate.setMonth(fromDate.getMonth() - 1);
+        condition.dateFrom = fromDate;
+        condition.dateTo = toDate;
+      } else if (zone == 3) {
+        fromDate.setMonth(fromDate.getMonth() - 3);
+        condition.dateFrom = fromDate;
+        condition.dateTo = toDate;
+      } else if (zone == 6) {
+        fromDate.setMonth(fromDate.getMonth() - 6);
+        condition.dateFrom = fromDate;
+        condition.dateTo = toDate;
+      } else {
+        condition.dateFrom = null;
+        condition.dateTo = null;
+      }
+    };
+
+  }]);
+
+})

+ 46 - 0
src/main/webapp/resources/js/usercenter/controllers/b2b/fa/arCheck_detail.js

@@ -0,0 +1,46 @@
+define(['app/app'], function(app) {
+// 应付对账单详情页
+  app.register.controller('SaleArCheckDetailCtrl', ['$rootScope','$scope', '$stateParams', 'B2bFaArCheck', 'toaster', '$state', 'BaseService', function ($rootScope, $scope, $stateParams, FaArCheck, toaster, $state, BaseService) {
+    BaseService.scrollBackToTop();
+    $rootScope.active = 'buyer_pay_center'
+    var loadData = function () {
+      FaArCheck.get({id: $stateParams.id}, function (data) {
+        $scope.order = data;
+        $scope.loading = false;
+      });
+    };
+    loadData(); // 初始获取单据数据
+
+    $scope.onReplyClick = function (item, isAgreed) {
+      if (isAgreed) {// 同意确认
+        FaArCheck.agree({itemId: item.id}, {}, function (data) {
+          toaster.pop('success', '确认成功', '确认供应商对账数量成功');
+        }, function (response) {
+          toaster.pop('danger', '确认失败', response.data);
+        });
+      } else {// 不同意回复
+        FaArCheck.disagree({itemId: item.id}, {
+          qty: item.$replyQty,
+          remark: item.$replyRemark
+        }, function (data) {
+          toaster.pop('success', '确认成功', '您提交的数量将发送给供应商确认');
+        }, function (response) {
+          toaster.pop('danger', '确认失败', response.data);
+        });
+      }
+    };
+
+    // 获取明细的回复记录
+    $scope.getReplies = function (item) {
+      if (!item.replies) {
+        FaArCheck.getReplies({itemId: item.id}, function (data) {
+          item.replies = data;
+        }, function (response) {
+          toaster.pop('danger', '获取对账记录失败', response.data);
+        });
+      }
+    };
+
+  }]);
+
+})

+ 1 - 1
src/main/webapp/resources/js/usercenter/controllers/b2b/order/purcChangeListCtrl.js

@@ -200,7 +200,7 @@ define(['app/app'], function(app) {
         $scope.exportXls = function () {
             change.exportXls({}, {}, function (data) {
                 if (data.success){
-                    window.location.href = 'purc/change/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
+                    window.location.href = BaseService.getB2bUrl() + '/purc/change/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
                 }
             }, function (response) {
                 toaster.pop('error', '数据加载失败', response.data);

+ 1 - 1
src/main/webapp/resources/js/usercenter/controllers/b2b/order/purcMakeOutOrderCtrl.js

@@ -232,7 +232,7 @@ define(['app/app'], function(app) {
         $scope.exportXls = function () {
             MakeOutOrder.exportXls({}, {}, function (data) {
                 if (data.success){
-                    window.location.href = 'make/outorders/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
+                    window.location.href = BaseService.getB2bUrl() + '/make/outorders/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
                 }
             }, function (response) {
                 toaster.pop('error', '数据加载失败', response.data);

+ 1 - 1
src/main/webapp/resources/js/usercenter/controllers/b2b/order/usercenterOrderCtrl.js

@@ -354,7 +354,7 @@ define(['app/app'], function(app) {
             $scope.exportXls = function () {
                 PurcOrders.exportXls({}, {}, function (data) {
                     if (data.success){
-                        window.location.href = 'sale/orders/purc/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
+                        window.location.href = BaseService.getB2bUrl() + '/sale/orders/purc/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
                     }
                 }, function (response) {
                     toaster.pop('error', '数据加载失败', response.data);

+ 18 - 27
src/main/webapp/resources/js/vendor/app.js

@@ -1,4 +1,4 @@
-define([ 'angularAMD', 'ngLocal', 'common/services', 'common/directives', 'common/query/brand', 'common/query/kind', 'common/query/component', 'common/query/goods', 'common/query/rate','common/query/cart', 'common/query/order', 'common/query/address', 'common/query/invoice', 'common/query/property', 'common/query/kindAdvice', 'common/query/propertyAdvice', 'common/query/return' , 'common/query/change', 'common/query/logistics', 'ui.router', 'ui-bootstrap', 'ui-form', 'ui-jquery','angular-toaster', 'ngDraggable', 'angular-sanitize', 'ngTable', 'dynamicInput', 'jquery-imagezoom', 'file-upload', 'file-upload-shim', 'common/query/urlencryption' , 'common/query/purchase', 'common/query/vendor', 'common/query/goods', 'common/query/bankTransfer', 'common/query/enterprise', 'common/query/bill', 'common/query/receipt', 'common/query/collection', 'common/query/express', 'common/query/bankInfo','common/query/charge', 'common/query/statistics', 'common/query/currency', 'jquery-chart', 'common/query/responseLogistics', 'common/query/goodsPrice', 'common/query/address' , 'common/query/search', 'common/query/urlencryption', 'common/query/releaseProInfo', 'common/query/makerDemand', 'common/query/afterSale', 'common/query/messageBoard', 'common/query/logistics', 'common/query/storeInfo', 'common/query/recommendation', 'common/query/user', 'common/query/logisticsPort', 'common/query/cms', 'common/query/material', 'common/query/storeCms', 'common/query/productImport', 'common/query/stockInOut', 'common/module/store_recommend_product', 'common/module/chat_web_module', 'common/query/standardPutOnAdmin', 'common/query/storeViolations', 'common/query/internalMessage', 'common/query/installments','common/query/product','common/query/seekPurchase','common/query/UASBatchPutOnProperty', 'common/query/authority', 'common/query/attendtion', 'common/b2bServices', 'common/services/File', 'common/services/Token', 'common/services/Make'], function(angularAMD) {
+define([ 'angularAMD', 'ngLocal', 'common/services', 'common/directives', 'common/query/brand', 'common/query/kind', 'common/query/component', 'common/query/goods', 'common/query/rate','common/query/cart', 'common/query/order', 'common/query/address', 'common/query/invoice', 'common/query/property', 'common/query/kindAdvice', 'common/query/propertyAdvice', 'common/query/return' , 'common/query/change', 'common/query/logistics', 'ui.router', 'ui-bootstrap', 'ui-form', 'ui-jquery','angular-toaster', 'ngDraggable', 'angular-sanitize', 'ngTable', 'dynamicInput', 'jquery-imagezoom', 'file-upload', 'file-upload-shim', 'common/query/urlencryption' , 'common/query/purchase', 'common/query/vendor', 'common/query/goods', 'common/query/bankTransfer', 'common/query/enterprise', 'common/query/bill', 'common/query/receipt', 'common/query/collection', 'common/query/express', 'common/query/bankInfo','common/query/charge', 'common/query/statistics', 'common/query/currency', 'jquery-chart', 'common/query/responseLogistics', 'common/query/goodsPrice', 'common/query/address' , 'common/query/search', 'common/query/urlencryption', 'common/query/releaseProInfo', 'common/query/makerDemand', 'common/query/afterSale', 'common/query/messageBoard', 'common/query/logistics', 'common/query/storeInfo', 'common/query/recommendation', 'common/query/user', 'common/query/logisticsPort', 'common/query/cms', 'common/query/material', 'common/query/storeCms', 'common/query/productImport', 'common/query/stockInOut', 'common/module/store_recommend_product', 'common/module/chat_web_module', 'common/query/standardPutOnAdmin', 'common/query/storeViolations', 'common/query/internalMessage', 'common/query/installments','common/query/product','common/query/seekPurchase','common/query/UASBatchPutOnProperty', 'common/query/authority', 'common/query/attendtion', 'common/b2bServices', 'common/services/File', 'common/services/Token'], function(angularAMD) {
 	'use strict';
 	/**
 	 * 自定义Array对象的属性last 方法
@@ -8,7 +8,7 @@ define([ 'angularAMD', 'ngLocal', 'common/services', 'common/directives', 'commo
 		return this.length > 0 ? this[this.length - 1] : null;
 	};
 
-	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ng.local', 'ui.form', 'ui.jquery', 'toaster', 'ngDraggable', 'tool.directives', 'ngSanitize', 'common.query.kind', 'common.services', 'brandServices', 'componentServices', 'goodsServices',  'rateServices','cartServices', 'orderServices', 'addressServices', 'invoiceServices', 'common.query.propertyAdvice', 'propertyServices', 'returnServices' , 'changeServices',  'logisticsServices', 'common.query.kindAdvice', 'ngTable', 'ngDynamicInput', 'common.directives', 'angularFileUpload', 'urlencryptionServices', 'purchaseServices', 'vendorServices', 'goodsServices', 'bankTransfer', 'common.query.enterprise', 'billServices', 'receiptServices', 'collection', 'expressServices', 'bankInfo','Charge', 'statisticsServices', 'currencyService', 'responseLogisticsService', 'PriceServices', 'addressServices', 'searchService', 'urlencryptionServices', 'ReleaseProductByBatchService', 'makerDemand', 'afterSaleService', 'messageBoardServices', 'logisticsServices', 'table.directives', 'storeInfoServices', 'recommendation', 'common.query.user', 'logisticsPortService', 'cmsService', 'materialServices', 'StoreCmsServices', 'productImportModule', 'stockInOutModule', 'StoreCmsModule', 'WebChatModule', 'StandardPutOnAdminModule', 'StoreViolationsServices', 'internalMessageServices', 'installmentServices','common.query.product', 'ui.tour', 'seekPurchaseServices', 'UASBatchPutOnPropertyModule', 'authorityServices', 'AttendtionServices', 'common.b2bServices', 'FileService', 'TokenService', 'MakeServices'])
+	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ng.local', 'ui.form', 'ui.jquery', 'toaster', 'ngDraggable', 'tool.directives', 'ngSanitize', 'common.query.kind', 'common.services', 'brandServices', 'componentServices', 'goodsServices',  'rateServices','cartServices', 'orderServices', 'addressServices', 'invoiceServices', 'common.query.propertyAdvice', 'propertyServices', 'returnServices' , 'changeServices',  'logisticsServices', 'common.query.kindAdvice', 'ngTable', 'ngDynamicInput', 'common.directives', 'angularFileUpload', 'urlencryptionServices', 'purchaseServices', 'vendorServices', 'goodsServices', 'bankTransfer', 'common.query.enterprise', 'billServices', 'receiptServices', 'collection', 'expressServices', 'bankInfo','Charge', 'statisticsServices', 'currencyService', 'responseLogisticsService', 'PriceServices', 'addressServices', 'searchService', 'urlencryptionServices', 'ReleaseProductByBatchService', 'makerDemand', 'afterSaleService', 'messageBoardServices', 'logisticsServices', 'table.directives', 'storeInfoServices', 'recommendation', 'common.query.user', 'logisticsPortService', 'cmsService', 'materialServices', 'StoreCmsServices', 'productImportModule', 'stockInOutModule', 'StoreCmsModule', 'WebChatModule', 'StandardPutOnAdminModule', 'StoreViolationsServices', 'internalMessageServices', 'installmentServices','common.query.product', 'ui.tour', 'seekPurchaseServices', 'UASBatchPutOnPropertyModule', 'authorityServices', 'AttendtionServices', 'common.b2bServices', 'FileService', 'TokenService'])
     app.directive('onFinishRenderFilters', function ($timeout) {
         return {
             restrict: 'A',
@@ -840,30 +840,6 @@ define([ 'angularAMD', 'ngLocal', 'common/services', 'common/directives', 'commo
       templateUrl: 'static/view/vendor/b2b/sale/sale_make_accept.html',
       controller: 'MakeAcceptCtrl',
       controllerUrl: 'app/controllers/b2b/sale/sale_make_accept'
-    })).state('baseInfo_myRequest', angularAMD.route({
-		url: "/myRequest",
-		title: 'b2b企业圈-我的合作伙伴(全部)',
-		templateUrl: 'static/view/vendor/b2b/baseInfo/myRequest.html',
-		controller: 'AddPartnerRequestCtrl',
-		controllerUrl: 'app/controllers/b2b/baseInfo/addPartnerRequestCtrl'
-	})).state('baseInfo_vendorInfo', angularAMD.route({
-		url: "/enume/vendorInfo",
-		title: 'b2b企业圈-我的合作伙伴(供应商)',
-		templateUrl: 'static/view/vendor/b2b/baseInfo/vendorsInfo.html',
-		controller: 'VendorsInfoCtrl',
-		controllerUrl: 'app/controllers/b2b/baseInfo/vendorsInfoCtrl'
-	})).state('baseInfo_customerInfo', angularAMD.route({
-		url: "/enume/customerInfo",
-		title: 'b2b企业圈-我的合作伙伴(客户)',
-		templateUrl: 'static/view/vendor/b2b/baseInfo/customersInfo.html',
-		controller: 'CustomersInfoCtrl',
-		controllerUrl: 'app/controllers/b2b/baseInfo/customersInfoCtrl'
-	})).state('baseInfo_servicerInfo', angularAMD.route({
-		url: "/enume/servicerInfo",
-		title: 'b2b企业圈-我的合作伙伴(服务商)',
-		templateUrl: 'static/view/vendor/b2b/baseInfo/servicerInfo.html',
-		controller: 'ServicerInfoCtrl',
-		controllerUrl: 'app/controllers/b2b/baseInfo/servicerInfoCtrl'
 	})).state('sale_quotation_new', angularAMD.route({
 			url: "/sale/quotation/new",
 			templateUrl: "static/view/vendor/b2b/sale/quotation_new.html",
@@ -892,7 +868,22 @@ define([ 'angularAMD', 'ngLocal', 'common/services', 'common/directives', 'commo
 			templateUrl: "static/view/vendor/b2b/sale/vendorPerformanceAssess_detail.html",
 			controller: 'VendorPerformanceAssessDetailCtrl',
 			controllerUrl: 'app/controllers/b2b/sale/VendorPerformanceAssessDetailCtrl'
-		}));
+		})).state('sale_sample', angularAMD.route({
+      url: "/sample",
+      templateUrl: "static/view/vendor/b2b/sale/sample.html",
+      controller: 'SaleSampleCtrl',
+      controllerUrl: 'app/controllers/b2b/sale/sample'
+    })).state('sale_sample_detail', angularAMD.route({
+      url: "/sample/:id",
+      templateUrl: "static/view/vendor/b2b/sale/sample_detail.html",
+      controller: 'SaleSampleDetailCtrl',
+      controllerUrl: 'app/controllers/b2b/sale/sample_detail'
+    })).state('sale_approval', angularAMD.route({
+      url: "/approval",
+      templateUrl: "static/view/vendor/b2b/sale/approval.html",
+      controller: 'SaleApprovalCtrl',
+      controllerUrl: 'app/controllers/b2b/sale/approval'
+    }));
 	}]);
 
 	// 状态码  -> 描述

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

@@ -124,7 +124,7 @@ define(['app/app'], function (app) {
           $scope.exportXls = function () {
             FaApBill.exportXls({}, {}, function (data) {
               if (data.success) {
-                window.location.href = 'sale/apBill/xls?_state=' + $scope.active
+                window.location.href = BaseService.getB2bUrl() + '/sale/apBill/xls?_state=' + $scope.active
                     + '&keyword=' + ($scope.keywordXls || "") + '&fromDate='
                     + $scope.fromDateXls + '&endDate=' + $scope.endDateXls;
               }

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

@@ -166,7 +166,7 @@ define(['app/app'], function (app) {
     $scope.exportXls = function () {
       FaApCheck.exportXls({}, {}, function (data) {
         if (data.success){
-          window.location.href = 'sale/apCheck/xls/list?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
+          window.location.href = BaseService.getB2bUrl() + '/sale/apCheck/xls/list?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
         }
       }, function (response) {
         toaster.pop('error', '数据加载失败', response.data);

+ 3 - 3
src/main/webapp/resources/js/vendor/controllers/b2b/change/sale_inquiry_details.js

@@ -1,6 +1,6 @@
 // 询价单明细
 define(['app/app'], function (app) {
-  app.register.controller('saleInquiryDetailCtrl', ['$rootScope', '$scope', '$stateParams', 'B2bPurcInquiry', '$filter', 'toaster', '$upload', 'token', 'B2bCurrentRole', function ($rootScope, $scope, $stateParams, PurcInquiry, $filter, toaster, $upload, token, CurrentRole) {
+  app.register.controller('saleInquiryDetailCtrl', ['BaseService', '$rootScope', '$scope', '$stateParams', 'B2bPurcInquiry', '$filter', 'toaster', '$upload', 'token', 'B2bCurrentRole', function (BaseService, $rootScope, $scope, $stateParams, PurcInquiry, $filter, toaster, $upload, token, CurrentRole) {
       $rootScope.active = 'vendor_seek_purchase';
       // 获取当前用户是否为普通用户
       CurrentRole.isUser({}, {}, function (data) {
@@ -147,7 +147,7 @@ define(['app/app'], function (app) {
               if (withSteps) {
                   if(null != file) {
                       $upload.upload({
-                          url: 'sale/inquiry/addAttach',
+                          url: BaseService.getB2bUrl() + '/sale/inquiry/addAttach',
                           file: file,
                           method: 'POST',
                           data: {
@@ -174,7 +174,7 @@ define(['app/app'], function (app) {
               } else {
                   if(null != file) {
                       $upload.upload({
-                          url: 'sale/inquiry/addAttach',
+                          url:BaseService.getB2bUrl() + '/sale/inquiry/addAttach',
                           file: file,
                           method: 'POST',
                           data: {

+ 2 - 2
src/main/webapp/resources/js/vendor/controllers/b2b/change/sale_inquiry_mould_detail.js

@@ -1,6 +1,6 @@
 // 客户模具询价单
 define(['app/app'], function (app) {
-  app.register.controller('saleInquiryMouldDetailCtrl', ['$scope', '$stateParams', 'B2bPurcInquiryMould', '$filter', 'toaster', '$upload', 'B2bCurrentRole', function ($scope, $stateParams, PurcInquiryMould, $filter, toaster, $upload, CurrentRole) {
+  app.register.controller('saleInquiryMouldDetailCtrl', ['BaseService', '$scope', '$stateParams', 'B2bPurcInquiryMould', '$filter', 'toaster', '$upload', 'B2bCurrentRole', function (BaseService, $scope, $stateParams, PurcInquiryMould, $filter, toaster, $upload, CurrentRole) {
       // 获取当前用户是否为普通用户
       CurrentRole.isUser({}, {}, function (data) {
           $scope.isUser = data.isUser;
@@ -107,7 +107,7 @@ define(['app/app'], function (app) {
 //			var file = mould.attachFile.$viewValue, file = file && file.length > 0 ? file[0] : null;
           $scope.mould  = $scope.inquiryMould;
           $upload.upload({
-              url: 'sale/mould/' + $scope.mould.id + '/send',
+              url: BaseService.getB2bUrl() +'sale/mould/' + $scope.mould.id + '/send',
               method: 'POST',
               file: file,
               data: {

+ 220 - 0
src/main/webapp/resources/js/vendor/controllers/b2b/sale/approval.js

@@ -0,0 +1,220 @@
+define(['app/app'], function (app) {
+  /**
+   * 客户认定单
+   */
+  app.register.controller('SaleApprovalCtrl', ['$rootScope', '$scope', '$filter', 'B2bPurcApproval', 'ngTableParams', 'toaster', 'BaseService', 'Symbol', function ($rootScope, $scope, $filter, PurcApproval, ngTableParams, toaster, BaseService, Symbol) {
+    BaseService.scrollBackToTop();
+    $rootScope.active = 'vendor_sample'
+    $scope.storeType = 'approval'
+    $scope.active = 'all';
+    $scope.agreedText = '全部';
+    $scope.dateZoneText = '一个月内';
+    $scope.condition = {dateZone: 1};
+
+    /* 时间筛选初始化*/
+    var fromDate = new Date();
+    var toDate = new Date();
+    fromDate.setMonth(fromDate.getMonth() - 1);
+    fromDate.setHours(0, 0, 0, 0);
+    toDate.setHours(23, 59, 59, 999);
+    $scope.condition.dateFrom = fromDate;
+    $scope.condition.dateTo = toDate;
+
+    $scope.currency = Symbol.currency;//将币别转化为对应的符号
+    $scope.changeDateZone = function (zone) {
+      $scope.condition.dateZone = zone;
+      $scope.dateZoneText = zone == 1 ? '最近一个月' : (zone == 3 ? '最近三个月' : (zone == 6 ? '最近六个月' : '自定义'));
+      $scope.condition.$dateZoneOpen = false;
+      getDateCondition(zone, $scope.condition);
+      $scope.tableParams.page(1);
+      $scope.tableParams.reload();
+    };
+    $scope.setActive = function (state) {
+      if ($scope.active != state) {
+        $scope.active = state;
+        if ($scope.tableParams.page() == 1)
+          $scope.tableParams.reload();
+        else
+          $scope.tableParams.page(1);
+      }
+    };
+    var getService = function () {
+      return PurcApproval;
+    };
+
+    $scope.tableParams = new ngTableParams({
+      page: 1,
+      count: 20,
+      sorting: {
+        inDate: 'desc'
+      }
+    }, {
+      total: 0,
+      counts: [5, 10, 25, 50],
+      getData: function ($defer, params) {
+        $scope.loading = true;
+        var pageParams = params.url();
+        pageParams.keyword = $scope.keyword;
+        pageParams.fromDate = $scope.condition.dateFrom ? $scope.condition.dateFrom.getTime() : null;
+        pageParams.endDate = $scope.condition.dateTo ? $scope.condition.dateTo.getTime() : null;
+        getService()[getState($scope.active)].call(null, BaseService.parseParams(pageParams), function (page) {
+          $scope.loading = false;
+          if (page) {
+            params.total(page.totalElement);
+            $defer.resolve(page.content);
+            $scope.infoCommon = page
+            $scope.infoCommon.all = page.content.length
+            $scope.keywordXls = angular.copy($scope.keyword);//保存当前取值的关键词
+            $scope.fromDateXls = angular.copy($scope.condition.dateFrom ? $scope.condition.dateFrom.getTime() : null);//保存当前取值的起始日期
+            $scope.endDateXls = angular.copy($scope.condition.dateTo ? $scope.condition.dateTo.getTime() : null);//保存当前取值的截止日期
+          }
+        }, function (response) {
+          $scope.loading = false;
+          toaster.pop('error', '数据加载失败', response.data);
+        });
+      }
+    });
+
+    $scope.openDatePicker = function ($event, item, openParam) {
+      $event.preventDefault();
+      $event.stopPropagation();
+      item[openParam] = !item[openParam];
+    };
+
+    $scope.openFilterDatePicker = function ($event, item, openParam) {
+      $event.preventDefault();
+      $event.stopPropagation();
+      item[openParam] = !item[openParam];
+      if ($scope.condition.dateFrom && $scope.condition.dateTo && !item[openParam]) {
+        $scope.tableParams.reload();
+      }
+    };
+
+    $scope.parseDate = function (dateStr) {
+      if (dateStr)
+        return Date.parse(dateStr, 'yyyy-MM-dd');
+      return new Date();
+    };
+
+    // 搜索框回车
+    $scope.onSearch = function () {
+      $scope.tableParams.page(1);
+      $scope.tableParams.reload();
+    };
+
+    // 选择查找日期
+    $scope.onDateCondition = function () {
+      $scope.tableParams.page(1);
+      $scope.tableParams.reload();
+    };
+
+    // 导出
+    $scope.exportXls = function () {
+      PurcApproval.exportXls({}, {}, function (data) {
+        if (data.success){
+          window.location.href = BaseService.getB2bUrl() + '/sale/sample/approval/xls?_state='+$scope.active+'&keyword='+($scope.keywordXls || "")+'&fromDate='+$scope.fromDateXls+'&endDate='+$scope.endDateXls;
+        }
+      }, function (response) {
+        toaster.pop('error', '数据加载失败', response.data);
+      });
+    }
+
+    /**
+     * 将日期转化为整数日期
+     */
+    var getDateTime = function (date) {
+      if (angular.isDate(date)) {
+        return date.getTime();
+      } else {
+        return null;
+      }
+    }
+
+    /**
+     * 页面状态按钮过滤
+     */
+    var getState = function (active) {
+      var fn = 'get';
+      switch (active) {
+        case 'done':
+          fn = 'getDone';
+          break;
+        case 'todo':
+          fn = 'getTodo';
+          break;
+        case 'end':
+          fn = 'getEnd';
+          break;
+        case 'waiting':
+          fn = 'getWaiting';
+          break;
+        case 'received':
+          fn = 'getReceived';
+          break;
+        case 'invalid':
+          fn = 'getInvalid';
+          break;
+          // 已采纳
+        case 'agreed':
+          fn = 'getAgreed';
+          break;
+          // 未采纳
+        case 'refused':
+          fn = 'getRefused';
+          break;
+          // 个人
+        case 'personal':
+          fn = 'getPersonal';
+          break;
+          // 集体
+        case 'teams':
+          fn = 'getTeams';
+          break;
+          // 非标准
+        case 'nonstandard':
+          fn = 'getNonstandard';
+          break;
+          // 标准
+        case 'standard':
+          fn = 'getStandard';
+          break;
+          // 变更单无需确认
+        case 'unread':
+          fn = 'getUnread';
+          break;
+      }
+      return fn;
+    };
+
+    /**
+     * 改变单据日期范围
+     */
+    var getDateCondition = function (zone, condition) {
+      var fromDate = new Date();
+      var toDate = new Date();
+      //去除时分秒限制,dateFrom设置成0时0分0秒,dateTo设置成23时59分59秒
+      fromDate.setHours(0, 0, 0, 0);
+      toDate.setHours(23, 59, 59, 999);
+      if (zone == -1) { // 自定义时间,什么都不做
+
+      } else if (zone == 1) {
+        fromDate.setMonth(fromDate.getMonth() - 1);
+        condition.dateFrom = fromDate;
+        condition.dateTo = toDate;
+      } else if (zone == 3) {
+        fromDate.setMonth(fromDate.getMonth() - 3);
+        condition.dateFrom = fromDate;
+        condition.dateTo = toDate;
+      } else if (zone == 6) {
+        fromDate.setMonth(fromDate.getMonth() - 6);
+        condition.dateFrom = fromDate;
+        condition.dateTo = toDate;
+      } else {
+        condition.dateFrom = null;
+        condition.dateTo = null;
+      }
+    };
+
+  }]);
+
+})

+ 3 - 3
src/main/webapp/resources/js/vendor/controllers/b2b/sale/saleQuotationNewCtrl.js

@@ -184,7 +184,7 @@ define(['app/app'], function (app) {
                     if ($stateParams.id)
                         window.location.reload();
                     else
-                        window.location.hash = '#/sale/quotation/list';
+                        window.location.hash = '#/sale/quotationList';
                 }, function (response) {
                     $scope.loading = false;
                     toaster.pop('error', '保存失败', response.data);
@@ -233,7 +233,7 @@ define(['app/app'], function (app) {
                     $scope.item = data;
                     toaster.pop('success', '成功', '提交成功');
                     // window.location.hash = '#/sale/quotation/' + data.id;
-                    window.location.hash = '#/sale/quotation/list';
+                    window.location.hash = '#/sale/quotationList';
                 }, function (response) {
                     $scope.loading = false;
                     toaster.pop('error', '保存失败', response.data);
@@ -243,7 +243,7 @@ define(['app/app'], function (app) {
 
         $scope.deleteById = function (id) {
             Quotation.deleteById({id: id}, {}, function (data) {
-                window.location.href = "#/sale/quotation/list";
+                window.location.href = "#/sale/quotationList";
             }, function (response) {
                 toaster.pop('error', '提示', response.data);
             })

+ 1 - 1
src/main/webapp/resources/js/vendor/controllers/b2b/sale/sale_accept.js

@@ -124,7 +124,7 @@ define(['app/app'], function (app) {
     $scope.exportXls = function () {
       PurcAccept.exportXls({}, {}, function (data) {
         if (data.success){
-          window.location.href = 'sale/accept/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
+          window.location.href = BaseService.getB2bUrl() + '/sale/accept/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
         }
       }, function (response) {
         toaster.pop('error', '数据加载失败', response.data);

+ 1 - 1
src/main/webapp/resources/js/vendor/controllers/b2b/sale/sale_badIn.js

@@ -110,7 +110,7 @@ define(['app/app'], function (app) {
     $scope.exportXls = function () {
       PurcBadIn.exportXls({}, {}, function (data) {
         if (data.success){
-          window.location.href = 'sale/badIn/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
+          window.location.href = BaseService.getB2bUrl() + '/sale/badIn/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
         }
       }, function (response) {
         toaster.pop('error', '数据加载失败', response.data);

+ 1 - 1
src/main/webapp/resources/js/vendor/controllers/b2b/sale/sale_badOut.js

@@ -118,7 +118,7 @@ define(['app/app'], function (app) {
           $scope.exportXls = function () {
             PurcBadOut.exportXls({}, {}, function (data) {
               if (data.success) {
-                window.location.href = 'sale/badOut/xls?_state=' + $scope.active
+                window.location.href = BaseService.getB2bUrl() + '/sale/badOut/xls?_state=' + $scope.active
                     + '&searchFilter=' + encodeURIComponent(
                         angular.toJson($scope.searchFilterXls));
               }

+ 1 - 1
src/main/webapp/resources/js/vendor/controllers/b2b/sale/sale_make_accept.js

@@ -120,7 +120,7 @@ define(['app/app'], function (app) {
     $scope.exportXls = function () {
       MakeAccept.exportXls({}, {}, function (data) {
         if (data.success){
-          window.location.href = 'make/accept/xls?_state='+$scope.active+'&keyword='+($scope.keywordXls || "")+'&fromDate='+$scope.fromDateXls+'&endDate='+$scope.endDateXls;
+          window.location.href = BaseService.getB2bUrl() + '/make/accept/xls?_state='+$scope.active+'&keyword='+($scope.keywordXls || "")+'&fromDate='+$scope.fromDateXls+'&endDate='+$scope.endDateXls;
         }
       }, function (response) {
         toaster.pop('error', '数据加载失败', response.data);

+ 1 - 1
src/main/webapp/resources/js/vendor/controllers/b2b/sale/sale_make_returns.js

@@ -117,7 +117,7 @@ define(['app/app'], function (app) {
     $scope.exportXls = function () {
       MakeReturn.exportXls({}, {}, function (data) {
         if (data.success){
-          window.location.href = 'make/return/xls?_state='+$scope.active+'&keyword='+($scope.keywordXls || "")+'&fromDate='+$scope.fromDateXls+'&endDate='+$scope.endDateXls;
+          window.location.href = BaseService.getB2bUrl() + '/make/return/xls?_state='+$scope.active+'&keyword='+($scope.keywordXls || "")+'&fromDate='+$scope.fromDateXls+'&endDate='+$scope.endDateXls;
         }
       }, function (response) {
         toaster.pop('error', '数据加载失败', response.data);

+ 1 - 1
src/main/webapp/resources/js/vendor/controllers/b2b/sale/sale_returns.js

@@ -117,7 +117,7 @@ define(['app/app'], function (app) {
     $scope.exportXls = function () {
       PurcReturn.exportXls({}, {}, function (data) {
         if (data.success){
-          window.location.href = 'sale/return/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
+          window.location.href = BaseService.getB2bUrl() + '/sale/return/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
         }
       }, function (response) {
         toaster.pop('error', '数据加载失败', response.data);

+ 368 - 0
src/main/webapp/resources/js/vendor/controllers/b2b/sale/sample.js

@@ -0,0 +1,368 @@
+define(['app/app'], function (app) {
+  /**
+   * 客户打样申请
+   */
+  app.register.controller('SaleSampleCtrl', ['$scope', '$filter', 'B2bPurcSample', 'ngTableParams', 'toaster', '$modal', 'BaseService', 'B2bReportService', 'Symbol', '$rootScope', 'B2bPurcSampleInfo', 'B2bCurrentRole', function ($scope, $filter, PurcSample, ngTableParams, toaster, $modal, BaseService, ReportService, Symbol, $rootScope, PurcSampleInfo, CurrentRole) {
+    BaseService.scrollBackToTop();
+    // 获取当前用户是否为普通用户
+    CurrentRole.isUser({}, {}, function (data) {
+      $scope.isUser = data.isUser;
+    });
+    $rootScope.active = 'vendor_sample'
+    $scope.storeType = 'sample'
+    // if ($rootScope.active) {
+    //   $scope.active = $rootScope.active;
+    //   $rootScope.active = null;
+    // } else {
+      $scope.active = 'todo';
+    // }
+    $scope.agreedText = '全部';
+    $scope.dateZoneText = '一个月内';
+    $scope.condition = {dateZone: 1};
+
+    /*初始化筛选时间*/
+    var fromDate = new Date();
+    var toDate = new Date();
+    fromDate.setMonth(fromDate.getMonth() - 1);
+    fromDate.setHours(0, 0, 0, 0);
+    toDate.setHours(23, 59, 59, 999);
+    $scope.condition.dateFrom = fromDate;
+    $scope.condition.dateTo = toDate;
+
+    $scope.currency = Symbol.currency;//将币别转化为对应的符号
+    $scope.changeAgreed = function (agreed) {
+      $scope.condition.agreed = agreed;
+      $scope.agreedText = typeof agreed == 'undefined' ? '全部' : (agreed == 1 ? '已同意' : '不同意');
+      $scope.condition.$agreedOpen = false;
+    };
+    $scope.changeDateZone = function (zone) {
+      $scope.condition.dateZone = zone;
+      $scope.dateZoneText = zone == 1 ? '最近一个月' : (zone == 3 ? '最近三个月' : (zone == 6 ? '最近六个月' : '自定义'));
+      $scope.condition.$dateZoneOpen = false;
+      getDateCondition(zone, $scope.condition);
+      $scope.tableParams.page(1);
+      $scope.tableParams.reload();
+    };
+    $scope.setActive = function (state) {
+      if ($scope.active != state) {
+        $scope.active = state;
+        if ($scope.tableParams.page() == 1)
+          $scope.tableParams.reload();
+        else
+          $scope.tableParams.page(1);
+      }
+    };
+
+    $scope.searchMethod = false;
+    var getService = function () {
+      return $scope.searchMethod ? PurcSample : PurcSampleInfo;
+    };
+
+    $scope.tableParams = new ngTableParams({
+      page: 1,
+      count: 20,
+      sorting: {
+        proofingDate: 'desc'
+      }
+    }, {
+      total: 0,
+      counts: [5, 10, 25, 50],
+      getData: function ($defer, params) {
+        $scope.loading = true;
+        var pageParams = params.url();
+        pageParams.searchFilter = {
+          keyword: $scope.keyword,
+          fromDate: getDateTime($scope.condition.dateFrom),
+          endDate: getDateTime($scope.condition.dateTo)
+        };
+        getService()[getState($scope.active)].call(null, BaseService.parseParams(pageParams), function (page) {
+          $scope.loading = false;
+          if (page) {
+            params.total(page.totalElement);
+            $defer.resolve(page.content);
+            $scope.infoCommon = page
+            $scope.infoCommon.all = page.content.length
+            $scope.searchFilterXls = angular.copy(pageParams.searchFilter);//保存当前取值的关键词
+          }
+          getUnreadCount();
+        }, function (response) {
+          $scope.loading = false;
+          toaster.pop('error', '数据加载失败', response.data);
+        });
+      }
+    });
+
+    //获得各分类未阅读数量
+    var getUnreadCount = function () {
+      PurcSample.getUnreadCount(null, function(data){
+        $scope.unread = data;
+      });
+    };
+    getUnreadCount();
+
+    //设置单个单据已读
+    $scope.setOrdersRead = function (id) {
+      if (!$scope.isUnread(id)) {
+        return;
+      }
+      var sourceId = [];
+      sourceId.push(id);
+      PurcSample.setRead({}, sourceId, function (message) {
+        getUnreadIds();
+        getUnreadCount();
+      });
+    };
+
+    //获取未读单据id
+    var getUnreadIds = function (){
+      PurcSample.getUnreadIds({}, "", function (message) {
+        $scope.unreadCode = message.content;
+      });
+    };
+    getUnreadIds();
+    //判断单据是否未读
+    $scope.isUnread = function (id){
+      for (var i in $scope.unreadCode) {
+        if (id == $scope.unreadCode[i]) {
+          return true;
+        }
+      }
+    };
+
+    $scope.openDatePicker = function ($event, item, openParam) {
+      $event.preventDefault();
+      $event.stopPropagation();
+      item[openParam] = !item[openParam];
+    };
+
+    $scope.openFilterDatePicker = function ($event, item, openParam) {
+      $event.preventDefault();
+      $event.stopPropagation();
+      item[openParam] = !item[openParam];
+      if ($scope.condition.dateFrom && $scope.condition.dateTo && !item[openParam]) {
+        $scope.tableParams.reload();
+      }
+    };
+
+    $scope.openSend = function (index, sample) {
+      var modalInstance = $modal.open({
+        animation: true,
+        templateUrl: 'static/view/vendor/b2b/modal/sample_send.html',
+        controller: 'SampleSendCtrl',
+        resolve: {
+          sampleItem: function () {
+            return sample;
+          }
+        }
+      });
+
+      modalInstance.result.then(function () {
+        toaster.pop('info', '提示', '送样成功');
+        $scope.tableParams.reload();
+      }, function () {
+
+      });
+    };
+    //打印  样品采购单
+    $scope.print = function (sample) {
+      var newPage = window.open("about:blank");
+      PurcSample.printPermission({}, function () {
+        PurcSample.printCount({id: sample.id}, {});//增加打印此次
+        ReportService.print(sample.proofing.enUU, 'PURCPROOFING', "where purc$proofingitems.ppi_id =" + sample.id, newPage);
+      }, function (response) {
+        newPage.close();
+        toaster.pop('error', '打印失败', response.data);
+      });
+    };
+
+    $scope.getSend = function (proofing) {
+      if (!proofing.sends) {
+        proofing.getSendInfo = '加载中...';
+        PurcSample.getSend({id: proofing.id}, function (data) {
+          if (data) {
+            proofing.getSendInfo = null;
+            proofing.sends = data;
+          } else {
+            proofing.getSendInfo = '无送样信息';
+            proofing.sends = '无送样信息';
+          }
+        }, function (response) {
+          proofing.getSendInfo = '加载失败!';
+        });
+      }
+    };
+
+    // 搜索框回车
+    $scope.onSearch = function (keyword) {
+      // 每次搜索重置获取数据方法
+      $scope.searchMethod = false;
+      if(keyword != null && keyword != '') {
+        $scope.searchMethod = true;
+      }
+      $scope.tableParams.page(1);
+      $scope.tableParams.reload();
+    };
+
+    // 导出
+    $scope.exportXls = function () {
+      PurcSample.exportXls({}, {}, function (data) {
+        if (data.success){
+          window.location.href = BaseService.getB2bUrl() + '/sale/sample/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
+        }
+      }, function (response) {
+        toaster.pop('error', '数据加载失败', response.data);
+      });
+    }
+
+    /**
+     * 将日期转化为整数日期
+     */
+    var getDateTime = function (date) {
+      if (angular.isDate(date)) {
+        return date.getTime();
+      } else {
+        return null;
+      }
+    }
+
+    /**
+     * 页面状态按钮过滤
+     */
+    var getState = function (active) {
+      var fn = 'get';
+      switch (active) {
+        case 'done':
+          fn = 'getDone';
+          break;
+        case 'todo':
+          fn = 'getTodo';
+          break;
+        case 'end':
+          fn = 'getEnd';
+          break;
+        case 'waiting':
+          fn = 'getWaiting';
+          break;
+        case 'received':
+          fn = 'getReceived';
+          break;
+        case 'invalid':
+          fn = 'getInvalid';
+          break;
+          // 已采纳
+        case 'agreed':
+          fn = 'getAgreed';
+          break;
+          // 未采纳
+        case 'refused':
+          fn = 'getRefused';
+          break;
+          // 个人
+        case 'personal':
+          fn = 'getPersonal';
+          break;
+          // 集体
+        case 'teams':
+          fn = 'getTeams';
+          break;
+          // 非标准
+        case 'nonstandard':
+          fn = 'getNonstandard';
+          break;
+          // 标准
+        case 'standard':
+          fn = 'getStandard';
+          break;
+          // 变更单无需确认
+        case 'unread':
+          fn = 'getUnread';
+          break;
+      }
+      return fn;
+    };
+
+    /**
+     * 改变单据日期范围
+     */
+    var getDateCondition = function (zone, condition) {
+      var fromDate = new Date();
+      var toDate = new Date();
+      //去除时分秒限制,dateFrom设置成0时0分0秒,dateTo设置成23时59分59秒
+      fromDate.setHours(0, 0, 0, 0);
+      toDate.setHours(23, 59, 59, 999);
+      if (zone == -1) { // 自定义时间,什么都不做
+
+      } else if (zone == 1) {
+        fromDate.setMonth(fromDate.getMonth() - 1);
+        condition.dateFrom = fromDate;
+        condition.dateTo = toDate;
+      } else if (zone == 3) {
+        fromDate.setMonth(fromDate.getMonth() - 3);
+        condition.dateFrom = fromDate;
+        condition.dateTo = toDate;
+      } else if (zone == 6) {
+        fromDate.setMonth(fromDate.getMonth() - 6);
+        condition.dateFrom = fromDate;
+        condition.dateTo = toDate;
+      } else {
+        condition.dateFrom = null;
+        condition.dateTo = null;
+      }
+    };
+
+  }]);
+
+  app.register.controller('SampleSendCtrl', ['$scope', '$modalInstance', 'sampleItem', 'B2bPurcSample', '$upload', 'toaster',  'BaseService', function ($scope, $modalInstance, sampleItem, PurcSample, $upload, toaster, BaseService) {
+    var b2bUrl = BaseService.getB2bUrl();
+    if (!sampleItem.sends) {
+      PurcSample.getSend({id: sampleItem.id}, function (data) {
+        if (data) {
+          sampleItem.sends = data; // 获取送样信息
+          angular.forEach(data, function (send) {
+            sampleItem.sendQty = send.sendQty + (sampleItem.sendQty || 0);
+          });
+        }
+      }, function (response) {
+      });
+    }
+    $scope.sampleItem = sampleItem;
+    $scope.sampleItem.sampleSend = $scope.sampleItem.sampleSend || {};
+
+    //确认送样
+    $scope.ok = function (form) {
+      $scope.loading = true;
+      // 多次送样时,由于ng-model是sendQty,所以需要加上送样历史中的数量
+      $scope.sampleItem.sampleSend.sendQty = $scope.sampleItem.sampleSend.sendQty + ($scope.sampleItem.sendQty || 0);
+      $scope.sampleItem.sendQty = $scope.sampleItem.sampleSend.sendQty; // 判断是否需要多次送样
+      var files = form.attachFile.$viewValue, file = files && files.length > 0 ? files[0] : null;
+      $upload.upload({
+        url: b2bUrl + 'sale/sample/' + $scope.sampleItem.id + '/send',
+        method: 'POST',
+        file: file,
+        data: {
+          json: $scope.sampleItem.sampleSend
+        }
+      }).success(function (data) {
+        $scope.loading = false;
+        $modalInstance.close('success');
+      }).error(function (data) {
+        $scope.loading = false;
+        toaster.pop('error', '错误', data);
+      });
+    };
+
+    $scope.cancel = function () {
+      $modalInstance.dismiss(sampleItem);
+    };
+
+    //设置单个单据已读
+    $scope.setOrdersRead = function (id) {
+      var sourceId = [];
+      sourceId.push(id);
+      PurcSample.setRead({}, sourceId, function (message) {
+        // $scope.getUnreadIds();
+      });
+    };
+  }]);
+
+})

+ 109 - 0
src/main/webapp/resources/js/vendor/controllers/b2b/sale/sample_detail.js

@@ -0,0 +1,109 @@
+define(['app/app'], function (app) {
+  app.register.controller('SaleSampleDetailCtrl', ['$rootScope', '$scope', '$stateParams', 'B2bPurcSample', 'toaster', '$modal', 'BaseService', 'B2bCurrentRole', function ($rootScope, $scope, $stateParams, PurcSample, toaster, $modal, BaseService, CurrentRole) {
+    $rootScope.active = 'vendor_sample'
+    BaseService.scrollBackToTop();
+    // 获取当前用户是否为普通用户
+    CurrentRole.isUser({}, {}, function (data) {
+      $scope.isUser = data.isUser;
+    });
+    var loading = true;
+    var loadData = function () {
+      PurcSample.getItem({id: $stateParams.id}, function (data) {
+        $scope.sample = data;
+        if (!$scope.sample.sends) {
+          $scope.sample.getSendInfo = '加载中...';
+          PurcSample.getSend({id: $stateParams.id}, function (sendData) {
+            if (sendData) {
+              $scope.sample.getSendInfo = null;
+              $scope.sample.sends = sendData;
+            } else {
+              $scope.sample.getSendInfo = '无送样信息';
+              $scope.sample.sends = '无送样信息';
+            }
+          }, function (response) {
+            $scope.sample.getSendInfo = '加载失败!';
+            toaster.pop('error', '', response.data);
+          });
+        }
+        $scope.loading = false;
+      }, function (response) {
+        loading = false;
+        toaster.pop('error', '获取数据失败', response.data);
+      });
+    };
+    loadData();
+
+    $scope.openSend = function (index, sample) {
+      var modalInstance = $modal.open({
+        animation: true,
+        templateUrl: 'static/view/vendor/b2b/modal/sample_send.html',
+        controller: 'SampleSendCtrl',
+        resolve: {
+          sampleItem: function () {
+            return sample;
+          }
+        }
+      });
+
+      modalInstance.result.then(function () {
+        toaster.pop('info', '提示', '送样成功');
+        $scope.tableParams.reload();
+      }, function () {
+
+      });
+    };
+  }]);
+  app.register.controller('SampleSendCtrl', ['$scope', '$modalInstance', 'sampleItem', 'B2bPurcSample', '$upload', 'toaster',  'BaseService', function ($scope, $modalInstance, sampleItem, PurcSample, $upload, toaster, BaseService) {
+    var b2bUrl = BaseService.getB2bUrl();
+    if (!sampleItem.sends) {
+      PurcSample.getSend({id: sampleItem.id}, function (data) {
+        if (data) {
+          sampleItem.sends = data; // 获取送样信息
+          angular.forEach(data, function (send) {
+            sampleItem.sendQty = send.sendQty + (sampleItem.sendQty || 0);
+          });
+        }
+      }, function (response) {
+      });
+    }
+    $scope.sampleItem = sampleItem;
+    $scope.sampleItem.sampleSend = $scope.sampleItem.sampleSend || {};
+
+    //确认送样
+    $scope.ok = function (form) {
+      $scope.loading = true;
+      // 多次送样时,由于ng-model是sendQty,所以需要加上送样历史中的数量
+      $scope.sampleItem.sampleSend.sendQty = $scope.sampleItem.sampleSend.sendQty + ($scope.sampleItem.sendQty || 0);
+      $scope.sampleItem.sendQty = $scope.sampleItem.sampleSend.sendQty; // 判断是否需要多次送样
+      var files = form.attachFile.$viewValue, file = files && files.length > 0 ? files[0] : null;
+      $upload.upload({
+        url: b2bUrl + 'sale/sample/' + $scope.sampleItem.id + '/send',
+        method: 'POST',
+        file: file,
+        data: {
+          json: $scope.sampleItem.sampleSend
+        }
+      }).success(function (data) {
+        $scope.loading = false;
+        $modalInstance.close('success');
+      }).error(function (data) {
+        $scope.loading = false;
+        toaster.pop('error', '错误', data);
+      });
+    };
+
+    $scope.cancel = function () {
+      $modalInstance.dismiss(sampleItem);
+    };
+
+    //设置单个单据已读
+    $scope.setOrdersRead = function (id) {
+      var sourceId = [];
+      sourceId.push(id);
+      PurcSample.setRead({}, sourceId, function (message) {
+        // $scope.getUnreadIds();
+      });
+    };
+  }]);
+
+})

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

@@ -11,7 +11,7 @@ define(['app/app'], function (app) {
     BaseService.scrollBackToTop();
     var b2bPath = BaseService.getB2bUrl();
     // 获取当前用户是否为普通用户
-    $rootScope.active = 'vendor_material';
+    $rootScope.active = 'vendor_order';
     CurrentRole.isUser({}, {}, function (data) {
       $scope.isUser = data.isUser;
     });
@@ -183,7 +183,7 @@ define(['app/app'], function (app) {
     $scope.exportXls = function () {
       PurcChange.exportXls({}, {}, function (data) {
         if (data.success){
-          window.location.href = b2bPath + '/sale/changes/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
+          window.location.href = BaseService.getB2bUrl() + '/sale/changes/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
         }
       }, function (response) {
         toaster.pop('error', '数据加载失败', response.data);

+ 10 - 3
src/main/webapp/resources/js/vendor/controllers/b2b/saleInquiryCtrl.js

@@ -196,6 +196,8 @@ define(['app/app'], function (app) {
                     if (page) {
                         params.total(page.totalElement);
                         $defer.resolve(page.content);
+                      $scope.infoCommon = page
+                      $scope.infoCommon.all = page.content.length
                         $scope.searchFilterXls = angular.copy(pageParams.searchFilter);//保存当前取值的关键词
                     }
                 }, function (response) {
@@ -356,7 +358,7 @@ define(['app/app'], function (app) {
                 if (withSteps) { // 保存并报价
                     if(null != file) {
                         $upload.upload({
-                            url: 'sale/inquiry/addAttach',
+                            url: BaseService.getB2bUrl() + '/sale/inquiry/addAttach',
                             file: file,
                             method: 'POST',
                             data: {
@@ -387,7 +389,7 @@ define(['app/app'], function (app) {
                 } else {  // 保存
                     if(null != file) {
                         $upload.upload({
-                            url: 'sale/inquiry/addAttach',
+                            url: BaseService.getB2bUrl() + '/sale/inquiry/addAttach',
                             file: file,
                             method: 'POST',
                             data: {
@@ -476,11 +478,16 @@ define(['app/app'], function (app) {
             $scope.tableParams.reload();
         }
 
+        // 下载图片
+        $scope.B2bdownFile = function(id) {
+          window.location.href = BaseService.getB2bUrl() + '/file/'+id
+        }
+
         // 导出
         $scope.exportXls = function () {
             PurcInquiry.exportXls({}, {}, function (data) {
                 if (data.success) {
-                    window.location.href = 'sale/inquiry/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
+                    window.location.href = BaseService.getB2bUrl() + '/sale/inquiry/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
                 }
             }, function (response) {
                 toaster.pop('error', '数据加载失败', response.data);

+ 8 - 2
src/main/webapp/resources/js/vendor/controllers/b2b/saleInquiryMouldCtrl.js

@@ -182,6 +182,8 @@ define(['app/app'], function (app) {
                     if (page) {
                         params.total(page.totalElement);
                         $defer.resolve(page.content);
+                      $scope.infoCommon = page
+                      $scope.infoCommon.all = page.content.length
                         $scope.searchFilterXls = angular.copy(pageParams.searchFilter);//保存当前取值的关键词 $scope.searchFilterXls = angular.copy(pageParams.searchFilter);//保存当前取值的关键词
                     }
                 }, function (response) {
@@ -323,7 +325,7 @@ define(['app/app'], function (app) {
 //			var file = mould.attachFile.$viewValue, file = file && file.length > 0 ? file[0] : null;
             $scope.mould = mould;
             $upload.upload({
-                url: 'sale/mould/' + mould.id + '/send',
+                url: BaseService.getB2bUrl() + '/sale/mould/' + mould.id + '/send',
                 method: 'POST',
                 file: file,
                 data: {
@@ -434,11 +436,15 @@ define(['app/app'], function (app) {
         $scope.exportXls = function () {
             PurcInquiryMould.exportXls({}, {}, function (data) {
                 if (data.success){
-                    window.location.href = 'sale/mould/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
+                    window.location.href = BaseService.getB2bUrl() + '/sale/mould/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
                 }
             }, function (response) {
                 toaster.pop('error', '数据加载失败', response.data);
             });
         }
+
+        $scope.downFile = function(id) {
+          window.location.href = BaseService.getB2bUrl() + '/file/' + id
+        }
     }]);
 });

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

@@ -9,7 +9,7 @@ define(['app/app'], function (app) {
         'BaseService', 'B2bCurrentRole',
         function ($scope, $rootScope, $filter, MakeChange, ngTableParams, toaster,
             BaseService, CurrentRole) {
-          $rootScope.active = 'vendor_material';
+          $rootScope.active = 'vendor_order';
           $scope.storeType = 'makeChange'
           BaseService.scrollBackToTop();
           // 获取当前用户是否为普通用户
@@ -154,7 +154,7 @@ define(['app/app'], function (app) {
           $scope.exportXls = function () {
             MakeChange.exportXls({}, {}, function (data) {
               if (data.success) {
-                window.location.href = 'make/changes/xls?_state='
+                window.location.href =  BaseService.getB2bUrl() +'/make/changes/xls?_state='
                     + $scope.active + '&searchFilter=' + encodeURIComponent(
                         angular.toJson($scope.searchFilterXls));
               }

+ 3 - 3
src/main/webapp/resources/js/vendor/controllers/b2b/saleMaketodoCtrl.js

@@ -4,8 +4,8 @@
  */
 define(['app/app'], function (app) {
     "use strict";
-    app.register.controller('saleMaketodoCtrl', ['$rootScope','$scope', '$filter', 'B2bMakeOrder', 'ngTableParams', 'toaster', 'B2bReportService', 'BaseService', 'B2bSearchFilter', '$http', 'B2bCurrentRole',
-        function ($rootScope, $scope, $filter, MakeOrder, ngTableParams, toaster, ReportService, BaseService, SearchFilter, $http, B2bCurrentRole) {
+    app.register.controller('saleMaketodoCtrl', ['BaseService', '$rootScope','$scope', '$filter', 'B2bMakeOrder', 'ngTableParams', 'toaster', 'B2bReportService', 'B2bSearchFilter', '$http', 'B2bCurrentRole',
+        function (BaseService, $rootScope, $scope, $filter, MakeOrder, ngTableParams, toaster, ReportService, SearchFilter, $http, B2bCurrentRole) {
           $rootScope.active = 'vendor_order'
           $scope.tab = 'maketodo'
             var b2bUrl = BaseService.getB2bUrl()
@@ -336,7 +336,7 @@ define(['app/app'], function (app) {
             $scope.exportXls = function () {
                 MakeOrder.exportXls({}, {}, function (data) {
                     if (data.success){
-                        window.location.href = 'make/orders/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
+                        window.location.href = BaseService.getB2bUrl() + '/make/orders/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
                     }
                 }, function (response) {
                     toaster.pop('error', '数据加载失败', response.data);

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

@@ -405,7 +405,7 @@ define(['app/app'], function (app) {
     $scope.exportXls = function () {
       PurcNotice.exportXls({}, {}, function (data) {
         if (data.success){
-          window.location.href = 'sale/notice/xls?_state='+$scope.active+
+          window.location.href = BaseService.getB2bUrl() + '/sale/notice/xls?_state='+$scope.active+
               '&keyword='+($scope.keywordXls || '')+'&fromDate='+$scope.fromDateXls+'&endDate='+$scope.endDateXls;
         }
       }, function (response) {

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

@@ -352,7 +352,7 @@ define(['app/app'], function (app) {
       $scope.exportXls = function () {
         PurcOrderItem.exportXls({}, {}, function (data) {
           if (data.success){
-            window.location.href = 'sale/orders/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
+            window.location.href =  BaseService.getB2bUrl() +'/sale/orders/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
           }
         }, function (response) {
           toaster.pop('error', '数据加载失败', response.data);

+ 3 - 1
src/main/webapp/resources/js/vendor/controllers/b2b/saleQuotationListCtrl.js

@@ -171,6 +171,8 @@ define(['app/app'], function (app) {
                     if (page) {
                         params.total(page.totalElement);
                         $defer.resolve(page.content);
+                      $scope.infoCommon = page
+                      $scope.infoCommon.all = page.content.length
                         $scope.searchFilterXls = angular.copy(pageParams.searchFilter);//保存当前取值的关键词
                     }
                 }, function (response) {
@@ -228,7 +230,7 @@ define(['app/app'], function (app) {
         $scope.exportXls = function () {
             Quotation.exportXls({}, {}, function (data) {
                 if (data.success){
-                    window.location.href = 'sale/quotation/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
+                    window.location.href = BaseService.getB2bUrl() + '/sale/quotation/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
                 }
             }, function (response) {
                 toaster.pop('error', '数据加载失败', response.data);

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

@@ -121,7 +121,7 @@ define(['app/app'], function (app) {
     $scope.exportXls = function () {
       SaleSend.exportXls({}, {}, function (data) {
         if (data.success){
-          window.location.href = 'sale/notice/sends/xls?_state='+$scope.active+'&keyword='+($scope.keywordXls || '')+'&fromDate='+$scope.fromDateXls+'&endDate='+$scope.endDateXls;
+          window.location.href = BaseService.getB2bUrl() + '/sale/notice/sends/xls?_state='+$scope.active+'&keyword='+($scope.keywordXls || '')+'&fromDate='+$scope.fromDateXls+'&endDate='+$scope.endDateXls;
         }
       }, function (response) {
         toaster.pop('error', '数据加载失败', response.data);

+ 2 - 0
src/main/webapp/resources/js/vendor/controllers/b2b/saleTenderCtrl.js

@@ -211,6 +211,8 @@ define(['app/app'], function (app) {
                         if (page) {
                             params.total(page.totalElement);
                             $defer.resolve(page.content);
+                          $scope.infoCommon = page
+                          $scope.infoCommon.all = page.content.length
                             // $scope.keywordXls = angular.copy($scope.keyword); // 保存当前取值的关键词  做导出时需要的字段
                             angular.forEach(page.content, function (purcTender) {
                                 purcTender.vendorHasBid = false;

+ 2 - 0
src/main/webapp/resources/js/vendor/controllers/b2b/saleTenderQuestionListCtrl.js

@@ -208,6 +208,8 @@ define(['app/app'], function (app) {
                         $scope.loading = false;
                         params.total(page.totalElement);
                         $defer.resolve(page.content);
+                      $scope.infoCommon = page
+                      $scope.infoCommon.all = page.content.length
                         // $scope.keywordXls = angular.copy($scope.keyword); // 保存当前取值的关键词  做导出时需要的字段
                     }, function (response) {
                         $scope.loading = false;

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

@@ -1840,7 +1840,7 @@ define(['app/app'], function (app) {
                 };
             }]);
 //角色管理-编辑角色controller
-    app.register.controller('RoleEditCtrl', ['$scope', '$modalInstance', '$timeout', 'AccountResource', 'AccountRole', 'toaster', 'role', 'BaseService', function ($scope, $modalInstance, $timeout, AccountResource, AccountRole, toaster, role, BaseService) {
+    app.register.controller('RoleEditCtrl', ['$scope', '$modalInstance', '$timeout', 'AccountResource', 'AccountRole', 'toaster', 'role', 'BaseService', 'isB2b', 'B2bAccountResource', 'B2bAccountRole', function ($scope, $modalInstance, $timeout, AccountResource, AccountRole, toaster, role, BaseService, isB2b, B2bAccountResource, B2bAccountRole) {
         BaseService.scrollBackToTop();
         $scope.role = angular.copy(role || {});
         $scope.master = angular.copy($scope.role);
@@ -1875,8 +1875,18 @@ define(['app/app'], function (app) {
                 });
             }
         }
+        var getB2bResource = function () {
+            return isB2b ? {
+                AccountResource: B2bAccountResource,
+                AccountRole: B2bAccountRole
+            } : {
+                AccountResource: AccountResource,
+                AccountRole: AccountRole
+            }
+        }
+        var queryObj = getB2bResource();
 
-        AccountResource.query({}, function (data) {
+        queryObj.AccountResource.query({}, function (data) {
             if (data && data.length > 0) {
                 var rs = [];// 已分配的资源的id
                 if (role && role.resourceItems) {
@@ -2031,7 +2041,7 @@ define(['app/app'], function (app) {
             if (!$scope.master.color || $scope.master.color == '') {
                 $scope.master.color = parseInt(Math.random() * 5) + 1 + '';
             }
-            AccountRole.save($scope.master, function () {
+            queryObj.AccountRole.save($scope.master, function () {
                 toaster.pop('success', '提示', '角色:' + $scope.role.desc + ' 资料' + (isNew ? '添加' : '修改') + '成功');
                 $modalInstance.close(true);
             }, function (response) {
@@ -2040,7 +2050,7 @@ define(['app/app'], function (app) {
         };
         $scope.del = function () {
             if (confirm('确定删除角色(' + $scope.role.desc + ')吗?')) {
-                AccountRole.remove({id: role.id}, function () {
+                queryObj.AccountRole.remove({id: role.id}, function () {
                     toaster.pop('success', '提示', '角色:' + $scope.role.desc + ' 删除成功');
                     $modalInstance.close(true);
                 }, function (response) {

+ 151 - 0
src/main/webapp/resources/view/sso/b2b/addPartnerAndRecord.html

@@ -0,0 +1,151 @@
+<div ng-include src="'static/view/sso/b2b/enMenu.html'"></div>
+<div class="group-container condition">
+    <div class="row" ng-controller="RequestAmountCtrl">
+        <div class="com-tab-menu col-xs-6">
+            <ul class="distance">
+                <li><a ui-sref="baseInfo_newPartner" ng-class="{'active':status=='partner'}">新的合作伙伴<b class="new-dot" ng-if="requestTodo.todo>0" style="top:0;"></b></a></li>
+                <li class="no-after"><a  ui-sref="baseInfo_invitation" ng-class="{'active':status=='invitation'}" >邀请注册记录</a></li>
+                <li><a ui-sref="partner_searchresult" ng-class="{'active':status=='add'}" class="add-btn">+ 添加合作伙伴</a></li>
+                <li><a ng-click="invite()" ng-class="{'active':status=='add'}" class="add-btn">+ 邀请注册</a></li>
+            </ul>
+        </div>
+    </div>
+</div>
+<style>
+    /*企业圈新修改*/
+    #myquest-public{
+        position: relative;
+    }
+    .com-tab-menu{
+        margin-top: 18px;
+    }
+    .com-tab-menu ul{
+        width: 100%;
+        margin: 0 auto;
+    }
+    .com-tab-menu ul li{
+        float: left;
+        height: 30px;
+        list-style: none;
+        position: relative;
+        padding: 0 10px;
+    }
+    .com-tab-menu ul li.no-after:after{
+        display: none;
+    }
+    .com-tab-menu ul li:first-child{
+        padding-left: 0;
+    }
+    .com-tab-menu ul li:after{
+        content: '';
+        position: absolute;
+        width: 1px;
+        height: 16px;
+        top: 8px;
+        right: 0;
+        display: inline-block;
+        background: #999999;
+    }
+    .com-tab-menu ul li:last-child:after{
+        display: none;
+    }
+    .com-tab-menu ul li a{
+        width: 100%;
+        height: 100%;
+        display: inline-block;
+        font-size: 16px;
+        line-height: 30px;
+        padding: 0 10px;
+    }
+    .com-tab-menu ul.distance li{
+        padding: 0px 7px;
+    }
+    .com-tab-menu ul.distance li a{
+        padding: 0;
+    }
+    .com-tab-menu ul li a.add-btn{
+        width: auto;
+        height: 24px;
+        line-height: 22px;
+        border: #3f84f6 1px solid;
+        border-radius: 5px;
+        color: #3f84f6;
+        font-size: 14px;
+        text-align: center;
+        padding: 0 2px;
+        margin-top: 4px;
+    }
+    .com-tab-menu ul li a.add-btn:hover,.com-tab-menu ul li a.add-btn.active{
+        background:#3f84f6;
+        color: #fff;
+        border-bottom: none !important;
+    }
+    .com-tab-menu ul li a.active{
+        border-bottom: #d32526 2px solid!important;
+        color:#d32526 ;
+    }
+    .form-input .form-group-sm .form-control{
+        height: 36px;
+        line-height: 36px;
+        border: #3f84f6 1px solid;
+        border-radius: 0px;
+        font-size: 14px;
+    }
+    .form-input.search-bg .input-group-addon {
+        width: 85px;
+        height: 36px;
+        display: inline-block;
+        background: #3f84f6;
+        font-size: 16px;
+        text-align: center;
+        line-height: 36px;
+        color: #fff;
+        padding: 0;
+        border: none;
+        border-radius: 0;
+        position: absolute;
+        top: 0;
+        right: 0;
+    }
+    .form-input.search-bg{
+        margin-top: 20px;
+        margin-bottom: 15px;
+    }
+    .filter-list{
+        height: 30px;
+    }
+    .filter-list span{
+        color: #999;
+    }
+    .filter-list .input-select{
+        width: 110px;
+    }
+    .text-icon{
+        display: inline-block;
+        padding: 2px 20px;
+        font-size: 14px;
+        transform: rotate(-10deg);
+        border-radius: 5px;
+        white-space: nowrap;
+        text-align: center;
+        color: #e07b7c;
+        border: #e07b7c 1px solid;
+        position: relative;
+        line-height: inherit !important;
+        position: absolute;
+        right: 200px;
+    }
+    .form-input .col-xs-3{
+        font-size: 14px;
+    }
+    .form-input .col-xs-3 p{
+        margin: 0;
+        line-height: 38px;
+    }
+    .form-input .col-xs-3 p em{
+        font-size: 14px;
+        color: #3f84f6;
+        font-style: inherit;
+        margin: 0 2px;
+    }
+</style>

+ 30 - 5
src/main/webapp/resources/view/vendor/b2b/baseInfo/customersInfo.html → src/main/webapp/resources/view/sso/b2b/customersInfo.html

@@ -146,10 +146,32 @@
 		border: solid 1px #5078cb;
 		color: #ffffff !important ;
 	}
+	.ng-table-pager::after {
+		clear: both;
+		content: ' ';
+		zoom: 1;
+		display: block;
+		visibility: hidden;
+	}
+	.ng-table-pager {
+		padding-right: 20px;
+		padding-top: 50px;
+		margin-right: 0 !important;
+	}
+	.text-mns {
+		padding-right: 15px;
+		position: absolute;
+		bottom: 64px;
+		right: 20px;
+		font-size: 12px;
+	}
+	.Boom18 {
+		bottom: 18px;
+	}
 </style>
 <link rel="stylesheet" href="static/css/b2bPublic.css">
 <div style="background: #fff;" id="myquest-public" class="block fr">
-	<div ng-include src="'static/view/vendor/b2b/baseInfo/vendorAndCustomer.html'"></div>
+	<div ng-include src="'static/view/sso/b2b/vendorAndCustomer.html'"></div>
 	<div>
 		<div class="search">
 			<div class="form-group form-group-sm has-feedback" dropdown auto-close="outsideClick" on-toggle="searchAdvance=open">
@@ -174,13 +196,13 @@
                 </div>
             </div>
         </form>-->
-		<div class="pane-body">
+		<div class="pane-body" style="position: relative">
 			<table class="customer-tab table table-bordered table-striped table-hover"
 				   ng-table="customerParams">
 				<tbody ng-repeat="customer in $data" ng-if="customerParams.total() > 0">
 				<tr class="customer-hd">
 					<td colspan="4" class="text-left"><span ng-bind="::customer.myEnterprise.enName"></span></td>
-					<td>
+					<td class="switch">
 							<span class="checkbox" style="width: 100%; margin: 0; height: 26px;">
 								<span class="off" ng-if="customer.custswitch == 1 " ng-click="disableCust(customer.id)" title="已启用"></span>
 								<span class="" ng-if="customer.custswitch == 0 " ng-click="activeCust(customer.id)" title="已禁用"></span>
@@ -222,8 +244,8 @@
 					<td colspan="5">
 						<div id="empty">
 							<div class="left_img">
-								<a href="http://www.ubtob.com/" target="_blank" title="优软云首页"><img src="static/img/empty/uas_empty.png"></a>
-								<a href="#/index" title="B2B商务首页">B2B 商务</a>
+								<a href="http://www.ubtob.com/" target="_blank" title="优软云首页"><img src="static/img/all/empty-cart.png"></a>
+								<a href="http://b2b.usoftchina.com" title="B2B商务首页">B2B 商务</a>
 							</div>
 							<div class="right_link">
 								<p>暂无客户信息</p>
@@ -233,6 +255,9 @@
 				</tr>
 				</tbody>
 			</table>
+			<div ng-if="infoCommon.totalElement > 0" class="text-mns text-right" ng-class="infoCommon.totalElement >= 20 ? '': 'Boom18'">
+				显示&nbsp;{{(infoCommon .page - 1 ) * infoCommon.size + 1}}-{{infoCommon.all >= 20 ? infoCommon.page *  infoCommon.size: (infoCommon.page - 1 ) * infoCommon.size + infoCommon.all}}&nbsp;条,共&nbsp;{{infoCommon.totalElement}}&nbsp;条
+			</div>
 		</div>
 	</div>
 </div>

+ 1 - 1
src/main/webapp/resources/view/vendor/b2b/baseInfo/enMenu.html → src/main/webapp/resources/view/sso/b2b/enMenu.html

@@ -30,7 +30,7 @@
 		<div class="tab-menu">
 			<a type="button" ui-sref="baseInfo_myRequest" ng-class="{'active':status=='servicer' || status=='vendor' || status=='customer' || status=='partner' && active=='done'}" class="tab-btn">我的合作伙伴</a>
 			<!-- <a type="button" ui-sref="baseInfo.myRequest" ng-class="{'active':status=='send'}" class="tab-btn">新的合作伙伴<b class="new-dot" ng-if="requestTodo.todo>0"></b></a> -->
-			<a type="button" ui-sref="baseInfo.newPartner" class="tab-btn" ng-class="{'active':status=='add' || status=='invitation' && status!='send' && status!='add' || status=='partner' && active == 'all'}">新的合作伙伴<b class="new-dot" ng-if="requestTodo.todo>0" ></b></a>
+			<a type="button" ui-sref="baseInfo_newPartner" class="tab-btn" ng-class="{'active':status=='add' || status=='invitation' && status!='send' && status!='add' || status=='partner' && active == 'all'}">新的合作伙伴<b class="new-dot" ng-if="requestTodo.todo>0" ></b></a>
 			<!--<a type="button" ui-sref="baseInfo.partner_searchresult" class="tab-btn" ng-class="{'active':status=='add'}">新的合作伙伴</a>-->
 		</div>
 	</div>

+ 98 - 0
src/main/webapp/resources/view/sso/b2b/home.html

@@ -0,0 +1,98 @@
+<style>
+    .approvalflow-flush .title {
+        height: 40px;
+        line-height: 40px;
+        background: #ecf2fd;
+        color: #333;
+        padding: 0 30px 0 15px;
+        font-size: 14px;
+    }
+    .approvalflow-flush .title a {
+        color: #5078cb;
+        float: right;
+    }
+    .approvalflow-flush .content {
+        background: #fff;
+    }
+    .approvalflow-flush .content li {
+        padding: 27px 100px 27px 40px;
+        border-bottom: 2px solid #f5f5f5;
+        font-size: 14px;
+    }
+    .approvalflow-flush .content li .inco01 {
+        margin-right: 20px;
+    }
+    .approvalflow-flush .content li .line01 {
+        margin-right: 177px;
+        width: 240px;
+    }
+    .approvalflow-flush .content li .line01 p {
+        color: #999;
+        margin-top: 8px;
+    }
+    .approvalflow-flush .content li .last {
+        margin-right: 160px;
+    }
+    .approvalflow-flush .content li .hre {
+        color: #be6732;
+    }
+</style>
+<div class="user_right fr approvalflow-flush">
+    <div class="title"><span>审批流设置</span><a ><i class="fa fa-plus-square fa-fw"></i>新增审批</a></div>
+    <div class="content" >
+        <ul>
+            <li>
+                <div class="inco01 inline-block"><a> <img src="static/img/approvalFlow/6.png"></a></div>
+                <div class="line01 inline-block">请假单<p>适用于请假审批  2017-02-27 18:00 更新</p></div>
+                <div class="inline-block last" ng-if="!vacation">审批人<a class="base-blue" ng-click="NoteSet()">(未设置)</a></div>
+                <div class="inline-block last" ng-if="vacation">审批人<a class="base-blue" ng-click="NoteSet()">(已设置)</a></div>
+                <!--  <span>抄送人(2)</span> -->
+                <div class="inline-block">抄送人<a class="hre">(未设置)</a></div>
+            </li>
+            <li>
+                <div class="inco01 inline-block"><a > <img src="static/img/approvalFlow/5.png"></a></div>
+                <div class="line01 inline-block">加班<p>适用于加班审批  2017-02-27 18:00更新</p></div>
+                <div class="inline-block last" ng-if="workovertime">审批人<a  class="base-blue" ng-click="overTimeSet()">(已设置)</a></div>
+                <div class="inline-block last" ng-if="!workovertime">审批人<a  class="base-blue" ng-click="overTimeSet()">(未设置)</a></div>
+                <div class="inline-block">抄送人<a class="hre">(未设置)</a></div>
+            </li>
+            <li>
+                <div class="inco01 inline-block"><a > <img src="static/img/approvalFlow/4.png"></a></div>
+                <div class="line01 inline-block">出差申请<p>适用于出差审批  2017-02-27 18:00更新</p></div>
+                <div class="inline-block last" ng-if="!feeplease">审批人<a  class="base-blue" ng-click="feePleaseSet()">(未设置)</a></div>
+                <div class="inline-block last" ng-if="feeplease">审批人<a  class="base-blue" ng-click="feePleaseSet()">(已设置)</a></div>
+                <div class="inline-block">抄送人<a class="hre">(未设置)</a></div>
+            </li>
+            <!--  <li>
+                 <div class="inco01"><a > <img src="static/img/approvalFlow/3.png"></a></div>
+                 <div class="content_list">
+                     <span class="line01">报销<br/><font>适用于请假审批  2017-02-27 18:00更新</font></span>
+                     <span>审批人<a  class="clolor01">(已设置)</a></span>
+                     <span>抄送人(2)</span>
+                 </div>
+             </li>-->
+            <li>
+                <div class="inco01 inline-block"><a > <img src="static/img/approvalFlow/6.png"></a></div>
+                <div class="line01 inline-block">补卡申诉<p>适用于补卡申诉  2017-02-27 18:00更新</p></div>
+                <div class="inline-block last" ng-if="!signapp">审批人<a  class="base-blue" ng-click="signAppSet()">(未设置)</a></div>
+                <div class="inline-block last" ng-if="signapp">审批人<a  class="base-blue" ng-click="signAppSet()">(已设置)</a></div>
+                <div class="inline-block">抄送人<a  class="hre">(未设置)</a></div>
+            </li>
+            <li>
+                <div class="inco01 inline-block"><a > <img src="static/img/approvalFlow/1.png"></a></div>
+                <div class="line01 inline-block">工作日报<p>适用于工作日报审批  2017-02-27 18:00更新</p></div>
+                <div class="inline-block last" ng-if="!workdaily">审批人<a  class="base-blue" ng-click="workDailySet()">(未设置)</a></div>
+                <div class="inline-block last" ng-if="workdaily">审批人<a  class="base-blue" ng-click="workDailySet()">(已设置)</a></div>
+                <div class="inline-block">抄送人<a  class="hre">(未设置)</a></div>
+            </li>
+        </ul>
+    </div>
+</div>
+<script src="static/lib/jquery/jquery.min.js"></script>
+<script type="text/ecmascript">
+$(function(){
+	$('.tanchuang .box .off').click(function () {
+		$('.tanchuang,.tanchuang .box').hide();
+	})
+})
+</script>

+ 210 - 0
src/main/webapp/resources/view/sso/b2b/invitation.html

@@ -0,0 +1,210 @@
+<style>
+	.wrap-content table{
+		background-color: #fff;
+	}
+
+	.wrap-content table .table-hover {
+		border: 1px red solid;
+	}
+	#customer-tab .header th,#customer-tab tbody tr.header,#customer-tab tbody tr.header th{
+		height: 38px;
+		text-align: center;
+		padding: 0;
+		line-height: 38px;
+		border-bottom-width: 0;
+		background: #f5f5f5;
+		border: none;
+		font-size: 12px;
+	}
+	#customer-tab tbody tr.header:hover{
+		border: none;
+	}
+	.pane-header{
+		/*border-radius: 0px 0 0px 0px;
+        box-shadow: 0 0 3px #ccc;
+        background: linear-gradient(to top, #e7e7e7 0%,#ffffff 100%);*/
+		height: 40px;
+		font-size: 14px;
+		line-height: 40px;}
+	#customer-tab .pane-header th{
+		border-bottom: none;
+	}
+	.table>tbody+tbody{
+		border-top: none;
+	}
+	#customer-tab tbody td{
+		border: none;
+	}
+	#customer-tab .pane-body{
+		padding: 0;
+	}
+	#customer-tab tbody tr{
+		background: none;
+		height: 100px;
+		border-top: #e8e8e8 1px solid;
+		line-height: 100px;
+	}
+	#customer-tab tbody tr td{
+		text-align: center;
+		line-height: 20px;
+		vertical-align: inherit;
+		font-size: 14px;
+	}
+	/*#customer-tab tbody tr:hover{
+        border: #d32526 2px solid;
+    }*/
+	#customer-tab .com_title{
+		margin-bottom: 10px;
+	}
+	#customer-tab tbody tr td a{
+		color: #3578ba;
+	}
+	#customer-tab tbody tr td a:hover{
+		color: #d32526;
+	}
+	#customer-tab .content{
+		width: 100%;
+	}
+	#myquest-public .group-container{
+		width: 100%;
+	}
+	#myquest-public .group-container .btn-group {
+		width: 160px;
+		border: none;
+		height: 45px;
+	}
+	#myquest-public .group-container .btn-group .btn {
+		border: none;
+		font-size: 16px;
+	}
+	#myquest-public  .group-container .btn-group .btn em {
+		color: #d32526;
+		font-style: inherit;
+	}
+	#myquest-public .group-container .btn-group .btn:hover {
+		background: #fff;
+		color: #d32526;
+	}
+	#myquest-public .group-container .btn-group .btn-info {
+		color: #d32526;
+		background: #fff;
+		border: none;
+	}
+	#myquest-public .margin-bot{
+		margin-bottom: 10px;
+	}
+	#myquest-public .group-container{
+		/*height: 45px;*/
+		padding: 0;
+		background: #fff;
+	}
+	#myquest-public #public .search-bg .input-group-addon{
+		width: 85px;
+	}
+	#myquest-public  .all-btn a{
+		margin-left: 0;
+	}
+	.order-table .company-list tr .first{
+		border-bottom: #e8e8e8 1px solid;
+	}
+	#customer-tab tbody tr.height16{
+		height: 16px;
+		border-left: #f5f5f5 2px solid;
+		border-right: #f5f5f5 2px solid;
+	}
+	#customer-tab tbody tr.height16 td{
+		background: #f5f5f5;
+	}
+	#myquest-public .customer-tab tbody{
+		border-bottom: none;
+	}
+	#myquest-public .customer-tab thead{
+		display:none;
+	}
+</style>
+<div class="fr" style="width:1026px;margin:0 auto; background: #fff;" id="myquest-public">
+	<div ng-include src="'static/view/sso/b2b/addPartnerAndRecord.html'"></div>
+	<link rel="stylesheet" href="static/css/B2bPublic.css">
+	<div class="loading in" ng-class="{'in': loading}">
+		<!--<i></i>-->
+		<div class="wrap">
+			<div class="outer"></div>
+		</div>
+	</div>
+	<div id="public" style="background: #f5f5f5;">
+		<div style="margin-top: -55px;">
+			<div class="col-xs-6" style="float: left;"></div>
+			<div class="form-input col-xs-6 myRequest search-bg">
+				<div class="row">
+					<div class="col-xs-9">
+						<div class="search">
+							<div class="form-group form-group-sm has-feedback" dropdown auto-close="outsideClick" on-toggle="searchAdvance=open">
+								<input type="search" class="form-control input-sm" ng-model="keyword" ng-search="onSearch(keyword)" placeholder="输入企业名称、联系人、邀请人进行搜索" />
+								<a class="btn input-group-addon" ng-click="onSearch(keyword)">搜索</a>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-3" style="padding-left: 0;">
+						<p>搜索到<em>{{tableParams.total()}}</em>条</p>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="filter-list col-xs-12" style="margin-top: 10px;">
+		<div class="input-select col-xs-2" style="margin-left: 13px;">
+			<input name="self" type="radio" ng-click="setActive('invitation')" ng-checked="active == 'invitation'"/>
+			<span class="f14">只看自己</span>
+		</div>
+		<div class="input-select col-xs-2">
+			<input  name="all" type="radio" ng-click="setActive('invitationTeam')" ng-checked="active == 'invitationTeam'"/>
+			<span class="f14">所有人</span>
+		</div>
+	</div>
+	<div class="wrap-content" id="customer-tab">
+		<div class="content">
+			<!--供应商列表-->
+			<table class="table  table-hover customer-tab"
+				   ng-table="tableParams">
+				<tbody ng-repeat="record in $data">
+				<tr class="customer-hd">
+					<td colspan="3" class="text-left"><span ng-bind="::record.vendname"></span></td>
+					<td><div style="font-size: 14px;" ng-show="active == 'invitationTeam'" ><span class="text-muted"style="font-size: 14px;" >邀请人:</span>{{::record.user.userName}}</div></td>
+					<td class="text-left"><span ng-bind="::record.date| date: 'yyyy-MM-dd'" class="text-muted" style="margin-left: 0;"></span></td>
+				</tr>
+				<tr class="customer-bd">
+					<td  class="first" colspan="4">
+						<div class="col-md-2"><span class="text-muted">联系人:</span><span ng-bind="::record.vendusername"></span></div>
+						<div ng-if="::record.vendusertel != null"  class="col-md-2"><span class="text-muted">电话:</span><span ng-bind="::record.vendusertel"></span></div>
+						<div ng-if="::record.venduseremail != null"  class="col-md-3"><span class="text-muted">邮箱:</span><span ng-bind="::record.venduseremail"></span></div>
+						<div ng-if="record.active == 1 && record.venduu != null"  class="col-md-2"><span class="text-muted">企业UU:</span><span ng-bind="::record.venduu"></span></div>
+						<div class="text-icon" ng-if="record.active == 1">已注册</div>
+						<div class="text-icon" ng-if="record.active == 0" style="border: #3f84f6 1px solid; color: #3f84f6;">未注册</div>
+						<div ng-if="record.active == 1">
+							物料: <span ng-bind="record.productNum"></span>
+						</div>
+					</td>
+					<td width="120" class="text-center all-btn">
+						<a ng-click="reInvite(record.id)" class="btn" ng-if="record.active == 0" style="padding: 0; background: #3f84f6; color: #fff;">再次邀请</a>
+					</td>
+				</tr>
+				</tbody>
+				<tbody ng-if="tableParams.total() == 0" class="no-record-tab">
+				<tr>
+					<td colspan="5">
+						<div id="empty">
+							<div class="left_img">
+								<a href="http://www.ubtob.com/" target="_blank" title="优软云首页"><img src="static/img/all/empty-cart.png"></a>
+								<a href="http://b2b.usoftchina.com" title="B2B商务首页">B2B 商务</a>
+							</div>
+							<div class="right_link">
+								<p>暂无邀请记录</p>
+							</div>
+						</div>
+					</td>
+				</tr>
+				</tbody>
+			</table>
+		</div>
+	</div>
+</div>

+ 127 - 0
src/main/webapp/resources/view/sso/b2b/log.html

@@ -0,0 +1,127 @@
+<style>
+	.title-div .pull-right{
+		float: right;
+		margin-right: 15px;
+		font-weight: normal;
+	}
+	.title-div .pull-right a{
+		font-weight: normal;
+		font-size: 14px;
+		color: #5078cb;
+	}
+	#order-detail-list .table-default .header th{
+		color: #323232;
+		font-weight: bold;
+		border-bottom: #e8e8e8 1px solid;
+	}
+	#order-detail-list .table>tbody+tbody{
+		border-top: none;
+	}
+	#order-detail-list .table-default td{
+		border-bottom: #e8e8e8 1px solid;
+		border-top: none;
+	}
+	#order-detail-list .table-default td i{
+		color: #5078cb;
+	}
+	#order-detail-list tbody tr{
+		height: 60px;
+	}
+	#order-detail-list{
+		padding-bottom: 10px;
+	}
+	.pane{
+		box-shadow: none;
+		margin-bottom: 0;
+		border-bottom: 1px solid #e8e8e8;
+		background: #fff;
+	}
+	.pane .pane-body{
+		padding: 0;
+	}
+	.operate-log .title-div {
+		height: 40px;
+		line-height: 40px;
+		color: #5078cb;
+		background: #ecf2fd;
+		padding: 0 15px;
+	}
+	.operate-log .title-div .bold {
+		font-weight: bold;
+	}
+	.operate-log .b2b-modal-table {
+		width: 1000px;
+		margin: 14px auto;
+	}
+	.operate-log .b2b-modal-table > tbody > tr > td {
+		line-height: inherit;
+	}
+</style>
+<div class="user_right fr operate-log">
+	<div class="pane base-info">
+		<div class="title-div">
+			<span class="f14 bold">数据传输日志</span>
+			<div class="pull-right">
+				<a ng-click="exportXls()" target="_self" class="text-simple"><i class="fa fa-file-text fa-fw"></i>导出</a>
+			</div>
+		</div>
+		<div class="pane-body clearfix" id="order-detail-list" style="width: 100%;">
+			<table class="table b2b-modal-table"
+				   ng-table="erpParams">
+				<thead>
+				<tr class="header">
+					<th width="130">时间</th>
+					<th width="130">客户端IP</th>
+					<th width="80">操作人员</th>
+					<th width="120">请求资源</th>
+					<th>请求动作</th>
+					<th width="80">数据包</th>
+				</tr>
+				</thead>
+				<tbody>
+				<tr ng-repeat="erp in $data">
+					<td class="text-center" ng-bind="::erp.time | date:'MM-dd HH:mm:ss'"></td>
+					<td class="text-center" ng-bind="::erp.ip"></td>
+					<td class="text-center" ng-bind="::erp.user.userName"></td>
+					<td class="text-center" ng-bind="::erp.title"></td>
+					<td ng-bind="::erp.message"></td>
+					<td class="text-center" ng-bind="::erp.total"></td>
+				</tr>
+				</tbody>
+			</table>
+		</div>
+	</div>
+	<div class="pane base-info">
+		<div class="title-div">
+			<span class="f14 bold">平台使用日志</span>
+			<div class="pull-right">
+				<a href="log/usage/xls" target="_self" class="text-simple"><i class="fa fa-file-text fa-fw"></i>导出</a>
+			</div>
+		</div>
+		<div class="pane-body clearfix" id="order-detail-list" style="width: 100%;">
+			<table class="table b2b-modal-table"
+				   ng-table="usageParams">
+				<thead>
+				<tr class="header">
+					<th width="130">时间</th>
+					<th width="130">客户端IP</th>
+					<th width="80">操作人员</th>
+					<th width="120">请求资源</th>
+					<th>请求动作</th>
+					<th>备注</th>
+				</tr>
+				</thead>
+				<tbody>
+				<tr ng-repeat="usage in $data">
+					<td class="text-center" ng-bind="::usage.time | date:'MM-dd HH:mm:ss'"></td>
+					<td class="text-center" ng-bind="::usage.ip"></td>
+					<td class="text-center" ng-bind="::usage.user.userName"></td>
+					<td class="text-center" ng-bind="::usage.title"></td>
+					<td ng-bind="::usage.message"></td>
+					<td ng-bind="::usage.detail"></td>
+				</tr>
+				</tbody>
+			</table>
+		</div>
+	</div>
+</div>

+ 89 - 0
src/main/webapp/resources/view/sso/b2b/modal/QQshare_modal.html

@@ -0,0 +1,89 @@
+<style>
+  .modal-dialog {
+      position: absolute;
+      right: 0;
+      bottom: 0;
+      top: 50%;
+      margin-top: -128px;
+      left: 50%;
+      margin-left: -300px;
+  }
+  .modal-dialog .modal-content {
+      margin: 0 auto;
+      width: 215px;
+      height: 215px;
+  }
+  .share{
+      padding: 0 5px 5px;
+      width: 215px;
+      height: 215px;
+      background: #e8e8e8;
+      border-radius: 5px;
+      border: 1px solid #a9a9a9;
+  }
+    .modal-header{
+        padding-left: 5px;
+        width: 100%;
+        height: 28px;
+    }
+    .modal-header span{
+        float: left;
+        line-height: 12px;
+        font-size: 12px;
+        color: #000;
+    }
+  .modal-header a{
+      display: inline-block;
+      float: right;
+      width: 15px;
+      height: 15px;
+      text-align: center;
+      font-size: 12px;
+      color: #000;
+      border-radius: 3px;
+      border: 1px solid #000;
+  }
+  .modal-body{
+      margin: 0 auto;
+      padding-top: 35px;
+      width: 100%;
+      height: 180px;
+      text-align: center;
+      background: #f3f3f3;
+      border-top: 1px solid #ccc;
+  }
+  .modal-body .content{
+      margin: 0 auto;
+      width: 100px;
+      height: 100px;
+      text-align: center;
+      border: 1px solid transparent;
+      border-radius: 50%;
+  }
+  .modal-body .content:hover{
+      border: 1px solid #ccc;
+      border-radius: 50%;
+  }
+  .modal-body .content img{
+      margin-top: 20px;
+      width: 40px;
+      height: 45px;
+  }
+  .modal-body .content span{
+      font-size: 14px;
+      color: #000;
+  }
+</style>
+<div class="share">
+    <div class="modal-header">
+        <span>分享邀请链接</span>
+        <a class="close" ng-click="close()">&times;</a>
+    </div>
+    <div class="modal-body">
+        <div class="content">
+            <img src="static/img/icon/qq.png" ng-click="QQshare()">
+            <br>
+            <span>QQ</span>
+        </div>
+    </div>
+</div>

+ 45 - 0
src/main/webapp/resources/view/sso/b2b/modal/add_vendor.html

@@ -0,0 +1,45 @@
+<style>
+	.modal-content {
+		max-height: 500px;
+		overflow-y: auto;
+	}
+</style>
+<div class="b2b-com-modal b2b-operate-modal">
+	<p class="title">
+		分配企业权限 <i class="fa fa-close" ng-click="close(false)"></i>
+	</p>
+	<table width="100%" class="table b2b-modal-table">
+		<thead>
+		<th width="100px;">客户名称</th>
+		<th width="80px;">客户UU</th>
+		<th width="40px;" style="text-align: center">
+			<label class="com-check-box">
+				<input type="checkbox" id="All" name="checkbox" ng-model="checkboxes.checked" ng-click="checkAll()">
+				<label for="All"></label>
+			</label>
+		</th>
+		</thead>
+		<tbody>
+		<div style="overflow-y:scroll; width:100%;max-height:500px">
+			<tr ng-repeat="vendor in enters track by $index">
+				<td width="100px;">{{vendor.myEnterprise.enName}}</td>
+				<td width="80px;">{{vendor.myEnterprise.uu}}</td>
+				<td width="40px;" style="text-align: center">
+					<label class="com-check-box">
+						<input id="{{$index}}" ng-model="vendor.distribute" name="checkbox" ng-click="checkOne(vendor)" type="checkbox">
+						<label for="{{$index}}"></label>
+					</label>
+				</td>
+			</tr>
+			<div ng-if="enters.length == 0" class="warningLg">
+				此账号客户已全部被分配,请返回!
+			</div>
+		</div>
+		<tbody>
+	</table>
+	<div class="operate text-center">
+		<p class="text-left" style="color: #999;padding-left: 20px"><i class="must">*</i>点击企业选中或取消</p>
+		<button class="b2b-btn b2b-btn-submit" ng-click="close(true)">确认</button>
+		<button class="b2b-btn b2b-btn-cancel" ng-click="close(false)" type="button">取消</button>
+	</div>
+</div>

+ 2307 - 0
src/main/webapp/resources/view/sso/b2b/modal/enterpirseInfo.html

@@ -0,0 +1,2307 @@
+<style>
+.bomb-box .box01 {
+	height: 360px !important;
+}
+.modal-content{
+	border: none;
+}
+.per-data ul li input{
+	width: 340px !important;
+}
+</style>
+<style>
+	/*产品资料-价格*/
+	input:focus, select:focus {
+		border: #3578ba 1px solid !important;
+		order-color: #66afe9;
+		outline: 0;
+		-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
+		box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6)
+	}
+
+	.com_title {
+		width: 100%;
+		margin: 0px auto;
+		height: 40px;
+		line-height: 40px;
+		font-size: 14px;
+		color: #323232;
+		background: #f5f5f5;
+	}
+
+	.com_title font {
+		color: #3f84f6;
+	}
+
+	.search {
+		position: relative;
+	}
+
+	.search input {
+		width: 300px;
+		padding-left: 10px;
+		height: 36px;
+		background: #fff;
+		float: left;
+		vertical-align: middle;
+		border: #3578ba 1px solid;
+		font-size: 14px;
+		text-align: center;
+		padding-right: 85px;
+		line-height: 36px;
+	}
+
+	.search a.seek {
+		vertical-align: middle;
+		display: inline-block;
+		line-height: 36px;
+		text-align: center;
+		height: 36px;
+		width: 85px;
+		border-left: 0;
+		background: #3578ba;
+		color: #fff;
+		text-align: center;
+		font-size: 16px;
+		float: right;
+		border: #3578ba 1px solid;
+		position: absolute;
+		right: 0;
+	}
+
+	.search a.seek:hover {
+		background: #1f6199;
+		color: #fff;
+	}
+
+	.public-01 {
+		height: 44px;
+		margin-bottom: 10px;
+		margin-top: 10px;
+	}
+
+	.public-01 ul {
+		width: 87%;
+		margin: 0 auto;
+		height: 44px;
+		line-height: 44px;
+		background: #fff;
+		border: #e8e8e8 1px solid;
+	}
+
+	.public-01 ul li {
+		width: 100px;
+		height: 44px;
+		text-align: center;
+		float: left;
+		margin-left: 10px;
+	}
+
+	.public-01 ul li a {
+		font-size: 16px;
+		width: 100px;
+		height: 44px;
+		display: inline-block;
+		color: #323232;
+	}
+
+	.public-01 ul li.active a {
+		color: #d82128;
+		border-bottom: 3px #d82128 solid;
+	}
+
+	.public-01 ul li:hover a {
+		color: #d82128;
+		border-bottom: 3px #d82128 solid;
+	}
+
+	.public-01 ul li a em {
+		color: #d2272d;
+		font-size: 16px;
+	}
+
+	.public-01 ul li.active a {
+		color: #d82128;
+	}
+
+	.public-01-btn, .public-01-btn a {
+		width: 104px;
+		height: 44px;
+		color: #3f84f6;
+		text-align: center;
+		background: #fff;
+		display: inline-block;
+		font-size: 14px;
+		line-height: 44px;
+		border: #e8e8e8 1px solid;
+	}
+
+	.public-01-btn a:hover {
+		border: #3578ba 1px solid;
+	}
+
+	.public-01-btn a img {
+		vertical-align: middle;
+		margin-right: 5px;
+	}
+
+	.pro-price {
+		margin-bottom: 20px !important;
+	}
+
+	.pro-price, .pro-price dl {
+		width: 100%;
+		margin: 0 auto;
+		background: #fff;
+		padding-top: 6px;
+	}
+
+	.pro-price dl dt {
+		width: 100%;
+		margin: 0 auto;
+		height: 40px;
+		line-height: 40px;
+	}
+
+	.pro-price dl span {
+		width: 18.75%;
+		display: inline-block;
+		float: left;
+		font-size: 14px;
+		text-align: center;
+	}
+
+	.pro-price dl span.wid01 {
+		width: 25%;
+	}
+
+	.pro-price dl dt span {
+		line-height: 40px;
+	}
+
+	.pro-price dl dd span {
+		line-height: 110px;
+		height: 110px;
+	}
+
+	.pro-price dl dd span p {
+		line-height: 22px;
+		text-align: left;
+		font-size: 14px;
+		width: 80%;
+		margin: 0 auto;
+	}
+
+	.pro-price dl dd {
+		border-bottom: #e3e3e3 1px dotted;
+	}
+
+	.pro-price dl dd:hover {
+		border: #d32526 1px solid;
+	}
+
+	.pro-price dl dd {
+		height: 110px;
+		overflow: hidden;
+	}
+
+	.pro-price dl .bottom01 {
+		border-bottom: #3578ba 1px dotted;
+	}
+
+	.pro-price dl dd span.style01 {
+		padding-top: 10px;
+	}
+
+	.pro-price dl dd span em {
+		width: 100%;
+		display: inline-block;
+		font-size: 14px;
+	}
+
+	.pro-price dl dd span.style02 {
+		line-height: 22px;
+		margin-top: 30px;
+	}
+
+	.pro-price dl dd span em i {
+		margin-left: 10px;
+	}
+
+	/*B2B商务账号设置-个人信息*/
+	/*弹框*/
+	.bomb-box {
+		width: 100%;
+		height: 100%;
+		position: fixed;
+		z-index: 11111;
+		background: rgba(0, 0, 0, 0.2);
+		top: 0;
+		left: 0;
+	}
+
+	.bomb-box .box {
+		position: absolute;
+		left: 0;
+		right: 0;
+		top: 0;
+		bottom: 0;
+		margin: auto;
+		box-shadow: 0 0 3px #888;
+	}
+
+	.bomb-box .box01 {
+		margin-top: 80px;
+		width: 580px;
+		height: 406px;
+		border-radius: 5px;
+		background: #fff;
+	}
+
+	.bomb-box .box i.off {
+		width: 20px;
+		height: 20px;
+		display: inline-block;
+		position: absolute;
+		right: 8px;
+		top: 8px;
+		text-align: center;
+		cursor: pointer;
+	}
+
+	.bomb-box .box p {
+		height: 40px;
+		line-height: 40px;
+		font-size: 14px;
+		width: 100%;
+		margin: 0 auto;
+		border-bottom: #e8e8e8 1px solid;
+		padding-left: 20px;
+	}
+	.bomb-box .box-bottom{
+		padding: 0 5px 5px;
+		width: 465px;
+		height: 450px!important;
+		background: #e8e8e8;
+	}
+	.bomb-box .box-bottom .box-header{
+		padding-left: 5px;
+		width: 100%;
+		height: 26px;
+	}
+	.bomb-box .box-bottom .box-header p{
+		float: left;
+		padding-left: 10px;
+		height: 26px;
+		line-height: 28px;
+		width: 100px;
+		font-size: 14px;
+		color: #000;
+	}
+	.bomb-box .box-bottom .box-header a{
+		margin-top: 6px;
+		display: inline-block;
+		float: right;
+		width: 15px;
+		height: 15px;
+		text-align: center;
+		font-size: 14px;
+		color: #000;
+		border-radius: 3px;
+		border: 1px solid #000;
+	}
+	.bomb-box .box-bottom .per-data{
+		margin: 0 auto;
+		width: 455px;
+		height: 418px;
+		text-align: center;
+		background: #f3f3f3;
+		border-top: 1px solid #ccc;
+	}
+	.bomb-box .box-bottom .per-data ul li{
+		margin-bottom: 15px;
+		height: 26PX;
+		line-height: 26px;
+	}
+	.bomb-box .box-bottom .per-data ul li:first-child, .bomb-box .box-bottom .per-data ul li:last-child{
+		margin-top: 25px;
+	}
+	.bomb-box .box-bottom .per-data ul li em{
+		width: 80px;
+		text-align: right;
+	}
+	.bomb-box .box-bottom .per-data ul li input{
+		padding-left: 10px;
+		width: 300px;
+		height: 26px;
+		border: 1px solid #a0a0a0;
+	}
+	.bomb-box .box-bottom .per-data ul li a.mod-psd{
+		float: none;
+	}
+
+	.per-data {
+		width: 90%;
+		margin: 0 auto;
+	}
+
+	.per-data ul, .per-data ul li {
+		width: 100%;
+		margin: 0 auto;
+	}
+
+	.per-data ul li {
+		height: 34px;
+		line-height: 34px;
+		margin-top: 15px;
+	}
+
+	.per-data ul li em {
+		width: 60px;
+		font-size: 14px;
+		float: left;
+	}
+	.per-data ul li.text-info{
+		font-size: 13px;
+		color: #787878 !important;
+	}
+	.per-data ul li.text-info b{
+		font-size: 13px;
+		color: #D08200;
+	}
+	.per-data ul li input, .per-data ul li select {
+		width: 236px;
+		height: 34px;
+		border: #e8e8e8 1px solid;
+		font-size: 14px;
+		padding-left: 10px;
+	}
+
+	.per-data ul li select {
+		background: url("../img/purc/select.png") no-repeat right;
+		-webkit-appearance: none;
+		appearance: none;
+		-o-appearance: none;
+		-moz-appearance: none;
+		-ms-appearance: none;
+	}
+
+	.per-data ul li select option {
+		line-height: 30px;
+	}
+
+	.per-data ul li span {
+		color: #959595;
+		line-height: 18px;
+		float: right;
+		width: 215px;
+		display: inline-block;
+	}
+
+	.per-data ul li.per-btn {
+		margin-top: 30px;
+	}
+	.per-data ul li.perBtn{
+		margin-top: 45px;
+	}
+	.per-data ul li.perBtn .save{
+		margin-left: 150px;
+	}
+	.per-data ul li a {
+		width: 94px;
+		height: 36px;
+		display: inline-block;
+		font-size: 14px;
+		color: #fff;
+		text-align: center;
+		line-height: 34px;
+		float: left;
+	}
+
+	.per-data ul li button {
+		width: 94px;
+		height: 36px;
+		display: inline-block;
+		font-size: 14px;
+		color: #fff;
+		text-align: center;
+		line-height: 34px;
+		float: left;
+	}
+
+	.per-data ul li a.save {
+		margin-left: 60px;
+		background: #3f84f6;
+	}
+
+	.per-data ul li button.save {
+		margin-left: 60px;
+		background: #3f84f6;
+		border: 1px;
+	}
+
+	.per-data ul li a.mod-psd {
+		background: #8dc7f9;
+		margin-left: 30px;
+	}
+
+	.per-data ul li a:hover {
+		background: #3578ba;
+	}
+
+	.per-data ul li button:hover {
+		background: #3578ba;
+	}
+	.per ul{
+		text-align: center;
+	}
+	.per ul li.register{
+		margin-top: 10px;
+		height: 20px;
+		line-height: 20px;
+		font-size: 14px;
+	}
+	.per ul li.register span{
+		float: none;
+		margin-left: 5px;
+		width: 65px;
+		font-size: 14px;
+		color: #3578ba;
+	}
+	.per ul li em{
+		margin-left: 60px;
+		text-align: left;
+	}
+	/*产品资料-价格-新增*/
+	.com_head a {
+		color: #fff;
+		float: right;
+		margin-right: 40px;
+		font-size: 14px;
+	}
+
+	.com_head a i {
+		margin-left: 5px;
+		line-height: 40px;
+	}
+
+	.com_head a:hover {
+		color: #d2272d;
+	}
+
+	.pro-add-data {
+		width: 100%;
+		margin: 0 auto;
+		background: #fff;
+	}
+
+	.pro-add-data dl {
+		width: 95%;
+		margin: 0 auto;
+	}
+
+	.pro-add-data dl dd {
+		width: 100%;
+		margin: 0 auto;
+		height: 34px;
+		line-height: 34px;
+		font-size: 14px;
+		margin-top: 10px;
+	}
+
+	.pro-add-data dl dd div.fl {
+		width: 100px;
+	}
+
+	.pro-add-data dl dd div.fr {
+		width: 750px;
+	}
+
+	.pro-add-data dl dd div.fr input {
+		width: 750px;
+		border-bottom: #5d5d5d 1px solid !important;
+		height: 34px;
+		line-height: 34px;
+		border: none;
+		position: relative;
+		font-size: 14px;
+		/*top: -6px;*/
+		color: #666;
+	}
+
+	.pro-add-data dl dd div.fr input:focus {
+		/*box-shadow: none;
+        border: none !important;*/
+		border: #3578ba 1px solid !important;
+	}
+
+	.com_title01 {
+		height: 50px;
+		line-height: 50x;
+		width: 100%;
+		margin: 0 auto;
+		border-bottom: #3578ba 1px dotted;
+		border-top: #e8e8e8 1px solid;
+		margin-top: 10px;
+	}
+
+	.com_title01 span {
+		margin-left: 20px;
+		font-size: 14px;
+		line-height: 50px;
+		color: #555;
+		font-weight: bold;
+	}
+
+	.pro-info, .pro-info dl {
+		width: 99%;
+		margin: 0 auto;
+	}
+
+	.pro-info dl dd, .pro-info dl dt {
+		width: 99%;
+		margin: 0 auto;
+		height: 50px;
+		border-bottom: #e8e8e8 1px dotted;
+	}
+
+	.pro-info dl span {
+		width: 8.5%;
+		font-size: 14px;
+		float: left;
+		display: inline-block;
+		height: 50px;
+		line-height: 50px;
+		text-align: center;
+	}
+
+	.pro-info dl span.wid01 {
+		width: 4%;
+	}
+
+	.pro-info dl span.wid02 {
+		width: 12%;
+	}
+
+	.pro-info dl span.wid01 a {
+		width: 20px;
+		height: 20px;
+		display: inline-block;
+		line-height: 18px;
+		background: #c2c2c2;
+		text-align: center;
+		border-radius: 100%;
+	}
+
+	.pro-info dl span.wid01 a i {
+		color: #fff;
+	}
+
+	.pro-info dl span.wid01 a:hover {
+		background: #d2272d;
+	}
+
+	.pro-info dl span.add-wl {
+		text-align: left;
+		width: 100%;
+	}
+
+	.pro-info .save {
+		width: 100%;
+		height: 36px;
+		margin: 5px 0 20px 0;
+	}
+
+	.pro-info .save a {
+		width: 94px;
+		height: 36px;
+		display: inline-block;
+		background: #3578ba;
+		text-align: center;
+		color: #fff;
+		font-size: 14px;
+		float: right;
+		line-height: 36px;
+		margin-right: 40px;
+	}
+
+	.pro-info .save a:hover {
+		background: #1f4fb2;
+	}
+
+	.pro-add-data02 {
+		width: 100%;
+		margin: 0 auto;
+		background: #fff;
+		margin-top: 20px;
+	}
+
+	.pro-search {
+		width: 100%;
+		height: 90px;
+		margin: 0 auto;
+		/*border-bottom: #d0cfcf 1px solid;*/
+		overflow: hidden;
+	}
+
+	.pro-search .search {
+		margin-top: 30px;
+		margin-right: 20px;
+	}
+
+	.pro-search .search input {
+		width: 348px;
+	}
+
+	.pro-add-data02 .pro-info dl span {
+		width: 12.5%;
+	}
+
+	/*分页*/
+	.page {
+		width: 100%;
+		margin: 0 auto;
+		height: 60px;
+		line-height: 60px;
+	}
+
+	.page ul {
+		margin-left: 20px;
+	}
+
+	.page ul li {
+		float: left;
+		font-size: 14px;
+		color: #999;
+		margin: 0 5px;
+	}
+
+	.page ul li a {
+		width: 50px;
+		display: inline-block;
+		font-size: 14px;
+		color: #999;
+	}
+
+	.page ul li input {
+		width: 24px;
+		height: 24px;
+		border: #3578ba 1px solid;
+		text-align: center;
+		color: #3578ba;
+		margin: 0 10px;
+	}
+
+	.page ul li a:hover {
+		color: #3578ba;
+	}
+
+	/*产品资料批量导入 1*/
+	.bomb-box .box02 {
+		width: 654px;
+		height: 264px;
+		border-radius: 5px;
+		background: #fff;
+	}
+
+	.bomb-box .box02 .many-file {
+		width: 90%;
+		margin: 0 auto;
+		font-size: 14px;
+	}
+
+	.bomb-box .box02 .many-file .file {
+		margin-top: 25px;
+		position: relative;
+	}
+
+	.bomb-box .box02 .many-file span {
+		margin-left: 10px;
+	}
+
+	.bomb-box .box02 .many-file span, .bomb-box .box02 .many-file .file input[type="text"] {
+		width: 506px;
+		height: 34px;
+		display: inline-block;
+		border: #e8e8e8 1px solid;
+		position: relative;
+	}
+
+	.bomb-box .box02 .many-file .file input[type="text"] {
+		padding-left: 30px;
+		font-size: 14px;
+		color: #999;
+	}
+
+	.bomb-box .box02 .many-file span {
+		border: none;
+	}
+
+	.bomb-box .box02 .many-file .file i {
+		position: absolute;
+		top: 10px;
+		z-index: 10;
+		color: #959595;
+		font-size: 16px;
+		left: 10px;
+	}
+
+	.bomb-box .box02 .many-file-btn {
+		width: 235px;
+		margin: 0px auto;
+		margin-top: 20px;
+	}
+
+	.bomb-box .box02 .many-file-btn a {
+		width: 94px;
+		height: 36px;
+		line-height: 36px;
+		font-size: 14px;
+		display: inline-block;
+		text-align: center;
+	}
+
+	.bomb-box .box02 .many-file-btn a.btn01 {
+		background: #3f84f6;
+		color: #fff;
+	}
+
+	.bomb-box .box02 .many-file-btn .btn01 a {
+		color: #fff;
+	}
+
+	.bomb-box .box02 .many-file-btn a.btn02 {
+		border: #3f84f6 1px solid;
+		color: #3f84f6;
+		margin-left: 45px;
+	}
+
+	.bomb-box .box02 .many-file-btn a:hover {
+		background: #135c9a;
+		color: #fff;
+	}
+
+	.many-file-text {
+		width: 100%;
+		margin: 0 auto;
+		margin-top: 30px;
+	}
+
+	.many-file-text em {
+		width: 100%;
+		margin: 0 auto;
+		display: inline-block;
+		line-height: 30px;
+	}
+
+	.bomb-box .box02 .file01 {
+		width: 506px;
+		height: 34px;
+		filter: alpha(opacity=0);
+		-moz-opacity: 0;
+		opacity: 0;
+		position: absolute;
+		left: 0;
+		top: 8px;
+	}
+
+	/*产品资料批量导入 后*/
+	.bomb-box .box03 {
+		width: 648px;
+		min-height: 300px;
+		border-radius: 5px;
+		background: #fff;
+		margin-top: 15%;
+		bottom: auto;
+		padding-bottom: 18px;
+	}
+
+	.bomb-box .box03 .many-tile {
+		width: 100%;
+		height: 60px;
+		line-height: 60px;
+		font-size: 14px;
+	}
+
+	.bomb-box .box03 .many-tile i {
+		background: #04be02;
+		color: #fff;
+		font-size: 14px;
+		border-radius: 100%;
+		width: 24px;
+		height: 24px;
+		line-height: 24px;
+		margin-left: 60px;
+		text-align: center;
+		margin-right: 10px;
+	}
+
+	.bomb-box .box03 .fail-data {
+		width: 90%;
+		margin: 0 auto;
+	}
+
+	.bomb-box .box03 .fail-data p {
+		width: 100%;
+		margin: 0 auto;
+		font-size: 14px;
+		color: #959595;
+		height: 30px;
+		line-height: 30px;
+		border-bottom: none !important;
+		padding-left: 0
+	}
+
+	.bomb-box .box03 .fail-data dl {
+		width: 100%;
+		margin: 0 auto;
+	}
+
+	.bomb-box .box03 .fail-data dl span {
+		font-size: 14px;
+		width: 18.333%;
+		float: left;
+		text-align: center;
+		border: #e8e8e8 1px solid;
+		border-top: none;
+		border-right: none;
+	}
+
+	.bomb-box .box03 .fail-data dl dt, .bomb-box .box03 .fail-data dl dd {
+		width: 100%;
+		margin: 0 auto;
+		display: flex !important;
+		border-top: #e8e8e8 1px solid;
+		border-right: #e8e8e8 1px solid;
+	}
+
+	.bomb-box .box03 .fail-data dl span.wid01 {
+		width: 15%;
+	}
+
+	.bomb-box .box03 .fail-data dl span.wid02 {
+		width: 30%;
+	}
+
+	.bomb-box .box03 .fail-data dl dt, .bomb-box .box03 .fail-data dl dt span {
+		height: 40px;
+		line-height: 40px;
+		display: inline-block;
+	}
+
+	.bomb-box .box03 .fail-data dl dd, .bomb-box .box03 .fail-data dl dd span {
+		height: 50px;
+		line-height: 50px;
+		display: inline-block;
+	}
+
+	.fail-data a {
+		width: 94px;
+		height: 36px;
+		display: inline-block;
+		background: #3578ba;
+		text-align: center;
+		color: #fff;
+		font-size: 14px;
+		float: right;
+		line-height: 36px;
+		margin-top: 30px;
+	}
+
+	.fail-data a:hover {
+		background: #1f4fb2;
+	}
+
+	/*供应商列表*/
+	.supply-list {
+		width: 100%;
+		margin: 0 auto;
+		background: #fff;
+		margin-top: 10px;
+	}
+
+	.supply-list dl, .supply-list dl dt, .supply-list dl dd {
+		width: 100%;
+		margin: 0 auto;
+		border-bottom: #dcdcdc 1px dotted;
+	}
+
+	.supply-list dl dt, .supply-list dl dt span {
+		height: 50px;
+		line-height: 50px;
+	}
+
+	.supply-list dl span {
+		width: 20.5%;
+		display: inline-block;
+		text-align: center;
+		font-size: 14px;
+	}
+
+	.supply-list dl span.wid01 {
+		width: 8%;
+	}
+
+	.supply-list dl span.wid02 {
+		width: 10%;
+	}
+
+	.supply-list dl dd, .supply-list dl dd span {
+		height: 110px;
+		line-height: 110px;
+		overflow: hidden;
+	}
+
+	.supply-list dl dd p {
+		line-height: 22px;
+		padding-top: 20px;
+		font-size: 14px;
+		width: 90%;
+		margin: 0 auto;
+	}
+
+	.supply-list dl dd:hover {
+		border: #d2272d 1px solid;
+	}
+
+	.supply-list dl dd span a {
+		color: #3f84f6;
+	}
+
+	.supply-list dl dd span a.buy-btn {
+		margin-left: 15px;
+	}
+
+	.supply-list dl dd span a:hover {
+		color: #d2272d;
+	}
+
+	/*供应商详情*/
+	.pro-add-data .sty01 {
+		margin-top: 0px !important;
+	}
+
+	.supply-list01 dl span {
+		width: 20%;
+	}
+
+	.supply-list01 dl span.wid01, .supply-list01 dl span.wid02 {
+		width: 10%;
+	}
+
+	.supply-list01 dl span a.edit {
+		margin-right: 10px;
+	}
+
+	/*设置-企业设置-收货地址编辑*/
+	.bomb-box .box04 {
+		width: 780px;
+		height: 478px;
+		background: #fff;
+	}
+
+	.bomb-box .box04 p {
+		height: 50px;
+		line-height: 50px;
+		border-bottom: #dcdcdc 1px dotted;
+	}
+
+	.bomb-box .box04 ul {
+		width: 92%;
+		margin: 0 auto;
+	}
+
+	.bomb-box .box04 ul li {
+		width: 100%;
+		height: 34px;
+		margin-top: 16px !important;
+		line-height: 34px;
+		margin: 0 auto;
+	}
+
+	.bomb-box .box04 ul li.line01 div {
+		width: 50%;
+		float: left;
+	}
+
+	.bomb-box .box04 ul li.line01 div.fl span.fl, .bomb-box .box04 ul li.line01 div.fr span.fl {
+		width: 80px;
+		font-size: 14px;
+	}
+
+	.bomb-box .box04 ul li.line01 div.fl span.fr, .bomb-box .box04 ul li.line01 div.fr span.fr {
+		width: 254px;
+		height: 34px;
+		display: inline-block;
+		float: left;
+	}
+
+	.bomb-box .box04 ul li div em {
+		color: #f00;
+	}
+
+	.bomb-box .box04 ul li.line01 div.fl span.fr input, .bomb-box .box04 ul li.line01 div.fr span.fr input {
+		width: 254px;
+		height: 34px;
+		padding-left: 10px;
+		border: #cccccd 1px solid;
+		font-size: 14px;
+	}
+
+	.bomb-box .box04 ul li.line01 div.fr span.fl {
+		margin-left: 20px;
+	}
+
+	.bomb-box .box04 ul li.line02 div.fl {
+		width: 80px;
+		font-size: 14px;
+	}
+
+	.bomb-box .box04 ul li.line02 div.fr {
+		width: 632px;
+		height: 34px;
+		font-size: 14px;
+		float: left;
+	}
+
+	.bomb-box .box04 ul li.line02 div.fr input {
+		width: 632px;
+		height: 34px;
+		font-size: 14px;
+		padding-left: 10px;
+		border: #cccccd 1px solid;
+	}
+
+	.bomb-box .box04 .margin-top40 {
+		margin-top: 40px !important;
+	}
+
+	.bomb-box .box04 .emaill, .bomb-box .box04 .address {
+		position: relative;
+	}
+
+	.bomb-box .box04 .emaill i, .bomb-box .box04 .address i {
+		position: absolute;
+		bottom: -30px;
+		width: 112%;
+		font-size: 12px;
+		color: #959595;
+		left: 0;
+	}
+
+	.bomb-box .box04 .select {
+		position: relative;
+	}
+
+	.bomb-box .box04 .select i {
+		position: absolute;
+		top: 10px;
+		left: 60px;
+		color: #959595;
+	}
+
+	.bomb-box .box04 .many-file-btn {
+		width: 240px;
+		margin: 0px auto;
+		margin-top: 60px;
+	}
+
+	.bomb-box .box04 .many-file-btn a {
+		width: 94px;
+		height: 36px;
+		line-height: 36px;
+		font-size: 14px;
+		display: inline-block;
+		text-align: center;
+	}
+
+	.bomb-box .box04 .many-file-btn button {
+		width: 94px;
+		height: 36px;
+		line-height: 36px;
+		font-size: 14px;
+		display: inline-block;
+		text-align: center;
+	}
+
+	.bomb-box .box04 .many-file-btn button.btn01 {
+		border: 1px;
+		background: #3f84f6;
+		color: #fff;
+	}
+
+	.bomb-box .box04 .many-file-btn a.btn01 {
+		background: #3f84f6;
+		color: #fff;
+	}
+
+	.bomb-box .box04 .many-file-btn .btn01 a {
+		color: #fff;
+	}
+
+	.bomb-box .box04 .many-file-btn a.btn02 {
+		border: #3f84f6 1px solid;
+		color: #3f84f6;
+		margin-left: 45px;
+	}
+
+	.bomb-box .box04 .many-file-btn button:hover {
+		background: #135c9a;
+		color: #fff;
+	}
+
+	.bomb-box .box04 .many-file-btn a:hover {
+		background: #135c9a;
+		color: #fff;
+	}
+
+	/*产品资料新增*/
+	.pro-add-tab {
+		padding-bottom: 40px;
+	}
+
+	.pro-add-tab dl {
+		margin-top: 20px;
+	}
+
+	.pro-add-tab dl dd span {
+		font-size: 12px;
+		color: #959595;
+		margin-left: 10px;
+	}
+
+	.pro-add-tab dd div.fr input {
+		width: 190px !important;
+		color: #323232 !important;
+	}
+
+	.com_head span.fr {
+		margin-right: 20px;
+		color: #fff;
+	}
+
+	.com_head span.fr em {
+		margin-right: 50px;
+		font-size: 14px;
+		color:#fff;
+	}
+
+	.pro-add-tab dl dd select {
+		width: 96px;
+		height: 34px;
+		background: url("../img/purc/select.png") no-repeat right;
+		-webkit-appearance: none;
+		appearance: none;
+		-o-appearance: none;
+		-moz-appearance: none;
+		-ms-appearance: none;
+		border: #3f84f6 1px solid;
+		position: relative;
+		font-size: 14px;
+		padding-left: 10px;
+	}
+
+	.pro-add-tab .com_title01 span em {
+		color: #d2272d;
+		font-size: 14px;
+		margin-left: 5px;
+	}
+
+	.pro-add-tab .upload-pro {
+		height: 100px;
+		overflow: hidden;
+		margin-top: 20px;
+	}
+
+	.pro-add-tab .upload-pro span {
+		width: 100px;
+		height: 100px;
+		background: url("../img/purc/upload.png") no-repeat center;
+		display: inline-block;
+		border: #ccc 1px solid;
+		float: left;
+		margin-left: 0;
+	}
+
+	.pro-add-tab .upload-pro input[type="file"] {
+		width: 100px !important;
+		height: 100px;
+		filter: alpha(opacity=0);
+		-moz-opacity: 0;
+		opacity: 0;
+	}
+
+	.pro-add-tab .upload-pro i {
+		font-size: 12px;
+		color: #959595;
+		margin-left: 10px;
+		padding-top: 75px;
+		display: inline-block;
+	}
+
+	.pro-add-tab .text-detail {
+		height: 120px;
+		overflow: hidden;
+		margin-top: 20px;
+	}
+
+	.pro-add-tab .text-detail textarea {
+		width: 710px;
+		height: 110px;
+		border: #ccc 1px solid;
+		padding: 0 10px;
+		font-size: 14px;
+	}
+
+	.pro-add-tab .fj-file {
+		width: 200px;
+		height: 34px;
+		display: inline-block;
+		position: relative;
+	}
+
+	.pro-add-tab .fj-file input[type="text"], .pro-add-tab .fj-file input[type="file"] {
+		width: 200px;
+		height: 34px;
+		border: none !important;
+		top: 0;
+		padding-left: 15px;
+		z-index: 1;
+		color: #3f84f6 !important;
+	}
+
+	.pro-add-tab .fj-file i {
+		position: absolute;
+		top: 6px;
+		left: -10px;
+		z-index: 2;
+		font-size: 16px;
+		width: 18px;
+		height: 18px;
+		display: inline-block;
+		background: url("../img/purc/folder.png") no-repeat center;
+	}
+
+	.pro-add-tab .fj-file input[type="file"] {
+		filter: alpha(opacity=0);
+		-moz-opacity: 0;
+		opacity: 0;
+		position: absolute;
+		left: 0;
+		top: 0;
+	}
+
+	.pro-add-tab .many-file-btn {
+		width: 220px;
+		margin: 0px auto;
+		margin-top: 20px;
+		float: right;
+		margin-right: 40px;
+	}
+
+	.pro-add-tab .many-file-btn a {
+		width: 94px;
+		height: 36px;
+		line-height: 36px;
+		font-size: 14px;
+		display: inline-block;
+		text-align: center;
+	}
+
+	.pro-add-tab .many-file-btn button {
+		border: 1px;
+		width: 94px;
+		height: 36px;
+		line-height: 36px;
+		font-size: 14px;
+		display: inline-block;
+		text-align: center;
+	}
+
+	.pro-add-tab .many-file-btn button.btn01 {
+		background: #3f84f6;
+		color: #fff;
+	}
+
+	.pro-add-tab .many-file-btn .btn01 a {
+		color: #fff;
+	}
+
+	.pro-add-tab .many-file-btn a.btn02 {
+		border: #3f84f6 1px solid;
+		color: #3f84f6;
+		margin-left: 25px;
+	}
+
+	.pro-add-tab .many-file-btn a:hover {
+		background: #135c9a;
+		color: #fff;
+	}
+
+	.pro-add-tab .many-file-btn button.btn02 {
+		border: #3f84f6 1px solid;
+		color: #3f84f6;
+		margin-left: 25px;
+		background-color: #fff;
+	}
+
+	.pro-add-tab .many-file-btn button:hover {
+		background: #135c9a;
+		color: #fff;
+	}
+
+	.pro-add-tab dl dd div.fr {
+		position: relative;
+	}
+
+	.pro-add-tab #proText {
+		position: absolute;
+		border: none !important;
+		color: #3f84f6 !important;
+		top: 30px;
+		left: 110px;
+		width: 600px !important;
+	}
+
+	option {
+		height: 30px;
+		padding-top: 3px;
+		padding-left: 10px;
+	}
+
+	/*B2B商务采购变更-添加*/
+	.oder-change {
+		width: 100%;
+		margin: 0 auto;
+		background: #fff;
+		padding-top: 10px;
+		padding-bottom: 30px;
+	}
+
+	.oder-change .purc {
+		width: 100%;
+		margin: 0 auto;
+	}
+
+	.oder-change .purc li {
+		width: 100%;
+		height: 34px;
+		line-height: 34px;
+		margin-bottom: 16px;
+	}
+
+	.oder-change .purc li div {
+		width: 450px;
+		float: left;
+		font-size: 14px;
+	}
+
+	.oder-change .purc li div em {
+		width: 110px;
+		float: left;
+		margin-left: 30px;
+		line-height: 40px;
+		font-size: 14px;
+	}
+
+	.oder-change .purc li div span {
+		width: 275px;
+		float: left;
+		display: inline-block;
+		height: 40px;
+		line-height: 40px;
+		position: relative;
+		font-size: 14px;
+	}
+
+	.oder-change .dropdown-menu td {
+		padding: 0;
+		line-height: 30px;
+	}
+
+	.oder-change .purc li div span .select01 {
+		width: 187px;
+		height: 34px;
+		font-size: 14px;
+		padding-left: 10px;
+	}
+
+	.oder-change .purc li.beizhu div {
+		width: 800px;
+	}
+
+	.oder-change .purc li.beizhu div span {
+		width: 600px;
+	}
+
+	.oder-change .purc li div span .select01 option em {
+		margin-right: 10px;
+		width: 20px;
+		display: inline-block;
+	}
+
+	.oder-change .purc li div span .select02 {
+		background: url("../img/purc/select.png") no-repeat right;
+		-webkit-appearance: none;
+		appearance: none;
+		-o-appearance: none;
+		-moz-appearance: none;
+		-ms-appearance: none;
+		border: #5078cb 1px solid;
+		height: 34px;
+		font-size: 14px;
+		line-height: 34px;
+		padding-left: 20px;
+	}
+
+	.oder-change .purc li div span .select02 option {
+		padding-right: 21px;
+		text-align: center;
+	}
+
+	.oder-change .purc li div span .wid152 {
+		width: 152px;
+	}
+
+	.oder-change .purc li div span .wid100 {
+		width: 100px;
+	}
+
+	.editable {
+		width: 100%;
+		height: 34px;
+		border: none;
+		font-size: 14px;
+		padding-left: 4px;
+		line-height: 34px;
+	}
+
+	/*下拉样式*/
+	.oder-change .select {
+		width: 568px !important;
+		height: 34px;
+		border: #ccc 1px solid;
+		font-size: 14px;
+		position: relative;
+		margin: 0px auto;
+		margin-top: 3px;
+	}
+
+	.oder-change .select:after {
+		content: "";
+		display: block;
+		width: 8px;
+		height: 8px;
+		border-left: 1px solid #444;
+		border-bottom: 1px #444 solid;
+		position: absolute;
+		right: 10px;
+		top: 10px;
+		transform: rotate(-45deg);
+		cursor: pointer;
+		transition: transform .1s ease-out, top .1s ease-out;
+	}
+
+	.oder-change .select p {
+		width: 95% !important;
+		display: block;
+		height: 34px;
+		line-height: 32px;
+		padding: 0 15px;
+		cursor: pointer;
+		font-size: 14px;
+	}
+
+	.oder-change .select ul {
+		list-style-type: none;
+		background-color: #fff;
+		width: 100%;
+		position: absolute;
+		top: 35px;
+		overflow-y: auto;
+		left: -1px;
+		max-height: 0;
+		transition: max-height .5s ease-out;
+		z-index: 20;
+	}
+
+	.oder-change .select ul li {
+		line-height: 34px;
+		cursor: pointer;
+		padding-left: 10px;
+		font-size: 14px;
+		margin-bottom: 0;
+	}
+
+	.oder-change .select ul li:hover {
+		background-color: #f5f5f5;
+	}
+
+	.oder-change .select ul li.selected {
+		background-color: #5078cb;
+		color: #fff;
+	}
+
+	.oder-change .select ul li b, .oder-change .select p b {
+		margin-right: 16px;
+	}
+
+	@-webkit-keyframes slide-out {
+		0% {
+			transform: scale(1, 0)
+		}
+
+		25% {
+			transform: scale(1,
+			1.1)
+		}
+		50% {
+			transform: scale(1,
+			0.85)
+		}
+		0% {
+			transform: scale(1,
+			1.1)
+		}
+		0% {
+			transform: scale(1,
+			1)
+		}
+	}
+
+	.oder-change .select.open ul {
+		max-height: 500px;
+		animation: slide-out .3s ease-in;
+		transform-origin: 50% 0;
+		transition: max-height .3s ease-in;
+		border: #ccc 1px solid;
+	}
+
+	.oder-change .select.open:after {
+		transform: rotate(-225deg);
+		top: 14px;
+		transition: all .1s ease-in;
+	}
+
+	.oder-change dl {
+		width: 100%;
+		margin: 0 auto;
+		position: relative;
+	}
+
+	.oder-change dl dt {
+		width: 100%;
+		margin: 0 auto;
+		height: 40px;
+	}
+
+	.oder-change dl dt b {
+		height: 40px;
+		line-height: 48px;
+		display: inline-block;
+		color: #999;
+	}
+
+	.oder-change dl dd {
+		width: 100%;
+		margin: 0 auto;
+		min-height: 100px;
+		border-bottom: #ccc 1px dashed;
+		overflow: hidden;
+	}
+
+	.oder-change dl dd:hover {
+		border: #3f84f6 1px solid;
+	}
+
+	.oder-change dl dd:hover b.wid02 a {
+		display: inline-block;
+	}
+	.oder-change dl.delect-hover dd:hover b.wid02 a{
+		display: none;
+	}
+	.oder-change dl dd b {
+		height: 100px;
+		line-height: 50px;
+		display: inline-block;
+	}
+
+	.oder-change dl b {
+		width: 10.2%;
+		font-size: 14px;
+		float: left;
+		text-align: center;
+	}
+
+	.oder-change dl b.wid01 {
+		width: 24%;
+	}
+
+	.oder-change .purc .address {
+		width: 100%;
+	}
+
+	.oder-change .purc .address span {
+		width: 720px;
+	}
+
+	.oder-change ul .address b {
+		width: 720px
+	}
+
+	.oder-change .add-address {
+		float: right;
+		color: #5078cb;
+	}
+
+	.oder-change .add-address:hover {
+		color: #d2272d;
+	}
+
+	.oder-change dl b.wid02 {
+		width: 4%;
+	}
+
+	.oder-change dl b.wid01 p {
+		font-size: 14px;
+		line-height: 22px;
+		text-align: left;
+		margin: 0;
+	}
+
+	.oder-change dl dd b.wid01 {
+		margin-top: 15px;
+	}
+
+	.oder-change dl b.wid02 a {
+		display: none;
+	}
+
+	.oder-change dl b.wid02 a i {
+		width: 20px;
+		height: 20px;
+		display: inline-block;
+		line-height: 20px;
+		background: #d2272d;
+		text-align: center;
+		border-radius: 100%;
+		color: #fff;
+	}
+
+	.oder-change .save {
+		margin-top: 30px;
+	}
+
+	.oder-change .dropdown-menu {
+		min-width: auto;
+	}
+
+	.oder-change .save button {
+		border: 1px;
+		width: 94px;
+		height: 36px;
+		display: inline-block;
+		background: #3578ba;
+		text-align: center;
+		color: #fff;
+		font-size: 14px;
+		float: right;
+		line-height: 36px;
+		margin-right: 40px;
+	}
+
+	/* .oder-change .save button:hover {
+        background: #1f4fb2;
+    } */
+
+	.search-result {
+		font-size: 18px;
+		color: #969595;
+		line-height: 90px;
+	}
+
+	.search-result img {
+		margin-left: 40px;
+		font-style: inherit;
+		margin-right: 15px;
+	}
+
+	.search-result em {
+		color: #000;
+		font-size: 18px;
+	}
+
+	/*投标单*/
+	.tender-list, .tender-list02 {
+		width: 100%;
+		margin: 0 auto;
+		background: #fff;
+	}
+
+	.tender-list dl {
+		width: 100%;
+		margin: 0 auto;
+	}
+
+	.tender-list dl dt {
+		width: 100%;
+		margin: 0 auto;
+		height: 40px;
+	}
+
+	.tender-list dl dt span {
+		height: 40px;
+		line-height: 48px;
+		display: inline-block;
+		color: #999;
+	}
+
+	.tender-list dl dd {
+		width: 100%;
+		margin: 0 auto;
+		height: 100px;
+		border-bottom: #ccc 1px dashed;
+		overflow: hidden;
+	}
+
+	.tender-list dl dd:hover {
+		border: #d32526 1px solid;
+	}
+
+	.tender-list dl dd span {
+		height: 100px;
+		line-height: 50px;
+		display: inline-block;
+	}
+
+	.tender-list dl span {
+		width: 10.6%;
+		font-size: 14px;
+		float: left;
+		text-align: center;
+	}
+
+	.tender-list dl span.wid01 {
+		width: 25%;
+	}
+
+	.tender-list dl span.wid01 p {
+		font-size: 14px;
+		line-height: 22px;
+		text-align: left;
+		margin: 0;
+	}
+
+	.tender-list dl dd span.wid01 {
+		margin-top: 15px;
+	}
+
+	.tender-list .com_title01 em, .tender-list02 .com_title01 em {
+		margin-left: 5px;
+		font-size: 16px;
+		color: #f00;
+		position: relative;
+		top: 3px;
+	}
+
+	/*招标单*/
+	.tender-list02 dl {
+		width: 100%;
+		margin: 0 auto;
+	}
+
+	.tender-list02 dl dt {
+		width: 100%;
+		margin: 0 auto;
+		height: 40px;
+	}
+
+	.tender-list02 dl dt span {
+		height: 50px;
+		line-height: 50px;
+		display: inline-block;
+		color: #999;
+	}
+
+	.tender-list02 dl dd {
+		width: 100%;
+		margin: 0 auto;
+		height: 50px;
+		border-bottom: #ccc 1px dotted;
+		/*overflow: hidden;*/
+		display: inline-block;
+		display: flex;
+	}
+	.scroll-y{
+		display: inline;
+	}
+	.tender-list02 dl dd:hover {
+		border: #d32526 1px solid;
+	}
+
+	.tender-list02 dl dd span {
+		height: 50px;
+		line-height: 50px;
+		display: inline-block;
+	}
+
+	.tender-list02 dl span {
+		width: 16.6666%;
+		font-size: 14px;
+		float: left;
+		text-align: center;
+	}
+
+	.tender-list02 .com_title01 a {
+		float: right;
+		margin-right: 45px;
+		font-size: 14px;
+		line-height: 50px;
+	}
+
+	.scroll-y {
+		width: 100%;
+		margin: 0 auto;
+		max-height: 500px;
+	}
+
+	.scroll-y.active {
+		overflow-y: scroll;
+		overflow-x: hidden;
+	}
+
+	/*评标单*/
+	.tender-list02 .comment-oder {
+		width: 100%;
+		margin: 0 auto;
+	}
+
+	.tender-list02 .comment-oder:hover {
+		border: #d32526 1px solid;
+	}
+
+	.tender-list02 .comment-oder-text {
+		border-bottom: #5078cb 1px solid;
+	}
+
+	.tender-list02 .comment-oder-text, .comment-oder-text ul {
+		width: 100%;
+		margin: 0 auto;
+		padding: 5px 0;
+		position: relative;
+	}
+
+	.tender-list02 .comment-oder-text i {
+		position: absolute;
+		top: -1px;
+		left: 35px;
+		width: 20px;
+		height: 20px;
+		line-height: 15px;
+		text-align: center;
+		background: #595959;
+		display: inline-block;
+		font-weight: 700;
+		font-size: 14px;
+		color: #fff;
+		border-radius: 0 0 50px 0;
+	}
+
+	.tender-list02 .comment-oder-text ul li {
+		width: 88%;
+		margin: 0 auto;
+		height: 30px;
+		line-height: 30px;
+	}
+
+	.tender-list02 .comment-oder-text ul li span {
+		width: 33.3333%;
+		float: left;
+	}
+
+	.tender-list02 .comment-oder-text ul li span em, .comment-oder-text ul li span b {
+		font-size: 14px;
+	}
+
+	.tender-list02 .comment-oder-text ul li span em {
+		width: 110px;
+		display: inline-block;
+	}
+
+	.tender-list02 .comment-oder-text ul li span b {
+		color: #959595;
+	}
+
+	.tender-list02 .comment-oder-list, .comment-oder-list dl {
+		width: 100%;
+		margin: 0 auto;
+	}
+
+	.tender-list02 .comment-oder-list dl dt, .comment-oder-list dl dd {
+		width: 100%;
+		margin: 0 auto;
+		border-bottom: #ccc 1px dashed;
+		height: 50px;
+		line-height: 50px;
+	}
+
+	.tender-list02 .comment-oder-list dl dt span.wid01 {
+		text-align: left;
+		padding-left: 30px;
+	}
+
+	.tender-list02 .comment-oder-list dl span {
+		font-size: 14px;
+		width: 9.1%;
+		float: left;
+		color: #323232 !important;
+		line-height: 50px;
+		position: relative;
+		overflow: hidden;
+	}
+
+	.tender-list02 .comment-oder-list dl span.wid01 {
+		width: 30%;
+	}
+
+	.tender-list02 .comment-oder-list dl span.wid02 {
+		width: 15%;
+	}
+
+	.tender-list02 .comment-oder-list dl dd span a {
+		margin-left: 15px;
+		font-size: 12px;
+	}
+
+	.tender-list02 .comment-oder-list dl dd:hover {
+		border-bottom: #ccc 1px dotted;
+		border-top: none;
+		border-left: none;
+		border-right: none;
+	}
+
+	.tender-list02 .change01 {
+		width: 16px;
+		height: 14px;
+		display: inline-block;
+		float: right;
+		line-height: 7px;
+		position: absolute;
+		top: 13px;
+	}
+
+	.tender-list02 .change01 i {
+		width: 100%;
+		display: inline-block;
+		height: 7px;
+		color: #000;
+	}
+
+	.tender-list02 .change01:hover i {
+		color: #5078cb;
+	}
+
+	.tender-list02 .explain {
+		width: 90%;
+		height: 30px;
+		border: none;
+		text-align: center;
+	}
+
+	.tender-list02 .save {
+		margin-top: 30px;
+	}
+
+	.tender-list02 .save a {
+		width: 94px;
+		height: 36px;
+		display: inline-block;
+		background: #3578ba;
+		text-align: center;
+		color: #fff;
+		font-size: 14px;
+		float: right;
+		line-height: 36px;
+		margin-right: 40px;
+	}
+
+	.tender-list02 .save a:hover {
+		background: #1f4fb2;
+	}
+
+	.tender-list02 .com_title01, .tender-list .com_title01 {
+		margin-top: 0;
+	}
+
+	/*采购变更弹窗*/
+	.pro-add-data02 {
+		margin-bottom: 30px;
+	}
+
+	.pro-add-data02 .pro-info dl {
+		position: relative;
+	}
+
+	.pro-add-data02 .pro-info dl dd.active .add01 {
+		color: #d32526;
+	}
+
+	.pro-add-data02 .pro-info dl dd.active {
+		border: #d32526 1px solid;
+	}
+
+	.add-tanchuang {
+		position: absolute;
+		box-shadow: 0 0 3px #888;
+		width: 238px;
+		height: 202px;
+		background: #fff;
+		right: 100px;
+		top: 20%;
+		display: none;
+	}
+
+	.add-tanchuang ul {
+		width: 195px;
+		margin: 0 auto;
+		margin-top: 10px;
+	}
+
+	.add-tanchuang ul li {
+		width: 100%;
+		margin: 0 auto;
+		height: 34px;
+		line-height: 34px;
+		margin-top: 12px;
+	}
+
+	.add-tanchuang ul li div.fl {
+		width: 50px;
+		font-size: 14px;
+	}
+
+	.add-tanchuang ul li div.fr {
+		width: 145px;
+	}
+
+	.add-tanchuang ul li div.fr .price-input {
+		width: 145px;
+		border: #969595 1px solid;
+		height: 34px;
+		font-size: 14px;
+		padding-left: 10px;
+	}
+
+	.add-tanchuang ul li.add-btn {
+		margin-top: 20px;
+	}
+
+	.add-tanchuang ul li.add-btn div.fr a {
+		width: 62px;
+		height: 24px;
+		display: inline-block;
+		line-height: 24px;
+		text-align: center;
+	}
+
+	.add-tanchuang ul li div.fr a.off {
+		border: #3f84f6 1px solid;
+		color: #3f84f6;
+		float: left;
+	}
+
+	.add-tanchuang ul li div.fr a.ok {
+		background: #3f84f6;
+		color: #fff;
+		float: right;
+	}
+
+	.add-tanchuang ul li div.fr a:hover {
+		background: #5078cb;
+		color: #fff;
+	}
+
+	.add-tanchuang ul li .btn-wrap {
+		position: relative;
+		height: 30px;
+		width: 145px;
+		line-height: 30px;
+	}
+
+	.add-tanchuang ul li .btn-wrap input {
+		display: inline-block;
+	}
+
+	.add-tanchuang ul li .btn-wrap .number {
+		width: 145px;
+		height: 34px !important;
+		border: #969595 1px solid;
+		display: inline-block;
+		text-align: center;
+		line-height: 34px !important;
+		color: #333;
+	}
+
+	.add-tanchuang ul li .btn-wrap .number a {
+		width: 26px;
+		height: 33px;
+		display: inline-block;
+		font-size: 18px;
+		color: #666;
+		line-height: 28px;
+	}
+
+	.add-tanchuang ul li .btn-wrap .number a:hover {
+		color: #fff;
+		background: #5078cb
+	}
+
+	.add-tanchuang ul li .btn-wrap .number .reduce {
+		float: left;
+		border-right: #969595 1px solid;
+	}
+
+	.add-tanchuang ul li .btn-wrap .number .add {
+		float: right;
+		border-left: #969595 1px solid;
+	}
+
+	.add-tanchuang ul li .btn-wrap .number input {
+		float: left;
+		width: 91px;
+		height: 32px;
+		line-height: 32px;
+		text-align: center;
+		font-size: 16px;
+		color: #666;
+		border: none;
+	}
+
+	.area-select {
+		width: 204px;
+		height: 34px;
+		padding-left: 10px;
+		border: #cccccd 1px solid;
+		font-size: 14px;
+		float: left;
+		margin-left: 10px;
+	}
+
+	.area-select:first-child {
+		margin-left: 0 !important;
+	}
+
+	.area-select[size] {
+		z-index: 1000;
+		position: relative;
+	}
+
+	.area-select option {
+		width: 204px;
+		position: relative;
+		left: -10px;
+	}
+
+	.oder-change dl .editable {
+		text-align: center;
+	}
+
+	.oder-change dl dd b {
+		height: auto;
+	}
+
+	.oder-change .save button:disabled {
+		background: #ccc !important;
+	}
+
+	.pro-add-data02 table tbody {
+		font-size: 14px;
+	}
+
+	.pro-add-data02 .table-default .header {
+		background: #fff;
+		border: none;
+		font-size: 14px;
+	}
+
+	.pro-add-data02 .table-default .header th {
+		border-bottom: #e8e8e8 1px solid;
+	}
+
+	.pro-add-data02 table tbody tr td {
+		/*line-height: 50px;*/
+		height: 50px;
+		padding: 0;
+		font-size: 14px !important;
+		border-bottom: #e8e8e8 1px solid;
+		background: #fff;
+		vertical-align: middle;
+	}
+
+	.pro-add-data02 table tbody tr {
+		margin-top: 1px;
+		background: #f5f5f5;
+	}
+
+	.pro-add-data02 table tbody tr td a:hover {
+		color: #f00 !important;
+	}
+
+	.pro-add-data02 table tbody tr:hover td {
+		background: #f5f5f5;
+	}
+
+	/*蒋下划线改成框*/
+	.pro-add-data dl dd div.fr input {
+		border: #bfbfbf 1px solid !important;
+		padding-left: 10px;
+	}
+
+	.bor01 {
+		width: 187px;
+		height: 34px;
+		border: #bfbfbf 1px solid !important;
+		font-size: 14px;
+		padding-left: 10px;
+		line-height: 34px;
+	}
+	.com_title01{
+		border-bottom: #5078cb 1px dashed !important;
+	}
+</style>
+<!--B2B商务账号设置-个人信息-->
+<div class="bomb-box">
+	<div class="box01 box" ng-if="exist != 1 || exist == null">
+		<p>邀请合作伙伴</p>
+		<form class="per-data per" name="contactInfo" id="contactInfo">
+			<ul>
+				<li class="text-inverse text-info">请输入<b>完整的企业名称</b>,系统将根据企业名称验证企业是否已注册优软云</li>
+				<li><em>企业名称</em><input type="text" placeholder="企业名称" ng-model="enter.vendname" required="true"></li>
+				<li ng-if="existEn" class="register">您邀请企业已注册优软云<span ng-click="viewDetail()">查看详情</span></li>
+				<li><em>联系人</em><input type="text" placeholder="客户姓名"  ng-model="enter.vendusername" required="true"></li>
+				<li><em>手机</em><input type="text" placeholder="手机" ng-model="enter.vendusertel" ng-pattern="/^1(3|4|5|7|8)\d{9}$/" required="true"></li>
+				<li class="per-btn perBtn" ng-if="!existEn"><button ng-click="save(enter)" class="save" ng-disabled="contactInfo.$invalid">发送邀请</button><a ng-click="cancel()" class="mod-psd">取消</a></li>
+				<li class="per-btn perBtn" ng-if="existEn"><button ng-click="addPartner(enter)" class="save" ng-disabled="contactInfo.$invalid">添加合作伙伴</button><a ng-click="cancel()" class="mod-psd">取消</a></li>
+			</ul>
+		</form>
+	</div>
+	<div class="box01 box box-bottom" ng-if="exist == 1">
+		<div class="box-header">
+			<p>企业详情</p>
+			<a class="close" ng-click="closeDetail()">&times;</a>
+		</div>
+		<form class="per-data" name="contactInfo" id="contactInfo">
+			<ul>
+				<li><em>企业名称:</em><input type="text" ng-model="enterprise.enName"></li>
+				<li><em>地址:</em><input type="text" ng-model="enterprise.enAddress"></li>
+				<li><em>法人:</em><input type="text" ng-model="enterprise.enCorporation"></li>
+				<li><em>管理员:</em><input type="text" ng-model="enterprise.adminName"></li>
+				<li><em>联系电话:</em><input type="text" ng-model="enterprise.enTel"></li>
+				<li><em>注册日期:</em><input type="text" ng-model="enterprise.date"></li>
+				<li><em>邀请人:</em><input type="text" ng-model="enterprise.inviteUserName"></li>
+				<li><em>邀请企业:</em><input type="text" ng-model="enterprise.inviteEnName"></li>
+                <li><a class="mod-psd" ng-click="closeDetail()">关闭</a></li>
+			</ul>
+		</form>
+	</div>
+</div>

+ 739 - 0
src/main/webapp/resources/view/sso/b2b/modal/step1.html

@@ -0,0 +1,739 @@
+<style>
+    /*弹出框*/
+    .tanchuang {
+        width: 100%;
+        height: 100%;
+        position: fixed;
+        z-index: 11111;
+        background: rgba(0, 0, 0, 0.4);
+        top: 0;
+        left: 0;
+        display: block;
+    }
+
+    .tanchuang .box {
+        position: relative;
+        left: 0;
+        right: 0;
+        top: 0;
+        bottom: 0;
+        margin: auto;
+        margin-top: 15%;
+        box-shadow: 2px 2px 3px #888;
+    }
+
+    .tanchuang .box i {
+        width: 20px;
+        height: 20px;
+        display: inline-block;
+        position: absolute;
+        right: 5px;
+        top: 8px;
+        text-align: center;
+        cursor: pointer;
+        font-size: 14px;
+        color: #fff;
+    }
+
+    .tanchuang .box01, .tanchuang .box02 {
+        width: 808px;
+        min-height: 315px;
+        background: #fff;
+        padding-bottom: 10px;
+    }
+
+    .box p {
+        width: 100%;
+        margin: 0px auto;
+        height: 50px;
+        line-height: 50px;
+        display: inline-block;
+        font-size: 14px;
+        color: #5f5d5d;
+        border-bottom: #595959 1px dashed;
+    }
+
+    .box p span {
+        margin-left: 20px;
+        line-height: 55px;
+    }
+
+    .box p span b, .box01_01 span b, .day_number div b {
+        font-size: 12px;
+        color: #969595;
+        font-weight: normal;
+    }
+
+    .box01_01 {
+        width: 100%;
+        margin: 0px auto;
+        height: 55px;
+        line-height: 55px;
+        font-size: 14px;
+        color: #323232;
+        margin-bottom: 10px;
+    }
+
+    .box01_01 span a {
+        color: #3f84f6;
+        font-size: 12px;
+        margin-left: 10px;
+    }
+
+    .box01_01 span.sp01 {
+        margin-left: 25px;
+        display: inline-block;
+    }
+
+    .box01_01 span.sp02 {
+        margin-left: 95px;
+    }
+
+    .box01_01 span input {
+        margin-right: 6px;
+        vertical-align: middle;
+        position: relative;
+        top: -2px;
+    }
+
+    .box01_02 {
+        width: 716px;
+        min-height: 110px;
+        border: #cccccd 1px solid;
+        margin: 0px auto;
+        position: relative;
+        padding-bottom: 10px;
+        overflow: hidden;
+    }
+
+    .box01_02 span {
+        width: 142px;
+        text-align: center;
+        display: inline-block;
+    }
+
+    .box01_02 a {
+        width: 50px;
+        height: 50px;
+        background: #cccccd;
+        border-radius: 50%;
+        text-align: center;
+        font-size: 12px;
+        display: inline-block;
+        margin-top: 18px;
+        color: #969595;
+    }
+
+    .box01_02 em {
+        text-align: center;
+        font-size: 12px;
+        color: #969595;
+        width: 100%;
+        margin: 0px auto;
+        display: inline-block;
+        font-style: inherit;
+        margin-top: 10px;
+        text-align: center;
+    }
+
+    .box01_02 span:hover a, .box01_02 span.active:hover a {
+        background: #3f84f6;
+    }
+
+    .box01_02 span.active a {
+        background: #8bc6f7;
+    }
+
+    .box01_02 span:hover em, .box01_02 span.active em {
+        color: #3f84f6;
+    }
+
+    .box01_02 span.active {
+        position: relative;
+    }
+
+    .box01_02 span.active:before {
+        content: "";
+        width: 76px;
+        height: 6px;
+        background: url("static/img/approvalFlow/dot01.png") no-repeat;
+        display: inline-block;
+        position: absolute;
+        top: 40px;
+        right: 102px;
+    }
+
+    .box01_02 a img {
+        margin-top: 12px;
+    }
+
+    .box01_03 {
+        width: 235px;
+        margin: 0px auto;
+        margin-top: 20px;
+    }
+
+    .box01_03 a, .box_list .btn01, .next_btn a {
+        width: 94px;
+        height: 36px;
+        line-height: 36px;
+        font-size: 14px;
+        display: inline-block;
+        text-align: center;
+    }
+
+    .box01_03 a.btn01, .box_list .btn01, .next_btn a {
+        background: #3f84f6;
+        color: #fff;
+    }
+
+    .box_list .btn01 a {
+        color: #fff;
+    }
+
+    .box01_03 a.btn02 {
+        border: #3f84f6 1px solid;
+        color: #3f84f6;
+        margin-left: 45px;
+    }
+
+    .box01_03 a:hover, .box_list .btn01:hover, .next_btn a:hover {
+        background: #135c9a;
+        color: #fff;
+    }
+    #caozuo {
+        position: absolute;
+        top: 0;
+        right: 0;
+    }
+
+    #caozuo a {
+        width: 42px;
+        height: 24px;
+        display: inline-block;
+        background: #8bc6f7;
+        font-size: 12px;
+        color: #fff;
+        margin: 0 0 0 3px;
+        float: left;
+        border-radius: 1px;
+        line-height: 24px;
+    }
+
+    #caozuo a.over {
+        color: #969595;
+        background: #d9dadd;
+    }
+
+    #caozuo a:hover {
+        background: #3f84f6;
+        color: #fff;
+    }
+
+    .com_head01 {
+        width: 100%;
+        margin: 0px auto;
+        height: 50px;
+        line-height: 50px;
+        border-bottom: #5078cb 1px dotted;
+    }
+
+    .com_head01 span {
+        margin-left: 30px;
+        font-size: 14px;
+        color: #323232;
+    }
+
+    #caozuo span {
+
+    }
+
+    .tanchuang .box03 {
+        width: 808px;
+        height: 620px;
+        background: #fff;
+    }
+
+    #caozuo01 {
+        width: 716px;
+        margin: 0px auto;
+        background: #efefef;
+        height: 24px;
+        line-height: 24px;
+        border: #cccccd 1px solid;
+        border-bottom: none;
+        margin-top: 10px;
+    }
+
+    #caozuo01 a {
+        width: 42px;
+        height: 24px;
+        display: inline-block;
+        background: #8bc6f7;
+        font-size: 12px;
+        color: #fff;
+        margin: 0 0 0 3px;
+        float: left;
+        border-radius: 1px;
+        line-height: 24px;
+        text-align: center;
+    }
+
+    #caozuo01 a.over {
+        color: #969595;
+        background: #d9dadd;
+    }
+
+    #caozuo01 a:hover {
+        background: #3f84f6;
+        color: #fff;
+    }
+
+    .box04 {
+        width: 1014px;
+        height: 580px;
+        background: #fff;
+    }
+    @media screen and (max-width: 1366px) {
+        .box04,.box01{
+            margin-top: 7% !important;
+        }
+        .box01_02{
+            max-height: 300px;
+            overflow-y: overlay;
+            overflow-x: hidden;
+        }
+        #caozuo{
+            right: 20px;
+        }
+    }
+    .box05 {
+        width: 706px;
+        height: 588px;
+        background: #fff;
+    }
+
+    .box06 {
+        width: 706px;
+        height: 508px;
+        background: #fff;
+    }
+
+    .box07 {
+        width: 946px;
+        height: 541px;
+        background: #fff;
+    }
+    .box_content {
+        width: 980px;
+        height: 500px;
+        margin-top: -115px;
+        margin-left: -250px;
+        background: #fff;
+    }
+
+    .box_content .box_content01 {
+        width: 288px;
+        height: 430px;
+        float: left;
+        margin-left: 30px;
+        position: relative;
+    }
+
+    .box_content .box_content01 h4 {
+        width: 100%;
+        display: inline-block;
+        height: 50px;
+        line-height: 50px;
+        font-size: 14px;
+        color: #5f5d5d;
+    }
+
+    .box_content .box_content01 h4 font {
+        color: #969595;
+        font-size: 12px;
+    }
+
+    .box_list {
+        width: 100%;
+        height: 100%;
+        border: #e5e5e5 1px solid;
+        position: relative;
+    }
+
+    .box_list h5 {
+        width: 100%;
+        height: 100%;
+        line-height: 430px;
+        font-size: 14px;
+        color: #969595;
+        display: inline-block;
+        text-align: center;
+    }
+
+    .dot02 {
+        width: 13px;
+        content: "";
+        height: 26px;
+        display: inline-block;
+        position: absolute;
+        top: 250px;
+        right: -23px;
+        background: url("static/img/approvalFlow/dot02.png") no-repeat;
+    }
+
+    .box_list dl {
+        width: 100%;
+        margin: 0 auto;
+        margin-top: 10px;
+        display: inline-block;
+        margin-left: 20px;
+    }
+
+    .box_list dl dt, .box_list dl dd {
+        width: 100%;
+        margin: 0 auto;
+    }
+
+    .box_list dl dt {
+        font-size: 12px;
+        color: #5f5d5d;
+        line-height: 30px;
+        margin-bottom: 5px;
+    }
+
+    .box_list dl dd a, .style_list a {
+        font-size: 12px;
+        color: #3f84f6;
+        width: 66px;
+        height: 24px;
+        line-height: 24px;
+        float: left;
+        display: inline-block;
+        background: #deeffe;
+        text-align: center;
+        margin: 0 25px 10px 0;
+        position: relative;
+    }
+
+    .box_list dl dd a:hover, .style_list a:hover {
+        background: #3f84f6;
+        color: #fff;
+    }
+
+    .box_list dl dd a.color01, .style_list a.color01 {
+        background: #d9dadd;
+        color: #969595;
+    }
+
+    .box_list .sreach {
+        width: 240px;
+        height: 26px;
+        border: #f2f1f2 1px solid;
+        border-radius: 10px;
+        margin: 0 auto;
+        margin-top: 10px;
+        margin-bottom: 10px;
+    }
+
+    .box_list .sreach input {
+        width: 200px;
+        float: left;
+        height: 24px;
+        line-height: 24px;
+        color: #969595;
+        font-style: 12px;
+        border: none;
+        text-align: center;
+        border-radius: 10px;
+    }
+
+    .box_list .sreach:hover {
+        border: #8bc6f7 1px solid;
+    }
+
+    .box_list .sreach button {
+        width: 35px;
+        height: 26px;
+        line-height: 26px;
+        background: transparent;
+        float: right;
+        border: none;
+        position: relative;
+        text-align: center;
+    }
+
+    .box_list .sreach button:before {
+        content: "";
+        width: 16px;
+        height: 16px;
+        display: inline-block;
+        position: absolute;
+        background: url("static/img/approvalFlow/sreach_bt.png") no-repeat center;
+        background-position: -16px 0;
+        overflow: hidden;
+        top: 5px;
+        right: 10px;
+    }
+
+    .box_list .sreach button:hover:before {
+        background-position: 0 0;
+    }
+
+    .box_list .zimu {
+        width: 100%;
+        margin: 0 auto;
+        height: 18px;
+        line-height: 18px;
+        background: #f4f5f7;
+    }
+
+    .box_list .zimu span {
+        margin-left: 20px;
+    }
+
+    .box_list ul {
+        width: 100%;
+        margin: 0 auto;
+    }
+
+    .box_list ul li {
+        width: 96%;
+        margin: 0 auto;
+        height: 35px;
+        line-height: 35px;
+        margin-left: 20px;
+    }
+
+    .box_list ul li span {
+        width: 100%;
+        float: left;
+    }
+
+    .box_list ul li span em {
+        width: 60px;
+        display: inline-block;
+    }
+
+    .box_list ul li a {
+        width: 25%;
+        float: right;
+        color: #3f84f6;
+    ;
+    }
+
+    .box_list ul li a:hover {
+        color: #bc2122;
+    }
+
+    .box_list dl dd .jiantou:before {
+        content: "";
+        width: 22px;
+        height: 8px;
+        display: inline-block;
+        background: url("static/img/approvalFlow/inco_list.png") no-repeat;
+        background-position: -5px -23px;
+        position: absolute;
+        right: 65px;
+        top: 10px;
+    }
+
+    .caozuo01 {
+        margin-top: 20px !important;
+    }
+
+    .caozuo01 a:after {
+        content: "";
+        width: 18px;
+        height: 18px;
+        display: inline-block;
+        background: url("static/img/approvalFlow/inco_list.png") no-repeat;
+        background-position: 0 -1px;
+        position: absolute;
+        top: -8px;
+        right: -8px;
+    }
+
+    .caozuo01 a:hover:after {
+        background-position: -20px -1px;
+    }
+
+    .box_list .btn01 {
+        position: absolute;
+        bottom: 0;
+        right: 0;
+    }
+    .box_040103 {
+        width: 980px;
+        background: #fff;
+        margin-left: -250px;
+        text-align: center;
+        padding-bottom: 20px;
+        margin-top: 0;
+    }
+    .tanchuang .box p span {
+        float: none;
+        line-height: inherit;
+    }
+    .tanchuang .box p {
+        border-bottom: 0;
+        height: 30px;
+        line-height: 30px;
+        background: #5078cb;
+        color: #fff;
+    }
+</style>
+<!--弹出框01 审批人设置-->
+<div class="tanchuang" id="step1">
+	<!--弹出框01 设置-企业设置-审批流-审批人设置-->
+	<div class="box box01 no-padding">
+    	<i class="off fa fa-close" ng-click="cancel()"></i>
+        <p><span>{{appName}}-审批人设置</span></p>
+        <div class="box01_01">
+        	<span class="sp01"><input type="radio" name="radio01" checked>不分条件设置审批人</span>
+            <span class="sp02"><input type="radio" name="radio01">分条件设置审批人<a href="#">设置审批条件</a></span>
+        </div>
+        <div class="box01_02" ng-if="node==null">
+        	<span ng-if="AppFlow.appNodes.length==0">
+        		<a href="#" class="btn btn-set"><img src="static/img/approvalFlow/add_user.png" alt=""></a>
+            	<em>增加审批人</em>
+            </span>
+            <span ng-class="{'active': !$first}" ng-if="AppFlow.appNodes.length!=0" ng-repeat="flow in AppFlow.appNodes">
+        		<a href="#"><img src="static/img/approvalFlow/add_user01.png" alt=""></a>
+            	<em><span ng-bind="flow.username ? flow.username : flow.role"></span></em>
+            </span>
+             <div id="caozuo">
+                <a ng-click="paste()">粘贴</a>
+                <a ng-click="clear()" class="over">清空</a>
+           	 </div>
+        </div>
+        <div class="box01_02" ng-if="node!=null">
+            <span ng-class="{'active': !$first}" ng-repeat="flow in node.appNodes">
+        		<a href="#"><img src="static/img/approvalFlow/add_user01.png" alt=""></a>
+            	<em><span ng-bind="flow.username ? flow.username : flow.role"></span></em>
+            </span>
+             <div id="caozuo">
+            	<a class="btn-set">设置</a>
+                <a ng-click="copy()">拷贝</a>
+           	 </div>
+        </div>
+        <div class="box01_03">
+        	<button style="margin-right: 30px;" class="btn01 b2b-btn b2b-btn-submit" ng-click="saveNode()" disabled="disabled">保存</button><button class="btn02  b2b-btn b2b-btn-cancel" ng-click="cancel()">取消</button>
+        </div>
+    </div>
+</div>
+<div class="tanchuang" style="display: none" id="NodeSet">
+    <!--弹出框04 设置-企业设置-审批流-审批人设置-设置-->
+    <div class="box box04">
+        <!--<i class="off"><img src="static/img/approvalFlow/close.png" alt="" ng-click="cancel()"></i>-->
+        <div class="box_content clearfix">
+            <div class="box_content01">
+                <h4>{{appName}}-已选审批节点</h4>
+                <div class="box_list">
+                    <dl >
+                        <dd ng-repeat="flow in AppFlow.appNodes" class="caozuo01"  ng-click="deleteNode($index)">
+                            <a href="#" ng-bind="flow.username ? flow.username : flow.position" ng-class="{'jiantou': !$first}"></a>
+                        </dd>
+                    </dl>
+                    <h5 ng-if="AppFlow.appNodes.length==0">请从右侧选择审批节点</h5>
+                </div>
+                <a href="#" class="dot02" ></a>
+            </div>
+            <div class="box_content01">
+                <h4>角色<font>(不受人员异动的影响)</font></h4>
+                <div class="box_list">
+                    <dl>
+                        <dt>人员类型</dt>
+                        <dd>
+                            <a href="#">普通用户</a>
+                            <a href="#">管理员</a>
+                        </dd>
+                    </dl>
+                    <dl>
+                        <dt>用户角色</dt>
+                        <dd ng-repeat="role in roles">
+                            <a ng-click="SelectRole(role)" ng-if="role!='{}'">{{role}}</a>
+                            <a ng-click="" ng-if="role='{}'" >暂无角色</a>
+                        </dd>
+                    </dl>
+                </div>
+            </div>
+            <div class="box_content01">
+                <h4>指定人员<font>(受人员异动的影响)</font></h4>
+                <div class="box_list">
+                    <div class="sreach"><input type="search"  placeholder="请输入姓名/部门搜索" ng-model="keyword" ng-search="search(keyword)"><button></button> </div>
+                    <div style="position: relative; overflow-y: auto; overflow-x: hidden;max-height: 380px;">
+                        <div class="zimu"><span>C</span></div>
+                        <ul ng-repeat="user in users| filter: keyword">
+                            <li ><span><em>{{user.username}}</em>
+                   			{{user.department}} {{user.role}}
+                   			<a ng-click="SelectUser(user)">添加</a>
+                            </li>
+                        </ul>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="box01_03 box_040103">
+            <button style="margin-right: 30px;" class="btn01  b2b-btn b2b-btn-submit" href="#">保存</button><button class="btn02  b2b-btn b2b-btn-cancel" ng-click="cancel()">取消</button>
+        </div>
+    </div>
+</div>
+<div class="tanchuang" style="display: none" id="NodeCondition">
+    <!--弹出框07 设置-企业设置-审批流-审批人设置-设置审批条件-->
+    <div class="box box07">
+        <i class="off"><img src="static/img/approvalFlow/close.png" alt="" ng-click="cancel()"></i>
+        <p><span>设置审批条件<b>(只能指定一个组件为审批条件)</b></span></p>
+        <div class="box01_01">
+            <span class="sp01"><input type="radio" name="radio01" checked>请假类型<b>(选项内容将会作为审批条件)</b></span>
+        </div>
+        <div class="style_list">
+            <a href="#">事假</a>
+            <a href="#">病假</a>
+            <a href="#" class="color01">年假</a>
+            <a href="#">调休</a>
+            <a href="#">婚假</a>
+            <a href="#">产假</a>
+            <a href="#">陪产假</a>
+            <a href="#">路途假</a>
+            <a href="#">其它</a>
+        </div>
+        <div class="box01_01">
+            <span class="sp01"><input type="radio" name="radio01">请假天数</span>
+        </div>
+        <div class="day_number">
+            <div>
+                <input type="text" value="3"><font>≤</font><input type="text" value="5">
+                <b>(请输入“请假时间”分隔数字,,我们将为您自动生成数值区间做为审批条件)</b>
+            </div>
+            <div class="demo">
+                <span><em>1</em>输入“请假时间”分隔数字</span>
+                <span style="margin-left: 70px"><input type="text" value="3"><font>≤</font><input type="text" value="5"></span>
+                <span><em>2</em>我们将为您自动生成数值区间做为审批条件</span>
+                <span><a class="color01">请假天数<5</a><a class="color02">一级主管</a></span>
+                <span><a class="color01">5≤请假天数≤10</a><a class="color02 color002">一级主管</a><a class="color02">二级主管</a></span>
+                <span><a class="color01">10≤请假天数</a><a class="color02 color002">一级主管</a><a class="color02 color002">二级主管</a><a class="color02">三级主管</a></span>
+            </div>
+        </div>
+        <div class="next_btn"><a href="#">下一步</a> </div>
+    </div>
+</div>
+<script src="static/lib/jquery/jquery.min.js"></script>
+<script type="text/ecmascript">
+$(function() {
+	$('.tanchuang .box .off').click(function () {
+		$('#NodeSet .box').hide();
+		$('#step1 .box').hide();
+	});
+	
+	$('.btn-set').click(function() {
+		$('#NodeSet, #NodeSet .box').show();
+		$('#step1 .box').hide();
+	});
+	
+	$('#NodeSet .box .box01_03 .btn01').click(function() {
+		$('#NodeSet .box').hide();
+		$('#step1 .box').show();
+	});
+})
+</script>

+ 28 - 4
src/main/webapp/resources/view/vendor/b2b/baseInfo/myRequest.html → src/main/webapp/resources/view/sso/b2b/myRequest.html

@@ -390,10 +390,31 @@
 	}
 	.order-table .order-hd.height72{
 		background: #fff !important ;
+	}.ng-table-pager::after {
+		 clear: both;
+		 content: ' ';
+		 zoom: 1;
+		 display: block;
+		 visibility: hidden;
+	 }
+	.ng-table-pager {
+		padding-right: 20px;
+		padding-top: 50px;
+		margin-right: 0 !important;
+	}
+	.text-mns {
+		padding-right: 15px;
+		position: absolute;
+		bottom: 64px;
+		right: 20px;
+		font-size: 12px;
+	}
+	.Boom18 {
+		bottom: 18px;
 	}
 </style>
-<div class="block fr" id="myquest-public">
-	<div ng-include src="'static/view/vendor/b2b/baseInfo/vendorAndCustomer.html'"></div>
+<div class="block fr" id="myquest-public" style="position: relative">
+	<div ng-include src="'static/view/sso/b2b/vendorAndCustomer.html'"></div>
 	<div>
 		<div class="search">
 			<div class="form-group form-group-sm has-feedback" dropdown auto-close="outsideClick" on-toggle="searchAdvance=open">
@@ -463,8 +484,8 @@
 			<td colspan="5">
 				<div id="empty">
 					<div class="left_img">
-						<a href="http://www.ubtob.com/" target="_blank" title="优软云首页"><img src="static/img/empty/uas_empty.png"></a>
-						<a href="#/index" title="B2B商务首页">B2B 商务</a>
+						<a href="http://www.ubtob.com/" target="_blank" title="优软云首页"><img src="static/img/all/empty-cart.png"></a>
+						<a href="http://b2b.usoftchina.com" title="B2B商务首页">B2B 商务</a>
 					</div>
 					<div class="right_link">
 						<p>暂无合作伙伴</p>
@@ -473,5 +494,8 @@
 			</td>
 		</tr>
 		</tbody>
+		<div ng-if="infoCommon.totalElement > 0" class="text-mns text-right" ng-class="infoCommon.totalElement >= 20 ? '': 'Boom18'">
+			显示&nbsp;{{(infoCommon .page - 1 ) * infoCommon.size + 1}}-{{infoCommon.all >= 20 ? infoCommon.page *  infoCommon.size: (infoCommon.page - 1 ) * infoCommon.size + infoCommon.all}}&nbsp;条,共&nbsp;{{infoCommon.totalElement}}&nbsp;条
+		</div>
 	</table>
 </div>

+ 472 - 0
src/main/webapp/resources/view/sso/b2b/newPartner.html

@@ -0,0 +1,472 @@
+<style>
+	.condition .more.open {
+		margin-top: 10px;
+		height: 36px;
+		opacity: 1;
+	}
+
+	.condition .more .form-group {
+		margin-bottom: 10px;
+	}
+
+	.order-table .header>th {
+		height: 38px;
+		text-align: center;
+		background: #f5f5f5;
+		border-top: 1px solid #e8e8e8;
+		border-bottom: 1px solid #e8e8e8;
+	}
+
+	.order-table .sep-row {
+		height: 10px;
+	}
+
+	.order-table .selector {
+		vertical-align: middle;
+		margin: 0 0 2px 0;
+	}
+
+	.toolbar label {
+		margin-right: 10px;
+		margin-bottom: 0;
+	}
+
+	.toolbar .select_all {
+		margin: 0 6px 0 10px;
+		line-height: 20px;
+	}
+
+	.toolbar .btn {
+		-moz-border-radius: 2px;
+		margin-right: 5px;
+		border: 1px solid #dcdcdc;
+		border-radius: 2px;
+		-webkit-border-radius: 2px;
+	}
+
+	.order-table .order-hd {
+		background: #fff;
+		height: 50px;
+		line-height: 50px;
+	}
+	.order-table .order-hd p{
+		line-height: 26px;
+		height: 26px;
+	}
+	.order-table .order-hd p.switch span:first-child{
+		line-height: 26px;
+	}
+	.order-table .order-hd p.switch{
+		padding-left: 10px;
+	}
+	.order-table .order-hd p.switch .checkbox{
+		padding-top: 0;
+		float: right;
+		margin-right: 30px;
+	}
+	/*.order-table .order-hd td{
+        padding-bottom: 10px;
+    }*/
+	.order-table .order-hd td.first {
+		padding-left: 20px;
+	}
+
+	.order-table .order-hd .order-main span {
+		margin-right: 8px;
+	}
+
+	.order-table .order-hd .order-code {
+		font-style: normal;
+		font-family: verdana;
+	}
+
+	.order-table .order-hd .order-sum {
+		padding: 0 5px;
+	}
+
+	.order-table>tbody {
+		border-bottom: 1px #e8e8e8 dotted;
+	}
+
+	.order-table>tbody:hover {
+		border: #fff 1px solid;
+		border-bottom: 20px solid #f5f5f5;
+	}
+	.order-table .operates {
+		display: none;
+	}
+
+	.order-table .operates i {
+		padding: 0 2px;
+	}
+
+	.order-table>tbody:hover .operates {
+		display: block;
+	}
+	.order-table>tbody:hover .operates-status {
+		display: none;
+	}
+
+
+	.order-table .order-bd {
+		border-bottom: 1px solid #e6e6e6;
+	}
+
+	.order-table .order-bd>td {
+		padding: 10px 5px;
+		vertical-align: top;
+		position: relative;
+	}
+
+	.order-table .order-bd .product {
+		padding-left: 20px;
+	}
+
+	.order-table .order-bd .order-number {
+		position: absolute;
+		top: -1px;
+		left: -1px;
+		width: 20px;
+		height: 20px;
+		line-height: 20px;
+		text-align: center;
+		background: #f5f5f5;
+		font-weight: 500;
+		border: solid 1px #d5d5d5;
+		border-radius: 0 0 10px 0;
+	}
+
+	.order-table .order-bd .order-number.key {
+		background: #56a022;
+		color: #ffffff;
+	}
+
+	.order-table .order-hd .row{
+		margin-left: 0;
+	}
+
+	.unPrinted {
+		color: #56a022;
+	}
+
+	.info-container .info:hover {
+		color: #CC3333;
+	}
+	.white{
+		color: #fff;
+	}
+	/*增加样式*/
+	.view-slide-in {
+		/*margin-top: 20px;*/
+	}
+	.view-slide-in .block {
+		background: #fff;
+	}
+	.view-slide-in .group-container {
+		background: #fff;
+		margin-bottom: 10px;
+	}
+	.view-slide-in .group-container .btn-group {
+		width: 190px;
+		border: none;
+		height: 45px;
+	}
+	.view-slide-in .group-container .btn-group .btn {
+		color: #000;
+	}
+	.view-slide-in .group-container .btn-group .btn-info {
+		color: #d32526;
+		background: #fff;
+		border: none;
+	}
+	.view-slide-in .group-container .btn-group .btn {
+		border: none;
+		font-size: 16px;
+		font-family: "Microsoft YaHei", "微软雅黑";
+	}
+	.view-slide-in .group-container .btn-group .btn em {
+		color: #d32526;
+		font-style: inherit;
+	}
+	.view-slide-in .group-container .btn-group .btn:hover {
+		background: #fff;
+		color: #d32526;
+	}
+	.view-slide-in .group-container {
+		padding: 0;
+	}
+	.view-slide-in .search-bg {
+		margin-top: 10px;
+	}
+	#topSearch {
+		font-size: 18px;
+	}
+	.view-slide-in #topSearch .search-bg i {
+		color: #999;
+		margin-left: 10px;
+	}
+	.form-group-sm .form-control-feedback {
+		width: 85px;
+		height: 36px;
+		line-height: 36px;
+		color: #fff;
+		background: #3f84f6;
+		text-align: center;
+		font-size: 14px;
+		cursor: pointer;
+	}
+	#topSearch .input-sm, .form-group-sm .form-control {
+		height: 36px;
+		line-height: 36px;
+		border: #3f84f6 1px solid;
+		border-radius: 0px;
+		font-size: 14px;
+	}
+	.search-bg .col-xs-6,.search-bg .row {
+		padding-right: 0;
+	}
+	.order-table .company-list,.order-table .order-hd:first-child {
+		background: #fff;
+		font-size: 16px;
+		height: 40px;
+		line-height: 40px;
+		border-bottom: #ddd 1px solid;
+	}
+	.order-table .company-list {
+		width:100%;
+		height: 190px;
+		border-bottom: 20px solid #f5f5f5;
+	}
+	.order-table .order-hd span.margin-left20 {
+		margin-left: 35px;
+	}
+	.order-table .product {
+		line-height: 25px;
+		font-size: 14px;
+	}
+	.order-table .product span {
+		margin-right: 10px;
+	}
+	.grey01 {
+		color: #969595;
+		font-size: 14px;
+		text-align: center;
+	}
+	.order-table .btn {
+		width: 80px;
+		height: 24px;
+		color: #fff;
+		border-radius: 4px;
+		padding: 0;
+		line-height: 22px;
+		margin-bottom: 2px;
+	}
+	/*.order-table .btn:hover{
+        background: #5078cb;
+    }*/
+	.order-table .btn:hover{
+		opacity: 0.9;
+	}
+	.order-table .btn01 {
+		color: #3f84f6;
+		background: #fff;
+		border: none;
+		font-size: 16px;
+	}
+	.order-table .order-hd td.first {
+		line-height: 25px;
+		font-size: 14px;
+		padding-top: 10px;
+		padding-bottom: 10px;
+	}
+	.search-bg .input-group-addon{
+		width: 85px;
+		height: 36px;
+		display: inline-block;
+		background: #3f84f6;
+		font-size: 16px;
+		text-align: center;
+		line-height: 36px;
+		color: #fff;
+		padding: 0;
+		border: none;
+		border-radius: 0;
+		position: absolute;
+		top: 0;
+		right: 0;
+	}
+	.search-bg .form-group{
+		position: relative;
+	}
+	.order-table>tbody{
+		border-bottom: #f5f5f5 16px solid !important;
+		/*border: #f5f5f5 16px solid !important;*/
+	}
+	.label-success {
+		background: #27b6da;
+	}
+	.label-danger {
+		background: #3f84f6;
+	}
+	.order-table .order-hd .text-center p{
+		margin: 5px 0;
+	}
+	.new-dot{
+		top: 15px;
+	}
+	.order-table .company-list, .order-table .order-hd:first-child{
+		border-top:#e8e8e8 1px solid;
+	}
+	.order-table .company-list tr .first{
+		border-bottom: #e8e8e8 1px solid;
+	}
+	.order-table>tbody{
+		border-bottom: none !important;
+	}
+	.order-table>tbody .height16{
+		height: 16px;
+		border-left: #f5f5f5 2px solid;
+		border-right: #f5f5f5 2px solid;
+	}
+	.order-table>tbody .height16 td{
+		background: #f5f5f5;
+	}
+	#myquest-public .order-table thead{
+		display:none;
+	}
+	.block{
+		width:1026px;
+		margin: 0 auto;
+	}
+	.ng-table-pager::after {
+		clear: both;
+		content: ' ';
+		zoom: 1;
+		display: block;
+		visibility: hidden;
+	}
+	.ng-table-pager {
+		padding-right: 20px;
+		padding-top: 50px;
+		margin-right: 0 !important;
+	}
+	.text-mns {
+		padding-right: 15px;
+		position: absolute;
+		bottom: 64px;
+		right: 20px;
+		font-size: 12px;
+	}
+	.Boom18 {
+		bottom: 18px;
+	}
+</style>
+<div class="block fr" id="myquest-public" style="position: relative">
+	<div class="loading in" ng-class="{'in': loading}">
+		<!--<i></i>-->
+		<div class="wrap">
+			<div class="outer"></div>
+		</div>
+	</div>
+	<div ng-include src="'static/view/sso/b2b/addPartnerAndRecord.html'"></div>
+	<div style="margin-top: -55px;">
+		<div class="col-xs-6" style="float: left;"></div>
+		<div class="form-input col-xs-6 myRequest search-bg">
+			<div class="row">
+				<div class="col-xs-9">
+					<div class="search">
+						<div class="form-group form-group-sm has-feedback" dropdown auto-close="outsideClick" on-toggle="searchAdvance=open">
+							<input type="search" class="form-control input-sm" ng-model="keyword" ng-search="onSearch()" placeholder="输入企业名称等关键词进行搜索" />
+							<a class="btn input-group-addon" ng-click="onSearch()">搜索</a>
+						</div>
+					</div>
+				</div>
+				<div class="col-xs-3" style="padding-left: 0;">
+					<p>搜索到<em>{{tableParams.total()}}</em>条</p>
+				</div>
+			</div>
+		</div>
+	</div>
+	<table class="order-table block" ng-table="tableParams">
+		<tbody ng-repeat="request in $data | orderBy : [ '-isTodo','-needAgreed']" class="company-list">
+		<tr class="order-hd" ng-dblclick="order.$collapsed=!order.$collapsed" ng-class="{'text-bold': order.display>0}">
+			<td colspan="4" style="position: relative;"><span ng-bind="request.vendName" class="margin-left20"></span><b class="new-dot" ng-if="request.statusCode==311 && request.method==0"></b><img src="static/img/logo/youruanrenzheng.png" id="logo" ng-if="enterprise.status == 313"></td>
+			<td width="140" class="text-center">
+			</td>
+		</tr>
+		<tr class="height72 order-hd" ng-dblclick="order.$collapsed=!order.$collapsed" ng-class="{'text-bold': order.display>0}">
+			<td class="first" colspan="4">
+				<div class="row">
+					<div class="col-md-3"><span class="text-muted">营业执照:</span><span ng-bind="::request.vendUID"></span></div>
+					<div class="col-md-3"><span class="text-muted">法定代表人:</span><span ng-bind="::request.enterprise.enCorporation"></span></div>
+					<div class="col-md-4"><span class="text-muted">企业UU:</span><span ng-bind="::request.enterprise.uu"></span></div>
+				</div>
+				<span class="text-icon" ng-if="request.statusCode==313 && request.method == 1">已通过</span>
+				<span class="text-icon" ng-if="request.statusCode==310 && request.method==1">未通过</span>
+				<span class="text-icon" ng-if="request.statusCode==313 && request.method == 0">已同意</span>
+				<span class="text-icon" ng-if="request.statusCode==310 && request.method==0">已拒绝</span>
+				<div class="row">
+					<div class="col-md-3"><span class="text-muted">联系人:</span><span ng-bind="::request.contact.userName"></span></div>
+					<div class="col-md-3"><span class="text-muted">联系电话:</span><span ng-bind="::request.contact.userTel"></span></div>
+					<div class="col-md-4"><span class="text-muted">邮箱:</span><span ng-bind="::request.contact.userEmail"></span></div>
+				</div>
+				<div class="row">
+					<div class="col-md-3"><span class="text-muted">行业:</span><span ng-bind="::request.enterprise.profession"></span></div>
+					<div class="col-md-7"><span class="text-muted">经营范围:</span><span ng-bind="::request.enterprise.tags"></span></div>
+				</div>
+				<div class="row col-md-12"><span class="text-muted">企业地址:</span><span ng-bind="::request.enterprise.enAddress"></span></div>
+			</td>
+			<td width="140" class="text-center">
+				<p ng-if="request.statusCode==313 && request.vendor == 0"><a class="btn label-success white" ng-click="addSupplier(request.vendUID)">添加供应商 </a></p>
+				<p class="switch"  ng-if="request.statusCode==313 && request.vendor == 1">
+					<span style="float: left;">供应商</span>
+					<span class="checkbox">
+                            <span class="off" ng-if="request.vendor == 1 && request.vendswitch == 1" ng-click="relieve(request.vendorId)" title="已启用"></span>
+                            <span class=""  ng-if="request.vendor == 1 && request.vendswitch != 1" ng-click="activeVend(request.vendorId)" title="已禁用"></span>
+                        </span>
+				</p>
+				<p ng-if="request.statusCode==313 && request.servicer != 1"><a class="line24 btn label-success white" ng-click="addServicer(request.vendUID)">添加服务商</a></p>
+				<p class="switch"  ng-if="request.statusCode==313 && request.servicer == 1">
+					<span style="float: left;">服务商</span>
+					<span class="checkbox">
+                            <span class="off" ng-if="request.servicer == 1 && request.servicerswitch == 1" ng-click="relieveServicer(request.vendorId)" title="已启用"></span>
+                            <span class=""  ng-if="request.servicer == 1 && (request.servicerswitch != 1)" ng-click="activeServicer(request.vendorId)" title="已禁用"></span>
+                        </span>
+				</p>
+				<p ng-if="request.statusCode==313 && request.customer == 0"><a class="line24 btn label-danger white" ng-click="addCust(request.vendUID)">添加客户</a></p>
+				<p class="switch"  ng-if="request.statusCode==313 && request.customer == 1">
+					<span style="float: left;">客户</span>
+					<span class="checkbox">
+                            <span class="off" ng-if="request.customer == 1 && request.custswitch == 1" ng-click="disableCust(request.custId)" title="已启用"></span>
+                            <span class=""  ng-if="request.customer == 1 && request.custswitch != 1" ng-click="activeCust(request.custId)" title="已禁用"></span>
+                        </span>
+				</p>
+				<p ng-if="request.statusCode==311 && request.method==0"><a  class="btn label-success white" ng-click="agree(request.id)" style="width: 70px; background: #3f84f6;">同意</a></p>
+				<p ng-if="request.statusCode==311 && request.method==0"><a  class="btn  label-danger white" ng-click="refuse(request.id, request.reason)" style="width: 70px; background: #e07b7c;">拒绝</a></p>
+				<p ng-if="request.statusCode==311 && request.method==1"><span class="btn01 btn label-info white">待回复</span></p>
+				<p ng-if="request.statusCode==310 && request.method==1" style="color: #d32526;">未通过</p>
+				<p ng-if="request.statusCode==310 && request.method==1"><a class="btn label-danger white" ng-click="addAgain(request.vendName, request.vendUID)" >再次添加</a></p>
+				<p ng-if="request.statusCode==310 && request.method==0"><span class="btn01 btn label-danger white" >已拒绝</span></p>
+			</td>
+		</tr>
+		</tbody>
+		<tbody ng-if="tableParams.total() == 0" class="no-record-tab">
+		<tr>
+			<td colspan="5">
+				<div id="empty">
+					<div class="left_img">
+						<a href="http://www.ubtob.com/" target="_blank" title="优软云首页"><img src="static/img/all/empty-cart.png"></a>
+						<a href="http://b2b.usoftchina.com" title="B2B商务首页">B2B 商务</a>
+					</div>
+					<div class="right_link">
+						<p>暂无合作伙伴</p>
+					</div>
+				</div>
+			</td>
+		</tr>
+		</tbody>
+	</table>
+	<!--<div ng-if="infoCommon.totalElement > 0" class="text-mns text-right" ng-class="infoCommon.totalElement >= 20 ? '': 'Boom18'">-->
+		<!--显示&nbsp;{{(infoCommon .page - 1 ) * infoCommon.size + 1}}-{{infoCommon.all >= 20 ? infoCommon.page *  infoCommon.size: (infoCommon.page - 1 ) * infoCommon.size + infoCommon.all}}&nbsp;条,共&nbsp;{{infoCommon.totalElement}}&nbsp;条-->
+	<!--</div>-->
+</div>

+ 390 - 0
src/main/webapp/resources/view/sso/b2b/searchresult.html

@@ -0,0 +1,390 @@
+<style>
+.condition .more.open {
+	margin-top: 10px;
+	height: 36px;
+	opacity: 1;
+}
+
+.condition .more .form-group {
+	margin-bottom: 10px;
+}
+
+.enterprise-table .header>th {
+	height: 38px;
+	text-align: center;
+	background: #f5f5f5;
+	benterprise-top: 1px solid #e8e8e8;
+	benterprise-bottom: 1px solid #e8e8e8;
+}
+
+.enterprise-table .sep-row {
+	height: 10px;
+}
+
+.enterprise-table .selector {
+	vertical-align: middle;
+	margin: 0 0 2px 0;
+}
+
+.toolbar label {
+	margin-right: 10px;
+	margin-bottom: 0;
+}
+
+.toolbar .select_all {
+	margin: 0 6px 0 10px;
+	line-height: 20px;
+}
+
+.toolbar .btn {
+	-moz-benterprise-radius: 2px;
+	margin-right: 5px;
+	benterprise: 1px solid #dcdcdc;
+	benterprise-radius: 2px;
+	-webkit-benterprise-radius: 2px;
+}
+
+.enterprise-table .enterprise-hd {
+	background: #f5f5f5;
+	height: 40px;
+	line-height: 40px;
+}
+
+.enterprise-table .enterprise-hd td.first {
+	padding-left: 20px;
+}
+
+.enterprise-table .enterprise-hd .enterprise-main span {
+	margin-right: 8px;
+}
+
+.enterprise-table .enterprise-hd .enterprise-code {
+	font-style: normal;
+	font-family: verdana;
+}
+
+.enterprise-table .enterprise-hd .enterprise-sum {
+	padding: 0 5px;
+}
+
+.enterprise-table>tbody {
+	benterprise: 1px solid transparent;
+}
+
+.enterprise-table>tbody:hover {
+	benterprise-color: #56a022;
+	benterprise-width: 2px;
+}
+
+.enterprise-table .operates {
+	display: none;
+}
+
+.enterprise-table .operates i {
+	padding: 0 2px;
+}
+
+.enterprise-table>tbody:hover .operates {
+	display: block;
+}
+.enterprise-table>tbody:hover .operates-status {
+	display: none;
+}
+
+
+.enterprise-table .enterprise-bd {
+	benterprise-bottom: 1px solid #e6e6e6;
+}
+
+.enterprise-table .enterprise-bd>td {
+	padding: 10px 5px;
+	vertical-align: top;
+	position: relative;
+}
+
+.enterprise-table .enterprise-bd .product {
+	padding-left: 20px;
+}
+
+.enterprise-table .enterprise-bd .enterprise-number {
+	position: absolute;
+	top: -1px;
+	left: -1px;
+	width: 20px;
+	height: 20px;
+	line-height: 20px;
+	text-align: center;
+	background: #f5f5f5;
+	font-weight: 500;
+	benterprise: solid 1px #d5d5d5;
+	benterprise-radius: 0 0 10px 0;
+}
+
+.enterprise-table .enterprise-bd .enterprise-number.key {
+	background: #56a022;
+	color: #ffffff;
+}
+
+.unPrinted {
+	color: #56a022;
+}
+.view-slide-in{
+	/*margin-top: 20px;*/
+}
+.info-container .info:hover {
+	color: #CC3333;
+}
+.enterprise-hd .btn{
+	border-radius: 0;
+}
+/*	增加样式*/
+.view-slide-in .block{
+	background: #fff;
+}
+.view-slide-in .group-container{
+	background: #fff;
+}
+.view-slide-in .group-container .btn-group{
+	width: 160px;
+	border: none;
+	height: 45px;
+}
+.view-slide-in .group-container .btn-group .btn-info{
+	color: #d32526;
+	background: #fff;
+	border: none;
+}
+.view-slide-in .group-container .btn-group .btn{
+	border: none;
+	font-size: 16px;
+	font-family: "Microsoft YaHei", "微软雅黑";
+}
+.view-slide-in .group-container .btn-group .btn em{
+	color: #d32526;
+	font-style: inherit;
+}
+.view-slide-in .group-container .btn-group .btn:hover{
+	background: #fff;
+	color: #d32526;
+}
+.view-slide-in .group-container{
+	padding: 0;
+}
+.view-slide-in .search-bg{
+	margin-top: 20px;
+	margin-bottom: 15px;
+}
+#topSearch{
+	font-size: 18px;
+}
+.view-slide-in #topSearch .search-bg i{
+	color: #999;
+	margin-left: 10px;
+}
+.form-group-sm .form-control-feedback{
+	width: 85px;
+	height: 36px;
+	line-height: 36px;
+	color: #fff;
+	background: #3f84f6;
+	text-align: center;
+	font-size: 14px;
+	cursor: pointer;
+}
+#topSearch .input-sm, .form-group-sm .form-control{
+	height: 36px;
+	line-height: 36px;
+	border: #3f84f6 1px solid;
+	border-radius: 0px;
+	font-size: 14px;
+}
+.enterprise-table .company-list{
+	margin-bottom: 10px;
+}
+.enterprise-table .company-list,.enterprise-table .enterprise-hd{
+	background: #fff;
+	font-size: 16px;
+	height: 40px;
+	line-height: 40px;
+	border-bottom: #ddd 1px solid;
+}
+.enterprise-table .company-list,.enterprise-table .enterprise-bd{
+	/*border-bottom: #f5f5f5 20px solid;*/
+}
+.enterprise-table .enterprise-hd span:first-child{
+	margin-left: 20px;
+}
+.enterprise-table .product{
+	line-height: 25px;
+	font-size: 14px;
+}
+.enterprise-table .product span{
+	margin-right: 10px;
+}
+.grey01{
+	color: #969595;
+	font-size: 14px;
+	}
+.enterprise-table .btn{
+	width: 80px;
+	height: 24px;
+	color: #fff;
+	border-radius: 4px;
+	padding: 0;
+	line-height: 22px;
+}
+.enterprise-table .btn01{
+	color: #3f84f6;
+	background: #fff;
+	border: none;
+	font-size: 16px;
+	}
+.search-bg .input-group-addon{
+	width: 85px;
+	height: 36px;
+	display: inline-block;
+	background: #3f84f6;
+	font-size: 16px;
+	text-align: center;
+	line-height: 36px;
+	color: #fff;
+	padding: 0;
+	border: none;
+	border-radius: 0;
+	position: absolute;
+	top: 0;
+	right: 0;
+}
+.search-bg .form-group{
+	position: relative;
+}
+.enterprise-table em {
+	font-family: "Microsoft YaHei", "微软雅黑";
+	font-style: normal;
+}
+.invite-btn:hover{
+	border: #3f84f6 2px solid;
+}
+.invite-right{
+	padding-right: 0;
+}
+.invite-right p{
+	font-size: 14px;
+	color: #666;
+}
+.invite-right p a{
+	text-decoration: underline;
+}
+.invite-right .invite-text{
+	color: #666;
+	margin: 0 8px;
+	font-style: italic;
+}
+.enterprise-table .company-list, .enterprise-table .enterprise-hd{
+	border-top:#e8e8e8 1px solid;
+}
+.enterprise-table .company-list .product{
+	border-bottom: #e8e8e8 1px solid;
+}
+.enterprise-table .company-list .height16{
+	height: 16px;
+	border-left: #f5f5f5 2px solid;
+	border-right: #f5f5f5 2px solid;
+}
+.enterprise-table .company-list .height16 td{
+	background: #f5f5f5;
+}
+.block{
+	width:1026px;
+	margin: 0 auto;
+	border: #e8e8e8 1px solid;
+	border-top: none;
+}
+</style>
+<div class="block fr">
+<div class="loading in" ng-class="{'in': loading}">
+	<!--<i></i>-->
+	<div class="wrap">
+		<div class="outer"></div>
+	</div>
+</div>
+<div ng-include src="'static/view/sso/b2b/addPartnerAndRecord.html'"></div>
+	<div style="margin-top: -55px;">
+		<div class="col-xs-6" style="float: left;"></div>
+		<div class="form-input col-xs-6 myRequest search-bg">
+			<div class="row">
+				<div class="col-xs-9">
+					<div class="search">
+						<div class="form-group form-group-sm has-feedback" dropdown auto-close="outsideClick" on-toggle="searchAdvance=open">
+							<input type="search" class="form-control input-sm" ng-model="keyword" ng-search="onSearch(keyword)" placeholder="输入企业名称等关键词进行搜索" />
+							<a class="btn input-group-addon" ng-click="onSearch(keyword)">搜索</a>
+						</div>
+					</div>
+				</div>
+				<div class="col-xs-3" style="padding-left: 0;">
+					<p>搜索到<em>{{tableParams.total()}}</em>条</p>
+				</div>
+			</div>
+		</div>
+	</div>
+<table class="enterprise-table block" ng-table="tableParams">
+	<tbody ng-repeat="enterprise in $data" class="company-list">
+		<tr class="enterprise-hd" ng-dblclick="enterprise.$collapsed=!enterprise.$collapsed">
+			<td colspan="4"><span ng-bind-html="::enterprise.name| getkey:keyword" class="text-center"></span>&nbsp;<img src="static/img/logo/youruanrenzheng.png" id="logo" ng-if="enterprise.status == 313"></td>
+			<td width="180" class="grey01 text-center" ng-if="enterprise.uu == null">当前企业不是优软云用户</td>
+			<td width="140" class="grey01 text-center" ng-if="enterprise.uu != null">优软云用户</td>
+		</tr>
+		<tr class="enterprise-bd" ng-if="!enterprise.$collapsed ">
+			<td class="product" colspan="4">
+				<div class="row">
+					<span class="col-md-3"><span class="text-muted">营业执照:</span><span ng-bind="::enterprise.businessCode" ></span></span>
+					<span class="col-md-3"><span class="text-muted">法定代表人:</span><span ng-bind="::enterprise.corporation" ></span></span>
+					<span class="col-md-3"><span class="text-muted">企业UU:</span><span ng-bind="::enterprise.uu" ></span></span>
+				</div>
+				<div class="row">
+					<span class="col-md-3"><span class="text-muted">管理员:</span><em ng-bind-html="::enterprise.adminName| getkey:keyword"></em></span>
+					<span class="col-md-3"><span class="text-muted">电话:</span>{{::enterprise.adminTel}}</span>
+					<span class="col-md-5"><span class="text-muted">邮箱:</span>{{::enterprise.adminEmail}}</span>
+				</div>
+				<div class="row">
+					<span class="col-md-3"><span class="text-muted">行业:</span><span ng-bind="::enterprise.profession"></span></span>
+					<span class="col-md-8"><span class="text-muted">经营范围:</span><span ng-bind="::enterprise.tags"></span></span>
+				</div>
+				<div class="row">
+					<span class="col-md-12"><span class="text-muted">企业地址:</span><span ng-bind="::enterprise.address"></span></span>
+				</div>
+			</td>
+			<td width="100" class="text-center">
+				<!-- 拒绝了他人申请的企业,无法主动去添加已被拒绝的企业为合作伙伴 -->
+				<a class="btn btn-primary" ng-click="addPartner(enterprise.name,enterprise.businessCode)" ng-if="enterprise.requestStatus==null && enterprise.uu != null">立即添加</a>
+				<a class="btn btn-primary" ng-click="invite(enterprise.name)" ng-if="(enterprise.requestStatus==null||enterprise.requestStatus==310) && enterprise.uu == null">邀请注册</a>
+				<span class="btn01 label-info btn-primary" ng-if="enterprise.requestStatus==311 && enterprise.method==0">已收到申请</span>
+				<p class="line24" ng-if="enterprise.requestStatus==311 && enterprise.method==0"><span class="btn btn-primary" ng-click="view(enterprise.name)">立即查看</span></p>
+				<span class="btn01 label-info btn-primary" ng-if="enterprise.requestStatus==311 && enterprise.method==1">已发出申请</span>
+				<span class="btn01 label-info btn-primary" ng-if="enterprise.requestStatus==310 && enterprise.method==0">已拒绝申请</span>
+				<span class="btn01 label-info btn-primary" ng-if="enterprise.requestStatus==310 && enterprise.method==1">申请已被拒绝</span>
+				<div><a class="btn btn-primary" ng-click="addPartner(enterprise.name,enterprise.businessCode)" ng-if="(enterprise.requestStatus == 310 && enterprise.method == 1) && enterprise.status == 313">再次添加</a></div>
+				<!-- <br><a ng-click="view(enterprise.name)">立即查看</a> -->
+				<span class="btn label-info" ng-if="enterprise.requestStatus==313">已添加</span><br/>
+				<p class="line24" ng-if="enterprise.requestStatus==313"><span class="btn btn-primary" ng-click="view(enterprise.name)" >立即查看</span></p>
+			</td>
+		</tr>
+	</tbody>
+	<tbody ng-if="tableParams.total() == 0" class="no-record-tab">
+	<tr>
+		<td colspan="7">
+			<div id="empty">
+				<div class="left_img">
+					<a href="http://www.ubtob.com/" target="_blank" title="优软云首页"><img src="static/img/all/empty-cart.png"></a>
+					<a href="http://b2b.usoftchina.com" title="B2B商务首页">B2B 商务</a>
+				</div>
+				<div class="right_link">
+					<p>暂未搜到与({{tip}})相关的企业信息</p>
+					<a ng-click="invite(tip)"><i class="way_icon"></i>立即邀请注册优软云</a>
+				</div>
+			</div>
+		</td>
+	</tr>
+	</tbody>
+</table>
+</div>

+ 30 - 5
src/main/webapp/resources/view/vendor/b2b/baseInfo/servicerInfo.html → src/main/webapp/resources/view/sso/b2b/servicerInfo.html

@@ -163,10 +163,32 @@
 		border: solid 1px #5078cb;
 		color: #ffffff !important ;
 	}
+	.ng-table-pager::after {
+		clear: both;
+		content: ' ';
+		zoom: 1;
+		display: block;
+		visibility: hidden;
+	}
+	.ng-table-pager {
+		padding-right: 20px;
+		padding-top: 50px;
+		margin-right: 0 !important;
+	}
+	.text-mns {
+		padding-right: 15px;
+		position: absolute;
+		bottom: 64px;
+		right: 20px;
+		font-size: 12px;
+	}
+	.Boom18 {
+		bottom: 18px;
+	}
 </style>
 <link rel="stylesheet" href="static/css/b2bPublic.css">
 <div style="background: #fff;" id="myquest-public" class="block fr">
-	<div ng-include src="'static/view/vendor/b2b/baseInfo/vendorAndCustomer.html'"></div>
+	<div ng-include src="'static/view/sso/b2b/vendorAndCustomer.html'"></div>
 	<div id="public">
 		<div class="condition" style="padding: 0;">
 			<!--<div class="myReuest search-bg condition" >
@@ -195,13 +217,13 @@
 		</div>
 	</div>
 	<div class="wrap-contnet" id="customer-tab">
-		<div class="content">
+		<div class="content" style="position: relative">
 			<!--供应商列表-->
 			<table class="table  table-hover customer-tab" ng-table="customerParams">
 				<tbody ng-repeat="vendor in $data">
 				<tr class="customer-hd">
 					<td colspan="4" class="text-left"><span><img src="static/img/user/images/shop_home.png"><span ng-bind="::vendor.vendorEnterprise.enName" style="margin-left: 3px;"></span></span></td>
-					<td>
+					<td class="switch">
 							<span class="checkbox" style="width: 100%; margin: 0; height: 26px;">
 								<span class="off" ng-if="vendor.servicerswitch == 1" ng-click="relieveServicer(vendor.id)" title="已启用"></span>
 								<span class="" ng-if="vendor.servicerswitch == 0" ng-click="activeServicer(vendor.id)" title="已禁用"></span>
@@ -241,8 +263,8 @@
 					<td colspan="5">
 						<div id="empty">
 							<div class="left_img">
-								<a href="http://www.ubtob.com/" target="_blank" title="优软云首页"><img src="static/img/empty/uas_empty.png"></a>
-								<a href="#/index" title="B2B商务首页">B2B 商务</a>
+								<a href="http://www.ubtob.com/" target="_blank" title="优软云首页"><img src="static/img/all/empty-cart.png"></a>
+								<a href="http://b2b.usoftchina.com" title="B2B商务首页">B2B 商务</a>
 							</div>
 							<div class="right_link">
 								<p>暂无服务商信息</p>
@@ -252,6 +274,9 @@
 				</tr>
 				</tbody>
 			</table>
+			<div ng-if="infoCommon.totalElement > 0" class="text-mns text-right" ng-class="infoCommon.totalElement >= 20 ? '': 'Boom18'">
+				显示&nbsp;{{(infoCommon .page - 1 ) * infoCommon.size + 1}}-{{infoCommon.all >= 20 ? infoCommon.page *  infoCommon.size: (infoCommon.page - 1 ) * infoCommon.size + infoCommon.all}}&nbsp;条,共&nbsp;{{infoCommon.totalElement}}&nbsp;条
+			</div>
 		</div>
 	</div>
 </div>

+ 1 - 1
src/main/webapp/resources/view/vendor/b2b/baseInfo/vendorAndCustomer.html → src/main/webapp/resources/view/sso/b2b/vendorAndCustomer.html

@@ -41,7 +41,7 @@
 		color: #f15601;
 	}
 </style>
-<div ng-include src="'static/view/vendor/b2b/baseInfo/enMenu.html'"></div>
+<div ng-include src="'static/view/sso/b2b/enMenu.html'"></div>
 <div class="group-container condition">
 	<div class="row" ng-controller="RequestAmountCtrl">
 		<!--<div class="col-xs-6">

+ 31 - 7
src/main/webapp/resources/view/vendor/b2b/baseInfo/vendorsInfo.html → src/main/webapp/resources/view/sso/b2b/vendorsInfo.html

@@ -163,10 +163,31 @@
 		border: solid 1px #5078cb;
 		color: #ffffff !important ;
 	}
-
+	.ng-table-pager::after {
+		clear: both;
+		content: ' ';
+		zoom: 1;
+		display: block;
+		visibility: hidden;
+	}
+	.ng-table-pager {
+		padding-right: 20px;
+		padding-top: 50px;
+		margin-right: 0 !important;
+	}
+	.text-mns {
+		padding-right: 15px;
+		position: absolute;
+		bottom: 64px;
+		right: 20px;
+		font-size: 12px;
+	}
+	.Boom18 {
+		bottom: 18px;
+	}
 </style>
 <div style="background: #fff;" id="myquest-public" class="block fr">
-	<div ng-include src="'static/view/vendor/b2b/baseInfo/vendorAndCustomer.html'"></div>
+	<div ng-include src="'static/view/sso/b2b/vendorAndCustomer.html'"></div>
 	<link rel="stylesheet" href="static/css/b2bPublic.css">
 	<div id="public">
 		<div class="condition" style="padding: 0;">
@@ -195,14 +216,14 @@
 			</div>
 		</div>
 	</div>
-	<div class="wrap-content" id="customer-tab">
+	<div class="wrap-content" id="customer-tab"  style="position: relative">
 		<div class="content">
 			<!--供应商列表-->
 			<table class="table order-table table-hover customer-tab" ng-table="customerParams">
 				<tbody ng-repeat="vendor in $data">
 				<tr class="customer-hd">
 					<td colspan="4" class="text-left"><span><img src="static/img/user/images/shop_home.png"><span ng-bind="::vendor.vendorEnterprise.enName" style="margin-left: 3px;"></span></span></td>
-					<td>
+					<td class="switch">
 							<span class="checkbox" style="width: 100%; margin: 0; height: 26px;">
 								<span class="off" ng-if="vendor.vendswitch == 1" ng-click="relieve(vendor.id)" title="已启用"></span>
 								<span class="" ng-if="vendor.vendswitch == 0" ng-click="activeVend(vendor.id)" title="已禁用"></span>
@@ -234,7 +255,7 @@
 						</div>
 					</td>
 					<td width="120" class="text-center all-btn">
-						<a ng-if="vendor.vendswitch == 1" href="#/purc/purcinquiry/{{vendor.vendorEnterprise.enBussinessCode}}" class="btn01">立即询价</a><br/>
+						<a ng-if="vendor.vendswitch == 1" href="/user#/purc/purcinquiry/{{vendor.vendorEnterprise.enBussinessCode}}" class="btn01">立即询价</a><br/>
 						<a ng-if="vendor.vendswitch == 1" ng-click="purcByEn(vendor.vendorEnterprise.enBussinessCode)" class="btn02">下采购单</a>
 					</td>
 				</tr>
@@ -244,8 +265,8 @@
 					<td colspan="5">
 						<div id="empty">
 							<div class="left_img">
-								<a href="http://www.ubtob.com/" target="_blank" title="优软云首页"><img src="static/img/empty/uas_empty.png"></a>
-								<a href="#/index" title="B2B商务首页">B2B 商务</a>
+								<a href="http://www.ubtob.com/" target="_blank" title="优软云首页"><img src="static/img/all/empty-cart.png"></a>
+								<a href="http://b2b.usoftchina.com" title="B2B商务首页">B2B 商务</a>
 							</div>
 							<div class="right_link">
 								<p>暂无供应商信息</p>
@@ -255,6 +276,9 @@
 				</tr>
 				</tbody>
 			</table>
+			<div ng-if="infoCommon.totalElement > 0" class="text-mns text-right" ng-class="infoCommon.totalElement >= 20 ? '': 'Boom18'">
+				显示&nbsp;{{(infoCommon .page - 1 ) * infoCommon.size + 1}}-{{infoCommon.all >= 20 ? infoCommon.page *  infoCommon.size: (infoCommon.page - 1 ) * infoCommon.size + infoCommon.all}}&nbsp;条,共&nbsp;{{infoCommon.totalElement}}&nbsp;条
+			</div>
 		</div>
 	</div>
 </div>

+ 3 - 0
src/main/webapp/resources/view/sso/left_nav.html

@@ -51,6 +51,9 @@
 		<li ng-class="{'active' : active == 'sso_invoice'}"><span ui-sref="ssoInvoice">开票信息</span></li>
 		<li ng-class="{'active' : active == 'vendor_pay_center'}" ng-if="userInfo.enterprise.uu && userInfo.enterprise.isVendor == 313"><span ui-sref="gatheringAccount({'tab': 'accountTab'})">收款账户</span></li>
 		<li ng-class="{'active' : active == 'buyer_pay_center'}"><span ui-sref="payAccount({'status': 'pay-info'})">付款账户</span></li>
+		<li ng-class="{'active' : active == 'baseInfo_myRequest'}"><span ui-sref="baseInfo_myRequest">企业圈</span></li>
+		<li ng-class="{'active' : active == 'approvalflow_log'}"><span ui-sref="approvalflow_log">操作日志</span></li>
+		<!--<li ng-class="{'active' : active == 'approvalflow_flow'}"><span ui-sref="approvalflow_flow">审批流</span></li>-->
 		<!--<li ng-class="{'active' : active == 'vendor_logistics'}">-->
 			<!--<span  ui-sref="vendor_logistics" ng-hide="store && (!store.status || store.status === 'OPENED')">物流管理</span>-->
 			<!--<span  ui-sref="vendor_deliveryRule" ng-if="store && (!store.status || store.status === 'OPENED')">物流管理</span>-->

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

@@ -904,9 +904,14 @@
 </style>
 <!--右侧主体部分-->
 <div class="count user_right fr" ng-click="hideList()">
+    <div class="tab_top" style="margin-bottom: 16px;">
+        <ul>
+            <li ng-class="{active: tab == 'b2c'}" ng-click="setTab('b2c')"><a href="javascript:void(0)">商城角色</a></li>
+            <li ng-class="{active: tab == 'b2b'}" ng-click="setTab('b2b')"><a href="javascript:void(0)">b2b角色</a></li>
+        </ul>
+    </div>
     <!--安全设置-->
     <div class="count_center">
-        <div class="rt_menu"><span>角色权限</span></div>
         <!-- 角色管理 -->
         <div class="count01 clearfix role-manage" >
             <p>默认角色</p>

+ 17 - 6
src/main/webapp/resources/view/sso/staffManagement.html

@@ -350,6 +350,8 @@
     .auth-info-area .role-info tr td.edit-btn-area a, .auth-info-area .role-info tr td.edit-btn-area span{
         color: #5078cb;
         cursor: pointer;
+        display: block;
+        line-height: 26px;
     }
     .auth-info-header {
         height: 40px;
@@ -963,7 +965,8 @@
                         <th width="67">性别</th>
                         <th width="133">手机</th>
                         <th width="207">邮箱</th>
-                        <th width="376">角色</th>
+                        <th width="188">商城角色</th>
+                        <th width="188">b2b角色</th>
                         <th width="107">操作</th>
                     </tr>
                     </thead>
@@ -1020,16 +1023,24 @@
                             <span ng-repeat="role in user.roles track by $index" ng-if="$index < 6 || user.roles.length == 7" class="role-tag bgcolor-{{role.color || 1}}">{{role.desc.substring(0,1)}}</span>
                             <span class="role-tag bgcolor-6" ng-if="user.roles.length > 7">...</span>
                         </td>
+                        <td class="role-tag-area detail-role-tag">
+                            <span ng-repeat="role in user.b2bRoles track by $index" ng-if="$index < 6 || user.roles.length == 7" class="role-tag bgcolor-{{role.color || 1}}">{{role.desc.substring(0,1)}}</span>
+                            <span class="role-tag bgcolor-6" ng-if="user.roles.length > 7">...</span>
+                        </td>
                         <!--<td class="edit-btn-area">
                             <a>编辑 </a><span>|</span><a> 删除</a>
                         </td>-->
                         <td class="edit-btn-area">
                             <!--<a class="operator-trigger" href="javascript:void(0);"><i class="fa fa-pencil fa-lg" ng-show="(userInfo.sys && enterprise.enAdminuu != user.userUU) || users.length == 1"></i></a>-->
-                            <div>  <!--&& enterprise.enAdminuu != user.userUU-->
-                                <span ng-click="editUserRole(user)" ng-show="user.userUU != userInfo.userUU" title="角色分配"><i></i>角色分配 | </span>
-                                <span ng-click="setShowDelUserFlag(true, user)" ng-show="user.userUU != userInfo.userUU" title="删除"><i></i>删除</span>
-                                <span ng-show="user.userUU == userInfo.userUU" disabled="false" title="角色分配" style="color: #606168; cursor: not-allowed;"><i></i>角色分配 | </span>
-                                <span ng-show="user.userUU == userInfo.userUU" disabled="false" title="删除" style="color: #606168; cursor: not-allowed;"><i></i>删除</span>
+                            <div ng-if="user.userUU != userInfo.userUU">  <!--&& enterprise.enAdminuu != user.userUU-->
+                                <span ng-click="addVendor(user)" title="客户分配">b2b客户分配</span>
+                                <span ng-click="editUserRole(user)" title="角色分配"><i></i>角色分配</span>
+                                <span ng-click="setShowDelUserFlag(true, user)" title="删除"><i></i>删除</span>
+                            </div>
+                            <div ng-if="user.userUU == userInfo.userUU">
+                                <span disabled="false" title="客户分配" style="color: #606168; cursor: not-allowed;"><i></i>b2b客户分配</span>
+                                <span disabled="false" title="角色分配" style="color: #606168; cursor: not-allowed;"><i></i>角色分配</span>
+                                <span disabled="false" title="删除" style="color: #606168; cursor: not-allowed;"><i></i>删除</span>
                             </div>
                         </td>
                     </tr>

+ 2 - 2
src/main/webapp/resources/view/usercenter/b2b/Purc/addOrder.html

@@ -471,8 +471,8 @@
 					<td colspan="5">
 						<div id="empty">
 							<div class="left_img">
-								<a href="http://www.ubtob.com/" target="_blank" title="优软云首页"><img src="static/img/empty/uas_empty.png"></a>
-								<a href="#/index" title="B2B商务首页">B2B 商务</a>
+								<a href="http://www.ubtob.com/" target="_blank" title="优软云首页"><img src="static/img/all/empty-cart.png"></a>
+								<a href="http://b2b.usoftchina.com" title="B2B商务首页">B2B 商务</a>
 							</div>
 							<div class="right_link">
 								<p ng-if="tip != null">搜索"{{tip}}"未找到产品信息,请重新输入搜索条件</p>

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio