瀏覽代碼

买家支付中心需求调整

hulh 8 年之前
父節點
當前提交
9dbebd7535

+ 0 - 1
src/main/java/com/uas/platform/b2c/fa/payment/dao/BankInfoDao.java

@@ -38,7 +38,6 @@ public interface BankInfoDao extends CrudRepository<BankInfo, Long>, JpaSpecific
 	 * @param status 状态
 	 * @return list
 	 */
-	@Query("select b from BankInfo b where b.useruu=:useruu and b.enuu=:enuu and b.opraterUserType=:operateUserType and b.status=:status")
 	List<BankInfo> findByUseruuAndEnuuAndOpraterUserTypeAndStatusOrderByNumAsc(Long useruu, Long enuu, Integer opraterUserType, Integer status);
 
 	/**

+ 42 - 5
src/main/java/com/uas/platform/b2c/trade/order/controller/OrderController.java

@@ -8,9 +8,11 @@ import com.uas.platform.b2c.common.account.service.VendorService;
 import com.uas.platform.b2c.core.constant.SplitChar;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
+import com.uas.platform.b2c.core.support.view.JxlsExcelView;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
 import com.uas.platform.b2c.core.utils.StringUtilB2C;
 import com.uas.platform.b2c.fa.payment.model.BankTransfer;
+import com.uas.platform.b2c.prod.commodity.model.ProductStandardPutOnInfo;
 import com.uas.platform.b2c.trade.inquiry.model.TradeCharge;
 import com.uas.platform.b2c.trade.order.model.Order;
 import com.uas.platform.b2c.trade.order.model.OrderDetail;
@@ -28,13 +30,13 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
 
 import javax.management.OperationsException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
@@ -897,6 +899,41 @@ public class OrderController {
 		return orderService.getBuyerPayRecord(params, keyword, fromDate, toDate, currencyName, method);
 	}
 
+	/**
+	 * 导出支付记录到excel表中
+	 * @param isAjax
+	 * @param request
+	 * @param keyword
+	 * @param fromDate
+	 * @param toDate
+	 * @param currencyName
+	 * @param method
+	 * @return
+	 */
+	@RequestMapping(value = "/export/payRecord", method = RequestMethod.POST)
+	public ModelAndView exportPayRecordToExcel(@RequestParam(required = false, value = "isAjax", defaultValue = "false")Boolean isAjax, HttpServletRequest request,
+											   String keyword, Long fromDate, Long toDate, String currencyName, Integer method){
+		HttpSession session = request.getSession();
+		ModelAndView modelAndView = new ModelAndView();
+		Object loading = session.getAttribute("loading");
+		if(isAjax) {
+			MappingJackson2JsonView view = new MappingJackson2JsonView();
+			Map<String, Boolean> attributes = new HashMap<>();
+			Boolean isLoading= loading == Boolean.TRUE;
+			attributes.put("loading", isLoading);
+			view.setAttributesMap(attributes);
+			modelAndView.setView(view);
+			return modelAndView;
+		}
+		session.setAttribute("loading", true);
+		List<OrderSimpleInfo> data = orderService.getExportData(keyword, fromDate, toDate, currencyName, method);
+		modelAndView.addObject("data", data);
+		modelAndView.addObject("operator", "-");
+		modelAndView.setView(new JxlsExcelView("classpath:jxls-tpl/trade/payRecord", "优软商城-买家交易记录"));
+		session.setAttribute("loading", false);
+		return modelAndView;
+	}
+
 	/**
 	 * 根据订单号获取Order对象
 	 *

+ 24 - 0
src/main/java/com/uas/platform/b2c/trade/order/model/OrderSimpleInfo.java

@@ -1,6 +1,7 @@
 package com.uas.platform.b2c.trade.order.model;
 
 import java.io.Serializable;
+import java.text.SimpleDateFormat;
 import java.util.Date;
 
 /**
@@ -11,6 +12,8 @@ import java.util.Date;
  */
 public class OrderSimpleInfo extends Document implements Serializable {
 
+	private final static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
 	/**
 	 * 
 	 */
@@ -74,6 +77,11 @@ public class OrderSimpleInfo extends Document implements Serializable {
 	 */
 	private String currencyName;
 
+	/**
+	 * 卖方企业名称
+	 */
+	private String sellername;
+
 	/**
 	 * 价格,存储的为元
 	 */
@@ -287,6 +295,14 @@ public class OrderSimpleInfo extends Document implements Serializable {
 		this.type = type;
 	}
 
+	public String getSellername() {
+		return sellername;
+	}
+
+	public void setSellername(String sellername) {
+		this.sellername = sellername;
+	}
+
 	/**
 	 * Gets paytype.
 	 *
@@ -346,6 +362,7 @@ public class OrderSimpleInfo extends Document implements Serializable {
 		this.price = order.getPrice();
 		this.ensurePrice = order.getEnsurePrice();
 		this.paytype = order.getPaytype();
+		this.sellername = order.getSellername();
 	}
 
 	@Override
@@ -354,5 +371,12 @@ public class OrderSimpleInfo extends Document implements Serializable {
 				+ ", status=" + status + ", price=" + price + ", type=" + type + "]";
 	}
 
+	/**
+	 * 格式化付款时间
+	 * @return
+	 */
+	public String formatTime(){
+		return sdf.format(paytime);
+	}
 	
 }

+ 12 - 0
src/main/java/com/uas/platform/b2c/trade/order/service/OrderService.java

@@ -605,6 +605,18 @@ public interface OrderService {
 	Page<OrderSimpleInfo> getBuyerPayRecord(PageParams params, String keyword, Long fromDate, Long toDate,
 											String currencyName, Integer method);
 
+	/**
+	 * 获取导出的支付记录数据
+	 * @param keyword
+	 * @param fromDate
+	 * @param toDate
+	 * @param currencyName
+	 * @param method
+	 * @return
+	 */
+	List<OrderSimpleInfo> getExportData(String keyword, Long fromDate, Long toDate,
+										String currencyName, Integer method);
+
 	/**
 	 * 根据订单单号修改订单使用状态
 	 * @param orderid

+ 48 - 16
src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderServiceImpl.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.sun.org.apache.xpath.internal.operations.Bool;
+import com.sun.org.apache.xpath.internal.operations.Or;
 import com.uas.api.b2c_erp.buyer.model.B2cOrder;
 import com.uas.api.exception.B2CException;
 import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
@@ -3100,6 +3101,51 @@ public class OrderServiceImpl implements OrderService {
     public Page<OrderSimpleInfo> getBuyerPayRecord(com.uas.platform.core.model.PageParams params, String keyword, Long fromDate, Long toDate,
                                                    String currencyName, Integer method) {
         final PageInfo info = new PageInfo(params);
+        filterPageInfo(info, keyword, fromDate, toDate, currencyName, method);
+
+        Page<Order> orderPage = orderDao.findAll(new Specification<Order>() {
+            @Override
+            public Predicate toPredicate(Root<Order> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                query.where(info.getPredicates(root, query, cb));
+                return null;
+            }
+        }, info);
+        List<OrderSimpleInfo> list = new ArrayList<>();
+        if(orderPage != null) {
+            for (Order order : orderPage.getContent()) {
+                list.add(new OrderSimpleInfo(order));
+            }
+        }
+        return new PageImpl<>(list, info.getPageable(), orderPage.getTotalElements());
+    }
+
+    @Override
+    public List<OrderSimpleInfo> getExportData(String keyword, Long fromDate, Long toDate, String currencyName, Integer method) {
+        final PageInfo info = new PageInfo();
+        filterPageInfo(info, keyword, fromDate, toDate, currencyName, method);
+        List<Order> orderList = orderDao.findAll(new Specification<Order>() {
+            @Override
+            public Predicate toPredicate(Root<Order> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
+                criteriaQuery.where(info.getPredicates(root, criteriaQuery, criteriaBuilder));
+                return null;
+            }
+        });
+        List<OrderSimpleInfo> list = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(orderList)){
+            for (Order order : orderList){
+                OrderSimpleInfo or = new OrderSimpleInfo(order);
+                list.add(or);
+            }
+        }
+
+        return list;
+    }
+
+    /**
+     * 设置分页过滤条件
+     */
+    private void filterPageInfo(PageInfo info, String keyword, Long fromDate, Long toDate,
+                               String currencyName, Integer method){
 
         info.filter("buyeruu", SystemSession.getUser().getUserUU());
         if (SystemSession.getUser().getEnterprise() != null) {
@@ -3108,7 +3154,7 @@ public class OrderServiceImpl implements OrderService {
             info.filter("dissociative", Type.PERSONAL.value());
         }
         info.expression(PredicateUtils.isNotNull("paytime"));
-        if (!StringUtils.isEmpty(keyword)){
+        if (StringUtils.hasText(keyword)){
             SimpleExpression[] simpArrs = new SimpleExpression[2];
             simpArrs[0] = new SimpleExpression("orderid", keyword, Operator.LIKE, true);
             simpArrs[1] = new SimpleExpression("sellername", keyword, Operator.LIKE, true);
@@ -3125,22 +3171,8 @@ public class OrderServiceImpl implements OrderService {
             info.expression(PredicateUtils.eq("currency", currencyName, false));
         }
         if (method != null){
-
-        }
-        Page<Order> orderPage = orderDao.findAll(new Specification<Order>() {
-            @Override
-            public Predicate toPredicate(Root<Order> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
-                query.where(info.getPredicates(root, query, cb));
-                return null;
-            }
-        }, info);
-        List<OrderSimpleInfo> list = new ArrayList<>();
-        if(orderPage != null) {
-            for (Order order : orderPage.getContent()) {
-                list.add(new OrderSimpleInfo(order));
-            }
+            info.expression(PredicateUtils.eq("paytype", method, false));
         }
-        return new PageImpl<>(list, info.getPageable(), orderPage.getTotalElements());
     }
 
     /**

二進制
src/main/resources/jxls-tpl/trade/payRecord.xls


+ 372 - 30
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_pay_ctrl.js

@@ -29,8 +29,14 @@ define(['app/app'], function(app) {
 
 		$scope.$$record = {};
 
+		$scope.AllOrderInfo = {};
+
+		$scope.param = {};
+
 		$scope.currency = 'ALL';
 
+		$scope.paytype = 'ALL';
+
 		/**
 		 * 使用ngTable 获取支付记录信息
 		 */
@@ -44,9 +50,27 @@ define(['app/app'], function(app) {
 			total : 0,
 			getData : function ($defer, params) {
 				const param = BaseService.parseParams(params.url());
+				if ($scope.keyword && $scope.keyword.length > 0){
+					param.keyword = $scope.keyword;
+				}
+				if ($scope.currency && $scope.currency != 'ALL'){
+					param.currencyName = $scope.currency;
+				}
+				if ($scope.paytype && $scope.paytype != 'ALL'){
+					param.method = $scope.paytype;
+				}
+				if ($scope.startDate){
+					param.fromDate = $scope.startDate.getTime();
+				}
+				if ($scope.endDate){
+					param.toDate = $scope.endDate.getTime();
+				}
 				//目前直接从订单中获取信息 --支付记录
 				OrderSimpleInfo.getBuyPayRecord(param, function (page) {
 					$scope.tradeRecordPage = page.content;
+					$scope.AllOrderInfo.totalPages = page.totalPages;
+					$scope.param.page = page.number;
+
 
 					$scope.$$record.totalElements = page.totalElements;
 					if(Number(page.totalElements) > 0) {
@@ -55,21 +79,79 @@ define(['app/app'], function(app) {
 						$scope.$$record.start = 0;
 					}
 					$scope.$$record.end = Number(page.size) * (Number(page.number) - 1) + Number(page.numberOfElements);
+					$scope.acculatePages(page.number, $scope.AllOrderInfo.totalPages);
+				}, function (response) {
+
+				});
+			}
+		});
+
+		$scope.$$bankInfo = {};
+		$scope.bankInfoTableParams = new ngTableParams({
+			page : 1,
+			count : 10,
+			sorting : {
+				num : 'ASC'
+			}
+		},{
+			total : 0,
+			getData : function ($defer, params) {
+				var param = BaseService.parseParams(params.url());
+				bankInfoService.getBuyPersonalBank(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 (response) {
-
+				}, function() {
+					toaster.pop('error', '获取账户信息失败');
 				});
 			}
 		});
 
+		$scope.condition = {
+			startDateOpen: false,
+			endDateOpen: false
+		};
+
+		// 打开日期选择框
+		$scope.openDatePicker = function($event, item, openParam, status) {
+			if (status != null) {
+				if (status == 1) {
+					if ($scope.startDate != null) {
+						return;
+					}
+				}
+				if (status == 2) {
+					if ($scope.endDate != null) {
+						return;
+					}
+				}
+			}
+			$event.preventDefault();
+			$event.stopPropagation();
+			item[openParam] = !item[openParam];
+		};
+
 		var loadAccountData = function() {
-			bankInfoService[$scope.getAccountData].call(null,{}, function(data) {
-				$scope.accounts = data.content;
-			}, function(response) {
-				toaster.pop('error', '获取账户信息失败');
-			});
+			$scope.bankInfoTableParams.page(1);
+			$scope.bankInfoTableParams.reload();
+		};
+
+		$scope.filterLoad = function () {
+			loadPayHistory();
+		};
+
+		var loadPayHistory = function () {
+			$scope.tradeRecordTableParams.page(1);
+			$scope.tradeRecordTableParams.reload();
 		};
 
 		$scope.setDefaultAccount = function(id) {
@@ -81,14 +163,25 @@ define(['app/app'], function(app) {
 			})
 		};
 
+		$scope.showDeleteFrame = function (item) {
+			$scope.showDelete = true;
+			$scope.deleteObject = item;
+		};
+
+		$scope.cancelDelete = function () {
+			$scope.showDelete = false;
+			$scope.deleteObject = null;
+		};
 		//删除账户
-		$scope.deleteAccount = function(buyAccount) {
-			var  isSure = confirm('确认删除本银行账户?删除后无法恢复,请谨慎操作');
-			if(isSure){
-				bankInfoService.deleteBank({id: buyAccount.id}, function(data) {
-					toaster.pop('success', '删除成功');
-					loadAccountData();
-				}, function(response) {
+		$scope.deleteAccount = function() {
+			if ($scope.deleteObject){
+				bankInfoService.deleteBank({id: $scope.deleteObject.id}, function(data) {
+					if (data){
+						toaster.pop('success', '删除成功');
+						$scope.showDelete = false;
+						loadAccountData();
+					}
+				}, function() {
 					toaster.pop('error', '删除失败');
 				})
 			}
@@ -128,17 +221,19 @@ define(['app/app'], function(app) {
 		var loadData = function() {
 			switch ($scope.status) {
 				case 'pay-info' :
-					$scope.getAccountData = 'getBuyPersonalBank';
 					loadAccountData();
 					break;
 				case 'pay-history':
-					$scope.tradeRecordTableParams.page(1);
-					$scope.tradeRecordTableParams.reload();
+					loadPayHistory();
 					break;
 			}
 		};
 		loadData();
 
+		$scope.search = function () {
+			loadPayHistory();
+		};
+
 		$scope.exportToExcel = function () {
 			if ($scope.$$record.totalElements == 0) {
 				toaster.pop('info', '当前支付记录为空,无法导出');
@@ -147,17 +242,45 @@ define(['app/app'], function(app) {
 			exportByAjax();
 		};
 
+		if ($scope.keyword && $scope.keyword.length > 0){
+			param.keyword = $scope.keyword;
+		}
+		if ($scope.currency && $scope.currency != 'ALL'){
+			param.currencyName = $scope.currency;
+		}
+		if ($scope.paytype && $scope.paytype != 'ALL'){
+			param.method = $scope.paytype;
+		}
+		if ($scope.startDate){
+			param.fromDate = $scope.startDate.getTime();
+		}
+		if ($scope.endDate){
+			param.toDate = $scope.endDate.getTime();
+		}
+
 		var exportByAjax = function () {
-			var url = 'product/brandMap/export';
+			var url = 'trade/order/export/payRecord';
 			var strArray = [];
 			if ($scope.keyword && $scope.keyword.length > 0){
 				var wordStr = "keyword=" + $scope.keyword;
 				strArray.push(wordStr);
 			}
-			if ($scope.storeType && $scope.storeType != 'ALL'){
-				var typeStr = "storeType=" + $scope.storeType;
+			if ($scope.currency && $scope.currency != 'ALL'){
+				var currencyStr = "currencyName=" + $scope.currency;
+				strArray.push(currencyStr);
+			}
+			if ($scope.paytype && $scope.paytype != 'ALL'){
+				var typeStr = "method=" + $scope.paytype;
 				strArray.push(typeStr);
 			}
+			if ($scope.startDate){
+				var startStr = "fromDate=" + $scope.startDate.getTime();
+				strArray.push(startStr);
+			}
+			if ($scope.endDate){
+				var endStr = "toDate=" + $scope.endDate.getTime();
+				strArray.push(endStr);
+			}
 			if (strArray.length != 0){
 				var str = strArray.join("&");
 				url = url + "?" + str;
@@ -179,7 +302,7 @@ define(['app/app'], function(app) {
 		var getDownLoadStatus = function () {
 			Loading.show();
 			$.ajax({
-				url : 'product/brandMap/export',
+				url : 'trade/order/export/payRecord',
 				data : {isAjax : true},
 				method : 'POST',
 				dataType : 'json',
@@ -189,20 +312,22 @@ define(['app/app'], function(app) {
 							toaster.pop('info', '数据处理完毕,正在下载文件,请稍等。');
 							Loading.hide();
 						});
-						if($scope.$$map.clockID) {
-							clearInterval($scope.$$map.clockID);
+						if($scope.$$record.clockID) {
+							clearInterval($scope.$$record.clockID);
 						}
 					}
 				},
 				error : function () {
 					Loading.hide();
-					if($scope.$$map.clockID) {
-						clearInterval($scope.$$map.clockID);
+					if($scope.$$record.clockID) {
+						clearInterval($scope.$$record.clockID);
 					}
 				}
 			});
 		};
 
+		/******************根据页数设置翻页的信息********start**************************/
+
 		//输入框监听Enter事件
 		$scope.listenEnter = function () {
 			if(event.keyCode == 13) {
@@ -210,6 +335,176 @@ define(['app/app'], function(app) {
 			}
 		};
 
+		$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.AllOrderInfo.totalPages) {
+						page = $scope.AllOrderInfo.totalPages;
+					}else {
+						page = number;
+					};
+					break;
+				case "prev":
+					if($scope.param.page <= 1) {
+						page = 1;
+					}else {
+						page =$scope.param.page - 1;
+					};
+					break;
+				case "next":
+					if($scope.param.page >= $scope.AllOrderInfo.totalPages) {
+						page = $scope.AllOrderInfo.totalPages
+					}else {
+						page =$scope.param.page + 1;
+					}
+					break;
+				case "first":
+					page = 1;
+					break;
+				case "last":
+					page = $scope.AllOrderInfo.totalPages;
+					break;
+			}
+			if(page == $scope.param.page || page < 1 || page > $scope.AllOrderInfo.totalPages) {
+				$scope.param.currentPage = $scope.param.page;
+				return ;
+			}
+			$scope.param.page = page;
+			$scope.tradeRecordTableParams.page($scope.param.page);
+			$scope.tradeRecordTableParams.reload();
+		};
+
+		//当前页在前段的计算方式
+		$scope.frontSegment = function (currentPage, totalElementPages) {
+			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);
+					}
+				}
+			});
+		};
+
+		//当前页在后端计算方式
+		$scope.endSegment = function (currentPage, totalElementPages) {
+			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.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.acculatePages = function(currentPage, totalElementPages) {
+			$scope.pages = [];
+			if(totalElementPages < 1)  {
+				return ;
+			}
+			//初始化页面数据
+			$scope.initPages(totalElementPages);
+			if(totalElementPages < 10) {
+				angular.forEach($scope.pages, function (page) {
+					if(page.number == currentPage) {
+						page.current = true;
+					}
+				});
+			}else if(currentPage < 6) {//当期页小于6
+				$scope.frontSegment(currentPage, totalElementPages);
+			}else if(currentPage > totalElementPages - 5) { //当期页在后面
+				$scope.endSegment(currentPage, totalElementPages);
+			}else { //当期页在中间
+				$scope.middleSegment(currentPage);
+			}
+		};
+
 	}]);
 
 
@@ -222,9 +517,25 @@ define(['app/app'], function(app) {
 		 */
 		$scope.bankList = [
 			'中国银行','中国建设银行','中国工商银行','中国农业银行','交通银行','招商银行','中国民生银行',
-			'兴业银行','中信银行','中国光大银行','广发银行','平安银行','中国邮政储蓄银行','华夏银行','中信银行','浦发银行'
+			'兴业银行','中信银行','中国光大银行','广发银行','平安银行','中国邮政储蓄银行','华夏银行','浦发银行'
 		];
 
+		// $scope.bankBlur = function () {
+		// 	console.log(!$scope.account.bankname);
+		// 	if (!$scope.account.bankname){
+		// 		$scope.showBankFrame = true;
+		// 	}
+		// };
+
+		$scope.inputBankName = function () {
+			$scope.showBankFrame = true;
+		};
+
+		$scope.fitBankToAccount = function (item) {
+			$scope.account.bankname = item;
+			$scope.showBankFrame = false;
+		};
+
 		$scope.account = account;
 		if($scope.account) {
 			$scope.title = "修改账户";
@@ -233,6 +544,20 @@ define(['app/app'], function(app) {
 			$scope.account = {};
 		}
 
+		var matchArray = function () {
+			$scope.account.bankname = $scope.account.bankname ? $scope.account.bankname : '';
+			$scope.resultList = $scope.bankList.filter(function (data) {
+				if (data.indexOf($scope.account.bankname) >= 0){
+					return data;
+				}
+			});
+			if ($scope.resultList.length > 0){
+				$scope.matchData = true;
+			}else{
+				$scope.matchData = false;
+			}
+		};
+
 		/**
 		 * 验证新增账户格式
 		 * @param num
@@ -241,9 +566,11 @@ define(['app/app'], function(app) {
 			var size;
 			if (num == 1){
 				//验证开户银行名称
+				$scope.showBankFrame = true;
+				matchArray();
 			}else if(num == 2){
 				//验证开户支行名称
-				if(!$scope.account.branchname){
+				if($scope.account.branchname){
 					size = $scope.account.branchname.replace(/[^\x00-\xff]/g,'**').length;
 					if (size > 40){
 						$scope.branchError = true;
@@ -259,7 +586,7 @@ define(['app/app'], function(app) {
 				}
 			}else if(num == 3){
 				//验证银行账号
-				if (!$scope.account.number){
+				if ($scope.account.number){
 					size = $scope.account.number.replace(/[^\x00-\xff]/g,'**').length;
 					if (size > 30){
 						$scope.numberError = true;
@@ -275,7 +602,7 @@ define(['app/app'], function(app) {
 				}
 			}else if(num == 4){
 				//验证开户名称
-				if (!$scope.account.accountname){
+				if ($scope.account.accountname){
 					size = $scope.account.accountname.replace(/[^\x00-\xff]/g,'**').length;
 					if (size > 100){
 						$scope.nameError = true;
@@ -287,8 +614,23 @@ define(['app/app'], function(app) {
 		};
 
 		$scope.confirm = function() {
-			var method = 'saveBuyPersonalBank'; //不区分个人和企业账户
+			var account = $scope.account;
 
+			if (!account){
+				toaster.pop('error', '请按要求填写正确的信息');
+				return ;
+			}
+			if (!account.bankname || !account.branchname || !account.number || !account.accountname){
+				toaster.pop('error', '请按要求填写正确的信息');
+				return ;
+			}
+			if ($scope.branchError || $scope.branchPattError || $scope.numberError || $scope.numberPattError ||
+				$scope.nameError){
+				toaster.pop('error', '请按要求填写正确的信息');
+				return ;
+			}
+
+			var method = 'saveBuyPersonalBank'; //不区分个人和企业账户
 			bankInfoService[method].call(null, null, $scope.account, function(data) {
 				toaster.pop('success', '保存成功');
 				$modalInstance.close(data)

+ 19 - 22
src/main/webapp/resources/view/common/bankInfoModal.html

@@ -35,7 +35,7 @@
 		width: 241px;
 		padding-left:5px;
 		line-height: 34px;
-		border-bottom:1px solid #5078cb
+		/*border-bottom:1px solid #5078cb*/
 	}
 	.divinline .select-down li:hover{
 		background: #5078cb;
@@ -78,50 +78,47 @@
 						<!--<option value="1">1</option>-->
 						<!--<option value="2">2</option>-->
 					<!--</select>-->
-		    		<input name="bankname" ng-model="account.bankname" type="text" class="form-control select-adder" placeholder="请选择开户银行" required>
-					<ul class="select-down">
-						<li>1</li>
-						<li>1</li>
-						<li>1</li>
+		    		<input name="bankname" ng-model="account.bankname" ng-change="checkAccount(1)" type="text" class="form-control select-adder" placeholder="请选择开户银行" required>
+					<ul class="select-down" ng-if="showBankFrame && matchData">
+						<li ng-click="fitBankToAccount(bank)" ng-repeat="bank in resultList">{{bank}}</li>
 					</ul>
 		  		</div>
-				<span class="warn-message" ng-if="false">请填写正确的开户银行</span>
-				<span class="warn-message" ng-if="false">开户银行不能为空</span>
+				<span class="warn-message" ng-if="account.bankname && !matchData">请填写正确的开户银行</span>
+				<span class="warn-message" ng-if="myForm.bankname.$touched && myForm.bankname.$invalid">开户银行不能为空</span>
 		  	</div>
 			<div class="form-group">
 				<label class="margin15"><b class="text-inverse">*&nbsp;</b>开户支行</label>
 				<div class="divinline">
-					<input name="number" type="text" class="form-control" ng-model="account.branchname" ng-change="checkAccount(2)"
+					<input name="branchname" type="text" class="form-control" ng-model="account.branchname" ng-change="checkAccount(2)"
 						   placeholder="例如:侨香支行" ng-required="true">
 				</div>
-				<span class="warn-message" ng-if="false">请填写正确的开户支行</span>
-				<span class="warn-message" ng-if="false">请勿超过20个字</span>
-				<span class="warn-message" ng-if="false">开户支行不能为空</span>
+				<span class="warn-message" ng-if="account.branchname && branchPattError">请填写正确的开户支行</span>
+				<span class="warn-message" ng-if="account.branchname && !branchPattError && branchError">请勿超过20个字</span>
+				<span class="warn-message" ng-if="myForm.branchname.$touched && myForm.branchname.$invalid">开户支行不能为空</span>
 			</div>
 		  	<div class="form-group">
 		  		<label class="margin15"><b class="text-inverse">*&nbsp;</b>银行账号</label>
 		  		<div class="divinline">
 		  			<input name="number" ng-model="account.number" type="text" class="form-control" 
-		  			placeholder="请填写银行账号" ng-pattern="/^[0-9]*$/" ng-required="true"
-		  			ng-minlength="8" ng-maxlength="30">
+		  			placeholder="请填写银行账号" ng-required="true" ng-change="checkAccount(3)">
 		  		</div>
-				<span class="warn-message" ng-if="false">请填写正确的银行账户</span>
-				<span class="warn-message">请勿超过30个字符</span>
-				<span class="warn-message" ng-if="false">银行账号不能为空</span>
+				<span class="warn-message" ng-if="account.number && numberPattError">请填写正确的银行账号</span>
+				<span class="warn-message" ng-if="account.number && !numberPattError && numberError">请勿超过30个字符</span>
+				<span class="warn-message" ng-if="myForm.number.$touched && myForm.number.$invalid">银行账号不能为空</span>
 		  	</div>
 			<div class="form-group">
 				<label class="margin15"><b class="text-inverse">*&nbsp;</b>开户名称</label>
 				<div class="divinline">
-					<input name="number" type="text" class="form-control" ng-model="account.accountname"
-						   placeholder="请填写开户人姓名或企业名称" ng-required="true">
+					<input name="accountname" type="text" class="form-control" ng-model="account.accountname"
+						   placeholder="请填写开户人姓名或企业名称" ng-required="true" ng-change="checkAccount(4)">
 				</div>
-				<span class="warn-message">请勿超过50个字</span>
-				<span class="warn-message" ng-if="false">开户名称不能为空</span>
+				<span class="warn-message" ng-if="account.accountname && nameError">请勿超过50个字</span>
+				<span class="warn-message" ng-if="myForm.accountname.$touched && myForm.accountname.$invalid">开户名称不能为空</span>
 			</div>
 		<label class="remind-message"><b class="text-inverse">*&nbsp;</b>为保障您的资金安全,账户信息加密显示且不可修改,只能删除后重新提交。</label>
 	</div>
 	<div class="modal-footer">
 		<button class="com-btn-level1 com-btn-cancel" ng-click="cancel()">取消</button>
-		<input type="submit" class="com-btn-submit com-btn-level1" ng-disabled="!myForm.$valid" ng-click="confirm()" value="确定" />
+		<input type="submit" class="com-btn-submit com-btn-level1" ng-click="confirm()" value="确定" />
 	</div>
 </form>

+ 36 - 47
src/main/webapp/resources/view/usercenter/forstore/pay_center.html

@@ -373,39 +373,28 @@
 						<th width="168">操作</th>
 					</thead>
 					<tbody>
-						<tr>
-							<td>中国银行</td>
-							<td>南山支行</td>
-							<td>1256325*******************5621</td>
-							<td>优软*********有限公司</td>
+						<tr ng-repeat="account in accounts">
+							<td ng-bind="account.bankname">中国银行</td>
+							<td ng-bind="account.branchname">南山支行</td>
+							<td ng-bind="account.number | hideBankFilter">1256325*******************5621</td>
+							<td ng-bind="account.accountname">优软*********有限公司</td>
 							<td class="operate-area">
-								<a>删除</a>
-								<span class="mall-btn-submit">默认账户</span>
-								<!--<span class="mall-btn-warn">设为默认</span>-->
-							</td>
-						</tr>
-						<tr>
-							<td>中国银行</td>
-							<td>南山支行</td>
-							<td>1256325*******************5621</td>
-							<td>优软*********有限公司</td>
-							<td class="operate-area">
-								<a>删除</a>
-								<!--<span class="mall-btn-submit">默认账户</span>-->
-								<span class="mall-btn-warn">设为默认</span>
+								<a ng-click="showDeleteFrame(account)">删除</a>
+								<span class="mall-btn-submit" ng-if="account.num == 1">默认账户</span>
+								<span class="mall-btn-warn" ng-click="setDefaultAccount(account.id)" ng-if="account.num != 1">设为默认</span>
 							</td>
 						</tr>
 					</tbody>
 				</table>
-				<div class="com-del-box">
+				<div class="com-del-box" ng-if="showDelete">
 					<div class="title">
-						<i></i>
+						<i ng-click="cancelDelete()"></i>
 					</div>
 					<div class="content">
 						<p><i class="fa fa-exclamation-circle"></i>是否要删除此账户信息?</p>
 						<div>
-							<a>取消</a>
-							<a>确认</a>
+							<a ng-click="cancelDelete()">取消</a>
+							<a ng-click="deleteAccount()">确认</a>
 						</div>
 					</div>
 				</div>
@@ -419,7 +408,7 @@
 							<div class="data-input">
 								<input type="text" ng-model="startDate"
 									   class="form-control select-adder" placeholder="起始时间"
-									   datepicker-popup="yyyy-MM-dd HH:mm:ss"
+									   datepicker-popup="yyyy-MM-dd"
 									   is-open="condition.startDateOpen"
 									   max-date="endDate" current-text="今天" clear-text="清除" close-text="关闭"
 									   datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
@@ -432,7 +421,7 @@
 							<div class="data-input">
 								<input type="text" ng-model="endDate"
 									   class="form-control select-adder" placeholder="结束时间"
-									   datepicker-popup="yyyy-MM-dd HH:mm:ss"
+									   datepicker-popup="yyyy-MM-dd"
 									   is-open="condition.endDateOpen"
 									   min-date="startDate" current-text="今天" clear-text="清除" close-text="关闭"
 									   datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
@@ -443,8 +432,8 @@
 						</div>
 						<div class="sreach-input fr">
 							<input type="search" placeholder="商家名称/订单号" class="form-control" ng-model="keyword" ng-search="search()"/>
-							<a class="seek" href="javascript:void(0)" ng-click="search()">搜索</a>
-							<a class="seek" href="javascript:void(0)" style="margin-left: 5px;">导出</a>
+							<a class="seek" ng-click="search()">搜索</a>
+							<a class="seek" ng-click="exportToExcel()" style="margin-left: 5px;">导出</a>
 						</div>
 					</div>
 				</div>
@@ -454,41 +443,37 @@
 						<span>订单号</span>
 						<span>商家名称</span>
 						<span>
-							<select class="form-control select-adder">
-								<option>币种</option>
-								<option value="1">RMB</option>
-								<option value="2">USD</option>
+							<select class="form-control select-adder" ng-model="currency" ng-change="filterLoad()">
+								<option value="ALL">币种</option>
+								<option value="RMB">RMB</option>
+								<option value="USD">USD</option>
 							</select>
 						</span>
 						<span>金额</span>
 						<span>
-							<select class="form-control select-adder" style="width: 90px">
-								<option>交易方式</option>
-								<option value="1">RMB</option>
-								<option value="2">USD</option>
+							<select class="form-control select-adder" style="width: 90px" ng-model="paytype" ng-change="filterLoad()">
+								<option value="ALL">交易方式</option>
+								<option value="1102">线上支付</option>
+								<option value="1103">线下支付</option>
 							</select>
 						</span>
 						<span>
-							<select class="form-control select-adder">
+							<select class="form-control select-adder" style="width: 90px">
 								<option>状态</option>
-								<option value="1">RMB</option>
-								<option value="2">USD</option>
+								<option value="1">支付成功</option>
 							</select>
 						</span>
 					</dt>
-					<dd ng-repeat="tradeRecord in tradeRecordPage.content">
-						<span ng-bind="tradeRecord.paytime | date : 'yyyy.MM.dd'">2017.01.18</span>
+					<dd ng-repeat="tradeRecord in tradeRecordPage">
+						<span ng-bind="tradeRecord.paytime | date : 'yyyy-MM-dd HH:mm:ss'">2017.01.18</span>
 						<span><a ng-bind="tradeRecord.orderid" ng-href="user#/order/detail/{{tradeRecord.orderid | EncryptionFilter}}">20170116001</a></span>
+						<span ng-bind="tradeRecord.sellername">优软科技</span>
+						<span ng-bind="tradeRecord.currencyName"></span>
 						<span ng-bind="tradeRecord.ensurePrice | formateNumber : 2 | currencySysmbol : tradeRecord.currencyName"></span>
 						<span>
 							<b ng-if="tradeRecord.paytype == 1102">线上支付</b>
 							<b ng-if="tradeRecord.paytype == 1103">线下支付</b>
 						</span>
-						<span>
-							<b ng-if="tradeRecord.paytype == 1102">优软商城线上账户</b>
-							<b ng-if="tradeRecord.paytype == 1103">优软商城线下账户</b>
-						</span>
-						<span><b>支付成功</b></span>
 						<span><b>支付成功</b></span>
 					</dd>
 					<!--<dd>
@@ -499,7 +484,7 @@
 						<span>12345678909</span>
 						<span><em>退款成功</em></span>
 					</dd>-->
-					<dd ng-if="!tradeRecordPage.content || tradeRecordPage.content.length == 0" class="tab-dd" style="height: 125px; padding: 30px;">
+					<dd ng-if="!tradeRecordPage || tradeRecordPage.length == 0" class="tab-dd" style="height: 125px; padding: 30px;">
 						<div class="col-xs-offset-3 col-xs-2">
 							<img src="static/img/all/empty-cart.png">
 						</div>
@@ -508,7 +493,11 @@
 							<a href=".">马上去逛一逛</a>&nbsp;<i class="fa fa-arrow-right"></i>
 						</div>
 					</dd>
+
 				</dl>
+				<div style="text-align: right;margin-right:20px;">
+					<span class="count-tip">显示 {{$$record.start}}-{{$$record.end}} 条,共 <em ng-bind="$$record.totalElements" style="color: #5078cb">2506</em> 条</span>
+				</div>
                 <!--<p class="height16">&nbsp</p>-->
                 <div style="background-color: white; width: 100%; height: 75px;">
                     <div class="ng-cloak ng-table-pager" ng-if="pages.length" style="float: right;margin-right: 60px;">
@@ -519,7 +508,7 @@
                                 <a ng-switch-when="page" ng-click="setPage(page.type, page.number)" href=""><span ng-bind="page.number"></span></a>
                                 <a ng-switch-when="more" ng-click="setPage(page.type, -1)" href="">&#8230;</a>
                                 <a ng-switch-when="last" ng-click="setPage(page.type, page.number)" href=""><span ng-bind="page.number"></span></a>
-                                <a ng-switch-when="next" ng-click="setPage(page.type, -1)" href="">&raquo;</a>
+                                <a ng-switch-when="next" ng-click="setPage(page.type, -1)" href="" style="font-size: 12px;">&raquo;</a>
                             </li>
                         </ul>
                         <div class="page-go-block">