Kaynağa Gözat

Merge branch 'dev-mysql' into feature_release-tomysql

zhaohongpeng 7 yıl önce
ebeveyn
işleme
3bf06d7641
100 değiştirilmiş dosya ile 3348 ekleme ve 940 silme
  1. 2 1
      src/main/java/com/uas/platform/b2c/common/account/controller/AuthenticationController.java
  2. 1 1
      src/main/java/com/uas/platform/b2c/common/account/controller/EnterpriseController.java
  3. 72 0
      src/main/java/com/uas/platform/b2c/common/account/controller/ResourceController.java
  4. 97 0
      src/main/java/com/uas/platform/b2c/common/account/controller/RoleController.java
  5. 1 1
      src/main/java/com/uas/platform/b2c/common/account/controller/SecurityController.java
  6. 9 5
      src/main/java/com/uas/platform/b2c/common/account/controller/UserController.java
  7. 9 0
      src/main/java/com/uas/platform/b2c/common/account/dao/EnterpriseDao.java
  8. 20 0
      src/main/java/com/uas/platform/b2c/common/account/dao/ResourceDao.java
  9. 3 0
      src/main/java/com/uas/platform/b2c/common/account/dao/ResourceItemDao.java
  10. 82 0
      src/main/java/com/uas/platform/b2c/common/account/dao/RoleDao.java
  11. 13 3
      src/main/java/com/uas/platform/b2c/common/account/dao/UserDao.java
  12. 28 0
      src/main/java/com/uas/platform/b2c/common/account/model/Resource.java
  13. 1 1
      src/main/java/com/uas/platform/b2c/common/account/model/ResourceItem.java
  14. 14 0
      src/main/java/com/uas/platform/b2c/common/account/model/Role.java
  15. 1 1
      src/main/java/com/uas/platform/b2c/common/account/model/User.java
  16. 16 0
      src/main/java/com/uas/platform/b2c/common/account/service/ResourceService.java
  17. 76 0
      src/main/java/com/uas/platform/b2c/common/account/service/RoleService.java
  18. 1 0
      src/main/java/com/uas/platform/b2c/common/account/service/UserService.java
  19. 110 0
      src/main/java/com/uas/platform/b2c/common/account/service/impl/ResourceServiceImpl.java
  20. 124 0
      src/main/java/com/uas/platform/b2c/common/account/service/impl/RoleServiceImpl.java
  21. 184 59
      src/main/java/com/uas/platform/b2c/common/account/service/impl/UserServiceImpl.java
  22. 15 0
      src/main/java/com/uas/platform/b2c/core/config/MessageConf.java
  23. 61 51
      src/main/java/com/uas/platform/b2c/core/filter/SSOInterceptor.java
  24. 5 0
      src/main/java/com/uas/platform/b2c/fa/payment/controller/BankInfoController.java
  25. 15 1
      src/main/java/com/uas/platform/b2c/prod/store/controller/StoreInController.java
  26. 1 0
      src/main/resources/dev/message.properties
  27. 1 0
      src/main/resources/prod/message.properties
  28. 1 0
      src/main/resources/test/message.properties
  29. 2 2
      src/main/webapp/WEB-INF/web.xml
  30. BIN
      src/main/webapp/resources/img/vendor/authority/role-bg-1.jpg
  31. BIN
      src/main/webapp/resources/img/vendor/authority/role-bg-2.jpg
  32. BIN
      src/main/webapp/resources/img/vendor/authority/role-bg-3.jpg
  33. BIN
      src/main/webapp/resources/img/vendor/authority/role-bg-4.jpg
  34. BIN
      src/main/webapp/resources/img/vendor/authority/role-bg-5.jpg
  35. BIN
      src/main/webapp/resources/img/vendor/images/addUser.png
  36. BIN
      src/main/webapp/resources/img/vendor/images/check-active.jpg
  37. BIN
      src/main/webapp/resources/img/vendor/images/check.jpg
  38. BIN
      src/main/webapp/resources/img/vendor/images/xiala-blue.jpg
  39. 1 1
      src/main/webapp/resources/js/admin/controllers/AuditRealAuthCtrl.js
  40. 1 1
      src/main/webapp/resources/js/admin/controllers/SecQuestionCtrl.js
  41. 1 1
      src/main/webapp/resources/js/admin/controllers/bankInfo/AuditBankInfoCtrl.js
  42. 1 1
      src/main/webapp/resources/js/admin/controllers/checkMoney/billInfoAdminCtrl.js
  43. 1 1
      src/main/webapp/resources/js/admin/controllers/checkMoney/creditCardAdminCtrl.js
  44. 2 2
      src/main/webapp/resources/js/admin/controllers/logistics/DelayTime.js
  45. 2 2
      src/main/webapp/resources/js/admin/controllers/product/MoveCmpCtrl.js
  46. 2 2
      src/main/webapp/resources/js/admin/controllers/trade/AfSaleApplyProcessingCtrl.js
  47. 2 2
      src/main/webapp/resources/js/admin/controllers/trade/supExProcessCtrl.js
  48. 53 0
      src/main/webapp/resources/js/common/controllers/commonCtrls.js
  49. 2 2
      src/main/webapp/resources/js/common/controllers/originalGoodsCtrl.js
  50. 1 1
      src/main/webapp/resources/js/common/module/store_recommend_product.js
  51. 1 1
      src/main/webapp/resources/js/common/query/enterprise.js
  52. 147 120
      src/main/webapp/resources/js/common/query/user.js
  53. 1 1
      src/main/webapp/resources/js/prod/controllers/ApplySampleCtrl.js
  54. 4 4
      src/main/webapp/resources/js/prod/controllers/KindDetailCtrl.js
  55. 2 2
      src/main/webapp/resources/js/prod/controllers/OrderEnsureCtrl.js
  56. 2 2
      src/main/webapp/resources/js/prod/controllers/OrderEnsureCtrlWithMultiCurrency.js
  57. 2 2
      src/main/webapp/resources/js/prod/controllers/ProductListByKindCtrl.js
  58. 3 3
      src/main/webapp/resources/js/prod/controllers/ProofingCtrl.js
  59. 1 1
      src/main/webapp/resources/js/prod/controllers/WastageCtrl.js
  60. 2 2
      src/main/webapp/resources/js/search/app.js
  61. 1 1
      src/main/webapp/resources/js/usercenter/controllers/BillAdminCtrl.js
  62. 2 2
      src/main/webapp/resources/js/usercenter/controllers/MyOrderToDoCtrl.js
  63. 1 1
      src/main/webapp/resources/js/usercenter/controllers/addressAdminCtrl.js
  64. 1 1
      src/main/webapp/resources/js/usercenter/controllers/creditCardAdminCtrl.js
  65. 13 9
      src/main/webapp/resources/js/usercenter/controllers/forstore/account_manager_ctrl.js
  66. 95 95
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_cart_ctrl.js
  67. 2 2
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_home_ctrl.js
  68. 3 3
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_invoice_ctrl.js
  69. 2 2
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_invoice_record_ctrl.js
  70. 3 3
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_logistics_ctrl.js
  71. 4 4
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_no_invoice_ctrl.js
  72. 1 1
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_order_ctrl.js
  73. 1 1
      src/main/webapp/resources/js/usercenter/controllers/forstore/order_pay_ctrl.js
  74. 4 3
      src/main/webapp/resources/js/usercenter/controllers/forstore/pay_center_ctrl.js
  75. 1 1
      src/main/webapp/resources/js/usercenter/controllers/forstore/shipping_address_edit_ctrl.js
  76. 2 2
      src/main/webapp/resources/js/vendor/controllers/CheckSaveCtrl.js
  77. 1 1
      src/main/webapp/resources/js/vendor/controllers/ShippedCtrl.js
  78. 1 1
      src/main/webapp/resources/js/vendor/controllers/addressAdminCtrl.js
  79. 1 1
      src/main/webapp/resources/js/vendor/controllers/creditCardAdminCtrl.js
  80. 2 2
      src/main/webapp/resources/js/vendor/controllers/exceptionProcessingCtrl.js
  81. 112 91
      src/main/webapp/resources/js/vendor/controllers/forstore/pay_center_ctrl.js
  82. 2 2
      src/main/webapp/resources/js/vendor/controllers/forstore/show_rate_ctrl.js
  83. 877 240
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_account_management_ctrl.js
  84. 3 3
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_brand_apply_list_ctrl.js
  85. 3 3
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_component_applylist_ctrl.js
  86. 3 3
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_component_batchapplylist_ctrl.js
  87. 1 1
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_deliveryRule_add_ctrl.js
  88. 5 3
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_deliveryRule_ctrl.js
  89. 5 5
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_delivery_ctrl.js
  90. 3 3
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_distributor_ctrl.js
  91. 2 2
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_invoice_ctrl.js
  92. 6 6
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_logistics_ctrl.js
  93. 58 35
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_onSaleCtrl.js
  94. 1 1
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_store_maintain_ctrl.js
  95. 2 2
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_takeSelf_ctrl.js
  96. 46 34
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_undercarriageCtrl.js
  97. 143 62
      src/main/webapp/resources/view/vendor/forstore/addExistUser.html
  98. 527 27
      src/main/webapp/resources/view/vendor/forstore/vendor_account_management.html
  99. 1 1
      src/main/webapp/resources/view/vendor/forstore/vendor_order.html
  100. 208 0
      src/main/webapp/resources/view/vendor/modal/edit_user_role.html

+ 2 - 1
src/main/java/com/uas/platform/b2c/common/account/controller/AuthenticationController.java

@@ -42,7 +42,7 @@ public class AuthenticationController {
 	@RequestMapping(method = RequestMethod.GET, headers = "Accept=application/json")
 	@ResponseBody
 	@ResponseStatus(value = HttpStatus.OK)
-	public UserInfo getAuthentication() {
+	public UserInfo getAuthentication(HttpServletRequest request) {
 		if (SystemSession.getUser() == null) {
 			return null;
 		}
@@ -55,6 +55,7 @@ public class AuthenticationController {
 				user.setIssys(Constant.YES);
 			}
 		} catch (NullPointerException e) { }
+		request.getSession().setAttribute("user",user);
 		UserInfo userInfo = new UserInfo(user);
 		Integer hasQuestion = user.getHasQuestion();
 		if (hasQuestion != null && hasQuestion ==1) {

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

@@ -83,7 +83,7 @@ public class EnterpriseController {
 	 *
 	 * @return
 	 */
-	@RequestMapping(value = "/{enuu}/info", method = RequestMethod.POST)
+	@RequestMapping(value = "/{enuu}/updateInfo", method = RequestMethod.POST)
 	public Enterprise updateEnterprise(@PathVariable Long enuu, @RequestBody Enterprise enterprise) {
 		Enterprise enterpriseInfo = enterpriseService.getEnterpriseInfo(enuu);
 		if (enterpriseInfo.getEnAdminuu() == null) {

+ 72 - 0
src/main/java/com/uas/platform/b2c/common/account/controller/ResourceController.java

@@ -0,0 +1,72 @@
+package com.uas.platform.b2c.common.account.controller;
+
+import com.uas.platform.b2c.common.account.dao.ResourceItemDao;
+import com.uas.platform.b2c.common.account.model.Resource;
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.common.account.service.ResourceService;
+import com.uas.platform.b2c.common.account.service.UserService;
+import com.uas.platform.b2c.trade.support.ResultMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.AccessDeniedException;
+import org.springframework.security.access.ConfigAttribute;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+
+
+
+/**
+ * 账户管理--系统资源
+ *
+ * @author yingp
+ *
+ */
+@Controller
+@RequestMapping(value = "/account/resource")
+public class ResourceController {
+
+    @Autowired
+    private ResourceService resourceService;
+
+
+
+    /**
+     * 取系统资源
+     *
+     * @return
+     */
+    @RequestMapping(method = RequestMethod.GET)
+    @ResponseBody
+    public List<Resource> getResources() {
+        return resourceService.findAll();
+    }
+
+    /**
+     * 根据访问url和方法查询权限;
+     * @param request
+     * @param user
+     */
+    @RequestMapping(value = "/validateRes", method = RequestMethod.GET)
+    @ResponseBody
+    public ResultMap validateResources(HttpServletRequest request, String resUrl,String method) {
+        String currUrl;
+        try {
+            currUrl = URLDecoder.decode(resUrl, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            throw new IllegalArgumentException("URL编码错误!");
+        }
+        return resourceService.getAccessResources(request,currUrl,method);
+    }
+
+}

+ 97 - 0
src/main/java/com/uas/platform/b2c/common/account/controller/RoleController.java

@@ -0,0 +1,97 @@
+package com.uas.platform.b2c.common.account.controller;
+
+import com.uas.platform.b2c.common.account.model.Role;
+import com.uas.platform.b2c.common.account.service.RoleService;
+import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import com.uas.platform.core.util.serializer.FlexJsonUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 账户管理--角色
+ *
+ * @author yingp
+ *
+ */
+@Controller
+@RequestMapping(value = "/account/role")
+public class RoleController {
+
+    @Autowired
+    private RoleService roleService;
+
+    private final static UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+    /**
+     * 取系统资源
+     *
+     * @return
+     */
+    @RequestMapping(method = RequestMethod.GET)
+    @ResponseBody
+    public List<Role> getRoles() {
+        return roleService.findAll();
+    }
+
+    /**
+     * 取当前企业已经存在的人员角色
+     *
+     * @return
+     */
+    @RequestMapping(value = "/existRole", method = RequestMethod.GET)
+    @ResponseBody
+    public Set<Role> getRolesByExist() {
+        return roleService.getRolesByExist();
+    }
+
+    /**
+     * 添加自定义角色
+     *
+     * @param json
+     * @return
+     */
+    @RequestMapping(method = RequestMethod.POST)
+    public ResponseEntity<String> save(@RequestBody String json) {
+        Role role = FlexJsonUtils.fromJson(json, Role.class);
+        role = roleService.save(role);
+        logger.log("角色", "添加角色", role.getDuty(), role.getDesc(), role.getId());
+        return new ResponseEntity<String>(HttpStatus.OK);
+    }
+
+    /**
+     * 删除角色
+     *
+     * @param roleId ID
+     * @return
+     */
+    @RequestMapping(value = "/{roleId}", method = RequestMethod.DELETE)
+    public ResponseEntity<String> delete(@PathVariable("roleId") Long roleId) {
+        Role role = roleService.findById(roleId);
+        roleService.delete(role);
+        logger.log("角色", "删除角色", role.getDuty(), role.getDesc(), role.getId());
+        return new ResponseEntity<String>(HttpStatus.OK);
+    }
+
+    /**
+     * 查询当前用户在当前企业的角色是否是管理员或者销售经理
+     *
+     * @return
+     */
+    @RequestMapping(value = "/currentRole", method =  RequestMethod.GET)
+    @ResponseBody
+    public ModelMap getCurrentRoles(){
+        return roleService.getCurrentRoles();
+    }
+
+    @RequestMapping(value = "/isManager", method =  RequestMethod.GET)
+    @ResponseBody
+    public ModelMap isManager(){return  roleService.isManager(); }
+}

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

@@ -293,7 +293,7 @@ public class SecurityController {
 		} else {
 			loginUrl = SSOHelper.getRedirectLoginUrl(request, String.valueOf(request.getSession().getAttribute("SSOReferer")));
 		}
-		model.addAttribute("loginUrl", loginUrl);
+		model.addAttribute("loginUrl", loginUrl) ;
 		return model;
 	}
 

+ 9 - 5
src/main/java/com/uas/platform/b2c/common/account/controller/UserController.java

@@ -602,9 +602,9 @@ public class UserController {
 	 * @return 完整的企业人员信息
 	 */
 	@RequestMapping(value = "/enterprise/keywordinfo",method = RequestMethod.GET)
-	public Page<User> getEnterpriseAllUsersInfoByKeyword(PageParams params, Long enuu, String keyword){
+	public Page<User> getEnterpriseAllUsersInfoByKeyword(PageParams params, Long enuu, String keyword , Long roleId){
 		PageInfo pageInfo = new PageInfo(params);
-		return userService.findUsersPageByEnUUAndKeyword(pageInfo,enuu,keyword);
+		return userService.findUsersPageByEnUUAndKeyword(pageInfo,enuu,keyword,roleId);
 	}
 
 
@@ -653,11 +653,15 @@ public class UserController {
 	 * @param
 	 * @return
 	 */
-	@RequestMapping(value = "/{uu}", method = RequestMethod.PUT)
-	public ResponseEntity<String> updateUser(@PathVariable("uu") Long uu , @RequestBody String json) {
+	@RequestMapping(method = RequestMethod.PUT)
+	public ResponseEntity<String> updateUser(@RequestBody String json , HttpServletRequest request) {
 		User user = FlexJsonUtils.fromJson(json, User.class);
 		userService.save(user);
-		logger.log("用户信息", "修改用户,UU:" + uu);
+		if (user != null) {
+			logger.log("用户信息", "修改用户信息,UU:" + user.getUserUU());
+			if (SystemSession.getUser().getUserUU().equals(user.getUserUU()))
+				request.getSession().setAttribute("user", user);
+		}
 		return new ResponseEntity<String>(HttpStatus.OK);
 	}
 	/**

+ 9 - 0
src/main/java/com/uas/platform/b2c/common/account/dao/EnterpriseDao.java

@@ -4,6 +4,7 @@ import com.uas.platform.b2c.common.account.model.Enterprise;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.jpa.repository.query.Procedure;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
@@ -20,6 +21,14 @@ public interface EnterpriseDao extends JpaSpecificationExecutor<Enterprise>, Jpa
 	@Query(value="select e.uu from Enterprise e where e.enName like %?1%")
 	public List<Long> findEnuuByName(String name);
 
+	/**
+	 * 企业资料初始化
+	 *
+	 * @param enUU
+	 */
+	@Procedure(procedureName = "init_en_b2c")
+	public void callInitProcedure(Long enUU);
+
 	/**
 	 * 通过营业执照号码获取企业信息
 	 * @param bussinessCode

+ 20 - 0
src/main/java/com/uas/platform/b2c/common/account/dao/ResourceDao.java

@@ -0,0 +1,20 @@
+package com.uas.platform.b2c.common.account.dao;
+
+import java.util.List;
+
+import javax.persistence.OrderBy;
+
+import com.uas.platform.b2c.common.account.model.Resource;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ResourceDao extends JpaRepository<Resource, Long> {
+
+    @OrderBy("id")
+    public List<Resource> findAll();
+
+    @OrderBy("id")
+    public List<Resource> findByParentid(Long parentId);
+
+}

+ 3 - 0
src/main/java/com/uas/platform/b2c/common/account/dao/ResourceItemDao.java

@@ -3,8 +3,11 @@ package com.uas.platform.b2c.common.account.dao;
 import com.uas.platform.b2c.common.account.model.ResourceItem;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
+import java.util.List;
 
 @Repository
 public interface ResourceItemDao extends JpaRepository<ResourceItem, Long>{
 
+    List<ResourceItem> findByMethodAndUrl(String method, String url);
+
 }

+ 82 - 0
src/main/java/com/uas/platform/b2c/common/account/dao/RoleDao.java

@@ -0,0 +1,82 @@
+package com.uas.platform.b2c.common.account.dao;
+
+import com.uas.platform.b2c.common.account.model.Role;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+
+@Repository
+public interface RoleDao extends JpaRepository<Role, Long> {
+
+    /**
+     * 获取企业的角色列表
+     * @param enUU
+     * @return
+     */
+    @Query("from Role r where r.enUU = :enUU order by id")
+    public List<Role> findByEnUU(@Param("enUU") long enUU);
+
+    /**
+     * 获取企业的默认角色的数量
+     * @param enUU
+     * @return
+     */
+    @Query("select count(r) from Role r where r.isdefault = 1 and r.enUU = :enUU")
+    public Integer findIsDefaultCountByEnUU(@Param("enUU") long enUU);
+
+    /**
+     * 按角色描述查找角色
+     *
+     * @param enUU
+     * @param desc
+     * @return
+     */
+    public List<Role> findByEnUUAndDesc(long enUU, String desc);
+
+    /**
+     * 角色个数
+     *
+     * @param enUU
+     * @return
+     */
+    @Query("select count(r) from Role r where r.enUU = :enUU")
+    public int getCountByEnUU(@Param("enUU") long enUU);
+
+    /**
+     * 按角色描述查找角色个数
+     *
+     * @param enUU
+     * @param desc
+     * @return
+     */
+    @Query("select count(r) from Role r where r.enUU = :enUU and r.desc = :desc")
+    public int getCountByEnUUAndDesc(@Param("enUU") long enUU, @Param("desc") String desc);
+
+    List<Role> findByEnUUAndIssys(Long vendUU, short yes);
+
+    /**
+     * 查询当前用户在当前企业的角色是否是管理员或者销售经理<br>
+     *
+     * 分配客户需要
+     *
+     * @param enuu
+     * @param useruu
+     * @return
+     */
+    @Query(value = "select count(1) from sec$roles r left join sec$userrole u on r.role_id = u.role_id where r.role_enuu = :enuu and u.user_uu = :useruu and (r.role_name = 'ROLE_ADMIN' or r.role_name = 'ROLE_SALEMANAGER')",nativeQuery = true)
+    Double findByEnuuAndUseruu(@Param("enuu") Long enuu, @Param("useruu") Long useruu);
+
+    /**
+     * 是否是当前企业的管理员(只有管理员才能设置权限)
+     *
+     * @param enuu
+     * @param useruu
+     * @return
+     */
+    @Query(value = "select count(1) from sec$roles r left join sec$userrole u on r.role_id = u.role_id where r.role_enuu = :enuu and u.user_uu = :useruu and r.role_name = 'ROLE_ADMIN'",nativeQuery = true)
+    Double findByEnuuAndUserUU(@Param("enuu") Long enuu, @Param("useruu") Long useruu);
+}

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

@@ -75,7 +75,7 @@ public interface UserDao extends JpaSpecificationExecutor<User>, JpaRepository<U
 	 * @return
 	 */
 	@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value = "true") })
-	@Query("select u.userUU from User u inner join u.enterprises as e where e.uu = :enUU and u.userName = :userName")
+	@Query("select u.userUU from User u inner join u.enterprises as e where e.uu = :enUU and u.userName like %:userName%")
 	public List<Long> findUserByUserNameAndEnUU(@Param("userName") String userName, @Param("enUU") Long enUU);
 
 	/**
@@ -86,7 +86,7 @@ public interface UserDao extends JpaSpecificationExecutor<User>, JpaRepository<U
 	 * @return
 	 */
 	@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value = "true") })
-	@Query("select u.userUU from User u inner join u.enterprises as e where e.uu = :enUU and u.userEmail = :userEmail")
+	@Query("select u.userUU from User u inner join u.enterprises as e where e.uu = :enUU and u.userEmail like %:userEmail%")
 	public List<Long> findUserByUserEmailAndEnUU(@Param("userEmail") String userEmail, @Param("enUU") Long enUU);
 
 	/**
@@ -97,7 +97,7 @@ public interface UserDao extends JpaSpecificationExecutor<User>, JpaRepository<U
 	 * @return
 	 */
 	@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value = "true") })
-	@Query("select u.userUU from User u inner join u.enterprises as e where e.uu = :enUU and u.userTel = :userTel")
+	@Query("select u.userUU from User u inner join u.enterprises as e where e.uu = :enUU and u.userTel like %:userTel%")
 	public List<Long> findUserByUserTelAndEnUU(@Param("userTel") String userTel, @Param("enUU") Long enUU);
 
 	/**
@@ -111,6 +111,16 @@ public interface UserDao extends JpaSpecificationExecutor<User>, JpaRepository<U
 	@Query("select u.userUU from User u inner join u.enterprises as e where e.uu = :enUU and u.userUU = :userUU")
 	public List<Long> findUserByEnUUAndUserUU(@Param("enUU") long enUU, @Param("userUU") long userUU);
 
+	/**
+	 * 按既有id与角色id查找人员信息
+	 *
+	 * @param roleid
+	 * @param userUU
+	 * @return
+	 */
+	@Query(value = "select u.user_uu from sec$userrole_b2c u  where u.role_id = :roleid and u.user_uu in :userUU" ,nativeQuery = true)
+	public List<Long> findUserByRoleAndUsers(@Param("roleid") long roleid, @Param("userUU") Long[] userUU);
+
 	/**
 	 * 按名字查询当前企业的用户信息
 	 *

+ 28 - 0
src/main/java/com/uas/platform/b2c/common/account/model/Resource.java

@@ -5,6 +5,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy;
 
 import javax.persistence.*;
 import java.io.Serializable;
+import java.util.List;
 import java.util.Set;
 
 /**
@@ -41,6 +42,18 @@ public class Resource implements Serializable {
 	@Column(name = "res_desc")
 	private String desc;
 
+	/**
+	 * 所含子资源
+	 */
+	@Transient
+	private List<Resource> children;
+
+	/**
+	 * 父级类目的id号
+	 */
+	@Column(name = "res_parentid")
+	private Long parentid;
+
 	/**
 	 * 资源的详细清单
 	 */
@@ -82,4 +95,19 @@ public class Resource implements Serializable {
 		this.items = items;
 	}
 
+	public List<Resource> getChildren() {
+		return children;
+	}
+
+	public void setChildren(List<Resource> children) {
+		this.children = children;
+	}
+
+	public Long getParentid() {
+		return parentid;
+	}
+
+	public void setParentid(Long parentid) {
+		this.parentid = parentid;
+	}
 }

+ 1 - 1
src/main/java/com/uas/platform/b2c/common/account/model/ResourceItem.java

@@ -46,7 +46,7 @@ public class ResourceItem implements Serializable {
 	/**
 	 * 对资源的具体操作对象及行为的描述
 	 */
-	@Column(name = "item_desc")
+	@Column(name = "item_desc" , unique = true)
 	private String desc;
 
 	public Long getId() {

+ 14 - 0
src/main/java/com/uas/platform/b2c/common/account/model/Role.java

@@ -72,6 +72,12 @@ public class Role implements Serializable {
 	@Column(name = "role_duty")
 	private String duty;
 
+	/**
+	 * 背景颜色(页面)
+	 */
+	@Column(name = "role_color")
+	private String color;
+
 	public Long getId() {
 		return id;
 	}
@@ -142,6 +148,14 @@ public class Role implements Serializable {
 		this.duty = duty;
 	}
 
+	public String getColor() {
+		return color;
+	}
+
+	public void setColor(String color) {
+		this.color = color;
+	}
+
 	@Override
 	public int hashCode() {
 		final int prime = 31;

+ 1 - 1
src/main/java/com/uas/platform/b2c/common/account/model/User.java

@@ -148,7 +148,7 @@ public class User implements Serializable {
 	@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.EAGER)
 	@JoinTable(name = "sec$userrole_b2c", joinColumns = @JoinColumn(name = "user_uu", referencedColumnName = "user_uu"), inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "role_id"))
 	@OrderBy("id")
-	@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
+	//@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
 	private Set<Role> roles;
 
 	/**

+ 16 - 0
src/main/java/com/uas/platform/b2c/common/account/service/ResourceService.java

@@ -0,0 +1,16 @@
+package com.uas.platform.b2c.common.account.service;
+
+import com.uas.platform.b2c.common.account.model.Resource;
+import com.uas.platform.b2c.trade.support.ResultMap;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+public interface ResourceService {
+
+    public List<Resource> findAll();
+
+
+    ResultMap getAccessResources(HttpServletRequest request, String currUrl, String method);
+
+}

+ 76 - 0
src/main/java/com/uas/platform/b2c/common/account/service/RoleService.java

@@ -0,0 +1,76 @@
+package com.uas.platform.b2c.common.account.service;
+
+import com.uas.platform.b2c.common.account.model.Role;
+import org.springframework.ui.ModelMap;
+
+import java.util.List;
+import java.util.Set;
+
+
+public interface RoleService {
+
+    /**
+     * 查找当前企业下所有角色
+     *
+     * @return
+     */
+    public List<Role> findAll();
+
+    /**
+     * 取当前企业已经存在的人员角色
+     *
+     * @return
+     */
+    public Set<Role> getRolesByExist();
+
+    /**
+     * 查找指定企业下所有角色
+     *
+     * @return
+     */
+    public List<Role> findByEnterprise(long enUU);
+
+    /**
+     * 保存角色信息
+     *
+     * @param role
+     * @return
+     */
+    public Role save(Role role);
+
+    /**
+     * 查找角色
+     *
+     * @param id
+     * @return
+     */
+    public Role findById(long id);
+
+    /**
+     * 删除角色
+     *
+     * @param role
+     */
+    public void delete(Role role);
+
+    /**
+     * 删除角色
+     *
+     * @param id
+     */
+    public void delete(long id);
+
+    /**
+     * 查询当前用户在当前企业的角色是否是管理员或者销售经理
+     *
+     * @return
+     */
+    public ModelMap getCurrentRoles();
+
+    /**
+     * 判断是否是当前企业的管理员
+     *
+     * @return
+     */
+    ModelMap isManager();
+}

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

@@ -61,6 +61,7 @@ public interface UserService {
 	 */
 	Page<User> findUserByUserNameLikeAndEnUU(PageInfo pageInfo , Long enUU , String userName);
 
+	Page<User> findUsersPageByEnUUAndKeyword(PageInfo pageInfo , Long enUU , String keyword , Long roleId);
 	/**
 	 * 按email取用户信息
 	 * 

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

@@ -0,0 +1,110 @@
+package com.uas.platform.b2c.common.account.service.impl;
+
+import java.util.*;
+
+import com.uas.platform.b2c.common.account.dao.ResourceDao;
+import com.uas.platform.b2c.common.account.dao.ResourceItemDao;
+import com.uas.platform.b2c.common.account.model.Resource;
+import com.uas.platform.b2c.common.account.model.ResourceItem;
+import com.uas.platform.b2c.common.account.model.Role;
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.common.account.service.ResourceService;
+import com.uas.platform.b2c.common.account.service.UserService;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.trade.support.ResultMap;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+
+
+@Service
+public class ResourceServiceImpl implements ResourceService {
+
+    @Autowired
+    private ResourceDao resourceDao;
+
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private ResourceItemDao resourceItemDao;
+
+    /**
+     * 商城运营商企业UU号
+     */
+    @Value("#{sys.enUU}")
+    private Long enUU;
+
+  /*  @Autowired
+    private MallAdministratorsDao mallAdministratorsDao;*/
+
+    @Override
+    public List<Resource> findAll() {
+      /*  List<MallAdministrators> admins = mallAdministratorsDao
+                .findByAdenuu(SystemSession.getUser().getEnterprise().getUu());*/
+        List<Resource> resources = getAllChildResource(0L);
+        if (!CollectionUtils.isEmpty(resources)) {
+            if (!SystemSession.getUser().getEnterprise().getUu().equals(enUU)) {// 如果不存在商城管理员设置权限,这个不显示出来
+                for (Iterator<Resource> it = resources.iterator(); it.hasNext();) {
+                    Resource re = it.next();
+                    if (re.getName().equals("优软商城-管理员")) {
+                        it.remove();
+                    }
+                }
+            }
+        }
+        return resources;
+    }
+    public List<Resource> getAllChildResource(Long parentid) {
+        List<Resource> resourceList = resourceDao.findByParentid(parentid);
+        for (Resource res : resourceList) {
+                res.setChildren(getAllChildResource(res.getId()));
+        }
+        return resourceList;
+    }
+
+    @Override
+    public ResultMap getAccessResources(HttpServletRequest request, String currUrl, String method) {
+        HashMap<String, Boolean> dataMap = new HashMap<>();
+        dataMap.put("isManager",  Boolean.FALSE);
+        dataMap.put("isOpenApi",  Boolean.FALSE);
+        dataMap.put("access", Boolean.FALSE);
+        ResultMap resultMap = new ResultMap();
+        resultMap.setData(dataMap);
+        //判断当前用户是否是管理员isManager;
+        User user = (User) request.getSession().getAttribute("user");
+        Long enAdminuu = user.getEnterprise().getEnAdminuu();
+        if (enAdminuu.equals(user.getUserUU()) ) {
+            dataMap.put("isManager", Boolean.TRUE);
+            dataMap.put("access", Boolean.TRUE);
+            return resultMap;
+        }
+        //根据当前权限的url和访问方法到resources表中查询是否有受权限控制
+        List<ResourceItem> currResourceItems = resourceItemDao.findByMethodAndUrl(method, currUrl);
+        if (currResourceItems == null || currResourceItems.size() == 0) {
+            dataMap.put("isOpenApi",  Boolean.TRUE);
+            resultMap.setSuccess(true);
+            return resultMap;
+        }
+        ResourceItem currResourceItem = currResourceItems.get(0);
+        //查找用户是否拥有当前资源
+        User curUser = userService.findUserByUserUU(user.getUserUU());
+        Set<Role> roles = curUser.getRoles();
+        HashMap<String, ResourceItem> authItems = new HashMap<>();
+        for (Role role : roles) {
+            if (role.getEnUU().equals(user.getEnterprise().getUu())) {
+                Set<ResourceItem> resourceItems = role.getResourceItems();
+                for (ResourceItem resourceItem : resourceItems) {
+                    authItems.put(resourceItem.getDesc(), resourceItem);
+                    if (currResourceItem.getMethod().equals(resourceItem.getMethod()) && currResourceItem.getDesc().equals(resourceItem.getDesc()))  {
+                        dataMap.put("access", Boolean.TRUE);
+                    }
+                }
+            }
+        }
+        resultMap.setSuccess(true);
+        return resultMap;
+    }
+}

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

@@ -0,0 +1,124 @@
+package com.uas.platform.b2c.common.account.service.impl;
+
+import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
+import com.uas.platform.b2c.common.account.dao.RoleDao;
+import com.uas.platform.b2c.common.account.dao.UserDao;
+import com.uas.platform.b2c.common.account.model.Role;
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.common.account.service.RoleService;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.core.exception.IllegalOperatorException;
+import com.uas.platform.core.model.Constant;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.Assert;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+
+@Service
+public class RoleServiceImpl implements RoleService {
+
+    private static final int DEFAULT_ROLE = 1;
+
+    private static final int ALL_DEFAULT_ROLE = 4;
+
+    @Autowired
+    private RoleDao roleDao;
+
+    @Autowired
+    private EnterpriseDao enterpriseDao;
+
+    @Autowired
+    private UserDao userDao;
+
+    @Override
+    public List<Role> findAll() {
+        return findByEnterprise(SystemSession.getUser().getEnterprise().getUu());
+    }
+
+    @Override
+    public Set<Role> getRolesByExist() {
+        Long enuu = SystemSession.getUser().getEnterprise().getUu();
+        List<User> users = userDao.findByEnUU(enuu);
+        Set<Role> roles = new HashSet<>();
+        for (User u : users) {
+            for (Role role : u.getRoles()) {
+                if (role.getEnUU().equals(enuu)) {
+                    roles.add(role);
+                }
+            }
+        }
+        return roles;
+    }
+
+    @Override
+    public List<Role> findByEnterprise(long enUU) {
+        // 默认角色个数
+        Integer defaultRoleCount = roleDao.findIsDefaultCountByEnUU(enUU);
+        if (defaultRoleCount < ALL_DEFAULT_ROLE) {
+            // 如果默认角色个数小于设定的值,进行初始化角色数据
+            enterpriseDao.callInitProcedure(enUU);
+        }
+        List<Role> roles = roleDao.findByEnUU(enUU);
+        return roles;
+    }
+
+    @Override
+    public Role save(Role role) {
+        Assert.notNull(role.getDesc());
+        long enUU = SystemSession.getUser().getEnterprise().getUu();
+        // 角色描述不能重复
+        List<Role> roles = roleDao.findByEnUUAndDesc(enUU, role.getDesc());
+        if (roles.size() > 0 && !roles.get(0).equals(role))
+            throw new IllegalOperatorException("角色描述不能重复");
+        if (role.getName() == null) {
+            // 自定义角色
+            role.setName("ROLE_" + System.currentTimeMillis());
+            role.setEnUU(enUU);
+            role.setIsdefault(Constant.NO);
+            role.setIssys(Constant.NO);
+        }
+        return roleDao.save(role);
+    }
+
+    @Override
+    public Role findById(long id) {
+        return roleDao.findOne(id);
+    }
+
+    @Override
+    public void delete(Role role) {
+        if (role != null && role.getId() != null) {
+            List<User> users = userDao.findByRole(role.getId());
+            if (!CollectionUtils.isEmpty(users)) {
+                for (User user : users) {
+                    user.getRoles().remove(role);
+                }
+                userDao.save(users);
+            }
+            roleDao.delete(role);
+        }
+    }
+
+    @Override
+    public void delete(long id) {
+        delete(findById(id));
+    }
+
+    @Override
+    public ModelMap getCurrentRoles() {
+        return new ModelMap("count", roleDao.findByEnuuAndUseruu(SystemSession.getUser().getEnterprise().getUu(), SystemSession.getUser().getUserUU()));
+    }
+
+    @Override
+    public ModelMap isManager() {
+        return new ModelMap("isManager", roleDao.findByEnuuAndUserUU(SystemSession.getUser().getEnterprise().getUu(), SystemSession.getUser().getUserUU()) > 0 ? true : false);
+    }
+
+}

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

@@ -1,6 +1,8 @@
 package com.uas.platform.b2c.common.account.service.impl;
 
 import com.uas.message.mail.service.MailService;
+import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
+import com.uas.platform.b2c.common.account.dao.RoleDao;
 import com.uas.platform.b2c.common.account.dao.UserCacheEnterpriseDao;
 import com.uas.platform.b2c.common.account.dao.UserDao;
 import com.uas.platform.b2c.common.account.model.*;
@@ -12,25 +14,9 @@ import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.exception.SystemException;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
-import com.uas.platform.core.model.Status;
 import com.uas.platform.core.util.AgentUtils;
 import com.uas.platform.core.util.encry.Md5Utils;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-import javax.servlet.http.HttpServletRequest;
-
-import com.uas.sso.util.AccountUtils;
+import com.uas.sso.entity.UserView;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.jpa.domain.Specification;
@@ -38,11 +24,20 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
+import com.uas.sso.util.AccountUtils;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.servlet.http.HttpServletRequest;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 @Service
 public class UserServiceImpl implements UserService {
 
-	static final String TEL_REGEXP = "^((\\(\\d{3}\\))|(\\d{3}\\-))?(13|15|18|17)\\d{9}$";
+
+	static final String TEL_REGEXP = "^1[0-9]{10}$";
 
 	static final String UU_REGEXP = "^\\d{4,}$";
 
@@ -59,6 +54,12 @@ public class UserServiceImpl implements UserService {
 	@Autowired
 	private UserDao userDao;
 
+	@Autowired
+	private RoleDao roleDao;
+
+	@Autowired
+	private EnterpriseDao enterpriseDao;
+
 	@Autowired
 	private CommonDao commonDao;
 
@@ -67,9 +68,55 @@ public class UserServiceImpl implements UserService {
 
 	@Autowired
 	private MailService mailService;
+
 	@Autowired
 	private MessageConf messageConf;
 
+
+	@Override
+	public Page<User> findUsersPageByEnUUAndKeyword(final PageInfo pageInfo , Long enUU , String keyword) {
+		List<Long> usersId = new ArrayList<>();
+		if (keyword.contains("@")) { // 按邮箱查找
+			usersId = userDao.findUserByUserEmailAndEnUU(keyword, enUU);
+		} else if (keyword.matches(TEL_REGEXP)) { // 按手机号查找
+			usersId = userDao.findUserByUserTelAndEnUU(keyword, enUU);
+		} else if (keyword.matches(UU_REGEXP)) { // 按UU号查找
+			usersId = userDao.findUserByEnUUAndUserUU(enUU, Long.parseLong(keyword));
+		} else if (!keyword.contains("@") && (keyword.matches(CHINESE_REGEXP) || keyword.matches(ENGLISH_REGEXP))) {// 按名字查找
+			usersId = userDao.findUserByUserNameAndEnUU(keyword, enUU);
+		} else{
+			usersId = userDao.findUserByUserNameAndEnUU(keyword, enUU);
+		}
+		final List<Long> users = usersId;
+		if (users.size()>0) {
+			Page<User> pUser = userDao.findAll(new Specification<User>() {
+				public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+					Predicate predicateId = root.get("userUU").in(users);
+					query.where(predicateId);
+					return null;
+				}
+			}, pageInfo);
+			for (User user : pUser) {
+				Set<Role> roles = user.getRoles();
+				Long enuu = SystemSession.getUser().getEnterprise().getUu();
+				if (!CollectionUtils.isEmpty(roles)) {
+					Iterator<Role> iterator = roles.iterator();
+					while (iterator.hasNext()) {
+						Role role = iterator.next();
+						if (!role.getEnUU().equals(enuu)) {
+							iterator.remove();
+						}
+					}
+				}
+			}
+			return pUser;
+		}else{
+			return null;
+		}
+
+	}
+
+
 	@Override
 	public User findUserByUserUU(Long uu) {
 		List<User> users = userDao.findUserByUserUU(uu);
@@ -201,6 +248,14 @@ public class UserServiceImpl implements UserService {
 		}
 		enterprises.add(SystemSession.getUser().getEnterprise());
 		user.setEnterprises(enterprises);
+		List<Role> roles = roleDao.findByEnUUAndDesc(SystemSession.getUser().getEnterprise().getUu(),"普通用户");
+		if(roles.size()>0){
+			Set<Role> set = user.getRoles();
+			set.add(roles.get(0));
+			user.setRoles(set);
+		}else{
+			enterpriseDao.callInitProcedure(SystemSession.getUser().getEnterprise().getUu());
+		}
 		userDao.save(user);
 		try {
 			postToAccountCenter(user);
@@ -209,19 +264,28 @@ public class UserServiceImpl implements UserService {
 		}
 	}
 	@Override
-	public Page<User> findUsersPageByEnUUAndKeyword(final PageInfo pageInfo , Long enUU , String keyword) {
+	public Page<User> findUsersPageByEnUUAndKeyword(final PageInfo pageInfo , Long enUU , String keyword, Long roleId) {
 		List<Long> usersId = new ArrayList<>();
-		if (keyword.contains("@")) { // 按邮箱查找
-			usersId = userDao.findUserByUserEmailAndEnUU(keyword, enUU);
-		} else if (keyword.matches(TEL_REGEXP)) { // 按手机号查找
-			usersId = userDao.findUserByUserTelAndEnUU(keyword, enUU);
-		} else if (keyword.matches(UU_REGEXP)) { // 按UU号查找
-			usersId = userDao.findUserByEnUUAndUserUU(enUU, Long.parseLong(keyword));
-		} else if (!keyword.contains("@") && (keyword.matches(CHINESE_REGEXP) || keyword.matches(ENGLISH_REGEXP))) {// 按名字查找
-			usersId = userDao.findUserByUserNameAndEnUU(keyword, enUU);
-		} else{
-			usersId = userDao.findUserByUserNameAndEnUU(keyword, enUU);
+		if(keyword == null || "".equals(keyword)){
+			usersId = userDao.findIdByEnUU(enUU);
+		}else {
+			if (keyword.contains("@")) { // 按邮箱查找
+				usersId = userDao.findUserByUserEmailAndEnUU(keyword, enUU);
+			} else if (keyword.matches(TEL_REGEXP)) { // 按手机号查找
+				usersId = userDao.findUserByUserTelAndEnUU(keyword, enUU);
+			} else if (keyword.matches(UU_REGEXP)) { // 按UU号查找
+				usersId = userDao.findUserByEnUUAndUserUU(enUU, Long.parseLong(keyword));
+			} else if (!keyword.contains("@") && (keyword.matches(CHINESE_REGEXP) || keyword.matches(ENGLISH_REGEXP))) {// 按名字查找
+				usersId = userDao.findUserByUserNameAndEnUU(keyword, enUU);
+			} else{
+				usersId = userDao.findUserByUserNameAndEnUU(keyword, enUU);
+			}
 		}
+		if (roleId != null && usersId.size() > 0){
+			//过滤 角色信息
+			usersId = userDao.findUserByRoleAndUsers(roleId,usersId.toArray(new Long[0]));
+		}
+
 		final List<Long> users = usersId;
 		if (users.size()>0) {
 			Page<User> pUser = userDao.findAll(new Specification<User>() {
@@ -287,16 +351,64 @@ public class UserServiceImpl implements UserService {
 
 	@Override
 	public User save(User user) {
-        User userOld = userDao.findOne(user.getUserUU());
-        userOld.setUserEmail(user.getUserEmail());
-        userOld.setUserTel(user.getUserTel());
-        userOld.setUserName(user.getUserName());
-        try {
-            postToAccountCenter(userOld);
-            return userDao.save(userOld);
-        } catch (Exception e) {
-            throw new RuntimeException(e.getMessage());
-        }
+		User userOld = userDao.findOne(user.getUserUU());
+		if (userOld != null) {
+			userOld.setUserEmail(user.getUserEmail());
+			userOld.setUserTel(user.getUserTel());
+			userOld.setUserName(user.getUserName());
+			try {
+				postToAccountCenter(userOld);
+			} catch (Exception e) {
+//				throw new RuntimeException(e.getMessage());
+			}
+			// 修改用户角色,只对用户的当前企业的角色进行修改
+			if (!CollectionUtils.isEmpty(user.getRoles())) {
+				Set<Role> existRoles = userOld.getRoles();
+				if (!CollectionUtils.isEmpty(existRoles)) {// 保留用户在其他企业的角色
+					Iterator<Role> iterator = existRoles.iterator();
+					Long currentEnuu = SystemSession.getUser().getEnterprise().getUu();
+					while (iterator.hasNext()) {
+						Role role = iterator.next();
+						if (role.getEnUU().equals(currentEnuu)) {
+							iterator.remove();
+						}
+					}
+				} else {
+					existRoles = new HashSet<>();
+				}
+				for (Role role : user.getRoles()) {
+					existRoles.add(role);
+				}
+				userOld.setRoles(existRoles);
+			} else {
+				Set<Role> existRoles = userOld.getRoles();
+				if (!CollectionUtils.isEmpty(existRoles)) {// 保留用户在其他企业的角色
+					Iterator<Role> iterator = existRoles.iterator();
+					Long currentEnuu = SystemSession.getUser().getEnterprise().getUu();
+					while (iterator.hasNext()) {
+						Role role = iterator.next();
+						if (role.getEnUU().equals(currentEnuu)) {
+							iterator.remove();
+						}
+					}
+				}
+				userOld.setRoles(existRoles);
+			}
+			try {
+				userOld = userDao.save(userOld);
+
+			} catch (Exception e) {
+				throw new RuntimeException(e.getMessage());
+			}
+			if (SystemSession.getUser().getUserUU().equals(userOld.getUserUU())) {
+				userOld.setCurrentEnterprise(SystemSession.getUser().getEnterprise().getUu());
+				userOld.setCurrentEnterpriseRoles();
+				SystemSession.setUser(userOld);
+			}
+			return userOld;
+		} else {
+			throw new IllegalOperatorException("修改的用户不存在");
+		}
 	}
 
 	@Override
@@ -339,18 +451,27 @@ public class UserServiceImpl implements UserService {
 		if (users2.size() > 0) {
 			throw new IllegalOperatorException("邮箱地址重复,建议输入您自己的电子邮箱地址");
 		}
-		Long uu = commonDao.queryForObject("select users_seq.nextval from dual", Long.class);
-		user.setUserUU(uu);
-		user.addEnterprise(SystemSession.getUser().getEnterprise());
-		user.setCurrentEnterprise();
-		user = userDao.save(user);
-
-		user.setUserPwd(Md5Utils.encode(defaultPassword, user.getUserUU()));
+		UserView userView = new UserView();
+		userView.setVipName(user.getUserName());
+		userView.setSex(user.getUserSex());
+		userView.setMobile(user.getUserTel());
+		userView.setEmail(user.getUserEmail());
 		try {
+			UserView addssoUser = AccountUtils.addUser(SystemSession.getUser().getEnterprise().getUu(), userView);
+			List<Role> roles = roleDao.findByEnUUAndDesc(SystemSession.getUser().getEnterprise().getUu(),"普通用户");
+			if(roles.size()>0){
+				Set<Role> set = new HashSet<>();
+				set.add(roles.get(0));
+				user.setRoles(set);
+			}else{
+				enterpriseDao.callInitProcedure(SystemSession.getUser().getEnterprise().getUu());
+			}
+			//Long uu = commonDao.queryForObject("select users_seq.nextval from dual", Long.class);
+			user.setUserUU(addssoUser.getUserUU());
+			user.addEnterprise(SystemSession.getUser().getEnterprise());
+			user.setCurrentEnterprise();
 			user = userDao.save(user);
-			postToAccountCenter(user, defaultPassword);
 		} catch (Exception e) {
-			userDao.delete(user);
 			throw new RuntimeException(e.getMessage());
 		}
 		// 发送邮件
@@ -365,23 +486,27 @@ public class UserServiceImpl implements UserService {
 		model.put("userTel", user.getUserTel());
 		model.put("rootpath", AgentUtils.getHost(request));
 		if (user.getUserEmail() != null) {
-			//mailService.send("a4c45a22-436a-430c-9667-4edfd7d04a27", newUserEmail, data);
+			mailService.send(messageConf.getTplAfterBeAddedtoB2C(), user.getUserEmail(), model);
 			//mailService.send(messageConf.getTplInvitationForB2B(), user.getUserEmail(), model);
 		}
 		return user;
 	}
 
-	//添加未注册
-	public void postToAccountCenter(User user, String password) throws Exception {
-		/*UserDetail detail = new UserDetail();
+    //添加未注册
+	/*public  com.uas.account.entity.User postToAccountCenter(User user, String password) throws Exception {
+		UserDetail detail = new UserDetail();
 		detail.setEmail(user.getUserEmail());
 		detail.setIdCode(user.getUserIdcode());
 		detail.setMobile(user.getUserTel());
 		detail.setName(user.getUserName());
 		detail.setSex(user.getUserSex());
-		AccountUtils.addUser(user.getUserUU(), SystemSession.getUser().getEnterprise().getUu(), detail, password);
-		//.uas.sso.util.AccountUtils.addUser();*/
-	}
+		List<com.uas.account.entity.User> users = AccountUtils.addUser(user.getUserUU(), SystemSession.getUser().getEnterprise().getUu(), detail, password);
+		if (!CollectionUtils.isEmpty(users)) {
+			return users.get(0);
+		} else {
+			return null;
+		}
+	}*/
 	public void postToAccountCenter(User user) throws Exception {
 		//判断是否个人用户
 		if(SystemSession.getUser().getEnterprise()==null){
@@ -394,10 +519,10 @@ public class UserServiceImpl implements UserService {
 	public void removeUser(Long uu) {
 		User user = userDao.findOne(uu);
 		if (user.getEnterprises().contains(SystemSession.getUser().getEnterprise())) {
-//			user.removeEnterprise(SystemSession.getUser().getEnterprise());
-//			if (user.getEnterprises().size() == 0)
-//				user.setEnable((short) Status.DISABLED.value());
-//			userDao.save(user);
+			user.removeEnterprise(SystemSession.getUser().getEnterprise());
+			/*if (user.getEnterprises().size() == 0)
+				user.setEnable((short) Status.DISABLED.value());*/
+			userDao.save(user);
 			try {
 				com.uas.sso.util.AccountUtils.removeUser(uu,SystemSession.getUser().getEnterprise().getUu());
 			} catch (Exception e) {

+ 15 - 0
src/main/java/com/uas/platform/b2c/core/config/MessageConf.java

@@ -55,6 +55,14 @@ public class MessageConf {
 	@Value("#{message.plaformB2cComponentUnproveTemplateId}")
 	private String componentUnprove;
 
+	/**
+	 * 添加新的未注册人员
+	 *
+	 * @return
+	 */
+	@Value("#{message.tplAfterBeAddedtoB2C}")
+	private String tplAfterBeAddedtoB2C;
+
 	/**
 	 * 邮件通知有新的供应链申请
 	 * 
@@ -119,4 +127,11 @@ public class MessageConf {
 		this.supplyChain = supplyChain;
 	}
 
+	public String getTplAfterBeAddedtoB2C() {
+		return tplAfterBeAddedtoB2C;
+	}
+
+	public void setTplAfterBeAddedtoB2C(String tplAfterBeAddedtoB2C) {
+		this.tplAfterBeAddedtoB2C = tplAfterBeAddedtoB2C;
+	}
 }

+ 61 - 51
src/main/java/com/uas/platform/b2c/core/filter/SSOInterceptor.java

@@ -14,7 +14,7 @@ import com.uas.sso.SSOHelper;
 import com.uas.sso.SSOToken;
 import com.uas.sso.common.SSOProperties;
 import com.uas.sso.common.util.HttpUtil;
-import com.uas.sso.entity.UserAccount;
+    import com.uas.sso.entity.UserAccount;
 import com.uas.sso.web.spring.AbstractSSOInterceptor;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.log4j.Logger;
@@ -171,8 +171,9 @@ public class SSOInterceptor extends AbstractSSOInterceptor {
      * 权限验证
      */
     private void accessDecision(HttpServletRequest request, User user) {
+        //判断当前访问是否有权限限制
         Collection<ConfigAttribute> configAttributes = getAttributes(request);
-        if (null == configAttributes || configAttributes.size() == 0) {
+        if (null == configAttributes || configAttributes.size() == 0 || user.isSys() || user.getEnterprise() == null) {
             return;
         }
         Iterator<ConfigAttribute> iterator = configAttributes.iterator();
@@ -180,7 +181,9 @@ public class SSOInterceptor extends AbstractSSOInterceptor {
         if (null == authorities || !authorities.containsKey(user.getUserUU())) {
             setGrantedAuthorities(user);
         }
+        //获取当前登录用户的所有权限;
         Collection<GrantedAuthority> userAuthorities = authorities.get(user.getUserUU());
+        //匹配当前访问权限;
         while (iterator.hasNext()) {
             ConfigAttribute configAttribute = iterator.next();
             needPermission = configAttribute.getAttribute();
@@ -196,10 +199,12 @@ public class SSOInterceptor extends AbstractSSOInterceptor {
         if (needPermission != null) {
             if ("prod".equals(profile)) {
                 if (!user.getEnterprise().getUu().toString().equals(enUU)) {
-                    if ("优软商城后台-运维".equals(needPermission)) {
+                    if ("进入优软商城后台进行运营维护".equals(needPermission)) {
                         throw new AccessDeniedException("无法访问,没有 " + needPermission + " 权限!");
                     }
                 }
+            } else {
+                throw new AccessDeniedException("无法访问,没有 " + needPermission + " 权限!");
             }
         }
     }
@@ -213,21 +218,22 @@ public class SSOInterceptor extends AbstractSSOInterceptor {
         }
     }
 
-    /**
-     * 加载资源,初始化资源变量
-     */
-    private void loadResourceDefine() {
-        if (resourceMap == null) {
-            resourceMap = new HashMap<String, Collection<ConfigAttribute>>();
-            List<ResourceItem> resources = resourceItemDao.findAll();
-            for (ResourceItem resource : resources) {
-                Collection<ConfigAttribute> configAttributes = new ArrayList<ConfigAttribute>();
-                ConfigAttribute configAttribute = new SecurityConfig(resource.getName());
-                configAttributes.add(configAttribute);
-                resourceMap.put(resource.getMethod() + ":" + resource.getUrl(), configAttributes);
-            }
-        }
-    }
+	/**
+	 * 加载资源,初始化资源变量
+	 *
+	 */
+	private void loadResourceDefine() {
+		if (resourceMap == null) {
+			resourceMap = new HashMap<String, Collection<ConfigAttribute>>();
+			List<ResourceItem> resources = resourceItemDao.findAll();
+			for (ResourceItem resource : resources) {
+				Collection<ConfigAttribute> configAttributes = new ArrayList<ConfigAttribute>();
+				ConfigAttribute configAttribute = new SecurityConfig(resource.getDesc());
+				configAttributes.add(configAttribute);
+				resourceMap.put(resource.getMethod() + ":" + resource.getUrl(), configAttributes);
+			}
+		}
+	}
 
     /**
      * 根据路径获取访问权限的集合接口
@@ -240,42 +246,46 @@ public class SSOInterceptor extends AbstractSSOInterceptor {
         if (resourceMap == null)
             loadResourceDefine();
 
-        for (Iterator<String> iter = resourceMap.keySet().iterator(); iter.hasNext(); ) {
-            String resourceKey = iter.next();
-            String[] resourceParam = resourceKey.split(":");
-            String resourceMethod = resourceParam[0];
-            String resourceUrl = resourceParam[1];
-            AntPathRequestMatcher matcher = new AntPathRequestMatcher(resourceUrl);
-            if (null != resourceUrl && request.getMethod().equals(resourceMethod) && matcher.matches(request)) {
-                return resourceMap.get(resourceKey);
-            }
-        }
-        return null;
-    }
+		for (Iterator<String> iter = resourceMap.keySet().iterator(); iter.hasNext();) {
+			String resourceKey = iter.next();
+			String[] resourceParam = resourceKey.split(":");
+			String resourceMethod = resourceParam[0];
+			String resourceUrl = resourceParam[1];
+			AntPathRequestMatcher matcher = new AntPathRequestMatcher(resourceUrl);
+			if (null != resourceUrl && request.getMethod().equals(resourceMethod) && matcher.matches(request)) {
+				return resourceMap.get(resourceKey);
+			}
+		}
+		return null;
+	}
 
-    private void setGrantedAuthorities(User user) {
-        Set<GrantedAuthority> authSet = new HashSet<GrantedAuthority>();
-        user.setCurrentEnterpriseRoles();
-        Set<Role> roles = user.getRoles();
-        if (!CollectionUtils.isEmpty(roles)) {
-            for (Role role : roles) {
-                if (role.isSys()) {// 超级账号
-                    user.setIssys(Constant.YES);
-                    break;
-                }
-                Set<ResourceItem> resourceItems = role.getResourceItems();
-                if (!CollectionUtils.isEmpty(resourceItems)) {
-                    for (ResourceItem res : resourceItems) {
-                        authSet.add(new SimpleGrantedAuthority(res.getName()));
-                    }
-                }
-            }
+	private void setGrantedAuthorities(User user) {
+		Set<GrantedAuthority> authSet = new HashSet<GrantedAuthority>();
+		user.setCurrentEnterpriseRoles();
+		Set<Role> roles = user.getRoles();
+		if (!CollectionUtils.isEmpty(roles)) {
+			for (Role role : roles) {
+				if (role.isSys()) {// 超级账号
+					user.setIssys(Constant.YES);
+					break;
+				}
+				Set<ResourceItem> resourceItems = role.getResourceItems();
+				if (!CollectionUtils.isEmpty(resourceItems)) {
+					for (ResourceItem res : resourceItems) {
+						authSet.add(new SimpleGrantedAuthority(res.getDesc()));
+					}
+				}
+			}
+
+		}
+        if (user.getEnterprise() != null && user.getUserUU().equals(user.getEnterprise().getEnAdminuu())) {
+            user.setIssys(Constant.YES);
         }
         if (authorities == null) {
-            authorities = new HashMap<Long, Collection<GrantedAuthority>>();
-        }
-        authorities.put(user.getUserUU(), authSet);
-    }
+			authorities = new HashMap<Long, Collection<GrantedAuthority>>();
+		}
+		authorities.put(user.getUserUU(), authSet);
+	}
 
     @Override
     protected void sendRedirect(HttpServletRequest request, HttpServletResponse response) throws IOException {

+ 5 - 0
src/main/java/com/uas/platform/b2c/fa/payment/controller/BankInfoController.java

@@ -1,6 +1,8 @@
 package com.uas.platform.b2c.fa.payment.controller;
 
 import com.alibaba.fastjson.JSONObject;
+import com.uas.platform.b2c.common.account.model.Role;
+import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.base.model.FileUpload;
 import com.uas.platform.b2c.core.config.SysConf;
 import com.uas.platform.b2c.core.support.SystemSession;
@@ -20,6 +22,7 @@ import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * The type BankInfo controller.
@@ -191,6 +194,8 @@ public class BankInfoController {
 	@RequestMapping(value="/setDefaultAccount/{id}", method = RequestMethod.GET)
 	@ApiOperation(value = "设置默认银行账户", httpMethod = "GET")
 	public void setDefaultAccount(@ApiParam(required = true, value = "账户id") @PathVariable("id") Long id) {
+		User user = SystemSession.getUser();
+		Set<Role> roles = user.getRoles();
 		logger.log("银行账户信息", "设置默认账户", "将id为"+ id +"的账户信息设置成默认账户,操作人UU号是:"+ SystemSession.getUser().getUserUU());
 		bankInfoService.setDefaultAccount(id);
 	}

+ 15 - 1
src/main/java/com/uas/platform/b2c/prod/store/controller/StoreInController.java

@@ -1,6 +1,8 @@
 package com.uas.platform.b2c.prod.store.controller;
 
 import com.alibaba.fastjson.JSONObject;
+import com.uas.platform.b2c.advertise.ad.model.RecommendProduct;
+import com.uas.platform.b2c.advertise.ad.service.RecommendProductService;
 import com.uas.platform.b2c.core.config.SysConf;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
@@ -40,13 +42,16 @@ public class StoreInController {
 
 	private final StoreInFacade storeInFacade;
 
+	private final RecommendProductService recommendProductService;
+
 	private final SysConf sysConf;
 
 	@Autowired
-	public StoreInController(StoreInService storeService, StoreInFacade storeInFacade, SysConf sysConf) {
+	public StoreInController(StoreInService storeService, StoreInFacade storeInFacade, SysConf sysConf,RecommendProductService recommendProductService) {
 		this.storeService = storeService;
 		this.storeInFacade = storeInFacade;
 		this.sysConf = sysConf;
+		this.recommendProductService = recommendProductService;
 	}
 
 	/**
@@ -193,4 +198,13 @@ public class StoreInController {
 		List<String> storeidArray = FastjsonUtils.fromJsonArray(storeids, String.class);
 		return storeService.getContactInfo(storeidArray);
 	}
+
+
+	/**
+	 * 当卖家新增或修改产品推荐时,创建或更新产品推荐信息
+	 */
+	@RequestMapping(method = RequestMethod.POST, value = "/products//update_batch")
+	public List<RecommendProduct> saveProductsWhenSellerUpdate(String uuid, @RequestBody List<RecommendProduct> productList) {
+		return recommendProductService.saveProductsWhenSellerUpdate(uuid, productList);
+	}
 }

+ 1 - 0
src/main/resources/dev/message.properties

@@ -2,6 +2,7 @@ tplNotifySupplierAfterCommit=3c70dd8f-0e1e-4aec-bd7f-c360a506f35e
 plaformB2cAuditRemindTemplateId=774296f3-a260-4bb5-b4eb-6f01090dadf3
 plaformB2cBrandApprovedTemplateId=5b5effdf-5562-45f7-9021-18f21e29bec6
 plaformB2cBrandUnproveTemplateId=03b3d658-cd92-43a0-a53f-103492cfc595
+tplAfterBeAddedtoB2C=b9dee589-9fd8-45d3-9b2a-64b56d65e7e2
 plaformB2cComponentApprovedTemplateId=36812a85-d0f9-4d2a-a7aa-62319f092b6f
 plaformB2cComponentUnproveTemplateId=6228240a-93ba-405f-851c-f874a6c99864
 plaformB2cSupplyChainTemplateId=b28337ba-f115-4f11-b457-15d558443160

+ 1 - 0
src/main/resources/prod/message.properties

@@ -2,6 +2,7 @@ tplNotifySupplierAfterCommit=3c70dd8f-0e1e-4aec-bd7f-c360a506f35e
 plaformB2cAuditRemindTemplateId=774296f3-a260-4bb5-b4eb-6f01090dadf3
 plaformB2cBrandApprovedTemplateId=5b5effdf-5562-45f7-9021-18f21e29bec6
 plaformB2cBrandUnproveTemplateId=03b3d658-cd92-43a0-a53f-103492cfc595
+tplAfterBeAddedtoB2C=b9dee589-9fd8-45d3-9b2a-64b56d65e7e2
 plaformB2cComponentApprovedTemplateId=36812a85-d0f9-4d2a-a7aa-62319f092b6f
 plaformB2cComponentUnproveTemplateId=6228240a-93ba-405f-851c-f874a6c99864
 plaformB2cSupplyChainTemplateId=b28337ba-f115-4f11-b457-15d558443160

+ 1 - 0
src/main/resources/test/message.properties

@@ -2,6 +2,7 @@ tplNotifySupplierAfterCommit=3c70dd8f-0e1e-4aec-bd7f-c360a506f35e
 plaformB2cAuditRemindTemplateId=774296f3-a260-4bb5-b4eb-6f01090dadf3
 plaformB2cBrandApprovedTemplateId=5b5effdf-5562-45f7-9021-18f21e29bec6
 plaformB2cBrandUnproveTemplateId=03b3d658-cd92-43a0-a53f-103492cfc595
+tplAfterBeAddedtoB2C=b9dee589-9fd8-45d3-9b2a-64b56d65e7e2
 plaformB2cComponentApprovedTemplateId=36812a85-d0f9-4d2a-a7aa-62319f092b6f
 plaformB2cComponentUnproveTemplateId=6228240a-93ba-405f-851c-f874a6c99864
 plaformB2cSupplyChainTemplateId=b28337ba-f115-4f11-b457-15d558443160

+ 2 - 2
src/main/webapp/WEB-INF/web.xml

@@ -3,12 +3,12 @@
 	version="3.1"
 	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/web-app_3_1.xsd">
 
-	<display-name>platform-b2c</display-name>
+	<display-name>platform-b2cAuthority</display-name>
 
 	<description>usoftchina platform b2c</description>
 	<context-param>
 		<param-name>webAppRootKey</param-name>
-		<param-value>spring.webapp.b2c.prod</param-value>
+		<param-value>spring.webapp.b2c.authority</param-value>
 	</context-param>
 	<context-param>
 		<param-name>spring.profiles.active</param-name>

BIN
src/main/webapp/resources/img/vendor/authority/role-bg-1.jpg


BIN
src/main/webapp/resources/img/vendor/authority/role-bg-2.jpg


BIN
src/main/webapp/resources/img/vendor/authority/role-bg-3.jpg


BIN
src/main/webapp/resources/img/vendor/authority/role-bg-4.jpg


BIN
src/main/webapp/resources/img/vendor/authority/role-bg-5.jpg


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


BIN
src/main/webapp/resources/img/vendor/images/check-active.jpg


BIN
src/main/webapp/resources/img/vendor/images/check.jpg


BIN
src/main/webapp/resources/img/vendor/images/xiala-blue.jpg


+ 1 - 1
src/main/webapp/resources/js/admin/controllers/AuditRealAuthCtrl.js

@@ -16,7 +16,7 @@ define(['app/app'], function (app) {
           params.total(data.totalElements);
           $defer.resolve(data.content);
         }, function (response) {
-          toaster.pop('error', response.data);
+          toaster.pop('error', '获取账户信息失败 ', response.data);
         });
       }
     });

+ 1 - 1
src/main/webapp/resources/js/admin/controllers/SecQuestionCtrl.js

@@ -15,7 +15,7 @@ define(['app/app'], function (app) {
           params.total(data.totalElements);
           $defer.resolve(data.content);
         }, function (response) {
-          toaster.pop('error', '获取账户信息失败');
+          toaster.pop('error', '获取账户信息失败 ', response.data);
         });
       }
     });

+ 1 - 1
src/main/webapp/resources/js/admin/controllers/bankInfo/AuditBankInfoCtrl.js

@@ -45,7 +45,7 @@ define(['app/app'], function (app) {
                     params.total(data.totalElements);
                     $defer.resolve(data.content);
                 }, function (response) {
-                    toaster.pop('error', '获取账户信息失败');
+                    toaster.pop('error', '获取账户信息失败 ', response.data);
                 });
             }
         });

+ 1 - 1
src/main/webapp/resources/js/admin/controllers/checkMoney/billInfoAdminCtrl.js

@@ -15,7 +15,7 @@ define(['app/app'], function(app) {
 					}
 				});
 			}, function(response) {
-				toaster.pop('error', '获取发票信息失败');
+				toaster.pop('error', '获取发票信息失败 ' + response.data);
 			});
 		}
 		

+ 1 - 1
src/main/webapp/resources/js/admin/controllers/checkMoney/creditCardAdminCtrl.js

@@ -45,7 +45,7 @@ define(['app/app'], function(app) {
 					account.filterAccount = hideBankFilter(account.number);
 				})
 			}, function(response) {
-				toaster.pop('error', '获取账户信息失败');
+				toaster.pop('error', '获取账户信息失败 '+ response.data);
 			})
 		}
 		loadAccount();

+ 2 - 2
src/main/webapp/resources/js/admin/controllers/logistics/DelayTime.js

@@ -16,8 +16,8 @@ define([ 'app/app' ], function(app) {
 					}
 				});
 			}
-		}, function(response) {
-			toaster.pop('error', '获取信息失败');
+		}, function(res) {
+			toaster.pop('error', '获取信息失败 ', res.data);
 		});
 		$scope.modify = function(delayTime) {
 			delayTime.edit = true;

+ 2 - 2
src/main/webapp/resources/js/admin/controllers/product/MoveCmpCtrl.js

@@ -110,8 +110,8 @@ define([ 'app/app' ], function(app) {
 						$scope.allCheck = false;
 						$defer.resolve(data.content);
 						params.total(data.totalElements);
-					}, function(response) {
-						toaster.pop('error', '获取信息失败');
+					}, function(res) {
+						toaster.pop('error', '获取信息失败 ', res.data);
 					});
 				}
 			});	

+ 2 - 2
src/main/webapp/resources/js/admin/controllers/trade/AfSaleApplyProcessingCtrl.js

@@ -56,8 +56,8 @@ define(['app/app'], function(app) {
 								}
 							})
 						}
-					}, function(response) {
-						toaster.pop('error', '获取信息失败');
+					}, function(res) {
+						toaster.pop('error', '获取信息失败 ', res.data);
 					});
 				}
 			});

+ 2 - 2
src/main/webapp/resources/js/admin/controllers/trade/supExProcessCtrl.js

@@ -32,8 +32,8 @@ define(['app/app'], function (app) {
                     PuExProcess.getPuExApplyListForMall(param, function (data) {
                         $defer.resolve(data.content);
                         params.total(data.totalElements);
-                    }, function (response) {
-                        toaster.pop('error', '获取信息失败');
+                    }, function (res) {
+                        toaster.pop('error', '获取信息失败 ', res.data);
                     });
                 }
             });

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

@@ -1752,6 +1752,59 @@ define([ 'app/app' ], function(app) {
 		};
 	}]);
 
+  /**
+   * 左侧导航栏控制器
+   */
+	app.controller('leftNavCtrl', ["$scope", "toaster", '$modal', '$rootScope', function($scope, toaster, $modal, $rootScope) {
+        //安全设置提醒框
+        $scope.openHomeCenterModel = function () {
+            var modalInstance = $modal.open({
+                animation: true,
+                templateUrl: $rootScope.rootPath + '/static/view/usercenter/modal/homeCenter_modal.html',
+                controller: 'homeModalCtrl'
+            });
+            modalInstance.result.then(function () {
+            }, function () {
+            });
+        };
+    }]);
+	/**
+	 * 左侧导航栏控制器
+	 */
+	app.controller('leftNavCtrl', ["$scope", "toaster", '$modal', '$rootScope', function($scope, toaster, $modal, $rootScope){
+		//安全设置提醒框
+
+		$scope.openHomeCenterModel = function() {
+			var modalInstance = $modal.open({
+				animation: true,
+				templateUrl: $rootScope.rootPath + '/static/view/usercenter/modal/homeCenter_modal.html',
+				controller:'homeModalCtrl'
+			});
+			modalInstance.result.then(function(){
+			}, function(){
+			});
+		};
+		$scope.promptUpdate = function() {
+			if (!$scope.userInfo.pwdEnable || !$scope.userInfo.userEmail || !$scope.userInfo.haveUserQuestion) {
+				$scope.openHomeCenterModel();
+			}
+		};
+  }]);
+
+	app.controller('homeModalCtrl', ['$rootScope', '$scope',  '$modalInstance', 'toaster', '$http', 'ShippingAddress','$state', function($rootScope, $scope, $modalInstance, toaster, $http, ShippingAddress,$state) {
+        $rootScope.$on('$stateChangeStart',
+            function (event, toState, toParams, fromState, fromParams) {
+                $modalInstance.dismiss();
+            })
+        $scope.goLink = function (op) {
+            $state.go('vendor_account_management', {op: op});
+            $modalInstance.dismiss('cancel');
+        }
+
+        $scope.cancel = function () {
+            $modalInstance.dismiss('cancel');
+        }
+    }])
     // 手续费控制器
     app.controller('poundageCtrl', ["$scope", "NumberService", function($scope, NumberService){
         // 手续费介绍提示框

+ 2 - 2
src/main/webapp/resources/js/common/controllers/originalGoodsCtrl.js

@@ -23,8 +23,8 @@ define([ 'app/app' ], function(app) {
 					$scope.components = data.content;
 					$defer.resolve(data.content);
 					params.total(data.totalElements);
-				}, function () {
-					toaster.pop('error', '获取信息失败');
+				}, function (res) {
+					toaster.pop('error', '获取信息失败 ', res.data);
 				})
 			}
 		});

+ 1 - 1
src/main/webapp/resources/js/common/module/store_recommend_product.js

@@ -39,7 +39,7 @@ define([ 'ngResource', 'common/query/commodity' ], function() {
 			 * @param uuid
 			 */
 			saveProductsWhenSellerUpdate: {
-				url: 'api/store/recommend/products//update_batch',
+				url: '/store-service/products//update_batch',
 				method: 'POST',
 				isArray: true
 			},

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

@@ -186,7 +186,7 @@ define([ 'angular', 'ui-bootstrap', 'ngResource' ], function(angular) {
 				method : 'PUT'
 			},
 			updateEnterpriseInfo : {
-				url : 'basic/enterprise/:enuu/info',
+				url : 'basic/enterprise/:enuu/updateInfo',
 				method : 'POST'
 			},
 			//绑定界面的用户搜索

+ 147 - 120
src/main/webapp/resources/js/common/query/user.js

@@ -1,114 +1,118 @@
-define([ 'angular', 'ui-bootstrap', 'ngResource' ], function(angular) {
-	'use strict';
-	angular.module('common.query.user', ['ui.bootstrap', 'ngResource']).factory('UserService', ['$modal', function($modal){
-		return {
-			open: function(enterprise) {
-				var modalInstance = $modal.open({
-					templateUrl : 'static/view/common/query/user.html',
-					controller : 'UserQueryCtrl',
-					backdrop : "static",
-					resolve : {
-						enterprise : function() {
-							return enterprise;
-						}
-					},
-					windowClass : 'modal-large'
-				});
-				return modalInstance;
-			}
-		};
-	}]).controller('UserQueryCtrl', ['$scope', '$modalInstance', '$http', '$filter', 'enterprise', 'ngTableParams', function($scope, $modalInstance, $http, $filter, enterprise, ngTableParams){
-		$scope.enterprise = enterprise;
-		
-		$scope.tableParams = new ngTableParams({
-			page : 1,
-			total: 1, 
-			count : 500,
-			sorting: {
+define(['angular', 'ui-bootstrap', 'ngResource'], function (angular) {
+    'use strict';
+    angular.module('common.query.user', ['ui.bootstrap', 'ngResource']).factory('UserService', ['$modal', function ($modal) {
+        return {
+            open: function (enterprise) {
+                var modalInstance = $modal.open({
+                    templateUrl: 'static/view/common/query/user.html',
+                    controller: 'UserQueryCtrl',
+                    backdrop: "static",
+                    resolve: {
+                        enterprise: function () {
+                            return enterprise;
+                        }
+                    },
+                    windowClass: 'modal-large'
+                });
+                return modalInstance;
+            }
+        };
+    }]).controller('UserQueryCtrl', ['$scope', '$modalInstance', '$http', '$filter', 'enterprise', 'ngTableParams', function ($scope, $modalInstance, $http, $filter, enterprise, ngTableParams) {
+        $scope.enterprise = enterprise;
+
+        $scope.tableParams = new ngTableParams({
+            page: 1,
+            total: 1,
+            count: 500,
+            sorting: {
                 'userName': 'asc'
             },
             filter: {
-            	'enabled': 1
+                'enabled': 1
             }
-		}, {
-			groupBy : 'role',
-			counts: [],
-			getData : function($defer, params) {
-				$http.get('user/' + enterprise.uu + '/users').success(function(users){
-					if(users) {
-						var data = params.filter() ? $filter('filter')(users, params.filter()) : users;
-						params.total(data.length);
-						data = params.sorting() ? $filter('orderBy')(data, $scope.tableParams.orderBy()) : data;
+        }, {
+            groupBy: 'role',
+            counts: [],
+            getData: function ($defer, params) {
+                $http.get('user/' + enterprise.uu + '/users').success(function (users) {
+                    if (users) {
+                        var data = params.filter() ? $filter('filter')(users, params.filter()) : users;
+                        params.total(data.length);
+                        data = params.sorting() ? $filter('orderBy')(data, $scope.tableParams.orderBy()) : data;
                         $defer.resolve(data.slice((params.page() - 1) * params.count(), params.page() * params.count()));
-					}
-				}).error(function(){
-					
-				});
-			}
-		});
+                    }
+                }).error(function () {
+
+                });
+            }
+        });
 
-		// 关闭模态窗
-		$scope.close = function() {
-			$modalInstance.close();
-		};
-		// 选中user
-		$scope.select = function(user) {
-			$modalInstance.close(angular.copy(user));
-		};
-	}]).factory('User', ['$resource', function($resource) {
-		return $resource('basic/user/personal', {}, {
-			postImageUrl: {
-				url : 'basic/user/setImageUrl',
-				method : 'POST'
-			},
-			getUser: {
-				method : 'GET'
-			},
-			isDevOrProd: {
-				url: 'basic/user/isDev',
-				method : 'GET'
-			},
-			getUserByUU: {
-				url: 'basic/user/getUserByUU',
-				method : 'GET'
-			},
-			checkPassword: {
-				url: 'basic/user/checkPassword',
-				method: 'GET'
-			},
-			updatePassword: {
-				url: 'basic/user/updatePassword',
-				method: 'POST'
-			},
+        // 关闭模态窗
+        $scope.close = function () {
+            $modalInstance.close();
+        };
+        // 选中user
+        $scope.select = function (user) {
+            $modalInstance.close(angular.copy(user));
+        };
+    }]).factory('User', ['$resource', function ($resource) {
+        return $resource('basic/user/personal', {}, {
+            postImageUrl: {
+                url: 'basic/user/setImageUrl',
+                method: 'POST'
+            },
+            getUser: {
+                method: 'GET'
+            },
+            getUserByUU: {
+                url: 'basic/user/getUserByUU',
+                method: 'GET'
+            },
+            checkPassword: {
+                url: 'basic/user/checkPassword',
+                method: 'GET'
+            },
+            updatePassword: {
+                url: 'basic/user/updatePassword',
+                method: 'POST'
+            },
+            update: {
+                url: 'basic/user',
+                method: 'PUT'
+            },
             checkUserEmail: {
                 url: 'basic/user/checkUserEmail',
                 method: 'GET'
             },
-            sendCheckCode:{
+            isDevOrProd: {
+                url: 'basic/user/isDev',
+                method : 'GET'
+            },
+            sendCheckCode: {
                 url: 'basic/user/sendCheckCode',
                 method: 'GET'
             },
-            emailEnable:{
+            emailEnable: {
                 url: 'basic/user/emailEnable',
                 method: 'GET'
-			},
-            validCheckCode:{
+            },
+            validCheckCode: {
                 url: 'basic/user/validCheckCode',
                 method: 'GET'
             },
-            updateUserEmail:{
+            updateUserEmail: {
                 url: 'basic/user/updateUserEmail',
                 method: 'POST'
-			},
-			checkUserTel:{
+            },
+            checkUserTel: {
                 url: 'basic/user/checkUserTel',
                 method: 'GET'
-			},
-            telEnable:{
+            },
+            telEnable: {
                 url: 'basic/user/telEnable',
                 method: 'GET'
             },
-            getPageToken:{
+            getPageToken: {
                 url: 'basic/user/getPageToken',
                 method: 'GET'
             },
@@ -116,51 +120,74 @@ define([ 'angular', 'ui-bootstrap', 'ngResource' ], function(angular) {
                 url: 'basic/user/sendTelCheckCode',
                 method: 'GET'
             },
-            validTelCheckCode:{
+            validTelCheckCode: {
                 url: 'basic/user/validTelCheckCode',
                 method: 'GET'
-			},
-            updateUserTel:{
+            },
+            updateUserTel: {
                 url: 'basic/user/updateUserTel',
                 method: 'POST'
             },
-            checkHaveUserPay:{
+            checkHaveUserPay: {
                 url: 'basic/user/checkHaveUserPay',
                 method: 'GET'
-			},
-            checkUserPay:{
+            },
+            checkUserPay: {
                 url: 'basic/user/checkUserPay',
                 method: 'GET'
-			},
-            updateUserPay:{
+            },
+            updateUserPay: {
                 url: 'basic/user/updateUserPay',
                 method: 'POST'
-			},
-            updateUserQuestion:{
+            },
+            updateUserQuestion: {
                 url: 'basic/user/updateUserQuestion',
-            	  method: 'POST'
-			},
-            getUserQuestion:{
-							 url: 'basic/user/getUserQuestion',
+                method: 'POST'
+            },
+            getUserQuestion: {
+                url: 'basic/user/getUserQuestion',
+                method: 'GET',
+                isArray: true
+            },
+            updateRealAuth: {
+                url: 'basic/user/updateRealAuth',
+                method: 'POST'
+            },
+            getPageStatusRealAuth: {
+                url: 'basic/user/getPageStatusRealAuth',
+                method: 'GET'
+            },
+            updateIdEnable: {
+                url: 'basic/user/updateIdEnable',
+                method: 'POST'
+            },
+            getAllSecQuestion: {
+                url: 'user/secQuestion/getPageInfo',
+                method: 'GET'
+            }
+        });
+    }]).factory('AccountResource', ['$resource', function ($resource) {
+        return $resource('account/resource', {});
+    }]).factory('AccountRole', ['$resource', function ($resource) {
+        return $resource('account/role/:id',{},{
+            getByExistRoleAndEnuu: {
+                url: 'account/role/existRole',
+                method: 'GET',
+                isArray: true
+            },
+            save: {
+                url: 'account/role',
+                method: 'POST'
+            },
+            remove: {
+                url: 'account/role/:id',
+                method: 'DELETE'
+            },
+            findAll: {
+                url: 'account/role',
                 method: 'GET',
-              isArray : true
-						},
-      updateRealAuth:{
-        url: 'basic/user/updateRealAuth',
-        method: 'POST'
-			},
-      getPageStatusRealAuth:{
-        url: 'basic/user/getPageStatusRealAuth',
-        method: 'GET'
-			},
-			updateIdEnable:{
-        url: 'basic/user/updateIdEnable',
-        method: 'POST'
-			},
-			getAllSecQuestion:{
-				url:'user/secQuestion/getPageInfo',
-				method:'GET'
-			}
-		});
-	}]);
+                isArray: true
+            }
+        });
+    }]);
 });

+ 1 - 1
src/main/webapp/resources/js/prod/controllers/ApplySampleCtrl.js

@@ -187,7 +187,7 @@ define([ 'app/app' ], function(app) {
 	    		toaster.pop('success', '成功 ', '保存收货地址成功');
 	    		$modalInstance.close(data);
 	    	}, function(res){
-	    		toaster.pop('error', '系统错误 ', '保存收货地址失败');
+	    		toaster.pop('error', '保存收货地址失败 ', res.data);
 	    	});
 	    }
 	    

+ 4 - 4
src/main/webapp/resources/js/prod/controllers/KindDetailCtrl.js

@@ -57,8 +57,8 @@ define([ 'app/app' ], function(app) {
 						searchService.kindPropertySearch(propertyParams, function(data) {
 							$defer.resolve(data.components);
 							params.total(data.resultCount);
-						}, function(response) {
-							toaster.pop('error', '获取信息失败');
+						}, function(res) {
+							toaster.pop('error', '获取信息失败 ', res.data);
 						})
 					}
 				});
@@ -147,8 +147,8 @@ define([ 'app/app' ], function(app) {
 								$scope.hasSample.push(false);
 							}
 						});
-					}, function(response) {
-						toaster.pop('error', '获取信息失败');
+					}, function(res) {
+						toaster.pop('error', '获取信息失败 ', res.data);
 					});
 				}
 			});	

+ 2 - 2
src/main/webapp/resources/js/prod/controllers/OrderEnsureCtrl.js

@@ -268,7 +268,7 @@ define([ 'app/app' ], function(app) {
 					}
 				});
 			}, function(response) {
-				toaster.pop('error', '获取发票信息失败');
+				toaster.pop('error', '获取发票信息失败 ' + response.data);
 			});
 		};
 		
@@ -1134,7 +1134,7 @@ define([ 'app/app' ], function(app) {
 	    		toaster.pop('success', '成功 ', '保存收货地址成功');
 	    		$modalInstance.close(data);
 	    	}, function(res){
-	    		toaster.pop('error', '系统错误 ', '保存收货地址失败');
+	    		toaster.pop('error', '保存收货地址失败', res.data);
 	    	});
 	    };
 	    

+ 2 - 2
src/main/webapp/resources/js/prod/controllers/OrderEnsureCtrlWithMultiCurrency.js

@@ -214,7 +214,7 @@ define([ 'app/app' ], function(app) {
 					}
 				});
 			}, function(response) {
-				toaster.pop('error', '获取发票信息失败');
+                toaster.pop('error', '获取发票信息失败 ' + response.data);
 			});
 		};
 		
@@ -1044,7 +1044,7 @@ define([ 'app/app' ], function(app) {
 	    		toaster.pop('success', '成功 ', '保存收货地址成功');
 	    		$modalInstance.close(data);
 	    	}, function(res){
-	    		toaster.pop('error', '系统错误 ', '保存收货地址失败');
+	    		toaster.pop('error', '保存收货地址失败', res.data);
 	    	});
 	    }
 	    

+ 2 - 2
src/main/webapp/resources/js/prod/controllers/ProductListByKindCtrl.js

@@ -156,8 +156,8 @@ define([ 'app/app' ], function(app) {
 								$scope.hasSample.push(false);
 							}
 						});
-					}, function(response) {
-						toaster.pop('error', '获取信息失败');
+					}, function(res) {
+						toaster.pop('error', '获取信息失败 ', res.data);
 					});
 				}
 			});	

+ 3 - 3
src/main/webapp/resources/js/prod/controllers/ProofingCtrl.js

@@ -58,8 +58,8 @@ define([ 'app/app' ], function(app) {
 					$scope.components = data.content
 					$defer.resolve(data.content);
 					params.total(data.totalElements);
-				}, function(response) {
-					toaster.pop('error', '获取信息失败');
+				}, function(res) {
+					toaster.pop('error', '获取信息失败 ', res.data);
 				});
 			}
 		});	
@@ -171,7 +171,7 @@ define([ 'app/app' ], function(app) {
 	    		toaster.pop('success', '成功 ', '保存收货地址成功');
 	    		$modalInstance.close(data);
 	    	}, function(res){
-	    		toaster.pop('error', '系统错误 ', '保存收货地址失败');
+	    		toaster.pop('error', '保存收货地址失败', res.data);
 	    	});
 	    }
 	    

+ 1 - 1
src/main/webapp/resources/js/prod/controllers/WastageCtrl.js

@@ -122,7 +122,7 @@ define([ 'app/app' ], function(app) {
 	    		toaster.pop('success', '成功 ', '保存收货地址成功');
 	    		$modalInstance.close(data);
 	    	}, function(res){
-	    		toaster.pop('error', '系统错误 ', '保存收货地址失败');
+	    		toaster.pop('error', '保存收货地址失败 ', res.data);
 	    	});
 	    }
 	    

+ 2 - 2
src/main/webapp/resources/js/search/app.js

@@ -174,8 +174,8 @@ define([ 'angularAMD', 'common/services', 'common/directives','ui.router', 'ui-b
 					getCarts();
 					$defer.resolve(data.components);
 					params.total(data.expose);
-				}, function(response) {
-					toaster.pop('error', '获取信息失败');
+				}, function(res) {
+					toaster.pop('error', '获取信息失败 ', res.data);
 				});
 			}
 		});

+ 1 - 1
src/main/webapp/resources/js/usercenter/controllers/BillAdminCtrl.js

@@ -15,7 +15,7 @@ define(['app/app'], function(app) {
 					}
 				});
 			}, function(response) {
-				toaster.pop('error', '获取发票信息失败');
+                toaster.pop('error', '获取发票信息失败 ' + response.data);
 			});
 		}
 		

+ 2 - 2
src/main/webapp/resources/js/usercenter/controllers/MyOrderToDoCtrl.js

@@ -109,7 +109,7 @@ define([ 'app/app' ], function(app) {
 				$scope.yrscAccount = data;
 			}
 		}, function(response) {
-			toaster.pop('error', '获取账户信息失败');
+			toaster.pop('error', '获取账户信息失败 ', response.data);
 		});
 		
 		// 获取优软商城对私账户的信息
@@ -118,7 +118,7 @@ define([ 'app/app' ], function(app) {
 				$scope.yrscPerAccount = data[0];
 			}
 		}, function(response) {
-			toaster.pop('error', '获取账户信息失败');
+			toaster.pop('error', '获取账户信息失败 ', response.data);
 		});
 		
 		// 根据当前状态获取对应的状态码值

+ 1 - 1
src/main/webapp/resources/js/usercenter/controllers/addressAdminCtrl.js

@@ -137,7 +137,7 @@ define(['app/app'], function(app) {
 	    		toaster.pop('success', '成功 ', '保存收货地址成功');
 	    		$modalInstance.close(data);
 	    	}, function(res){
-	    		toaster.pop('error', '系统错误 ', '保存收货地址失败');
+	    		toaster.pop('error', '保存收货地址失败 ', res.data);
 	    	});
 	    }
 	    

+ 1 - 1
src/main/webapp/resources/js/usercenter/controllers/creditCardAdminCtrl.js

@@ -31,7 +31,7 @@ define(['app/app'], function(app) {
 					account.filterAccount = hideBankFilter(account.number);
 				})
 			}, function(response) {
-				toaster.pop('error', '获取账户信息失败');
+				toaster.pop('error', '获取账户信息失败 ', response.data);
 			})
 		}
 		loadAccount();

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

@@ -93,7 +93,7 @@ define(['app/app'], function (app) {
 
 		//删除地址
 		$scope.deleteAddress = function (address) {
-			$scope.deleteObject = angular.copy(address);;
+			$scope.deleteObject = angular.copy(address);
 			$scope.showDeleteFrame = true;
 		};
 
@@ -416,14 +416,18 @@ define(['app/app'], function (app) {
 				//拼装地区
 				address.area = address.province + ',' + address.city + ',' + address.district;
 
-				// send属性 控制本地址是否是发货地址
-				ShippingAddress.save({isSetTop: $scope.isSetTop, send: $scope.isSendType, isPersonal: !$scope.isSendType}, address, function(data){
-					toaster.pop('success', '成功 ', '保存收货地址成功');
-					$modalInstance.close(data);
-				}, function(){
-					toaster.pop('error', '系统错误 ', '保存收货地址失败');
-				});
-			};
+                    // send属性 控制本地址是否是发货地址
+                    ShippingAddress.save({
+                      isSetTop: $scope.isSetTop,
+                      send: $scope.isSendType,
+                      isPersonal: !$scope.isSendType
+                    }, address, function (data) {
+                      toaster.pop('success', '成功 ', '保存收货地址成功');
+                      $modalInstance.close(data);
+                    }, function (res) {
+                      toaster.pop('error', '保存收货地址失败 ', res.data);
+                    });
+                  };
 
 			$scope.cancel = function() {
 				$modalInstance.dismiss();

+ 95 - 95
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_cart_ctrl.js

@@ -43,47 +43,47 @@ define(["app/app", 'jquery-summernote'], function(app) {
 		$scope.isChooseAll = false;
 
 		$scope.loadData = function (){
-				Cart.getPageInfo($scope.pageInfo, function(data) {
-					$scope.isDataLoading = false;
-					$scope.total = data.totalElements;
-					$scope.pageNum = data.totalPages;
+			Cart.getPageInfo($scope.pageInfo, function(data) {
+				$scope.isDataLoading = false;
+				$scope.total = data.totalElements;
+				$scope.pageNum = data.totalPages;
 
-					angular.forEach(data.content, function (cart) {
-						cart.buyCurrency = cart.currencyName.indexOf("RMB") > -1 ? "RMB" : "USD";
-						cart.isSelect = false;
-						//计算分段和统计一下价格
-						$scope.getPrice(cart);
-
-						//便于后期循环
-						$scope.carts.push(cart);
-						$scope.disabledAddAndSub(cart);
-						$scope.countByPage += 1;
-						var isContain = false;
-						for (var i = 0; i < $scope.cartMap.length; i++) {
-							if(angular.equals($scope.cartMap[i].name, cart.storeName)) {
-								$scope.cartMap[i].arr.push(cart);
-								isContain = true;
-							}
-						}
-						if(!isContain) {
-							var obj = {};
-							obj.name = cart.storeName;
-							obj.arr = [];
-							obj.arr.push(cart);
-							$scope.cartMap.push(obj);
+				angular.forEach(data.content, function (cart) {
+					cart.buyCurrency = cart.currencyName.indexOf("RMB") > -1 ? "RMB" : "USD";
+					cart.isSelect = false;
+					//计算分段和统计一下价格
+					$scope.getPrice(cart);
+
+					//便于后期循环
+					$scope.carts.push(cart);
+					$scope.disabledAddAndSub(cart);
+					$scope.countByPage += 1;
+					var isContain = false;
+					for (var i = 0; i < $scope.cartMap.length; i++) {
+						if(angular.equals($scope.cartMap[i].name, cart.storeName)) {
+							$scope.cartMap[i].arr.push(cart);
+							isContain = true;
 						}
-					});
-					$scope.cartIsEmpty = !$scope.carts.length ? true : false;
-					//设置全选的复选框
-					$scope.isChooseAll = $scope.isAllSelect($scope.carts);
+					}
+					if(!isContain) {
+						var obj = {};
+						obj.name = cart.storeName;
+						obj.arr = [];
+						obj.arr.push(cart);
+						$scope.cartMap.push(obj);
+					}
+				});
+				$scope.cartIsEmpty = !$scope.carts.length ? true : false;
+				//设置全选的复选框
+				$scope.isChooseAll = $scope.isAllSelect($scope.carts);
 
-					//设置店铺复选框的状态
-					angular.forEach($scope.cartMap, function (store) {
-						$scope.selectedStore[store.name] = $scope.isAllSelect(store.arr);
-					});
-				},function() {
-					toaster.pop('error', "提示", "获取购物车信息失败,请刷新页面");
+				//设置店铺复选框的状态
+				angular.forEach($scope.cartMap, function (store) {
+					$scope.selectedStore[store.name] = $scope.isAllSelect(store.arr);
 				});
+			},function() {
+				toaster.pop('error', "提示", "获取购物车信息失败,请刷新页面");
+			});
 		};
 
 		$scope.loadData();
@@ -120,7 +120,7 @@ define(["app/app", 'jquery-summernote'], function(app) {
 			//计算总价格
 			$scope.calculateAmount($scope.selectedStoreCarts);
 		};
-		
+
 		// 减少按钮,每次减minPackQty
 		$scope.reduce = function(cart){
 			if(cart.status == 1) {
@@ -139,7 +139,7 @@ define(["app/app", 'jquery-summernote'], function(app) {
 			//计算总价格
 			$scope.calculateAmount($scope.selectedStoreCarts);
 		};
-				
+
 		//根据搜索词过滤购物车信息,对类目、品牌、器件筛选
 		$scope.cartFilterCurrency = function(cartGroup) {
 			var result = false;
@@ -167,8 +167,8 @@ define(["app/app", 'jquery-summernote'], function(app) {
 
 		$scope.closeTable = function() {
 			console.log('0kds');
-        };
-        // //监听点击的位置,隐藏价格梯度的信息
+		};
+		// //监听点击的位置,隐藏价格梯度的信息
 		// document.onclick = function(event) {
 		// 	$scope.$apply(function () {
 		// 		angular.forEach($scope.carts, function (cart) {
@@ -181,9 +181,9 @@ define(["app/app", 'jquery-summernote'], function(app) {
 
 		//查看价格分段。
 		$scope.togglePrice = function (cart) {
-            cart.display = cart.display == 'block' ? 'none' : 'block';
-        };
-        // 统计已勾选批次
+			cart.display = cart.display == 'block' ? 'none' : 'block';
+		};
+		// 统计已勾选批次
 		var creatSelectArr = function(){
 			var arr = [];
 			angular.forEach($scope.carts, function(cart) {
@@ -607,8 +607,8 @@ define(["app/app", 'jquery-summernote'], function(app) {
 					if(!isThisTag) {
 						$scope.carts[i].contactSeller = false;
 					}
-                }
-            });
+				}
+			});
 		};
 
 
@@ -811,17 +811,17 @@ define(["app/app", 'jquery-summernote'], function(app) {
 			SessionService.set("buyNow",false);
 			var jsonOrderDetails = angular.toJson(result);
 			Order.saveByGroup({}, jsonOrderDetails, function(result){
-                if(result.code == 1) {
+				if(result.code == 1) {
 					if(result.message) {
 						toaster.pop('info', result.message);
 					}
-                    $state.go('order_pay', {orderid :  enIdFilter(result.data.orderid)});
-                }else if(result.code == 7){
-                    toaster.pop('info', '提示', "选中的购物车信息已经失效,将为您刷新界面之后重新操作");
+					$state.go('order_pay', {orderid :  enIdFilter(result.data.orderid)});
+				}else if(result.code == 7){
+					toaster.pop('info', '提示', "选中的购物车信息已经失效,将为您刷新界面之后重新操作");
 					$timeout(function () {
 						window.location.reload();
 					}, 1500);
-                }else {
+				}else {
 					toaster.pop('info', '提示', result.message);
 				}
 			}, function(res){
@@ -864,46 +864,46 @@ define(["app/app", 'jquery-summernote'], function(app) {
 				Goods.getSimilarityPro({page : 1, size : 6, code : cart.code, batchCode : cart.batchCode}, function (data) {
 					cart.similarities = data.data.content;
 				}, function (error) {
-					toaster.pop('error', '获取相似产品失败!');
+					toaster.pop('error', '获取相似产品失败!'+ error.data);
 				});
 			}
 
 		};
-        // 移入收藏后删除购物车操作
+		// 移入收藏后删除购物车操作
 		$scope.collectDelete = function(id){
-            var arr = [];
-            if(id != null){
-                arr.push(id);
-            }else {
-                angular.forEach($scope.carts, function(cart){
-                    if(cart.isSelect){
-                        arr.push(cart.id);
-                    }
-                });
-            }
-            var ids = angular.toJson(arr);
-            Cart.deleteById({ids : ids}, function(data){
-                $rootScope.countCart = $rootScope.countCart - arr.length;
-
-                //更新选中的购物车信息
-                $scope.selectedStoreCarts = $scope.arrayFilterId($scope.selectedStoreCarts, arr);
-                //更新购物车信息
-                $scope.carts = $scope.arrayFilterId($scope.carts, arr);
-                //判断是否全部删除,如果全部删除,就将全选置为取消状态。
-                if($scope.carts.length == 0) {
-                    $scope.isChooseAll = false;
+			var arr = [];
+			if(id != null){
+				arr.push(id);
+			}else {
+				angular.forEach($scope.carts, function(cart){
+					if(cart.isSelect){
+						arr.push(cart.id);
+					}
+				});
+			}
+			var ids = angular.toJson(arr);
+			Cart.deleteById({ids : ids}, function(data){
+				$rootScope.countCart = $rootScope.countCart - arr.length;
+
+				//更新选中的购物车信息
+				$scope.selectedStoreCarts = $scope.arrayFilterId($scope.selectedStoreCarts, arr);
+				//更新购物车信息
+				$scope.carts = $scope.arrayFilterId($scope.carts, arr);
+				//判断是否全部删除,如果全部删除,就将全选置为取消状态。
+				if($scope.carts.length == 0) {
+					$scope.isChooseAll = false;
 					$scope.cartIsEmpty = true;
-                }
+				}
 
-                //更新map中购物车信息
-                var deleteStoreName = [];
+				//更新map中购物车信息
+				var deleteStoreName = [];
 				angular.forEach($scope.cartMap, function(store) {
-						if(store.arr && store.arr.length > 0) {
-							store.arr = $scope.arrayFilterId(store.arr, arr)
-							if(!store.arr || !store.arr.length || store.arr.length == 0) {
-								deleteStoreName.push(store.name);
-							}
+					if(store.arr && store.arr.length > 0) {
+						store.arr = $scope.arrayFilterId(store.arr, arr)
+						if(!store.arr || !store.arr.length || store.arr.length == 0) {
+							deleteStoreName.push(store.name);
 						}
+					}
 				});
 				//删除$scope.cartMap多余的部分。
 				angular.forEach(deleteStoreName, function(storeName) {
@@ -912,17 +912,17 @@ define(["app/app", 'jquery-summernote'], function(app) {
 					});
 				});
 
-                //计算总金额
-                $scope.calculateAmount($scope.selectedStoreCarts);
+				//计算总金额
+				$scope.calculateAmount($scope.selectedStoreCarts);
 
             }, function (res) {
-                toaster.pop('error', '系统错误', '购物车信息删除失败' + res.data);
+                toaster.pop('error', '系统错误', res.data);
             });
 
 
 		};
-        // 移入收藏
-        $scope.collect = function(uuid, id) {
+		// 移入收藏
+		$scope.collect = function(uuid, id) {
 			if(uuid){
                 ComponentActive.getSimpleInfoByUuid({uuid: uuid}, { }, function(data){
                     var obj = {'componentid': data.id, 'kind': 2};
@@ -930,7 +930,7 @@ define(["app/app", 'jquery-summernote'], function(app) {
                         $scope.collectDelete(id);
                         toaster.pop('success', '收藏成功');
                     }, function(response) {
-                        toaster.pop('error', '收藏失败');
+                        toaster.pop('error', response.data);
                     })
                 });
 			}else{
@@ -951,8 +951,8 @@ define(["app/app", 'jquery-summernote'], function(app) {
                         $scope.collectDelete();
                         toaster.pop('success', '收藏成功');
 					}
-				},function () {
-                    toaster.pop('error', '收藏失败');
+				},function (response) {
+                    toaster.pop('error', response.data);
                 })
 			}
 		}
@@ -1009,7 +1009,7 @@ define(["app/app", 'jquery-summernote'], function(app) {
                 toaster.pop('success', '成功删除');
                 $modalInstance.close()
             }, function (res) {
-                toaster.pop('error', '系统错误', '购物车信息删除失败' + res.data);
+                toaster.pop('error', '系统错误', res.data);
             });
         };
 
@@ -1018,13 +1018,13 @@ define(["app/app", 'jquery-summernote'], function(app) {
                 toaster.pop('success', '成功清除购物车内的无效产品');
                 $modalInstance.close()
             }, function (res) {
-                toaster.pop('error', '系统错误', '购物车信息删除失败' + res.data);
+                toaster.pop('error', '系统错误', res.data);
             });
         };
 
-        $scope.cancleDelete = function () {
-            $modalInstance.dismiss();
-        }
+		$scope.cancleDelete = function () {
+			$modalInstance.dismiss();
+		}
 
 	}]);
 

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

@@ -155,7 +155,7 @@ define(['app/app', 'calendar'], function(app) {
                 $scope.invoiceType = 1205;
                 $scope.selectInvoiceType(1205); // --1205专用增值税发票   --1206普通发票  --1207不开发票
             }, function(response) {
-                toaster.pop('error', '获取发票信息失败');
+                toaster.pop('error', '获取发票信息失败 ' + response.data);
             });
         };
 
@@ -336,7 +336,7 @@ define(['app/app', 'calendar'], function(app) {
                 toaster.pop('success', '成功 ', '保存收货地址成功');
                 $modalInstance.close(data);
             }, function(res){
-                toaster.pop('error', '系统错误 ', '保存收货地址失败');
+                toaster.pop('error', '保存收货地址失败', res.data);
             });
         };
 

+ 3 - 3
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_invoice_ctrl.js

@@ -22,8 +22,8 @@ define(['app/app'], function(app) {
                         $scope.isNormal = false;
                     }
                 })
-            }, function(error) {
-                toaster.pop('error', '获取发票信息失败');
+            }, function(response) {
+                toaster.pop('error', '获取发票信息失败 ' + response.data);
             });
         };
         getInvoiceInfo();
@@ -83,7 +83,7 @@ define(['app/app'], function(app) {
                 $scope.changeBillStatusFlag = false
                 $state.reload();
             }).error(function(data){
-                toaster.pop('error', message + '失败');
+                toaster.pop('error', message + '失败 ' + data);
             });
         }
 

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

@@ -56,8 +56,8 @@ define([ 'app/app' ], function(app) {
                         $defer.resolve(page.content);
                         //划分数据
                         $scope.billData = page.content;
-                    }, function () {
-                        toaster.pop('error', '获取开票记录失败');
+                    }, function (response) {
+                        toaster.pop('error', '获取开票记录失败 ', response.data);
                     });
                 }
             });

+ 3 - 3
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_logistics_ctrl.js

@@ -231,8 +231,8 @@ define(['app/app', 'calendar'], function(app) {
 				ShippingAddress.del({ addid : addressId }, {}, function () {
 					$scope.shippingAddressTableParams.page(1);
 					$scope.shippingAddressTableParams.reload();
-				}, function () {
-					toaster.pop('error', '删除收货地址失败');
+				}, function (res) {
+					toaster.pop('error', '删除收货地址失败 '+ res);
 				});
 			}
 		};
@@ -365,7 +365,7 @@ define(['app/app', 'calendar'], function(app) {
 				toaster.pop('success', '成功 ', '保存收货地址成功');
 				$modalInstance.close(data);
 			}, function(){
-				toaster.pop('error', '系统错误 ', '保存收货地址失败');
+				toaster.pop('error', '保存收货地址失败', res.data);
 			});
 		};
 

+ 4 - 4
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_no_invoice_ctrl.js

@@ -45,8 +45,8 @@ define([ 'app/app' ], function(app) {
 
             Bill.getListPersonal(null, function(data) {
                 $scope.invoices = data;
-            }, function(error) {
-                toaster.pop('error', '获取发票信息失败');
+            }, function(response) {
+                toaster.pop('error', '获取发票信息失败 ' + response.data);
             });
         }
         initDataRule();
@@ -77,8 +77,8 @@ define([ 'app/app' ], function(app) {
                         angular.forEach($scope.orderData, function (item) {
                             item.checked = false;
                         })
-                    }, function () {
-                        toaster.pop('error', '获取未开票订单信息失败');
+                    }, function (response) {
+                        toaster.pop('error', '获取未开票订单信息失败 ', response.data);
                     });
                 }
             });

+ 1 - 1
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_order_ctrl.js

@@ -201,7 +201,7 @@ define(['app/app'], function (app) {
 				});
 
 			}, function(response) {
-				toaster.pop('error', '获取订单失败,请重新刷新界面,' + response.data);
+				toaster.pop('error', '获取订单失败 ' + response.data);
 			});
 		};
 

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

@@ -781,7 +781,7 @@ define(['app/app'], function(app) {
 					Bill.getBillById({id : $scope.order.invoiceid}, function(data) {
 						$scope.bill = data;
 					}, function(response) {
-						toaster.pop('info', '获取发票信息失败');
+                        toaster.pop('error', '获取发票信息失败 ' + response.data);
 					});
 				}
 				return ;

+ 4 - 3
src/main/webapp/resources/js/usercenter/controllers/forstore/pay_center_ctrl.js

@@ -115,8 +115,8 @@ define(['app/app'], function(app) {
 
 					params.total(page.totalElements);
 					$defer.resolve(page.content);
-				}, function() {
-					toaster.pop('error', '获取账户信息失败');
+				}, function(error) {
+					toaster.pop('error', '获取账户信息失败 '+ error.data);
 				});
 			}
 		});
@@ -253,7 +253,8 @@ define(['app/app'], function(app) {
 				toaster.pop('success', '设置成功');
 				loadAccountData();
 			}, function(response) {
-				toaster.pop('error', '设置默认账户失败');
+				// toaster.pop('error', '设置默认账户失败');
+                toaster.pop('error', response.data);
 			})
 		};
 

+ 1 - 1
src/main/webapp/resources/js/usercenter/controllers/forstore/shipping_address_edit_ctrl.js

@@ -247,7 +247,7 @@ define(['app/app'], function(app) {
 				toaster.pop('success', '成功 ', '保存收货地址成功');
 				$modalInstance.close(data);
 			}, function(res){
-				toaster.pop('error', '系统错误 ', '保存收货地址失败');
+				toaster.pop('error', '保存收货地址失败 ', res.data);
 			});
 		}
 

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

@@ -342,8 +342,8 @@ define(['app/app'], function(app) {
 	    	ShippingAddress.save({isSetTop: $scope.isSetTop, send: true, isPersonal: false}, address, function(data){
 	    		toaster.pop('success', '成功 ', '保存发货地址成功');
 	    		$modalInstance.close(data);
-			}, function () {
-				toaster.pop('error', '系统错误 ', '保存发货地址失败');
+			}, function (res) {
+				toaster.pop('error', '保存发货地址失败 ', res.data);
 	    	});
 	    };
 	    

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

@@ -275,7 +275,7 @@ define(['app/app'], function(app) {
 	    		toaster.pop('success', '成功 ', '保存收货地址成功');
 	    		$modalInstance.close(data);
 	    	}, function(res){
-	    		toaster.pop('error', '系统错误 ', '保存收货地址失败');
+	    		toaster.pop('error','保存收货地址失败 ', res.data);
 	    	});
 	    }
 	    

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

@@ -47,7 +47,7 @@ define(['app/app'], function(app) {
 					//重新加载购物数据
 					loadAddrs();
 				}, function(res){
-					toaster.pop('error', '系统错误', '删除收货地址失败');
+					toaster.pop('error', '系统错误', '删除收货地址失败 '+ res);
 				});
 			}
 		};

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

@@ -14,7 +14,7 @@ define(['app/app'], function(app) {
 					account.filterAccount = hideBankFilter(account.number);
 				})
 			}, function(response) {
-				toaster.pop('error', '获取账户信息失败');
+				toaster.pop('error', '获取账户信息失败 '+ response.data);
 			})
 		}
 		loadAccount();

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

@@ -37,8 +37,8 @@ define(['app/app'], function (app) {
                     AfterSale.getApplyDetailList(BaseService.parseParams(pageParams), function (data) {
                         $defer.resolve(data.content);
                         params.total(data.totalElements);
-                    }, function (error) {
-                        toaster.pop('error', '获取信息失败');
+                    }, function (res) {
+                        toaster.pop('error', '获取信息失败 ', res.data);
                     })
                 }
             })

+ 112 - 91
src/main/webapp/resources/js/vendor/controllers/forstore/pay_center_ctrl.js

@@ -3,7 +3,7 @@
  */
 define(['app/app'], function(app) {
     'use strict';
-    app.register.controller('payCenterCtrl', ['$scope', '$rootScope', 'bankInfoService', 'toaster', '$upload', 'bankTransferService', 'Purchase', '$filter', 'Loading', 'ngTableParams', 'BaseService', 'SessionService', '$stateParams', function($scope, $rootScope, bankInfoService, toaster, $upload, bankTransferService, Purchase, $filter, Loading, ngTableParams, BaseService, SessionService, $stateParams) {
+    app.register.controller('payCenterCtrl', ['$scope', '$rootScope', 'bankInfoService', 'toaster', '$upload', 'bankTransferService', 'Purchase', '$filter', 'Loading', 'ngTableParams', 'BaseService', 'SessionService', '$stateParams', '$http', function($scope, $rootScope, bankInfoService, toaster, $upload, bankTransferService, Purchase, $filter, Loading, ngTableParams, BaseService, SessionService, $stateParams, $http) {
         $rootScope.active = 'pay_center';
 
         document.title = '结算中心-优软商城';
@@ -22,95 +22,108 @@ define(['app/app'], function(app) {
         $scope.paytype = 'ALL';
         $scope.$$transfer = {};
 
-        $scope.tradeRecordTableParams = new ngTableParams({
-            page : 1,
-            count : 30,
-            sorting : {
-                transferTime : 'DESC'
-            }
-        },{
-            total : 0,
-            getData : function ($defer, params) {
-                var param = BaseService.parseParams(params.url());
-                if ($scope.keyword && $scope.keyword.length > 0){
-                    param.keyword = $scope.keyword;
+        var getTradeRecordInfo = function () {
+            $scope.tradeRecordTableParams = new ngTableParams({
+                page : 1,
+                count : 30,
+                sorting : {
+                    transferTime : 'DESC'
                 }
-                if ($scope.startDate){
-                    param.fromDate = $scope.startDate.getTime();
-                }
-                if ($scope.endDate){
-                    param.toDate = $scope.endDate.getTime();
-                }
-                bankTransferService.getVendorBankTransferByMall(param, function (page) {
-                    if(page.code == 1) {
-                        $scope.bankTransRecore = page.data.data.content;
-                        if ($scope.bankTransRecore.length > 0){
-                            $scope.currencySymbol = $scope.bankTransRecore[0].currencyName;
+            },{
+                total : 0,
+                getData : function ($defer, params) {
+                    var param = BaseService.parseParams(params.url());
+                    if ($scope.keyword && $scope.keyword.length > 0){
+                        param.keyword = $scope.keyword;
+                    }
+                    if ($scope.startDate){
+                        param.fromDate = $scope.startDate.getTime();
+                    }
+                    if ($scope.endDate){
+                        param.toDate = $scope.endDate.getTime();
+                    }
+                    bankTransferService.getVendorBankTransferByMall(param, function (page) {
+                        if(page.code == 1) {
+                            $scope.bankTransRecore = page.data.data.content;
+                            if ($scope.bankTransRecore.length > 0){
+                                $scope.currencySymbol = $scope.bankTransRecore[0].currencyName;
+                            }
+                            var pageObject = page.data.data;
+                            $scope.totalPrice = page.data.total;
+                            angular.forEach($scope.bankTransRecode, function (bankT) {
+                                bankT.jsonReceive = angular.fromJson(bankT.jsonReceive);
+                            });
+                            $scope.totalPages = pageObject.totalPages;
+                            $scope.param.currentPage = pageObject.number;
+                            $scope.totalElements = pageObject.totalElements;
+
+                            if(Number($scope.totalElements) > 0) {
+                                $scope.$$transfer.start = Number(pageObject.size) * (Number(pageObject.number) - 1) + 1;
+                            }else {
+                                $scope.$$transfer.start = 0;
+                            }
+                            $scope.$$transfer.end = Number(pageObject.size) * (Number(pageObject.number) - 1) + Number(pageObject.numberOfElements);
+                            //计算页数
+                            $scope.acculatePages(pageObject.number, pageObject.totalPages);
+                        }else {
+                            toaster.pop('info', '获取信息失败:' + page.message);
                         }
-                        var pageObject = page.data.data;
-                        $scope.totalPrice = page.data.total;
-                        angular.forEach($scope.bankTransRecode, function (bankT) {
-                            bankT.jsonReceive = angular.fromJson(bankT.jsonReceive);
-                        });
-                        $scope.totalPages = pageObject.totalPages;
-                        $scope.param.currentPage = pageObject.number;
-                        $scope.totalElements = pageObject.totalElements;
+                    }, function (res) {
+                        toaster.pop('error', '获取信息失败 ', res.data);
+                    });
+                }
+            });
+        }
 
-                        if(Number($scope.totalElements) > 0) {
-                            $scope.$$transfer.start = Number(pageObject.size) * (Number(pageObject.number) - 1) + 1;
+        var getBankInfo = function () {
+            $scope.bankInfoTableParams = new ngTableParams({
+                page : 1,
+                count : 10,
+                sorting : {
+                    num : 'ASC'
+                }
+            },{
+                total : 0,
+                getData : function ($defer, params) {
+                    var param = BaseService.parseParams(params.url());
+                    bankInfoService.getSaleEeterpriseBank(param, {}, function(page) {
+                        $scope.accounts = page.content;
+
+                        $scope.$$bankInfo.totalElements = page.totalElements;
+                        if(Number(page.totalElements) > 0) {
+                            $scope.$$bankInfo.start = Number(page.size) * (Number(page.number) - 1) + 1;
                         }else {
-                            $scope.$$transfer.start = 0;
+                            $scope.$$bankInfo.start = 0;
                         }
-                        $scope.$$transfer.end = Number(pageObject.size) * (Number(pageObject.number) - 1) + Number(pageObject.numberOfElements);
-                        //计算页数
-                        $scope.acculatePages(pageObject.number, pageObject.totalPages);
-                    }else {
-                        toaster.pop('info', '获取信息失败:' + page.message);
-                    }
-                }, function () {
-                    toaster.pop('error', '获取信息失败');
-                });
-            }
-        });
+                        $scope.$$bankInfo.end = Number(page.size) * (Number(page.number) - 1) + Number(page.numberOfElements);
 
-        $scope.bankInfoTableParams = new ngTableParams({
-            page : 1,
-            count : 10,
-            sorting : {
-                num : 'ASC'
-            }
-        },{
-            total : 0,
-            getData : function ($defer, params) {
-                var param = BaseService.parseParams(params.url());
-                bankInfoService.getSaleEeterpriseBank(param, {}, function(page) {
-                    $scope.accounts = page.content;
-
-                    $scope.$$bankInfo.totalElements = page.totalElements;
-                    if(Number(page.totalElements) > 0) {
-                        $scope.$$bankInfo.start = Number(page.size) * (Number(page.number) - 1) + 1;
-                    }else {
-                        $scope.$$bankInfo.start = 0;
-                    }
-                    $scope.$$bankInfo.end = Number(page.size) * (Number(page.number) - 1) + Number(page.numberOfElements);
-
-                    params.total(page.totalElements);
-                    $defer.resolve(page.content);
-                }, function() {
-                    toaster.pop('error', '获取账户信息失败');
-                });
-            }
-        });
+                        params.total(page.totalElements);
+                        $defer.resolve(page.content);
+                    }, function(response) {
+                        toaster.pop('error', '获取账户信息失败 ', response.data);
+                    });
+                }
+            });
+        }
 
         var loadAccountData = function() {
-            $scope.bankInfoTableParams.page(1);
-            $scope.bankInfoTableParams.reload();
+            if ($scope.bankInfoTableParams) {
+                $scope.bankInfoTableParams.page(1);
+                $scope.bankInfoTableParams.reload();
+            } else {
+                getBankInfo();
+            }
         };
 
         var loadHistory = function () {
-            $scope.tradeRecordTableParams.page(1);
-            $scope.tradeRecordTableParams.reload();
+            if ($scope.tradeRecordTableParams) {
+                $scope.tradeRecordTableParams.page(1);
+                $scope.tradeRecordTableParams.reload();
+            } else {
+                getTradeRecordInfo();
+            }
         };
+        loadHistory();
 
         var clearRecordParams = function () {
             $scope.keyword = null;
@@ -138,7 +151,7 @@ define(['app/app'], function(app) {
                     break;
                 case 'accountTab':
                     clearRecordParams();
-                    // loadAccountData();
+                    loadAccountData();
                     break;
             }
         };
@@ -594,18 +607,26 @@ define(['app/app'], function(app) {
                 var str = strArray.join("&");
                 url = url + "?" + str;
             }
-            var form = $("<form>");   //定义一个form表单
-            form.attr('style', 'display:none');   //在form表单中添加查询参数
-            form.attr('target', '');
-            form.attr('method', 'POST');
-            form.attr('action', url);
-
-            $('body').append(form);  //将表单放置在web中
-            form.submit();
-
-            $scope.$$transfer.clockID = setInterval(function() {
-                getDownLoadStatus();
-            }, 500);
+            $http({
+                method: 'post',
+                dataType: 'json',
+                url: url
+            }).success(function (data) {
+                var form = $("<form>");   //定义一个form表单
+                form.attr('style', 'display:none');   //在form表单中添加查询参数
+                form.attr('target', '');
+                form.attr('method', 'POST');
+                form.attr('action', url);
+
+                $('body').append(form);  //将表单放置在web中
+                form.submit();
+
+                $scope.$$transfer.clockID = setInterval(function() {
+                    getDownLoadStatus();
+                }, 500);
+            }).error(function (response) {
+                toaster.pop('error', response);
+            });
         };
 
         var getDownLoadStatus = function () {

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

@@ -66,8 +66,8 @@ define(['app/app'], function(app) {
                             init();
                         });
                     });
-                }, function () {
-                    toaster.pop('error', '获取信息失败');
+                }, function (res) {
+                    toaster.pop('error', '获取信息失败 ', res.data);
                 });
             }
         });

+ 877 - 240
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_account_management_ctrl.js

@@ -2,14 +2,20 @@
  * Created by yujia on 2017/3/24.
  *  原厂认证
  */
-define(['app/app'], function(app) {
+define(['app/app'], function (app) {
     "use strict";
-    app.register.controller('vendorAccountManagementCtrl', ['$scope', '$rootScope', 'Enterprise', 'User', 'toaster', '$modal','BaseService','ngTableParams','$http', 'AuthenticationService','$stateParams', function($scope, $rootScope, Enterprise, User, toaster, $modal, BaseService, ngTableParams, $http, AuthenticationService,$stateParams) {
+    app.register.controller('vendorAccountManagementCtrl', ['$scope', '$rootScope', 'Enterprise', 'User', 'toaster', '$modal', 'BaseService', 'ngTableParams', '$http', 'AuthenticationService', '$stateParams','AccountResource','AccountRole', function ($scope, $rootScope, Enterprise, User, toaster, $modal, BaseService, ngTableParams, $http, AuthenticationService, $stateParams, AccountResource, AccountRole) {
         $rootScope.active = 'vendor_account_management';
-		document.title = '账户管理-优软商城';
-		$scope.tab = 'base';
+        document.title = '账户管理-优软商城';
+        $scope.tab = 'base';
+        $scope.addingUser = false;
+        $scope.setAddingUser = function (status) {
+            $scope.addingUser = status;
+            $scope.adding = false;
+        };
         $scope.userInfo = $rootScope.userInfo;
 		$scope.updateState = false;
+        $scope.filterRole = 'all';
         $scope.searchParams = {
             keyword: ''
         };
@@ -151,183 +157,260 @@ define(['app/app'], function(app) {
 			})
 		}
 
-          $scope.tableParams = new ngTableParams({
-            page: 1, // show first page
-            count: 10 // count per page
-          }, {
-            total: 0,
-            getData: function ($defer, params) {
-              var param = BaseService.parseParams(params.url());
-              param.enuu = $scope.userInfo.enterprise.uu;
-              if (!$scope.searchMthod) {
-                Enterprise.getAllUsersByEnuu(param, function (page) {
-                  if (page) {
-                    params.total(page.totalElements);
-                    $defer.resolve(page.content);
-                    $scope.users = page.content;
-                  }
-                });
-              }
-              else {
-                param.keyword = $scope.keyword;
-                Enterprise.findUsersByKeyword(param, function (page) {
-                  if (page) {
-                    params.total(page.totalElements);
-                    $defer.resolve(page.content);
-                    $scope.users = page.content;
-                  }
-                })
-              }
+        $scope.pageParam = {};
+        $scope.tableParams = new ngTableParams({
+            page : 1, // show first page
+            count : 10 // count per page
+        }, {
+            total : 0,
+            getData : function($defer, params) {
+                var param = BaseService.parseParams(params.url());
+                param.enuu = $scope.userInfo.enterprise.uu;
+                if(!$scope.searchMthod) {
+                    Enterprise.getAllUsersByEnuu(param, function (page) {
+                        if (page) {
+                            $scope.pageParam.start = (page.number-1)*page.size+1;
+                            $scope.pageParam.end = $scope.pageParam.start + page.numberOfElements - 1;
+                            $scope.pageParam.all = page.totalElements;
+                            params.total(page.totalElements);
+                            $defer.resolve(page.content);
+                            $scope.users = page.content;
+                            $scope.reloadUserCheck(false);
+                        }
+                    },function (error) {
+                        toaster.pop('error', '获取企业人员信息失败',error.data);
+                    });
+                }
+                else {
+                    param.keyword = $scope.keyword;
+                    if (filterRolejs !== 1){
+                        param.roleId = filterRolejs;
+                    }
+                    Enterprise.findUsersByKeyword(param,function (page) {
+                        if (page) {
+                            $scope.pageParam.start = (page.number-1)*page.size+1;
+                            $scope.pageParam.end = $scope.pageParam.start + page.numberOfElements - 1;
+                            $scope.pageParam.all = page.totalElements;
+                            params.total(page.totalElements);
+                            $defer.resolve(page.content);
+                            $scope.users = page.content;
+                            $scope.reloadUserCheck(false);
+                        }
+                    },function (error) {
+                        toaster.pop('error', '获取企业人员信息失败',error.data);
+                    })
+                }
             }
-          });
+        });
 
-          $scope.onSearch = function (keyword) {
-            if (keyword != null && keyword != '') {
-              $scope.searchMthod = true;
-              $scope.keyword = keyword;
+        var filterRolejs = 1;
+        $scope.onSearch = function (keyword,filterRole) {
+            filterRolejs = 1;
+            if ((keyword != null && keyword != '') || filterRole !== 'all') {
+                if (filterRole === 'all'){
+                    filterRolejs = 1;
+                }else {
+                    filterRolejs = filterRole;
+                }
+                $scope.searchMthod = true;
+                $scope.keyword = keyword;
             } else {
-              $scope.searchMthod = false;
+                $scope.searchMthod = false;
             }
             $scope.tableParams.page(1);
             $scope.tableParams.reload();
-          };
+        };
+        $scope.onKeyUpSearch = function (keyword, filterRole, event) {
+            if (event && event.keyCode == 13) {
+                $scope.onSearch(keyword, filterRole);
+            }
+        }
 
-          $scope.newUser = {};
+        $scope.newUser = {};
 
-          //弹出添加用户模态框
-          $scope.addExistUser = function () {
+        //弹出添加用户模态框
+        $scope.addExistUser = function () {
+            $scope.adding = false;
+            $scope.setAddingUser(false);
+            $scope.newUser = {};
             var modalInstance = $modal.open({
-              animation: true,
-              templateUrl: $rootScope.rootPath
-              + '/static/view/vendor/forstore/addExistUser.html',
-              controller: 'AddExistUserCtrl'
+                animation: true,
+                templateUrl: $rootScope.rootPath + '/static/view/vendor/forstore/addExistUser.html',
+                controller: 'AddExistUserCtrl'
             });
 
             modalInstance.result.then(function () {
-              $scope.userTelSuccess = false;
-              $scope.userTelError = false;
-              $scope.tableParams.page(1);
-              $scope.tableParams.reload();
+                $scope.userTelSuccess = false;
+                $scope.userTelError = false;
+                $scope.tableParams.page(1);
+                $scope.tableParams.reload();
             }, function () {
 
             });
 
-          };
-          /**
-           * 添加未注册用户
-           */
-          $scope.addUser = function () {
+        };
+        /**
+         * 添加未注册用户
+         */
+        $scope.addUser = function () {
+            if (!$scope.userEmailSuccess || !$scope.userTelSuccess) {
+                toaster.pop('error', '请输入正确的信息后提交');
+                return;
+            }
             $scope.adding = true;
             $scope.loading = true;
             Enterprise.saveUser({}, $scope.newUser, function () {
-              $scope.loading = false;
-              toaster.pop('success', '提示', '增加用户成功:' + $scope.newUser.userName);
-              $scope.newUser = {userSex: 'M'};
-              $scope.tableParams.page(1);
-              $scope.tableParams.reload();
-              $scope.adding = false;
-              $scope.newUserForm.newUserTel.$setValidity('available', false);
-              $scope.newUserForm.newUserEmail.$setValidity('available', false);
-              $scope.userTelSuccess = false;
-              $scope.userTelError = false;
-              $scope.userEmailSuccess = false;
-              $scope.userEmailError = false;
+                $scope.loading = false;
+                toaster.pop('success', '提示', '增加用户成功:' + $scope.newUser.userName);
+                $scope.setAddingUser(false);
+                $scope.newUser = {userSex: 'M'};
+                $scope.tableParams.page(1);
+                $scope.tableParams.reload();
+                $scope.adding = false;
+                // $scope.newUserForm.newUserTel.$setValidity('available', false);
+                // $scope.newUserForm.newUserEmail.$setValidity('available', false);
+                $scope.userTelSuccess = false;
+                $scope.userTelError = false;
+                $scope.userEmailSuccess = false;
+                $scope.userEmailError = false;
             }, function (response) {
-              $scope.loading = false;
-              toaster.pop('error', '错误', response.data);
+                $scope.loading = false;
+                toaster.pop('error', '错误', response.data);
             });
-          };
-
-          /**
-           * 删除用户
-           */
-          $scope.removeUser = function (user) {
+        };
 
-            if (confirm('确定删除用户(' + user.userName + ')吗?')) {
-              Enterprise.removeUser({uu: user.userUU}, function () {
+        $scope.adding = false;
+        $scope.setAdding = function (status) {
+            $scope.adding = status;
+        }
+        /**
+         * 删除用户
+         */
+        $scope.removeUser = function (user) {
+
+            // if (confirm('确定删除用户(' + user.userName + ')吗?')) {
+            // }
+            Enterprise.removeUser({uu: user.userUU}, function () {
                 toaster.pop('success', '提示', '用户删除成功。');
                 $scope.tableParams.page(1);
                 $scope.tableParams.reload();
-              }, function (response) {
+                $scope.showDelUserFlag = false;
+            }, function (response) {
                 toaster.pop('error', '删除失败', response.data);
-              });
+            });
+        };
+        //用户删除确认框
+        $scope.showDelUserFlag = false;
+
+        $scope.setShowDelUserFlag = function (flag, user) {
+            $scope.showDelUserFlag = flag;
+            if (flag) {
+                $scope.delUser = user;
             }
-          };
-          /**
-           * 验证手机号是否可用
-           */
-          $scope.telValid = function (tel) {
-            if (tel) {
-              $http.get('basic/user/telEnable', {
-                params: {
-                  tel: tel
-                }
-              }).success(function (data) {
-                data = eval(data);
-                if (data == true) {
-                  $scope.newUserForm.newUserTel.$setValidity('available', true);
-                  $scope.userTelSuccess = true;
-                  $scope.userTelError = false;
-                } else {
-                  $scope.newUserForm.newUserTel.$setValidity('available',
-                      false);
-                  $scope.userTelError = true;
-                  $scope.userTelSuccess = false;
-                  if (tel.length == 11) {
-                    toaster.pop('error', '错误', '手机号 ' + tel + ' 已被注册');
-                  }
+        }
+        /***
+         * 全选
+         * */
+        $scope.isCheckAll = false;
+        $scope.doCheckAll = function () {
+            $scope.isCheckAll = !$scope.isCheckAll;
+            if ($scope.isCheckAll) {
+                $scope.reloadUserCheck(true);
+            } else {
+                $scope.reloadUserCheck(false);
+            }
+        }
+
+        $scope.checkUser = function (user) {
+            user.checked = !user.checked;
+            var allcheck = true
+            angular.forEach($scope.users, function (item) {
+                if (!item.checked) {
+                    allcheck = false;
                 }
-              }).error(function () {
-                $scope.userTelSuccess = false;
-                $scope.userTelError = true;
-              });
+            });
+            $scope.isCheckAll = allcheck;
+        }
+
+        $scope.reloadUserCheck = function (flag) {
+            angular.forEach($scope.users, function (item) {
+                item.checked = flag;
+            });
+        }
+        /**
+         * 验证手机号是否可用
+         */
+        $scope.telValid = function (tel) {
+            if (tel) {
+                $http.get('basic/user/telEnable', {
+                    params: {
+                        tel: tel
+                    }
+                }).success(function (data) {
+                    data = eval(data);
+                    if (data == true) {
+                        // $scope.newUserForm.newUserTel.$setValidity('available', true);
+                        $scope.userTelSuccess = true;
+                        $scope.userTelError = false;
+                    } else {
+                        // $scope.newUserForm.newUserTel.$setValidity('available', false);
+                        $scope.userTelError = true;
+                        $scope.userTelSuccess = false;
+                        if (tel.length == 11)
+                            toaster.pop('error', '错误', '手机号 ' + tel + ' 已被注册');
+                    }
+                }).error(function () {
+                    $scope.userTelSuccess = false;
+                    $scope.userTelError = true;
+                });
             } else {
-              $scope.userTelSuccess = false;
-              $scope.userTelError = false;
+                $scope.userTelSuccess = false;
+                $scope.userTelError = false;
             }
           };
 
-          /**
-           * 验证邮箱是否可用
-           */
-          $scope.emailValid = function (email) {
+        /**
+         * 验证邮箱是否可用
+         */
+        $scope.emailValid = function (email) {
             if (email) {
-              $http.get('basic/user/emailEnable', {
-                params: {
-                  email: email
-                }
-              }).success(function (data) {
-                data = eval(data);
-                if (data == true) {
-                  $scope.newUserForm.newUserEmail.$setValidity('available',
-                      true);
-                  $scope.userEmailSuccess = true;
-                  $scope.userEmailError = false;
-                } else {
-                  $scope.newUserForm.newUserEmail.$setValidity('available',
-                      false);
-                  $scope.userEmailError = true;
-                  $scope.userEmailSuccess = false;
-                }
-              }).error(function () {
-                $scope.userEmailError = true;
-                $scope.userEmailSuccess = false;
-              });
+                $http.get('basic/user/emailEnable', {
+                    params: {
+                        email: email
+                    }
+                }).success(function (data) {
+                    data = eval(data);
+                    if (data == true) {
+                        // $scope.newUserForm.newUserEmail.$setValidity('available',
+                        //     true);
+                        $scope.userEmailSuccess = true;
+                        $scope.userEmailError = false;
+                    } else {
+                        // $scope.newUserForm.newUserEmail.$setValidity('available',
+                        //     false);
+                        $scope.userEmailError = true;
+                        $scope.userEmailSuccess = false;
+                        toaster.pop('error', '错误', '邮箱 ' + email + ' 已被注册');
+                    }
+                }).error(function () {
+                    $scope.userEmailError = true;
+                    $scope.userEmailSuccess = false;
+                });
             } else {
-              $scope.userEmailError = false;
-              $scope.userEmailSuccess = false;
+                $scope.userEmailError = false;
+                $scope.userEmailSuccess = false;
             }
-          };
+        };
 
-          /**
-           * 变更到更新状态
-           */
-          $scope.changeToUpdate = function (isUpdate) {
+        /**
+         * 变更到更新状态
+         */
+        $scope.changeToUpdate = function (isUpdate) {
             $scope.updateState = isUpdate;
             if ($scope.updateState == false) {
-              $scope.enterpriseInfo = angular.copy($scope.enterpriseInfoBackup);
+                $scope.enterpriseInfo = angular.copy($scope.enterpriseInfoBackup);
             }
-          };
+        };
 
           /**
            * 验证企业信息
@@ -337,20 +420,20 @@ define(['app/app'], function(app) {
 
             var flag = true;
             angular.forEach(props, function (prop) {
-              if ($scope.enterpriseInfo.hasOwnProperty(prop)) {
-                if (!$scope.enterpriseInfo[prop] || $scope.enterpriseInfo[prop]
-                    === '') {
-                  console.log(prop + '不能为空');
-                  // TODO 记录验证信息
-                  flag = false;
+                if ($scope.enterpriseInfo.hasOwnProperty(prop)) {
+                    if (!$scope.enterpriseInfo[prop] || $scope.enterpriseInfo[prop]
+                        === '') {
+                        console.log(prop + '不能为空');
+                        // TODO 记录验证信息
+                        flag = false;
+                    }
+                } else {
+                    console.log(prop + '不能为空');
+                    flag = false;
                 }
-              } else {
-                console.log(prop + '不能为空');
-                flag = false;
-              }
             });
             return flag;
-          }
+        }
 
           // 获取行业信息
         $http.get('static/data/profession.json').success(function (data) {
@@ -437,24 +520,24 @@ define(['app/app'], function(app) {
             // 先检查信息是否为空
             if (angular.equals($scope.enterpriseInfo,
                     $scope.enterpriseInfoBackup)) {
-              toaster.pop('error', '未做任何修改');
-              $scope.updateState = false;
-              return;
+                toaster.pop('error', '未做任何修改');
+                $scope.updateState = false;
+                return;
             }
             var enterpriseInfoFlag = validateEnterpriseInfo();
             if (!enterpriseInfoFlag) {
-              toaster.pop('error', '请补充完信息后再次提交');
-              return;
+                toaster.pop('error', '请补充完信息后再次提交');
+                return;
             }
 
             Enterprise.updateEnterpriseInfo(
                 {enuu: $scope.userInfo.enterprise.uu}, $scope.enterpriseInfo,
                 function () {
-                  $scope.loading = false;
-                  toaster.pop('success', '提示', '企业信息修改成功');
-                  $scope.enterpriseInfoBackup = angular.copy(
-                      $scope.enterpriseInfo);
-                  $scope.updateState = false;
+                    $scope.loading = false;
+                    toaster.pop('success', '提示', '企业信息修改成功');
+                    $scope.enterpriseInfoBackup = angular.copy(
+                        $scope.enterpriseInfo);
+                    $scope.updateState = false;
 
                 }, function (response) {
                   $scope.loading = false;
@@ -471,6 +554,13 @@ define(['app/app'], function(app) {
         // 切换tab
         $scope.checkTab = function (t) {
             $scope.tab = t;
+            if (t === 'role' && $scope.rolesExcept) {
+                toaster.pop('error', '获取企业角色信息失败',$scope.rolesExcept);
+            }
+            if (t === 'auth') {
+                $scope.keyword = '';
+                $scope.onSearch($scope.keyword,'all');
+            }
           };
 
           $scope.updatePassword = function () {
@@ -524,81 +614,163 @@ define(['app/app'], function(app) {
                 $scope.updateUserEmail();
                 break;
             }
-          }
-        }]);
-
-  /*
-   * 绑定用户到企业
-   */
-  app.register.controller('AddExistUserCtrl',
-      ['$scope', '$modalInstance', 'Enterprise', 'AuthenticationService',
-        '$timeout', 'toaster',
-        function ($scope, $modalInstance, Enterprise, AuthenticationService,
-            $timeout, toaster) {
-          $scope.searching = false;
-          //根据输入的内容查找用户
-          $scope.searchUser = function (keyWord) {
-            $scope.searching = true;
-            $scope.searchSuccess = false;
-            $scope.searchFailed = false;
-            $scope.illegalError = false;
-            $scope.reBindError = false;
-            $scope.okDisabled = false;
-            Enterprise.searchUser({keyWord: keyWord}, function (data) {
-              $scope.searchSuccess = true;
-              $scope.searchFailed = false;
-              $scope.user = data;		//查询到的用户
-            }, function (response) {
-              $scope.searchSuccess = false;
-              $scope.searchFailed = true;
+        }
+        //角色控制
+        $scope.roles = {};
+        AccountResource.query({}, function (data) {
+            if (data && data.length > 0) {
+                data[0].$open = true;
+            }
+            $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);
+                });
+                $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);
+                });
+                $scope.existRoles = {defaults: defaults, custom: custom};
+            });
+        };
+        getData();
+        $scope.editRole = function (role) {
+            var modalInstance = $modal.open({
+                animation: true,
+                templateUrl: $rootScope.rootPath + '/static/view/vendor/modal/role_detail.html',
+                controller: 'RoleEditCtrl',
+                resolve: {
+                    role: function () {
+                        return role;
+                    }
+                }
+            });
+            modalInstance.result.then(function (added) {
+                added && getData();
+            });
+        };
 
-          //确认绑定
-          $scope.ok = function (keyWord) {
-            AuthenticationService.getAuthentication().success(function (data) {
-              $scope.currentUser = data;	//当前登录的用户(管理员)
-              //不可自己绑定自己
-              if ($scope.currentUser.userUU == $scope.user.userUU) {
-                $scope.illegalError = true;
-                $scope.okDisabled = true;
-                return false;
-              }
+        $scope.editUserRole = function (user) {
+            var modalInstance = $modal.open({
+                animation: true,
+                templateUrl: $rootScope.rootPath + '/static/view/vendor/modal/edit_user_role.html',
+                controller: 'UserRoleEditCtrl',
+                resolve: {
+                    user: function () {
+                        return user;
+                    }
+                }
+            });
+        };
 
-              //用户未绑定到任何企业时
-              if (!$scope.user.enterprises) {
-                //正常绑定
-                Enterprise.bindUserToMyEnterprise({userUU: $scope.user.userUU},
-                    function (data) {
-                      $scope.okDisabled = true;
-                      toaster.pop("success", "提示", "用户绑定成功");
-                      $modalInstance.close(true);
+        $scope.inSelect = false;
+        $scope.setInSelect = function (status) {
+            $scope.inSelect = status;
+        }
+        $(document).on("click", function () {
+            $scope.$apply(function () {
+                if (!$scope.inSelect) {
+                    $scope.setAdding(false);
+                }
+            })
+        })
+    }]);
+
+
+    /*
+     * 绑定用户到企业
+     */
+    app.register.controller('AddExistUserCtrl',
+        ['$scope', '$modalInstance', 'Enterprise', 'AuthenticationService',
+            '$timeout', 'toaster',
+            function ($scope, $modalInstance, Enterprise, AuthenticationService,
+                      $timeout, toaster) {
+                $scope.searching = false;
+                //根据输入的内容查找用户
+                $scope.searchUser = function (keyWord) {
+                    $scope.searching = true;
+                    $scope.searchSuccess = false;
+                    $scope.searchFailed = false;
+                    $scope.illegalError = false;
+                    $scope.reBindError = false;
+                    $scope.okDisabled = false;
+                    Enterprise.searchUser({keyWord: keyWord}, function (data) {
+                        $scope.searchSuccess = true;
+                        $scope.searchFailed = false;
+                        $scope.user = data;		//查询到的用户
                     }, function (response) {
+                        $scope.searchSuccess = false;
+                        $scope.searchFailed = true;
                     });
-                return true;
-              }
+                };
 
-              //用户已绑定到某些企业时
-              for (var i = 0; i < $scope.currentUser.enterprises.length; i++) {
-                if ($scope.currentUser.enterprises[i].current) {
-                  for (var j = 0; j < $scope.user.enterprises.length; j++) {
-                    //该用户已绑定到当前企业,不可重复绑定
-                    if ($scope.currentUser.enterprises[i].uu
-                        == $scope.user.enterprises[j].uu) {
-                      $scope.reBindError = true;
-                      $scope.okDisabled = true;
-                      return false;
+                $scope.onKeyDown = function (e, key) {
+                    var keycode = window.event ? e.keyCode : e.which;
+                    if (keycode == 13) {
+                        $scope.searchUser(key);
                     }
-                  }
-                  //该用户未绑定到当前企业,可以进行绑定
-                  Enterprise.bindUserToMyEnterprise(
-                      {userUU: $scope.user.userUU}, function (data) {
-                        $scope.okDisabled = true;
-                        toaster.pop("success", "提示", "用户绑定成功");
-                        $modalInstance.close(true);
-                      }, function (response) {
-                        console.log("绑定失败!");
-                      });
+                }
+
+                //确认绑定
+                $scope.ok = function (keyWord) {
+                    AuthenticationService.getAuthentication().success(function (data) {
+                        $scope.currentUser = data;	//当前登录的用户(管理员)
+                        //不可自己绑定自己
+                        if ($scope.currentUser.userUU == $scope.user.userUU) {
+                            $scope.illegalError = true;
+                            $scope.okDisabled = true;
+                            return false;
+                        }
+
+                        //用户未绑定到任何企业时
+                        if (!$scope.user.enterprises) {
+                            //正常绑定
+                            Enterprise.bindUserToMyEnterprise({userUU: $scope.user.userUU},
+                                function (data) {
+                                    $scope.okDisabled = true;
+                                    toaster.pop("success", "提示", "用户绑定成功");
+                                    $modalInstance.close(true);
+                                }, function (response) {
+                                    toaster.pop('error', response.data);
+                                });
+                            return true;
+                        }
+
+                        //用户已绑定到某些企业时
+                        for (var i = 0; i < $scope.currentUser.enterprises.length; i++) {
+                            if ($scope.currentUser.enterprises[i].current) {
+                                for (var j = 0; j < $scope.user.enterprises.length; j++) {
+                                    //该用户已绑定到当前企业,不可重复绑定
+                                    if ($scope.currentUser.enterprises[i].uu
+                                        == $scope.user.enterprises[j].uu) {
+                                        $scope.reBindError = true;
+                                        $scope.okDisabled = true;
+                                        return false;
+                                    }
+                                }
+                                //该用户未绑定到当前企业,可以进行绑定
+                                Enterprise.bindUserToMyEnterprise(
+                                    {userUU: $scope.user.userUU}, function (data) {
+                                        $scope.okDisabled = true;
+                                        toaster.pop("success", "提示", "用户绑定成功");
+                                        $modalInstance.close(true);
+                                    }, function (response) {
+                                        console.log("绑定失败!");
+                                    });
 
                 }
               }
@@ -1638,16 +1810,481 @@ define(['app/app'], function(app) {
               $scope.checkFailed = false;
               window.location.href = "vendor#/account/management/sec";
 
-              window.location.reload();
-              $modalInstance.close();
-            }, function(response){
-              toaster.pop('error', '错误', response.data);
-              $modalInstance.close();
+                        window.location.reload();
+                        $modalInstance.close();
+                    }, function (response) {
+                        toaster.pop('error', '错误', response.data);
+                        $modalInstance.close();
+                    });
+                };
+
+                $scope.cancel = function () {
+                    $modalInstance.close();
+                };
+            }]);
+//角色管理-编辑角色controller
+    app.register.controller('RoleEditCtrl', ['$scope', '$modalInstance', '$timeout', 'AccountResource', 'AccountRole', 'toaster', 'role', 'BaseService', function ($scope, $modalInstance, $timeout, AccountResource, AccountRole, toaster, role, BaseService) {
+        BaseService.scrollBackToTop();
+        $scope.role = angular.copy(role || {});
+        $scope.master = angular.copy($scope.role);
+        var isNew = role == null;
+        $scope.cancel = function () {
+            $modalInstance.close(false);
+        };
+
+        var getCheckRoleResource = function (data, rs) {
+            if (data.items.length > 0) {
+                var c = 0;
+                angular.forEach(data.items, function (item) {
+                    if (rs.indexOf(item.id) > -1) {
+                        item.$checked = true;
+                        c += 1;
+                    }
+                });
+                data.$checked = c > 0 && c == data.items.length;
+                data.$halfChecked = c > 0 && c < data.items.length;
+            } else {
+                angular.forEach(data.children, function (item) {
+                    getCheckRoleResource(item, rs);
+                    var activeCount = 0;
+                    angular.forEach(data.children, function (item) {
+                        if (!item.$checked) {
+                            activeCount ++;
+                        }
+                    });
+                    data.$checked = activeCount > 0 && activeCount == data.children.length;
+
+                    data.$halfChecked = activeCount > 0 && activeCount < data.children.length;
+                });
+            }
+        }
+
+        AccountResource.query({}, function (data) {
+            if (data && data.length > 0) {
+                var rs = [];// 已分配的资源的id
+                if (role && role.resourceItems) {
+                    angular.forEach(role.resourceItems, function (item) {
+                        rs.push(item.id);
+                    });
+                }
+                angular.forEach(data, function (data2) {
+                    getCheckRoleResource(data2, rs);
+                })
+                $scope.resourceItems = data[0].items;
+                data[0].$active = true;
+            }
+            $scope.resources = data;
+            // if ($scope.role) {
+            // 	angular.forEach($scope.role.resourceItems,function (item) {
+            // 		angular.forEach($scope.resources, function (roleItem) {
+            // 			if (item.id == roleItem.id) {
+            // 				roleItem.$active = true;
+            // 			}
+            // 		})
+            // 	})
+            // }
+            $timeout(function () {
+                angular.forEach($scope.resources, function (resource) {
+                    var c = 0;
+                    angular.forEach(resource.items, function (item) {
+                        item.$checked && (c += 1);
+                    });
+                    angular.element(document.getElementById('check_' + resource.id)).prop('indeterminate', (c > 0 && !resource.$checked));
+                });
+            }, 100);
+            getChecked();
+        });
+
+        $scope.onItemClick = function (resource) {
+            if (resource.items.length > 0) {
+                $scope.resourceItems = resource.items;
+                $scope.activeResource = resource
+            } else {
+                $scope.resourceItems = [];
+                if (!resource.activeLevel) {
+                    resource.activeLevel = true;
+                } else {
+                    resource.activeLevel = false;
+                }
+            }
+            setNoActive($scope.resources);
+            resource.$active = true;
+        };
+        var setNoActive = function (obj) {
+            angular.forEach(obj, function (r) {
+                r.$active = false;
+                if (r.children) {
+                    setNoActive(r.children);
+                }
             });
-          };
+        }
 
-          $scope.cancel = function () {
+        var getChecked = function () {
+            var items = [];
+            angular.forEach($scope.resources, function (resource) {
+                pushCheckedResource(resource, items);
+            });
+            if ($scope.role) {
+                $scope.role.resourceItems = items;
+            }
+        };
+        var pushCheckedResource = function (resource, items) {
+            if (resource.items.length > 0) {
+                var activeCount = 0;
+                angular.forEach(resource.items, function (item) {
+                    // item.$checked && items.push(item);
+                    if (item.$checked) {
+                        items.push(item);
+                        activeCount ++;
+                    }
+                });
+                resource.$checked = activeCount > 0 && activeCount == resource.items.length;
+                resource.$halfChecked = activeCount > 0 && activeCount < resource.items.length;
+
+            } else {
+                var halfCount = 0;
+                var fullCount = 0;
+                angular.forEach(resource.children, function (item) {
+                    if (item.$checked) {
+                        fullCount ++;
+                    } else if (item.$halfChecked) {
+                        halfCount ++;
+                    }
+                    pushCheckedResource(item, items);
+                })
+                resource.$halfChecked = halfCount > 0 || (fullCount > 0 && fullCount < resource.children.length);
+                resource.$checked = fullCount > 0 && fullCount == resource.children.length;
+            }
+        }
+        $scope.onResourceChange = function (resource) {
+            levelResourceChecked(resource);
+            getChecked();
+        };
+        var levelResourceChecked = function (resource) {
+            if (resource.items.length > 0) {
+                angular.forEach(resource.items, function (item) {
+                    item.$checked = resource.$checked;
+                });
+            } else {
+                angular.forEach(resource.children, function (item) {
+                    item.$checked = resource.$checked;
+                    levelResourceChecked(item);
+                });
+            }
+
+        }
+
+        $scope.onItemChange = function () {
+            var activeCount = 0;
+            var resourceItems = $scope.resourceItems;
+            // console.log(resourceItems);
+            angular.forEach(resourceItems, function (item) {
+                if (item.$checked) {
+                    activeCount++;
+                }
+            })
+            // console.log(activeCount);
+            // console.log( $scope.activeResource)
+            $scope.activeResource.$checked = activeCount == resourceItems.length;
+
+            $scope.activeResource.$halfChecked = activeCount > 0 && activeCount < resourceItems.length;
+
+            angular.forEach($scope.resources, function (resource) {
+                if (resource.$active) {
+                    var c = 0;
+                    angular.forEach(resource.items, function (item) {
+                        item.$checked && (c += 1);
+                    });
+                    resource.$checked = (c == resource.items.length);
+                    resource.$halfChecked = c > 0 && c < resource.items.length;
+                    angular.element(document.getElementById('check_' + resource.id)).prop('indeterminate', (c > 0 && !resource.$checked));
+                }
+            });
+            getChecked();
+        };
+        $scope.isChanged = function (formData) {
+            if (!$scope.master)
+                return true;
+            return !angular.equals(formData, $scope.master);
+        };
+        $scope.save = function () {
+            $scope.master = angular.copy($scope.role);
+            if (!$scope.master.color || $scope.master.color == '') {
+                $scope.master.color = parseInt(Math.random() * 5) + 1 + '';
+            }
+            AccountRole.save($scope.master, function () {
+                toaster.pop('success', '提示', '角色:' + $scope.role.desc + ' 资料' + (isNew ? '添加' : '修改') + '成功');
+                $modalInstance.close(true);
+            }, function (response) {
+                toaster.pop('error', '错误', response.data);
+            });
+        };
+        $scope.del = function () {
+            if (confirm('确定删除角色(' + $scope.role.desc + ')吗?')) {
+                AccountRole.remove({id: role.id}, function () {
+                    toaster.pop('success', '提示', '角色:' + $scope.role.desc + ' 删除成功');
+                    $modalInstance.close(true);
+                }, function (response) {
+                    toaster.pop('error', '错误', response.data);
+                });
+            }
+        };
+    }]);
+
+    app.register.controller('UserRoleEditCtrl', ['$scope', '$modalInstance', '$timeout', 'AccountResource', 'toaster', 'user', 'BaseService', 'AccountRole', 'User', function ($scope, $modalInstance, $timeout, AccountResource, toaster, user, BaseService, AccountRole, User) {
+
+        $scope.pages = [];
+
+        $scope.params = {
+            page: 1,
+            count: 6,
+            totalPage: 1,
+            currentPage: 1
+        };
+
+        var loadCurrentRoles = function () {
+            var start = ($scope.params.page - 1) * $scope.params.count;
+            var end = $scope.params.page * $scope.params.count;
+            $scope.currentRoles = $scope.rolesData.slice(start, end);
+        };
+
+        var init = function () {
+            $scope.user = angular.copy(user);
+            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) {
+                        if (item.id === userItem.id) {
+                            item.checked = true;
+                        }
+                    });
+                });
+            });
+        }
+        init();
+
+        $scope.checked = [];
+        //勾选角色
+        $scope.checkRole = function (role) {
+            role.checked = !role.checked;
+        }
+
+        //关闭模态框
+        $scope.cancelModal = function () {
             $modalInstance.close();
-          };
-        }]);
+        }
+        $scope.close = function (save) {
+            if (save) {
+                if (user.userUU) {
+                    angular.forEach($scope.rolesData, function (item) {
+                        if (item.checked) {
+                            $scope.checked.push(item);
+                        }
+                    });
+                    $scope.user.roles = $scope.checked;
+                    User.update({}, $scope.user, function () {
+                        toaster.pop('success', '提示', '保存成功');
+                        user.roles = $scope.checked
+                        $modalInstance.close(true);
+                    }, function (response) {
+                        toaster.pop('error', '保存失败', response.data);
+                    });
+                } else {
+                    $modalInstance.close(true, $scope.checked);
+                }
+            } else {
+                $modalInstance.close(false);
+            }
+        };
+
+        // //初始化分页数据
+        // var initPages = function () {
+        // 	$scope.totalPages = Math.ceil = ($scope.rolesData.length/6);
+        // }
+        //初始化页数信息
+        $scope.initPages = function (totalElementPages) {
+            var pageNum = [];
+            if (totalElementPages == 1) {
+                return;
+            } else if (totalElementPages < 10) {
+                for (var i = 0; i < totalElementPages + 2; i++) {
+                    pageNum.push(i);
+                }
+            } else {
+                pageNum = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
+            }
+            angular.forEach(pageNum, function (number) {
+                var page = {active: true, type: 'page', number: number};
+                if (number == 0) {
+                    page.type = 'prev';
+                } else if (number == 1) {
+                    page.type = 'first';
+                } else if (number == pageNum.length - 2) {
+                    page.type = 'last';
+                    page.number = totalElementPages;
+                } else if (number == pageNum.length - 1) {
+                    page.type = 'next';
+                }
+                $scope.pages.push(page);
+            });
+        };
+
+        //当前页在后端计算方式
+        $scope.endSegment = function (currentPage, totalElementPages) {
+            if (totalElementPages > 8) {
+                angular.forEach($scope.pages, function (page) {
+                    switch (page.number) {
+                        case 2:
+                            page.active = false;
+                            page.type = 'more';
+                            break;
+                        case 10:
+                            if (currentPage == totalElementPages) {
+                                page.active = false;
+                            }
+                            break;
+                        case 0:
+                        case 1:
+                            break;
+                        default:
+                            if (page.number != totalElementPages) {
+                                page.number = totalElementPages - 9 + page.number;
+                            }
+                            page.current = (currentPage == page.number);
+                            break;
+                    }
+                });
+            }
+        };
+
+        //当前页在中间计算方式
+        $scope.middleSegment = function (currentPage) {
+            angular.forEach($scope.pages, function (page) {
+                switch (page.number) {
+                    case 2:
+                    case 8:
+                        page.type = 'more';
+                        page.active = false;
+                        break;
+                    case 3:
+                        page.number = currentPage - 2;
+                        break;
+                    case 4:
+                        page.number = currentPage - 1;
+                        break;
+                    case 5:
+                        page.number = currentPage;
+                        page.current = true;
+                        break;
+                    case 6:
+                        page.number = currentPage + 1;
+                        break;
+                    case 7:
+                        page.number = currentPage + 2;
+                        break;
+                }
+            });
+        };
+
+        //当前页在前段的计算方式
+        $scope.frontSegment = function (currentPage, totalElementPages) {
+            if (totalElementPages > 8) {
+                angular.forEach($scope.pages, function (page) {
+                    switch (page.number) {
+                        case 8:
+                            page.type = 'more';
+                            page.active = false;
+                            break;
+                        case 0:
+                            if (currentPage == 1) {
+                                page.active = false;
+                            }
+                        default : {
+                            page.current = (currentPage == page.number);
+                        }
+                    }
+                });
+            }
+        };
+
+        //输入框监听Enter事件
+        $scope.listenEnter = function () {
+            if (event.keyCode == 13) {
+                $scope.setPage("page", $scope.params.currentPage);
+            }
+        };
+        $scope.setPage = function (type, number) {
+            if (type != 'prev' && type != 'page' && type != 'next' && type != 'last' && type != 'first') {
+                return;
+            }
+            ;
+            var page = -1;
+            switch (type) {
+                case "page":
+                    if (number < 1) {
+                        page = 1;
+                    } else if (number > $scope.params.totalPage) {
+                        page = $scope.params.totalPage;
+                    } else {
+                        page = number;
+                    }
+                    ;
+                    break;
+                case "prev":
+                    if ($scope.params.page <= 1) {
+                        page = 1;
+                    } else {
+                        page = $scope.params.page - 1;
+                    }
+                    ;
+                    break;
+                case "next":
+                    if ($scope.params.page >= $scope.params.totalPage) {
+                        page = $scope.params.totalPage;
+                    } else {
+                        page = $scope.params.page + 1;
+                    }
+                    break;
+                case "first":
+                    page = 1;
+                    break;
+                case "last":
+                    page = $scope.params.totalPage;
+                    break;
+            }
+            if (page == $scope.params.page || page < 1 || page > $scope.params.totalPage) {
+                $scope.params.currentPage = $scope.params.page;
+                return;
+            }
+            $scope.params.page = page;
+            $scope.params.currentPage = page;
+            loadData();
+        };
+
+        //计算页数的方式。
+        $scope.acculatePages = function (currentPage, totalElementPages) {
+            $scope.pages = [];
+            if (totalElementPages < 1) {
+                return;
+            }
+            //初始化页面数据
+            $scope.initPages(totalElementPages);
+            if (currentPage < 6) {//当期页小于6
+                $scope.frontSegment(currentPage, totalElementPages);
+            } else if (currentPage > totalElementPages - 5) { //当期页在后面
+                $scope.endSegment(currentPage, totalElementPages);
+            } else { //当期页在中间
+                $scope.middleSegment(currentPage);
+            }
+        };
+
+        var loadData = function () {
+            loadCurrentRoles();
+            $scope.acculatePages($scope.params.page, $scope.params.totalPage);
+        };
+    }]);
 });

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

@@ -3,7 +3,7 @@
  */
 define(['app/app'], function(app) {
     "use strict";
-    app.register.controller('vendorBrandApplyListCtrl', ['$scope', '$rootScope', 'AuthenticationService', 'BaseService', 'BrandsSubmit', 'ngTableParams', function ($scope, $rootScope, AuthenticationService, BaseService, BrandsSubmit, ngTableParams) {
+    app.register.controller('vendorBrandApplyListCtrl', ['$scope', '$rootScope', 'AuthenticationService', 'BaseService', 'BrandsSubmit', 'ngTableParams', 'toaster', function ($scope, $rootScope, AuthenticationService, BaseService, BrandsSubmit, ngTableParams, toaster) {
         document.title = "品牌申请" + "-优软商城";
         $rootScope.active = 'vendor_brand_apply';
         var loadMyBrandsSubmit = function(){
@@ -27,8 +27,8 @@ define(['app/app'], function(app) {
                             params.total(page.totalElements);
                             $defer.resolve(page.content);
                         }
-                    }, function(){
-
+                    }, function(err){
+                        toaster.pop('error', err.data);
                     });
                 }
             });

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

@@ -1,6 +1,6 @@
 define([ 'app/app' ], function(app) {
     // 器件审批
-    app.register.controller('vendorComponentApplyListCtrl', ['$scope', 'ngTableParams', 'ComponentsSubmit', 'BaseService', '$stateParams', 'AuthenticationService', function($scope, ngTableParams, ComponentsSubmit, BaseService, $stateParams, AuthenticationService) {
+    app.register.controller('vendorComponentApplyListCtrl', ['$scope', 'ngTableParams', 'ComponentsSubmit', 'BaseService', '$stateParams', 'AuthenticationService', 'toaster', function($scope, ngTableParams, ComponentsSubmit, BaseService, $stateParams, AuthenticationService, toaster) {
         BaseService.scrollBackToTop();
         document.title = '器件申请-优软商城';
         var loadMyComponentsSubmit = function(){
@@ -23,8 +23,8 @@ define([ 'app/app' ], function(app) {
                             params.total(page.totalElements);
                             $defer.resolve(page.content);
                         }
-                    }, function(){
-
+                    }, function(err){
+                        toaster.pop('error', err.data);
                     });
                 }
             });

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

@@ -1,6 +1,6 @@
 define([ 'app/app' ], function(app) {
     // 器件审批
-    app.register.controller('vendorComponentBatchApplyListCtrl', ['$scope', 'ngTableParams', 'BaseService', 'ComponentSubmit', function($scope, ngTableParams, BaseService, ComponentSubmit) {
+    app.register.controller('vendorComponentBatchApplyListCtrl', ['$scope', 'ngTableParams', 'BaseService', 'ComponentSubmit', 'toaster', function($scope, ngTableParams, BaseService, ComponentSubmit, toaster) {
         BaseService.scrollBackToTop();
         document.title = '器件申请-优软商城';
         $scope.active = 'all';
@@ -46,8 +46,8 @@ define([ 'app/app' ], function(app) {
                         params.total(page.totalElements);
                         $defer.resolve(page.content);
                     }
-                }, function(){
-
+                }, function(err){
+                    toaster.pop('error', err.data);
                 });
             }
         });

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

@@ -263,7 +263,7 @@ define([ 'app/app' ], function(app) {
                     }
                 }
             },function (error) {
-                toaster.pop('error', "保存配送规则失败");
+                toaster.pop('error', "保存配送规则失败 "+ error);
             })
         };
 

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

@@ -489,7 +489,7 @@ define([ 'app/app' ], function(app) {
                                 return;
                             }
                         },function (error) {
-                            toaster.pop('error', "保存配送规则失败");
+                            toaster.pop('error', "保存配送规则失败 " + error);
                         })
                     }
                 });
@@ -669,6 +669,8 @@ define([ 'app/app' ], function(app) {
                 if (data){
                     $scope.ruleTableParams.reload();
                 }
+            }, function (error) {
+                toaster.pop('error', error);
             })
         };
 
@@ -686,8 +688,8 @@ define([ 'app/app' ], function(app) {
                 $scope.deleteFrame = false;
                 toaster.pop('info', '删除配送规则成功');
                 $scope.loadDeliveryRule();
-            }, function () {
-                toaster.pop('error', '删除配送规则失败');
+            }, function (res) {
+                toaster.pop('error', '删除配送规则失败 ' + res);
             });
         };
 

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

@@ -214,8 +214,8 @@ define(['app/app'], function(app) {
                 ShippingAddress.del({addid: id}, {}, function(data){
                     //重新加载购物数据
                     loadAddrs();
-                }, function () {
-                    toaster.pop('error', '系统错误', '删除收货地址失败');
+                }, function (res) {
+                    toaster.pop('error', '系统错误', '删除收货地址失败 ' + res);
                 });
             }
         };
@@ -808,8 +808,8 @@ define(['app/app'], function(app) {
                 toaster.pop('success', '成功 ', '保存发货地址成功');
                 data.isSetTop = $scope.isSetTop;
                 $modalInstance.close(data);
-            }, function () {
-                toaster.pop('error', '系统错误 ', '保存发货地址失败');
+            }, function (res) {
+                toaster.pop('error', '保存发货地址失败 ', res.data);
             });
         };
 
@@ -1072,7 +1072,7 @@ define(['app/app'], function(app) {
                 }
                 $modalInstance.close(data);
             },function (error) {
-                toaster.pop('error', '成功', '保存配送商失败');
+                toaster.pop('error', '成功', '保存配送商失败 '+ error);
             });
         };
 

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

@@ -55,8 +55,8 @@ define([ 'app/app' ], function(app) {
             Distributor.deleteOne({id:id},{},function () {
                 $scope.showDeleteDialog = false;
                 $scope.initData();
-            }, function () {
-
+            }, function (error) {
+                toaster.pop('error', error);
             });
         };
         $scope.addDistributor = function () {
@@ -335,7 +335,7 @@ define([ 'app/app' ], function(app) {
                 }
                 $modalInstance.close(data);
             },function (error) {
-                toaster.pop('error', '成功', '保存配送商失败');
+                toaster.pop('error', '成功', '保存配送商失败 ' + error);
             });
         };
 

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

@@ -73,8 +73,8 @@ define([ 'app/app' ], function(app) {
                             item.area = temAddr[0]+'  '+temAddr[1]+'  '+temAddr[2]
                             item.checked = false
                         })
-                    }, function () {
-                        toaster.pop('error', '获取开票记录失败');
+                    }, function (response) {
+                        toaster.pop('error', '获取开票记录失败 ', response.data);
                     });
                 }
             });

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

@@ -120,8 +120,8 @@ define(['app/app', 'calendar'], function (app) {
 			ShippingAddress.del({ addid : addressId }, {}, function () {
 				$scope.showDeleteFrame = false;
 				$scope.loadAddresses();
-			}, function () {
-				toaster.pop('error', '删除收货地址失败');
+			}, function (res) {
+				toaster.pop('error', '删除收货地址失败 '+ res);
 			});
 		};
 
@@ -239,8 +239,8 @@ define(['app/app', 'calendar'], function (app) {
 				myForm.$setUntouched();
 				myForm.$setPristine();
 				$scope.address = angular.copy($scope.initAddress);
-			}, function(){
-				toaster.pop('error', '系统错误 ', '保存发货地址失败');
+			}, function(res){
+				toaster.pop('error', '保存发货地址失败 ', res.data);
 			});
 		};
 
@@ -445,8 +445,8 @@ define(['app/app', 'calendar'], function (app) {
 			ShippingAddress.save({isSetTop: $scope.isSetTop, send: $scope.isSendType, isPersonal: !$scope.isSendType}, address, function(data){
 				toaster.pop('success', '成功 ', '保存发货地址成功');
 				$modalInstance.close(data);
-			}, function(){
-				toaster.pop('error', '系统错误 ', '保存发货地址失败');
+			}, function(res){
+				toaster.pop('error', '保存发货地址失败 ', res.data);
 			});
 		};
 

+ 58 - 35
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_onSaleCtrl.js

@@ -1,6 +1,6 @@
 define([ 'app/app' ], function(app) {
     'use strict';
-    app.register.controller('vendor_onSaleCtrl', ['$scope', '$rootScope', 'Goods', '$modal', 'toaster', 'Loading', 'StoreInfo', 'AuthenticationService', '$q', 'StoreCms', 'NumberService', 'Enterprise', 'ByteCountService', 'DistributionRule', function ($scope, $rootScope, Goods, $modal, toaster, Loading, StoreInfo, AuthenticationService, $q, StoreCms, NumberService, Enterprise, ByteCountService, DistributionRule) {
+    app.register.controller('vendor_onSaleCtrl', ['$scope', '$rootScope', 'Goods', '$modal', 'toaster', 'Loading', 'StoreInfo', 'AuthenticationService', '$q', 'StoreCms', 'NumberService', 'Enterprise', 'ByteCountService', 'DistributionRule', '$http', function ($scope, $rootScope, Goods, $modal, toaster, Loading, StoreInfo, AuthenticationService, $q, StoreCms, NumberService, Enterprise, ByteCountService, DistributionRule, $http) {
         $rootScope.active = 'vendor_material';
         $scope.keyword = '';
         $scope.tab = 'onSale';
@@ -1574,43 +1574,66 @@ define([ 'app/app' ], function(app) {
         };
 
         function downloadByJs(url, keyword, type) {
-            var form = $("<form>");   //定义一个form表单
-            form.attr('style', 'display:none');   //在form表单中添加查询参数
-            form.attr('target', '');
-            form.attr('method', 'get');
-            form.attr('action', url);
-
-            var input1 = $('<input>');
-            input1.attr('type', 'hidden');
-            input1.attr('name', 'keyword');
-            input1.attr('value', keyword);
-
-            var input2 = $('<input>');
-            input1.attr('type', 'hidden');
-            input1.attr('name', 'isSelfSupport');
-            input1.attr('value', type);
-
-            $('body').append(form);  //将表单放置在web中
-            form.append(input1);   //将查询参数控件提交到表单上
-            form.append(input2);
-            form.submit();
+            $http({
+                method: 'get',
+                dataType: 'json',
+                url: url,
+                params: {
+                    keyword: keyword,
+                    isSelfSupport: type
+                }
+            }).success(function (data) {
+                var form = $("<form>");   //定义一个form表单
+                form.attr('style', 'display:none');   //在form表单中添加查询参数
+                form.attr('target', '');
+                form.attr('method', 'get');
+                form.attr('action', url);
+
+                var input1 = $('<input>');
+                input1.attr('type', 'hidden');
+                input1.attr('name', 'keyword');
+                input1.attr('value', keyword);
+
+                var input2 = $('<input>');
+                input1.attr('type', 'hidden');
+                input1.attr('name', 'isSelfSupport');
+                input1.attr('value', type);
+
+                $('body').append(form);  //将表单放置在web中
+                form.append(input1);   //将查询参数控件提交到表单上
+                form.append(input2);
+                form.submit();
+            }).error(function (response) {
+                toaster.pop('error', response);
+            });
         }
 
         function downloadSelectedByJs(url, idList) {
-            var form = $("<form>");   //定义一个form表单
-            form.attr('style', 'display:none');   //在form表单中添加查询参数
-            form.attr('target', '');
-            form.attr('method', 'get');
-            form.attr('action', url);
-
-            var input1 = $('<input>');
-            input1.attr('type', 'hidden');
-            input1.attr('name', 'ids');
-            input1.attr('value', idList);
-
-            $('body').append(form);  //将表单放置在web中
-            form.append(input1);   //将查询参数控件提交到表单上
-            form.submit();
+            $http({
+                method: 'get',
+                dataType: 'json',
+                url: url,
+                params: {
+                    ids: idList
+                }
+            }).success(function (data) {
+                var form = $("<form>");   //定义一个form表单
+                form.attr('style', 'display:none');   //在form表单中添加查询参数
+                form.attr('target', '');
+                form.attr('method', 'get');
+                form.attr('action', url);
+
+                var input1 = $('<input>');
+                input1.attr('type', 'hidden');
+                input1.attr('name', 'ids');
+                input1.attr('value', idList);
+
+                $('body').append(form);  //将表单放置在web中
+                form.append(input1);   //将查询参数控件提交到表单上
+                form.submit();
+            }).error(function (response) {
+                toaster.pop('error', response);
+            });
         }
 
         // 下载模板

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

@@ -205,7 +205,7 @@ define(['app/app'], function (app) {
 				}
 				$scope.closeEdit(module);
 			}, function (resp) {
-				toaster.pop('error', resp);
+				toaster.pop('error', resp.data);
 				$scope.undoModify(module);
 			});
 		};

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

@@ -192,8 +192,8 @@ define([ 'app/app' ], function(app) {
                         toaster.pop('success', '成功', '保存自提点地址成功');
                     }
                     $modalInstance.close(data);
-                },function () {
-                    toaster.pop('error', '保存自提点地址失败');
+                },function (response) {
+                    toaster.pop('error', '保存自提点地址失败'+ ' '+ response.data);
                 })
             };
 

+ 46 - 34
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_undercarriageCtrl.js

@@ -1,6 +1,6 @@
 define([ 'app/app' ], function(app) {
     'use strict';
-    app.register.controller('vendor_undercarriageCtrl', ['$scope', '$rootScope', '$q', 'Goods', 'Enterprise', 'toaster', 'Loading', 'StoreInfo', 'AuthenticationService', function ($scope, $rootScope, $q, Goods, Enterprise, toaster, Loading, StoreInfo, AuthenticationService) {
+    app.register.controller('vendor_undercarriageCtrl', ['$scope', '$rootScope', '$q', 'Goods', 'Enterprise', 'toaster', 'Loading', 'StoreInfo', 'AuthenticationService', '$http', function ($scope, $rootScope, $q, Goods, Enterprise, toaster, Loading, StoreInfo, AuthenticationService, $http) {
         $rootScope.active = 'vendor_material';
         document.title = '上下架历史-优软商城';
         $scope.tab = 'undercarriage';
@@ -304,51 +304,63 @@ define([ 'app/app' ], function(app) {
         };
 
         /**
-         * 下载当前页的订单信息
+         * 下载当前页的上下架历史信息
          */
         $scope.localInfo = {};
         $scope.downGoods = function () {
             var listId = getDownLoadGoodsHistoryId();
             if(listId.length < 1) {
-                toaster.pop('warning', '当前需要下载的订单条数为0');
+                toaster.pop('warning', '当前需要下载的上下架历史条数为0');
                 return ;
             }
             Loading.show();
             $scope.localInfo.ids = listId.join("-");
-            $scope.$apply();
-            var form = document.getElementById('down-load-goods');
-            form.action = 'trade/goods/down/upAndDown/ids';
-            form.submit();
-            var clockID = null;
-            var getDownLoadStatus = function () {
-                $.ajax({
-                    url : 'trade/goods/down/upAndDown/ids',
-                    data : {isAjax : true, ids : $scope.localInfo.ids},
-                    method : 'GET',
-                    dataType : 'json',
-                    success : function (data) {
-                        if(data.loading) {
-                            clockID = setInterval(function() {
-                                getDownLoadStatus()
-                            }, 500);
-                        }else {
-                            $scope.$apply(function () {
-                                toaster.pop('info', '数据处理完毕,正在下载文件,请稍等。');
-                                Loading.hide();
-                            });
-                            if(!clockID) {
+            $http({
+                method: 'get',
+                dataType: 'json',
+                url: 'trade/goods/down/upAndDown/ids',
+                params: {
+                    ids: $scope.localInfo.ids
+                }
+            }).success(function (data) {
+                var form = document.getElementById('down-load-goods');
+                form.action = 'trade/goods/down/upAndDown/ids';
+                form.submit();
+                var clockID = setInterval(function () {
+                    getDownLoadStatus();
+                }, 500);
+                var getDownLoadStatus = function () {
+                    $.ajax({
+                        url : 'trade/goods/down/upAndDown/ids',
+                        data : {isAjax : true, ids : $scope.localInfo.ids},
+                        method : 'GET',
+                        dataType : 'json',
+                        success : function (data) {
+                            if(data.loading) {
+                                clockID = setInterval(function() {
+                                    getDownLoadStatus()
+                                }, 500);
+                            }else {
+                                $scope.$apply(function () {
+                                    toaster.pop('info', '数据处理完毕,正在下载文件,请稍等。');
+                                    Loading.hide();
+                                });
+                                if(clockID) {
+                                    clearInterval(clockID);
+                                }
+                            }
+                        },
+                        error : function () {
+                            Loading.hide();
+                            if(clockID) {
                                 clearInterval(clockID);
                             }
                         }
-                    },
-                    error : function () {
-                        Loading.hide();
-                        if(!clockID) {
-                            clearInterval(clockID);
-                        }
-                    }
-                });
-            };
+                    });
+                };
+            }).error(function (response) {
+                toaster.pop('error', response);
+            });
         };
 
         /**

+ 143 - 62
src/main/webapp/resources/view/vendor/forstore/addExistUser.html

@@ -1,74 +1,155 @@
 <!--添加已注册用户 ,即绑定用户到企业-->
 <style>
-	.userinfo{
-		margin-top:20px;
-		margin-left:60px;
-		width:450px;
+	.modal-content {
+		width: 484px;
+	}
+	.add-register-user {
+		width: 484px;
+	}
+	.add-register-user .modal-header {
+		padding: 9px 15px;
+	}
+	.add-register-user .modal-header .modal-title {
+		margin-left: 15px;
+	}
+	.add-register-user .modal-body {
+		padding-bottom: 0;
+	}
+	.add-register-user .modal-body .user-search-area {
+		padding-left:27px;
+		padding-top: 5px;
+	}
+	.add-register-user .modal-body .user-search-area input {
+		width: 270px;
+		height: 32px;
+		line-height: 32px;
+		border-radius: 0;
+	}
+	.add-register-user .modal-body .user-search-area .default-btn {
+		color: #fff;
+		background: #5078cb;
+		height: 32px;
+		line-height: 32px;
+		width: 58px;
+		display: inline-block;
+		text-align: center;
+		font-size: 14px;
+		float: right;
+		position: relative;
+		top: 3px;
+	}
+	.add-register-user .modal-body .search-result-area {
+		min-height:30px;
+	}
+	.add-register-user .modal-body .search-result-area .search-result-text {
+		color:#5078cb;
+		height: 40px;
+		line-height: 40px;
+		display: block;
+	}
+	.add-register-user .modal-footer {
+		padding: 10px 40px 10px 0;
+	}
+	.add-register-user .modal-footer button {
+		border-radius: 0;
+	}
+	.add-register-user .modal-footer button:nth-child(1) {
+		background: #5078cb;
+	}
+	.add-register-user .modal-footer button:nth-child(2) {
+		background: #c8c6c6;
+	}
+	.add-register-user .modal-footer button.cancel {
+		border: none;
+		width: 64px;
+		height: 28px;
+		line-height: 18px;
+	}
+	.add-register-user .modal-footer button.bind {
+		width: 90px;
+		height: 28px;
+		line-height: 18px;
+		border: none;
+		float: right;
+		margin-left: 10px;
+	}
+	table.userinfo{
+		margin: 20px 0 0 26px;
+		width: 403px;
+	}
+	table.userinfo >tbody >tr >td:first-child {
+		text-align: center;
+	}
+	table.userinfo >tbody >tr:nth-of-type(odd) {
+		background-color: #f9fbfe;
 	}
 </style>
 
-<div class="modal-header">
-	<div class="row">
-		<h3 class="modal-title">
-			&nbsp;&nbsp;&nbsp;
-			<i class="fa fa-user-plus fa-fw"></i>&nbsp;添加已注册用户
-		 	<button style=" padding-right:20px; " type="button" class="close" data-dismiss="alert" ng-click="cancel()" aria-label="Close">
-		 		<span aria-hidden="true">&times;</span>
-		 	</button>
-	 	</h3>
-	 </div>
-</div>
-
-<div class="modal-body">
-	<form class="form-inline" name="searchForm">
-		<div class="form-group" style="padding-left:60px;padding-top: 15px;">
-			<label>查找用户:</label>
-			 <input
-				style="width: 300px;" type="text" class="form-control"
-				ng-model="keyWord" placeholder="请输入UU号、手机号或邮箱" required/> <span> <a
-				class="btn btn-default" ng-click="searchUser(keyWord)" ng-disabled="searchForm.$invalid"> <i class="fa fa-search"></i> 查找
-			</a>
-			</span>
+<div class="add-register-user">
+	<div class="modal-header">
+		<div class="row">
+			<h3 class="modal-title">
+				添加已注册用户
+				<button style="position: absolute;right: 7px;top: 7px;" type="button" class="close" data-dismiss="alert" ng-click="cancel()" aria-label="Close">
+					<span aria-hidden="true">&times;</span>
+				</button>
+			</h3>
 		</div>
-	</form>
-	
-	<div ng-show="searching&&searchSuccess">
-		<table class="table table-bordered table-striped userinfo">  
-			<tr>
-				<td>UU:</td>
-				<td>{{user.userUU}}</td>
-			</tr>
-			<tr>
-				<td>姓名:</td>
-				<td>{{user.userName}}</td>
-			</tr>
-			<tr>
-				<td>性别:</td>
-				<td>{{user.userSex == 'M' ? '男' : '女'}}</td>
-			</tr>
-			<tr>
-				<td>电话:</td>
-				<td>{{user.userTel}}</td>
-			</tr>
-			<tr>
-				<td>邮箱:</td>
-				<td>{{user.userEmail}}</td>
-			</tr>
-		</table>
-	</div>
-	<div ng-show="searching && searchFailed" align="center" style="color:red; margin-top:20px;">
-		<span>您查找的用户不存在!</span>
 	</div>
-	<div ng-show="searching && reBindError" align="center" style="color:red; margin-top:20px;">
-		<span>该用户已绑定到当前企业,不可重复绑定!</span>
+
+	<div class="modal-body">
+		<form class="form-inline" name="searchForm">
+			<div class="form-group user-search-area">
+				<label>查找用户:</label>
+				<input
+						type="text" class="form-control"
+						ng-keydown="onKeyDown($event, keyWord)"
+						ng-model="keyWord" placeholder="请输入UU号、手机号或邮箱" required/>
+				<a class="default-btn" ng-click="searchUser(keyWord)" ng-disabled="searchForm.$invalid">搜索</a>
+			</div>
+		</form>
+
+		<div ng-show="searching&&searchSuccess">
+			<table class="table table-bordered table-striped userinfo">
+				<tr>
+					<td>UU账号</td>
+					<td>{{user.userUU}}</td>
+				</tr>
+				<tr>
+					<td>姓名</td>
+					<td>{{user.userName}}</td>
+				</tr>
+				<tr>
+					<td>性别</td>
+					<td>{{user.userSex == 'M' ? '男' : '女'}}</td>
+				</tr>
+				<tr>
+					<td>电话</td>
+					<td>{{user.userTel}}</td>
+				</tr>
+				<tr>
+					<td>邮箱</td>
+					<td>{{user.userEmail}}</td>
+				</tr>
+			</table>
+		</div>
+		<div class="search-result-area">
+			<div class="search-result-text" ng-show="searching && searchFailed" align="center">
+				<span>您查找的用户不存在!</span>
+			</div>
+			<div class="search-result-text" ng-show="searching && reBindError" align="center">
+				<span>该用户已绑定到当前企业,不可重复绑定!</span>
+			</div>
+			<div class="search-result-text" ng-show="searching && illegalError" align="center">
+				<span>不可对自己进行绑定!</span>
+			</div>
+		</div>
 	</div>
-	<div ng-show="searching && illegalError" align="center" style="color:red; margin-top:20px;">
-		<span>不可对自己进行绑定!</span>
+
+	<div class="modal-footer">
+		<button class="btn btn-primary bind" ng-disabled="okDisabled" ng-if="searchSuccess" ng-click="ok()">确认绑定</button>
+		<button class="btn btn-warning cancel" ng-click="cancel()" type="button">取消</button>
 	</div>
 </div>
 
-<div class="modal-footer">
-	<button class="btn btn-primary" ng-disabled="okDisabled" ng-show="searchSuccess" ng-click="ok()">确认绑定</button>
-	<button class="btn btn-warning" ng-click="cancel()" type="button">取消</button>
-</div>
 

+ 527 - 27
src/main/webapp/resources/view/vendor/forstore/vendor_account_management.html

@@ -225,7 +225,337 @@
     border-radius: inherit;
   }
 
-  /*新增*/
+    .role-info .check-act input{
+        display: none;
+    }
+    .role-info .check-act label{
+        width: 12px;
+        height: 12px;
+        display: inline-block;
+        background: url(static/img/icon/check-rule.png) no-repeat;
+        position: relative;
+        top: 1px;
+    }
+    .role-info .check-act label{
+        background-position: -48px 0;
+    }
+    .role-info .check-act input:checked + label{
+        background-position: -31px 0;
+    }
+
+    table.role-info{
+        box-sizing: border-box;
+        border-bottom: none;
+    }
+    table.role-info thead{
+        height: 38px;
+        width: 100%;
+        background: #89aefa;
+        line-height: 38px;
+    }
+    table.role-info thead>tr th{
+        color: #fff;
+        font-weight: normal;
+        font-size: 14px;
+        text-align: center;
+        border-bottom: none;
+        vertical-align: middle;
+    }
+    table.role-info tbody:first-of-type tr:hover {
+        background: #f1f5ff;
+        cursor: default;
+    }
+    table.role-info tbody tr:nth-child(even){
+        background: #f1f5ff;
+    }
+    table.role-info tbody tr {
+        height: 50px;
+        line-height: 50px;
+    }
+    table.role-info tbody tr.role-filter td input,table.role-info tbody tr.role-filter td select {
+        width: 80%;
+        padding-left: 5px;
+        height: 28px;
+        border: 1px solid #d3d4d3;
+        border-radius: 0;
+    }
+    table.role-info tbody tr.role-filter td select {
+        background: url("static/img/vendor/images/xiala.png") no-repeat;
+        background-position: 30px 9px;
+    }
+    table.role-info tbody >tr>td{
+        font-size: 14px;
+        color: #666;
+        border-bottom: 1px solid #dae5fd;
+        border-right: 1px solid #dae5fd;
+        border-left: 1px solid #dae5fd;
+        height: 40px;
+        vertical-align: middle;
+        text-align: center;
+    }
+    table.role-info tbody:last-child >tr>td {
+        border: none;
+    }
+    .auth-info-area {
+        padding: 15px;
+    }
+    .auth-info-area .role-info .role-tag-area {
+        padding: 5px 0 0 13px;
+        text-align: left!important;
+    }
+    .auth-info-area .role-info .role-tag-area .role-tag {
+        color: #fff;
+        width: 25px;
+        height: 25px;
+        display: inline-block;
+        line-height: 25px;
+        border-radius: 2px;
+        text-align: center;
+    }
+    .user_right .bgcolor-1 {
+        background: #89aefa !important;
+    }
+    .user_right .bgcolor-2 {
+        background: #f7b73c !important;
+    }
+    .user_right .bgcolor-3 {
+        background: #01d9ce !important;
+    }
+    .user_right .bgcolor-4 {
+        background: #ff6769 !important;
+    }
+    .user_right .bgcolor-5 {
+        background: #ff8050 !important;
+    }
+    .user_right  .bgcolor-6 {
+        background: #64bfe9 !important;
+    }
+    .user_right .bgcolor-7 {
+        background: #4bc701 !important;
+    }
+    .auth-info-area .role-info .submit-area span {
+        font-size: 12px;
+        display: inline-block;
+        cursor: pointer;
+    }
+    .auth-info-area .role-info .submit-area span:last-child {
+        width: 50px;
+        height: 24px;
+        background: #5078cb;
+        line-height: 24px;
+        color: #fff;
+        margin-left: 5px;
+    }
+    .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;
+    }
+    .auth-info-header {
+        height: 40px;
+        line-height: 40px;
+        background: #f5f8fe;
+        margin-top: 7px;
+        padding-right: 24px;
+    }
+    .auth-info-header >div {
+        display: inline-block;
+        float: right;
+    }
+    .auth-info-header .addUser-group {
+        position: relative;
+    }
+    .auth-info-header .addUser-group .addUser-btn {
+        cursor: pointer;
+    }
+    .auth-info-header .addUser-group .addUser-btn img {
+        position: relative;
+        top: -4px;
+        margin-right: 2px;
+    }
+    .auth-info-header .addUser-group .addUser-btn span {
+        font-size: 12px;
+    }
+    .auth-info-header .addUser-group .addUser-expand {
+        position: absolute;
+        right: -24px;
+        height: 54px;
+        width: 121px;
+        box-shadow: 1.5px 2.598px 7px 0px rgb( 0, 0, 0 );
+        background: #fff;
+    }
+    .auth-info-header .addUser-group .addUser-expand >div {
+        height: 27px;
+        line-height: 27px;
+        font-size: 12px;
+        cursor: pointer;
+        margin-left: 5px;
+    }
+    .auth-info-header .addUser-group .addUser-expand >div:hover {
+        color: #5a7fce;
+    }
+    .auth-info-header .addUser-group .addUser-expand >div i {
+        color: #dfe0e1;
+        font-size: 14px;
+    }
+    .auth-info-header .addUser-group .addUser-expand >div:hover i {
+        color: #5a7fce;
+    }
+    .auth-info-header .searchUser-group {
+        margin-right: 50px;
+        margin-top: 4px;
+        height: 32px;
+        line-height: 32px;
+    }
+    .auth-info-header .searchUser-group span {
+        width: 58px;
+        height: 32px;
+        display: inline-block;
+        line-height: 32px;
+        text-align: center;
+        background: #5078cb;
+        color: #fff;
+        font-size: 14px;
+        float: right;
+        cursor: pointer;
+    }
+    .auth-info-header .searchUser-group input {
+        width: 330px;
+        height: 32px;
+        line-height: 32px;
+        float: right;
+        padding-left: 5px;
+    }
+    .auth-info-header .searchUser-group >div {
+        background: #fff;
+        display: inline-block;
+        height: 30px;
+        margin-right: 5px;
+        vertical-align: middle;
+    }
+    .auth-info-header .searchUser-group >div >select {
+        width: 90px;
+        height: 32px;
+        font-size: 14px;
+        padding-left: 5px;
+        position: relative;
+        top: -3px;
+        border: 1px solid #5078cb;
+        background: url(static/img/vendor/images/xiala-blue.jpg) no-repeat;
+        background-position: 72px 11px;
+    }
+    .auth-info-area ul {
+        width: auto;
+        margin: 0 0 20px 0;
+    }
+    .auth-info-area ul li {
+        width: auto;
+        height: auto;
+        line-height: inherit;
+        margin: 0;
+        border-bottom: none;
+        font-size: 12px;
+    }
+    .auth-info-area ul li a {
+        width: auto;
+        float: left;
+    }
+    .auth-info-area .record-line {
+        margin-right: 22px;
+    }
+    .role-manage {
+        padding: 0 14px;
+    }
+    .role-manage p {
+        font-size: 14px;
+        font-weight: bold;
+    }
+    .role-manage >p {
+        margin: 20px 9px;
+    }
+    .role-manage >p.self-header {
+        margin-top: 30px;
+    }
+    .role-manage .default-role-area {
+        padding: 0 9px 10px 9px;
+        border-bottom: 2px solid #fde7bd;
+    }
+    .role-manage .default-role-box {
+        width: 190px;
+        height: 114px;
+        display: inline-block;
+        background: #89aefa;
+        color: #fff;
+        padding: 12px 10px;
+        vertical-align: middle;
+        margin-right: 50px;
+        margin-bottom: 20px;
+        border-radius: 3px;
+        cursor: pointer;
+    }
+    .role-manage .default-role-box p {
+        text-align: center;
+        margin-bottom: 10px;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+    }
+    .role-manage .default-role-box span {
+        font-size: 12px;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: pre-wrap;
+        word-break: normal;
+        height: 55px;
+        width: 100%;
+        display: block;
+    }
+    .role-manage .define-role-area {
+        margin-bottom: 28px;
+    }
+    .role-manage .define-role-area .add-role-box {
+        background: #f4fff9;
+        color: #4aca80;
+        border: 2px dashed #4aca80;
+    }
+    .role-manage .define-role-area .add-role-box i {
+        font-size: 40px;
+        color: #fff;
+        background: #4aca80;
+        border-radius: 100%;
+        display: inline-block;
+        width: 40px;
+        height: 40px;
+        line-height: 37px;
+        text-align: center;
+        position: relative;
+        top: -20px;
+        left: -5px;
+    }
+    .role-manage .define-role-area .add-role-box >div {
+        display: inline-block;
+        width: 121px;
+    }
+    .auth-info-area .role-info .role-tag-area.detail-role-tag .role-tag {
+        margin-right: 5px;
+        margin-bottom: 5px;
+        float: left;
+    }
+    .user_right .bgimg-1 {
+        background: url(static/img/vendor/authority/role-bg-1.jpg)no-repeat;
+    }
+    .user_right .bgimg-2 {
+        background: url(static/img/vendor/authority/role-bg-2.jpg)no-repeat;
+    }
+    .user_right .bgimg-3 {
+        background: url(static/img/vendor/authority/role-bg-3.jpg)no-repeat;
+    }
+    .user_right .bgimg-4 {
+        background: url(static/img/vendor/authority/role-bg-4.jpg)no-repeat;
+    }
+    .user_right .bgimg-5 {
+        background: url(static/img/vendor/authority/role-bg-5.jpg)no-repeat;
+    }
+    /*新增*/
     #account_manager a {
       text-decoration: none;
     }
@@ -288,7 +618,7 @@
     color: #666;
     margin-left: 0;
   }
-  .count01 ul li >a {
+  .count01 > ul li >a {
     background: #fff;
     color: #5078cb;
     text-align: center;
@@ -574,29 +904,29 @@
 </style>
 <!--右侧主体部分-->
 <div class="count user_right fr" ng-click="hideList()">
-  <!--安全设置-->
-  <div class="count_center">
-    <div class="com_tab">
-      <ul class="fl">
-        <li ng-class="{'active': tab=='base'}"><a ng-click="checkTab('base')">基本信息</a></li>
-        <li ng-class="{'active': tab=='safe'}"><a ng-click="checkTab('safe')">安全设置</a></li>
-        <li ng-class="{'active': tab=='bind'}"><a ng-click="checkTab('bind')" ng-if="isAdmin">申请绑定</a></li>
-        <!--<li ng-class="{'active': tab=='logistic'}"><a href="#" ng-click="checkTab('logistic')">收货地址</a></li>-->
-      </ul>
-    </div>
-    <div class="count_list">
-      <!-- 基本信息-->
-      <div ng-if="tab=='base'" style="background: #fff">
-        <div class="count01" style="margin-bottom: 0 !important;">
-          <div class="count_basic">
-            <p class="basic_title"><span>企业信息</span>
-              <!--<span class="fr"><a href="#">修改</a><a href="#">提交</a><a href="#">删除</a></span>-->
-              <span class="fr" ng-if="userInfo.sys">
-                                <button ng-if=" !updateState"
-                                        ng-click="changeToUpdate(true)">修改</button>
-                                <button ng-if=" updateState" ng-click="saveUpdate()">保存</button>
-                                <button ng-if="updateState" ng-click="changeToUpdate(false)"
-                                        style="color: #f00">取消</button>
+    <!--安全设置-->
+    <div class="count_center">
+        <div class="com_tab">
+            <ul class="fl">
+                <li ng-class="{'active': tab=='base'}"><a ng-click="checkTab('base')">基本信息</a></li>
+                <li ng-class="{'active': tab=='safe'}"><a ng-click="checkTab('safe')">安全设置</a></li>
+                <li ng-class="{'active': tab=='bind'}" ng-if="isAdmin"><a ng-click="checkTab('bind')">申请绑定</a></li>
+                <li ng-class="{'active': tab=='auth'}"><a ng-click="checkTab('auth')">员工管理</a></li>
+                <li ng-class="{'active': tab=='role'}"><a ng-click="checkTab('role')">角色权限</a></li>
+                <!--<li ng-class="{'active': tab=='logistic'}"><a href="#" ng-click="checkTab('logistic')">收货地址</a></li>-->
+            </ul>
+        </div>
+        <div class="count_list">
+            <!-- 基本信息-->
+            <div ng-if="tab=='base'" style="background: #fff">
+                <div class="count01" style="margin-bottom: 0 !important;">
+                    <div class="count_basic">
+                        <p class="basic_title"><span>企业信息</span>
+                            <!--<span class="fr"><a href="#">修改</a><a href="#">提交</a><a href="#">删除</a></span>-->
+                            <span class="fr">
+                                <button ng-if=" !updateState"  ng-click="changeToUpdate(true)">修改</button>
+                                <button ng-if=" updateState"  ng-click="saveUpdate()">保存</button>
+                                <button ng-if="updateState" ng-click="changeToUpdate(false)" style="color: #f00">取消</button>
                             </span>
             </p>
             <ul>
@@ -971,6 +1301,176 @@
           <a ng-show="userInfo.havePayPwd" ng-click="updateUserPay()">修改</a>
         </li>-->
       </ul>
+    </div>
+        <!-- 人员信息 -->
+        <div class="count01 clearfix" ng-if="tab=='auth'">
+            <!--<div class="power_title">员工账号及权限管理</div>-->
+            <div class="auth-info-header">
+                <div class="addUser-group">
+                    <!--<i class="fa fa-user-plus fa-fw"></i>-->
+                    <div class="addUser-btn" ng-click="setAdding(!adding)" ng-mouseenter="setInSelect(true)" ng-mouseleave="setInSelect(false)">
+                        <img src="static/img/vendor/images/addUser.png" alt="">
+                        <span>新增用户</span>
+                    </div>
+                    <div class="addUser-expand" ng-show="adding" ng-mouseenter="setInSelect(true)" ng-mouseleave="setInSelect(false)">
+                        <div ng-click="setAddingUser(true)">
+                            <i class="fa fa-plus-circle"></i>
+                            <span>添加未注册用户</span>
+                        </div>
+                        <div ng-click="addExistUser()">
+                            <i class="fa fa-plus-circle"></i>
+                            <span>添加已注册用户</span>
+                        </div>
+                    </div>
+                </div>
+                <div class="searchUser-group">
+                    <span ng-click="onSearch(keyword, filterRole)">搜索</span>
+
+                    <input type="text" ng-keyup="onKeyUpSearch(keyword, filterRole, $event)" ng-model="keyword" placeholder="输入人员姓名、电话号码、邮箱或UU号进行搜索"/>
+                    <!--<input type="text">-->
+                    <div>
+                        <select ng-model="filterRole" ng-change="onSearch(keyword,filterRole)">
+                            <option value="all" selected="selected">全部角色</option>
+                            <option ng-repeat="role1 in existRoles.defaults" value="{{role1.id}}" >{{role1.desc}}</option>
+                            <option ng-repeat="role2 in existRoles.custom" value="{{role2.id}}" >{{role2.desc}}</option>
+                        </select>
+                    </div>
+                </div>
+            </div>
+            <div class="auth-info-area">
+                <form name="newUserForm"></form>
+                <table class="role-info" ng-table="tableParams">
+                    <thead>
+                    <tr>
+                        <!-- <th width="64">
+                             <lable class="check-act">
+                                 <input type="checkbox" id="checkAll" ng-checked="isCheckAll" ng-click="doCheckAll()"/>
+                                 <label for="checkAll"></label>
+                             </lable>
+                             全选</th>-->
+                        <th width="143">UU账号</th>
+                        <th width="101">姓名</th>
+                        <th width="67">性别</th>
+                        <th width="133">手机号</th>
+                        <th width="207">邮箱</th>
+                        <th width="233">角色</th>
+                        <th width="107">操作</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr class="role-filter" ng-show="addingUser">
+                        <!--<td>
+                            <lable class="check-act">
+                                <input type="checkbox" id="check0"/>
+                                <label for="check0"></label>
+                            </lable>
+                        </td>-->
+                        <td>系统生成</td>
+                        <td>
+                            <input type="text" ng-model="newUser.userName" required placeholder="用户名">
+                        </td>
+                        <td>
+                            <select ng-model="newUser.userSex" ng-init="newUser.userSex='M'" >
+                                <option value="M">男</option>
+                                <option value="F">女</option>
+                            </select>
+                        </td>
+                        <td ng-class="{'has-error': userTelError, 'has-success': userTelSuccess}">
+                            <input ng-model="newUser.userTel"
+                                   ng-blur="telValid(newUser.userTel)" required name="newUserTel"
+                                   ng-pattern="/^1\d{10}$/" type="text" placeholder="手机号">
+                        </td>
+                        <td ng-class="{'has-error': userEmailError, 'has-success': userEmailSuccess}">
+                            <input ng-model="newUser.userEmail" ng-pattern="/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/"
+                                   ng-blur="emailValid(newUser.userEmail)" required
+                                   name="newUserEmail" type="text"
+                                   placeholder="邮箱">
+                        </td>
+                        <td class="role-tag-area">
+                            <span class="role-tag bgcolor-5">普</span>
+                        </td>
+                        <td class="submit-area">
+                            <span ng-click="setAddingUser(false)" >取消</span>
+                            <span ng-click="addUser(newUser)">确定</span>
+                        </td>
+                    </tr>
+                    <tr ng-repeat="user in users track by $index">
+                        <!-- <td>
+                             <lable class="check-act">
+                                 <input type="checkbox" id="{{'check1'+$index+1}}" ng-checked="user.checked" ng-click="checkUser(user)"/>
+                                 <label for="{{'check1'+$index+1}}"></label>
+                             </lable>
+                         </td>-->
+                        <td>{{user.userUU}}</td>
+                        <td>{{user.userName}}</td>
+                        <td>{{user.userSex == 'M'?'男':'女'}}</td>
+                        <td>{{user.userTel}}</td>
+                        <td>{{user.userEmail}}</td>
+                        <td class="role-tag-area detail-role-tag">
+                            <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="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 ng-show="(userInfo.sys) || users.length == 1">  <!--&& 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>
+                        </td>
+                    </tr>
+                    </tbody>
+                    <tbody ng-if="users.length > 0">
+                    <tr style="height: 30px;">
+                        <td colspan="9" style="border-bottom: none; padding: 0;">
+                            <div class="record-line text-right">
+                                显示<span ng-bind="pageParam.start || 0"></span>-<span ng-bind="pageParam.end || 0"></span>条,共 <span ng-bind="pageParam.all"></span> 条
+                            </div>
+                        </td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+            <div class="com-del-box" ng-if="showDelUserFlag">
+                <div class="title">
+                    <a @click="delFlag=false"><i class="fa fa-close fa-lg" ng-click="setShowDelUserFlag(false)"></i></a>
+                </div>
+                <div class="content">
+                    <p><i class="fa fa-exclamation-circle"></i>确定删除该用户吗?</p>
+                    <div><a ng-click="setShowDelUserFlag(false)">取消</a><a ng-click="removeUser(delUser)">确认</a></div>
+                </div>
+            </div>
+        </div>
+        <!-- 角色管理 -->
+        <div class="count01 clearfix role-manage" ng-if="tab=='role'" >
+            <p>默认角色</p>
+            <div class="default-role-area">
+                <div class="{{'default-role-box bgimg-'+ role.color || 1}}" ng-repeat="role in roles.defaults track by role.id" ng-click="editRole(role)">
+                    <p>{{role.desc}}</p>
+                    <span>{{role.duty}}</span>
+                </div>
+            </div>
+            <p class="self-header">自定义角色</p>
+            <div class="define-role-area">
+                <div class="default-role-area">
+                    <div class="{{'default-role-box bgimg-'+ role.color || 1}}" ng-repeat="role in roles.custom track by role.id" ng-click="editRole(role)">
+                        <p>{{role.desc}}</p>
+                        <span>{{role.duty}}</span>
+                    </div>
+                    <div class="add-role-box default-role-box" ng-click="editRole()">
+                        <i>+</i>
+                        <div>
+                            <p>新增自定义角色</p>
+                            <span>某个角色的职责和默认角色差异较大时,可以自定义角色</span>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
     </div>
       <!--申请绑定-->
     <div class="clearfix bind-en" ng-if="tab=='bind'">
@@ -1012,7 +1512,7 @@
         </table>
       </div>
     <!--权限管理-->
-    <div class="count01 clearfix" ng-if="tab=='auth'">
+   <!-- <div class="count01 clearfix" ng-if="tab=='auth'">
       <div class="power_title">员工账号及权限管理</div>
       <dl class="power_list">
         <dt>
@@ -1056,7 +1556,7 @@
           <span><a href="#" class="p_off fl">取消</a><a href="#" class="p_save fr">提交更改</a></span>
         </dd>
       </dl>
-    </div>
+    </div>-->
   </div>
   <!--收货地址-->
   <div class="logistic-content" ng-if="tab=='logistic'">

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

@@ -1306,7 +1306,7 @@
 							<a ng-if="status == 'completed' || status == 'tobepaid' || status == 'all'" ng-click="setChildStatus('520','交易完成')" title="">交易完成</a>
 							<a ng-if="status == 'completed' || status == 'all'" ng-click="setChildStatus('606','交易关闭')" title="">交易关闭</a>
 							<a ng-if=" status == 'all'" ng-click="setChildStatus('602-603-315-604-605-606','已取消')" title=""> 已取消</a>
-							<a ng-if="status == 'inbound' || status == 'all' || status == 'tobepaid'" ng-click="setChildStatus('606','售后中')" title="">售后中</a>
+							<a ng-if="status == 'inbound' || status == 'all' || status == 'tobepaid'" ng-click="setChildStatus('404-503-520','售后中')" title="">售后中</a>
 						</div>
 					</span>
 					<span>交易操作</span>

+ 208 - 0
src/main/webapp/resources/view/vendor/modal/edit_user_role.html

@@ -0,0 +1,208 @@
+<style>
+    .modal-content {
+        width: 575px;
+    }
+    .user-role-manage .user-role-header {
+        border-bottom: 1px solid #ededed;
+    }
+    .user-role-manage .user-role-header >span {
+        height: 40px;
+        line-height: 40px;
+        display: inline-block;
+        font-size: 14px;
+        color: #666;
+        margin-left: 14px;
+    }
+    .user-role-manage .default-role-area {
+        height: 256px;
+        padding: 21px 22px 10px 22px;
+        border-bottom: 1px solid #ededed;
+    }
+    .user-role-manage .default-role-box {
+        width: 170px;
+        height: 102px;
+        display: inline-block;
+        background: #89aefa;
+        color: #fff;
+        padding: 10px 17px 16px 8px;
+        vertical-align: middle;
+        margin-right: 6px;
+        margin-bottom: 10px;
+        position: relative;
+        border-radius: 3px;
+    }
+    .user-role-manage .default-role-box p {
+        text-align: center;
+        margin-bottom: 10px;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+    }
+    .user-role-manage .default-role-box:nth-child(3n) {
+        margin-right: 0;
+    }
+    .user-role-manage .default-role-box span {
+        font-size: 12px;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: pre-wrap;
+        word-break: normal;
+        height: 43px;
+        width: 100%;
+        display: block;
+    }
+    .user-role-manage .default-role-box img {
+        border-radius: 100%;
+        position: absolute;
+        right: 3px;
+        bottom: 3px;
+        cursor: pointer;
+    }
+    .user-role-manage .bgimg-1 {
+        background: url(static/img/vendor/authority/role-bg-1.jpg)no-repeat;
+    }
+    .user-role-manage .bgimg-2 {
+        background: url(static/img/vendor/authority/role-bg-2.jpg)no-repeat;
+    }
+    .user-role-manage .bgimg-3 {
+        background: url(static/img/vendor/authority/role-bg-3.jpg)no-repeat;
+    }
+    .user-role-manage .bgimg-4 {
+        background: url(static/img/vendor/authority/role-bg-4.jpg)no-repeat;
+    }
+    .user-role-manage .bgimg-5 {
+        background: url(static/img/vendor/authority/role-bg-5.jpg)no-repeat;
+    }
+    .user-role-manage .user-role-footer {
+        height: 50px;
+        line-height: 50px;
+        text-align: center;
+    }
+    .user-role-manage .user-role-footer span {
+        width: 64px;
+        height: 28px;
+        line-height: 28px;
+        display: inline-block;
+        font-size: 14px;
+        background: #5078cb;
+        color: #fff;
+        cursor: pointer;
+    }
+    .user-role-manage .user-role-footer span:first-child {
+        background: #c8c6c6;
+        margin-right: 8px;
+    }
+
+    .user-role-manage .ng-table-pagination a {
+        border: none;
+        font-size: 12px;
+        cursor: pointer;
+    }
+    .user-role-manage .pagination li:first-child a, .user-role-manage .pagination li:last-child a{
+        font-size: 20px;
+    }
+    .user-role-manage ul.pagination.ng-table-pagination > li > a > span {
+        height: 17px;
+        line-height: 17px;
+        color: #666;
+    }
+    .user-role-manage .ng-table-pager {
+        background: #f4f4f4;
+        margin: 0!important;
+        padding-right: 29px;
+    }
+    .user-role-manage .ng-table-pager  input.page-number {
+        vertical-align: inherit;
+        display: inline-block;
+        width: 37px;
+        height: 31px;
+        float: left;
+        padding: 6px 6px;
+        font-size: 12px;
+        line-height: 1.42857143;
+        color: #9B9792;
+        text-align: center;
+        background-color: #F6F5F4;
+        background-image: none;
+        border: 1px solid #ccc;
+        border-top-left-radius: 4px;
+        border-bottom-left-radius: 4px;
+        box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+        transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
+    }
+
+    .user-role-manage .ng-table-pager a.page-a {
+        color: #fff;
+        cursor: pointer;
+        font-size: 12px;
+        border-top-right-radius: 4px;
+        border-bottom-right-radius: 4px;
+        text-decoration: none;
+        height: 31px;
+    }
+
+    .user-role-manage .ng-table-pager .page-go-block {
+        float: right;
+        font-size: 0px;
+        height: 31px;
+        margin-top: 20px;
+        line-height: 31px;
+    }
+    .user-role-manage .ng-table-pager .ng-table-pagination{
+        text-align: center;
+        max-width: 460px;
+        margin: 0;
+    }
+    .user-role-manage .ng-table-pager .ng-table-pagination a{
+        height: 29px;
+        line-height: 13px;
+    }
+    .user-role-manage .pagination li.active a span{
+        color: white !important;
+    }
+    .user-role-manage .ng-table-pager .ng-table-pagination li.active a {
+        background: none!important;
+    }
+    .user-role-manage .ng-table-pager .ng-table-pagination li a {
+        background: none!important;
+    }
+    .user-role-manage .ng-table-pager .ng-table-pagination li.active a span {
+        color: #5078cb!important;
+    }
+</style>
+
+<div class="user-role-manage">
+    <div class="user-role-header">
+        <span>编辑角色</span>
+        <button style=" padding-right:9px; " type="button" class="close" data-dismiss="alert" ng-click="cancelModal()" aria-label="Close">
+            <span aria-hidden="true">×</span>
+        </button>
+    </div>
+    <div class="default-role-area">
+        <div class="{{'default-role-box bgimg-'+role.color || 1}}" ng-repeat="role in currentRoles track by $index" ng-click="checkRole(role)">
+            <p title="{{role.desc}}">{{role.desc}}</p>
+            <span title="{{role.duty}}">{{role.duty}}</span>
+            <img ng-src="static/img/vendor/images/{{role.checked?'check-active':'check'}}.jpg" alt="" >
+        </div>
+    </div>
+    <div class="ng-cloak ng-table-pager text-center">
+        <ul class="pagination ng-table-pagination">
+            <li ng-class="{'disabled': !page.active && !page.current, 'active': params.page == page.number}" ng-repeat="page in pages" ng-switch="page.type">
+                <a ng-switch-when="prev" ng-click="setPage(page.type, -1)">&laquo;</a>
+                <a ng-switch-when="first" ng-click="setPage(page.type, page.number)"><span ng-bind="page.number"></span></a>
+                <a ng-switch-when="page" ng-click="setPage(page.type, page.number)"><span ng-bind="page.number"></span></a>
+                <a ng-switch-when="more" ng-click="setPage(page.type, -1)">&#8230;</a>
+                <a ng-switch-when="last" ng-click="setPage(page.type, page.number)"><span ng-bind="page.number"></span></a>
+                <a ng-switch-when="next" ng-click="setPage(page.type, -1)">&raquo;</a>
+            </li>
+        </ul>
+        <div class="page-go-block" ng-if="rolesData.length>6">
+            <input class="page-number" type="text" ng-model="params.currentPage" ng-keydown="listenEnter()"/>
+            <a class="page-a" ng-click="setPage('page', params.currentPage)">GO</a>
+        </div>
+    </div>
+    <div class="user-role-footer">
+        <span ng-click="cancelModal()">取消</span>
+        <span ng-click="close(true)">确定</span>
+    </div>
+</div>

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor