Просмотр исходного кода

1:调整分期付款的功能
2:增加批量上架打印的语句。

yujia 7 лет назад
Родитель
Сommit
c4fa54eddf

+ 2 - 2
src/main/java/com/uas/platform/b2c/fa/payment/service/impl/InstallmentServiceImpl.java

@@ -341,9 +341,9 @@ public class InstallmentServiceImpl implements InstallmentService{
     ResultMap validateInstallmentStore() {
     ResultMap validateInstallmentStore() {
         InstallmentStore installmentStore = installmentStoreDao.findByEnuuAndEnable(SystemSession.getUser().getEnterprise().getUu(), (short) 1);
         InstallmentStore installmentStore = installmentStoreDao.findByEnuuAndEnable(SystemSession.getUser().getEnterprise().getUu(), (short) 1);
         if (installmentStore == null) {
         if (installmentStore == null) {
-            return new ResultMap(CodeType.NO_AUTHORITY.code(), "当前企业没有设置分期功能权限,如有需要请联系客服");
+            return ResultMap.success(null);
         }
         }
-        return ResultMap.success(null);
+        return new ResultMap(CodeType.NO_AUTHORITY.code(), "当前企业没有设置分期功能权限,如有需要请联系客服");
     }
     }
 
 
     /**
     /**

+ 2 - 2
src/main/java/com/uas/platform/b2c/fa/payment/service/impl/InstallmentStoreServiceImpl.java

@@ -90,9 +90,9 @@ public class InstallmentStoreServiceImpl implements InstallmentStoreService{
 
 
         InstallmentStore installmentStore = installmentStoreDao.findByEnuuAndEnable(SystemSession.getUser().getEnterprise().getUu(), (short) 1);
         InstallmentStore installmentStore = installmentStoreDao.findByEnuuAndEnable(SystemSession.getUser().getEnterprise().getUu(), (short) 1);
         if (installmentStore == null) {
         if (installmentStore == null) {
-            return "success";
-        } else {
             return "fail";
             return "fail";
+        } else {
+            return "success";
         }
         }
     }
     }
 }
 }

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

@@ -18,6 +18,7 @@ import com.uas.platform.b2c.prod.commodity.model.*;
 import com.uas.platform.b2c.prod.commodity.service.GoodsService;
 import com.uas.platform.b2c.prod.commodity.service.GoodsService;
 import com.uas.platform.b2c.prod.commodity.service.ReleaseProductByBatchService;
 import com.uas.platform.b2c.prod.commodity.service.ReleaseProductByBatchService;
 import com.uas.platform.b2c.prod.commodity.util.GoodsUtil;
 import com.uas.platform.b2c.prod.commodity.util.GoodsUtil;
+import com.uas.platform.b2c.prod.commodity.util.SheetUtil;
 import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
 import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
 import com.uas.platform.b2c.prod.store.model.StoreIn;
 import com.uas.platform.b2c.prod.store.model.StoreIn;
 import com.uas.platform.b2c.prod.store.model.StoreStatus;
 import com.uas.platform.b2c.prod.store.model.StoreStatus;
@@ -144,7 +145,7 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 				throw new IllegalOperatorException("表格模板不正确!请重新下载最新模板");
 				throw new IllegalOperatorException("表格模板不正确!请重新下载最新模板");
 			}
 			}
 		}
 		}
-		int rowNum = sheet.getLastRowNum();
+		int rowNum = SheetUtil.getSheetLastNum(sheet, UploadConstant.MAX_TOTAL_COLUMN);
 		if (rowNum > 2000) {
 		if (rowNum > 2000) {
 			throw new IllegalOperatorException
 			throw new IllegalOperatorException
 					("您上传的信息超过2000条,请拆分成2000以下再上传");
 					("您上传的信息超过2000条,请拆分成2000以下再上传");
@@ -155,6 +156,8 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 		Row headerRow = sheet.getRow(0);
 		Row headerRow = sheet.getRow(0);
 		int total = 0;
 		int total = 0;
 		int blankNum = 0;
 		int blankNum = 0;
+		long time1 = new Date().getTime();
+		System.err.println();
 		if (headerRow != null) {
 		if (headerRow != null) {
 			// 验证模板是否为商城模板
 			// 验证模板是否为商城模板
 			validateTemplate(headerRow, colNum, currency, isAPerson);
 			validateTemplate(headerRow, colNum, currency, isAPerson);
@@ -202,11 +205,15 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 				}
 				}
 			}
 			}
 		}
 		}
+		long time2 = new Date().getTime();
+		System.err.println((time2 - time1) + "**********************************1");
 		Long userUU = SystemSession.getUser().getUserUU();
 		Long userUU = SystemSession.getUser().getUserUU();
 		Long enUU = SystemSession.getUser().getEnterprise().getUu();
 		Long enUU = SystemSession.getUser().getEnterprise().getUu();
 		List<ReleaseProductByBatch> addList = new ArrayList<>(releaseProductByBatchs.size());
 		List<ReleaseProductByBatch> addList = new ArrayList<>(releaseProductByBatchs.size());
 		addList.addAll(releaseProductByBatchs);
 		addList.addAll(releaseProductByBatchs);
 		resetRepeatData(addList, isImport, isAPerson);
 		resetRepeatData(addList, isImport, isAPerson);
+		long time3 = new Date().getTime();
+		System.err.println((time3 - time2) + "**********************************2");
 		if (isAPerson) {
 		if (isAPerson) {
 			for (ReleaseProductByBatch releaseProductByBatch : addList) {
 			for (ReleaseProductByBatch releaseProductByBatch : addList) {
 				List<Product> productList = productDao.findByEnUUAndPcmpcodeAndPbrandenAndB2cEnabled(enUU,releaseProductByBatch.getB2cCode(),
 				List<Product> productList = productDao.findByEnUUAndPcmpcodeAndPbrandenAndB2cEnabled(enUU,releaseProductByBatch.getB2cCode(),
@@ -222,12 +229,23 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 				}
 				}
 			}
 			}
 		}
 		}
+		long time4 = new Date().getTime();
+		System.err.println((time4 - time3) + "**********************************3");
 		commonDao.save(addList, ReleaseProductByBatch.class);
 		commonDao.save(addList, ReleaseProductByBatch.class);
-
+		long time5 = new Date().getTime();
+		System.err.println((time5 - time4) + "**********************************4");
 		releaseProductByBatchDao.callValidProcedure(enUU, batch);
 		releaseProductByBatchDao.callValidProcedure(enUU, batch);
+		long time6 = new Date().getTime();
+		System.err.println((time6 - time5) + "**********************************5");
 		Integer filter = releaseProductByBatchDao.getCountOfImportFail(userUU, batch, failCode);
 		Integer filter = releaseProductByBatchDao.getCountOfImportFail(userUU, batch, failCode);
+		long time7 = new Date().getTime();
+		System.err.println((time7 - time6) + "**********************************6");
 		Integer failure = releaseProductByBatchDao.getCountPublisherUuAndBatchAndReleaseCode(userUU, batch, ReleaseStatus.failure.value());
 		Integer failure = releaseProductByBatchDao.getCountPublisherUuAndBatchAndReleaseCode(userUU, batch, ReleaseStatus.failure.value());
+		long time8 = new Date().getTime();
+		System.err.println((time8 - time7) + "**********************************7");
 		Integer success = releaseProductByBatchDao.getCountPublisherUuAndBatchAndReleaseCode(userUU, batch, ReleaseStatus.success.value());
 		Integer success = releaseProductByBatchDao.getCountPublisherUuAndBatchAndReleaseCode(userUU, batch, ReleaseStatus.success.value());
+		long time9 = new Date().getTime();
+		System.err.println((time9 - time8) + "**********************************8");
 		modelMap.put("total", total);
 		modelMap.put("total", total);
 		modelMap.put("success", success);
 		modelMap.put("success", success);
 		modelMap.put("failure", failure);
 		modelMap.put("failure", failure);

+ 44 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/util/SheetUtil.java

@@ -0,0 +1,44 @@
+package com.uas.platform.b2c.prod.commodity.util;
+
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+
+/**
+ * 表格的工具类
+ *
+ * @author yuj 2018-05-30 20:36
+ */
+public class SheetUtil {
+
+    /**
+     *
+     * @param sheet 表格信息
+     * @param i 前多少列不能为空
+     * @return 存在多少有效的行数
+     */
+    public static int getSheetLastNum(Sheet sheet, int i) {
+        if (sheet == null) {
+            return 0;
+        } else {
+            int lastRowNum = sheet.getLastRowNum();
+            Boolean flag = true;
+            while (flag) {
+                Row row = sheet.getRow(lastRowNum);
+                if (row != null) {
+                    for (int j = 0; j <= i; j++) {
+                        Cell cell = row.getCell(j);
+                        if ((cell != null) && (cell.getCellType() != Cell.CELL_TYPE_BLANK)) {
+                            flag = false;
+                            break;
+                        }
+                    }
+                }
+                if (flag) {
+                    --lastRowNum;
+                }
+            }
+            return lastRowNum;
+        }
+    }
+}

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

@@ -1,10 +1,5 @@
 package com.uas.platform.b2c.trade.order.service.impl;
 package com.uas.platform.b2c.trade.order.service.impl;
 
 
-import static com.uas.platform.b2c.trade.aftersale.model.AfterSaleStatus.BUYER_TO_MALL;
-import static com.uas.platform.b2c.trade.aftersale.model.AfterSaleStatus.MALL_TO_SUP;
-import static com.uas.platform.b2c.trade.aftersale.model.AfterSaleStatus.SUP_TO_MALL;
-import static com.uas.platform.b2c.trade.util.Preconditions.checkNotNull;
-
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.api.b2c_erp.buyer.model.B2cOrder;
 import com.uas.api.b2c_erp.buyer.model.B2cOrder;
@@ -39,12 +34,7 @@ import com.uas.platform.b2c.logistics.dao.AddressDao;
 import com.uas.platform.b2c.logistics.dao.InvoiceFOrderDao;
 import com.uas.platform.b2c.logistics.dao.InvoiceFOrderDao;
 import com.uas.platform.b2c.logistics.dao.InvoiceFPurchaseDao;
 import com.uas.platform.b2c.logistics.dao.InvoiceFPurchaseDao;
 import com.uas.platform.b2c.logistics.dao.PickUpAddressDao;
 import com.uas.platform.b2c.logistics.dao.PickUpAddressDao;
-import com.uas.platform.b2c.logistics.model.Address;
-import com.uas.platform.b2c.logistics.model.InvoiceFOrder;
-import com.uas.platform.b2c.logistics.model.InvoiceFOrderDetail;
-import com.uas.platform.b2c.logistics.model.InvoiceFPurchase;
-import com.uas.platform.b2c.logistics.model.InvoiceFPurchaseDetail;
-import com.uas.platform.b2c.logistics.model.PickUpAddress;
+import com.uas.platform.b2c.logistics.model.*;
 import com.uas.platform.b2c.logistics.service.InvoiceFPurchaseService;
 import com.uas.platform.b2c.logistics.service.InvoiceFPurchaseService;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsHistoryDao;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsHistoryDao;
@@ -69,14 +59,7 @@ import com.uas.platform.b2c.trade.order.dao.OrderDao;
 import com.uas.platform.b2c.trade.order.dao.OrderDetailDao;
 import com.uas.platform.b2c.trade.order.dao.OrderDetailDao;
 import com.uas.platform.b2c.trade.order.dao.OrderIndexDetailDao;
 import com.uas.platform.b2c.trade.order.dao.OrderIndexDetailDao;
 import com.uas.platform.b2c.trade.order.dao.PurchaseDao;
 import com.uas.platform.b2c.trade.order.dao.PurchaseDao;
-import com.uas.platform.b2c.trade.order.model.Order;
-import com.uas.platform.b2c.trade.order.model.OrderDetail;
-import com.uas.platform.b2c.trade.order.model.OrderIndex;
-import com.uas.platform.b2c.trade.order.model.OrderIndexDetail;
-import com.uas.platform.b2c.trade.order.model.OrderSimpleInfo;
-import com.uas.platform.b2c.trade.order.model.Purchase;
-import com.uas.platform.b2c.trade.order.model.PurchaseDetail;
-import com.uas.platform.b2c.trade.order.model.TradeProofing;
+import com.uas.platform.b2c.trade.order.model.*;
 import com.uas.platform.b2c.trade.order.service.OrderDetailService;
 import com.uas.platform.b2c.trade.order.service.OrderDetailService;
 import com.uas.platform.b2c.trade.order.service.OrderService;
 import com.uas.platform.b2c.trade.order.service.OrderService;
 import com.uas.platform.b2c.trade.order.service.PurchaseService;
 import com.uas.platform.b2c.trade.order.service.PurchaseService;
@@ -106,22 +89,6 @@ import com.uas.platform.core.util.serializer.FlexJsonUtils;
 import com.uas.search.model.BaseOrder;
 import com.uas.search.model.BaseOrder;
 import com.uas.search.model.PageParams;
 import com.uas.search.model.PageParams;
 import com.uas.search.model.SPage;
 import com.uas.search.model.SPage;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Collections;
-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.Objects;
-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 org.apache.commons.collections.map.HashedMap;
 import org.apache.commons.collections.map.HashedMap;
 import org.apache.commons.lang.time.DateUtils;
 import org.apache.commons.lang.time.DateUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeanUtils;
@@ -135,6 +102,15 @@ import org.springframework.ui.ModelMap;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 
 
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.*;
+
+import static com.uas.platform.b2c.trade.aftersale.model.AfterSaleStatus.*;
+import static com.uas.platform.b2c.trade.util.Preconditions.checkNotNull;
+
 /**
 /**
  * 订单业务实现类
  * 订单业务实现类
  *
  *
@@ -1406,7 +1382,7 @@ public class OrderServiceImpl implements OrderService {
             throw new IllegalOperatorException("此订单不存在,请重新确认订单信息");
             throw new IllegalOperatorException("此订单不存在,请重新确认订单信息");
 
 
         // 分期付款目前只支持直接付款给卖家
         // 分期付款目前只支持直接付款给卖家
-        if (order.getInstallmentId() != null)
+        if ((order.getInstallmentId() != null)&&(order.getInstallment().getStatus().intValue() != Status.TOBEPAID.value()))
             throw new IllegalOperatorException("此订单为直接付款给卖家,平台不可确认收款,请重新确认订单信息");
             throw new IllegalOperatorException("此订单为直接付款给卖家,平台不可确认收款,请重新确认订单信息");
 
 
         if (order.getStatus().intValue() != Status.PAID.value()
         if (order.getStatus().intValue() != Status.PAID.value()

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

@@ -412,6 +412,7 @@ define([ 'app/app' ], function(app) {
 
 
 			modalInstance.result.then(function(account) {
 			modalInstance.result.then(function(account) {
 				$scope.buyAccount = account;
 				$scope.buyAccount = account;
+				$scope.buyAccount.filterAccount = $filter('hideBankFilter')(account.number);
 			}, function() {
 			}, function() {
 
 
 			});
 			});
@@ -613,12 +614,23 @@ define([ 'app/app' ], function(app) {
 		}
 		}
 
 
 		$scope.onDiliverPriceChange = function (index) {
 		$scope.onDiliverPriceChange = function (index) {
+			if ($scope.yesPayinstallmentEnter) {
+				return ;
+			}
 			if (!($scope.diliverPrice[index] > 0)) {
 			if (!($scope.diliverPrice[index] > 0)) {
 				$scope.diliverPrice[index] = '';
 				$scope.diliverPrice[index] = '';
-				toaster.pop('info', '提示', '分期金额必须大于0');
+				toaster.pop('info', '提示', '请输入付款金额对应的付款截图');
 			}
 			}
 		}
 		}
 
 
+		$scope.yesPayinstallmentEnter = function () {
+			$scope.yesPayinstallmentEnter = true;
+		}
+
+		$scope.yesPayinstallmentLeave = function() {
+			$scope.yesPayinstallmentEnter = false;
+		}
+
 
 
 		$scope.confirm = function() {
 		$scope.confirm = function() {
 			var imageArray = [];
 			var imageArray = [];
@@ -634,8 +646,11 @@ define([ 'app/app' ], function(app) {
 						}
 						}
 						imageArray.push($scope.imagesList[i].imageUrl);
 						imageArray.push($scope.imagesList[i].imageUrl);
 					} else if ($scope.type == "PAIDTOVENDOR" && $scope.imagesList[i].imageUrl == '') {
 					} else if ($scope.type == "PAIDTOVENDOR" && $scope.imagesList[i].imageUrl == '') {
-						toaster.pop('info','提示','请输入付款金额对应的付款截图');
-						return;
+						if ($scope.diliverPrice[i] != '') {
+							toaster.pop('info','提示','请输入付款金额对应的付款截图');
+							return;
+						}
+
 					}
 					}
 				}
 				}
 			}
 			}

+ 12 - 0
src/main/webapp/resources/js/vendor/controllers/forstore/purchase_detail.js

@@ -144,6 +144,9 @@ define(['app/app'], function(app) {
 		}
 		}
 		// 监控价格
 		// 监控价格
 		$scope.changeInstallmentPrice = function (item, price, index) {
 		$scope.changeInstallmentPrice = function (item, price, index) {
+            if ($scope.saveInstallmentEnter) {
+                return ;
+            }
 			if (price == '') {
 			if (price == '') {
 				toaster.pop('warning', '提示', '支付金额不能为空');
 				toaster.pop('warning', '提示', '支付金额不能为空');
 			} else if (isNaN(price)) {
 			} else if (isNaN(price)) {
@@ -220,6 +223,14 @@ define(['app/app'], function(app) {
 				$scope.totalPrice += Number(item.price);
 				$scope.totalPrice += Number(item.price);
 			})
 			})
 		};
 		};
+
+		$scope.saveInstallmentLeave = function() {
+            $scope.saveInstallmentEnter = false;
+        }
+
+        $scope.saveInstallmentEnter = function() {
+            $scope.saveInstallmentEnter = true;
+        }
 		// 保存分期付款
 		// 保存分期付款
 		$scope.saveInstallment = function (installmentDetails) {
 		$scope.saveInstallment = function (installmentDetails) {
 			// if(!$scope.changeBlurDeadline(installmentDetails)){
 			// if(!$scope.changeBlurDeadline(installmentDetails)){
@@ -229,6 +240,7 @@ define(['app/app'], function(app) {
 			for (var i = 0; i < installmentDetails.length; i++) {
 			for (var i = 0; i < installmentDetails.length; i++) {
 				if (!installmentDetails[i].price) {
 				if (!installmentDetails[i].price) {
 					toaster.pop('warning', '提示', '支付金额不能为空');
 					toaster.pop('warning', '提示', '支付金额不能为空');
+                    return ;
 				}
 				}
 				if (!installmentDetails[i].deadline) {
 				if (!installmentDetails[i].deadline) {
 					toaster.pop('warning', '提示', '付款时间不能为空');
 					toaster.pop('warning', '提示', '付款时间不能为空');

+ 1 - 1
src/main/webapp/resources/view/admin/trade/trade_order.html

@@ -209,7 +209,7 @@
 							<td class="text-center">{{order.status | statusAndTypeFilter}}</td>
 							<td class="text-center">{{order.status | statusAndTypeFilter}}</td>
 							<td class="text-center">
 							<td class="text-center">
 								<a ng-if="order.status==504 || order.status==503" ng-show="active=='tobereceived'" style="position: relative;">
 								<a ng-if="order.status==504 || order.status==503" ng-show="active=='tobereceived'" style="position: relative;">
-									<button type="button" ng-if="order.status==504 && !order.installmentId" class="btn btn-default btn-sm" ng-click="ensurePay(order)">确认收款</button>
+									<button type="button" ng-if="(order.status==504 && !order.installmentId) || (order.status==504 && order.installmentId && order.installment.status==503)" class="btn btn-default btn-sm" ng-click="ensurePay(order)">确认收款</button>
 									<button ng-if="order.status==504" type="button" class="btn btn-default btn-sm" ng-click="showAuditFailureModal(order)">审核不通过</button>
 									<button ng-if="order.status==504" type="button" class="btn btn-default btn-sm" ng-click="showAuditFailureModal(order)">审核不通过</button>
 									<div class="audit-failure-modal" ng-if="order.dislayModal">
 									<div class="audit-failure-modal" ng-if="order.dislayModal">
 										<div class="title">审核不通过的原因</div>
 										<div class="title">审核不通过的原因</div>

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

@@ -60,7 +60,7 @@
 						<div ng-if="type == 'PAIDTOVENDOR'" ng-bind="salePerAccount.bankname" title="{{salePerAccount.bankname}}" class="word-in-10"></div>
 						<div ng-if="type == 'PAIDTOVENDOR'" ng-bind="salePerAccount.bankname" title="{{salePerAccount.bankname}}" class="word-in-10"></div>
 						<div ng-if="type == 'PAIDTOVENDOR'" ng-bind="salePerAccount.number"></div>
 						<div ng-if="type == 'PAIDTOVENDOR'" ng-bind="salePerAccount.number"></div>
 						<div ng-if="type == 'PAIDTOVENDOR'" ng-bind="salePerAccount.accountname"></div>
 						<div ng-if="type == 'PAIDTOVENDOR'" ng-bind="salePerAccount.accountname"></div>
-						<div ng-if="!salePerAccount || salePerAccount == null"><i class="fa fa-exclamation-circle" style="color: #5078cb;margin-right: 5px;"></i>尚未选择收款账户,请联系卖家处理</div>
+						<div ng-if="!salePerAccount || salePerAccount == null"><i class="fa fa-exclamation-circle" style="color: #5078cb;margin-right: 5px;"></i>卖家尚未设置收款账户,请联系卖家处理</div>
 					</li>
 					</li>
 				</ul>
 				</ul>
 			</div>
 			</div>
@@ -170,7 +170,7 @@
 			</div>
 			</div>
 			<div class="row" style="margin-top: 0;">
 			<div class="row" style="margin-top: 0;">
 				<div class="deal-btn">
 				<div class="deal-btn">
-					<a ng-click="confirm()" class="ok">确认</a>
+					<a ng-click="confirm()" class="ok" ng-mouseenter="yesPayinstallmentEnter()" ng-mouseleave="yesPayinstallmentLeave()">确认</a>
 					<a ng-click="loadPage()" class="off">取消</a>
 					<a ng-click="loadPage()" class="off">取消</a>
 				</div>
 				</div>
 			</div>
 			</div>

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

@@ -832,7 +832,7 @@
 							<span class="deal-btn" ng-if="purchase.installment.status == 503">
 							<span class="deal-btn" ng-if="purchase.installment.status == 503">
 								<button ng-click="editInstallment()" ng-if="(purchase.status == 503 || purchase.status == 501) && purchase.installment.installmentDetails.length == $index+1 && !editBox" class="ok" style="float: right;">编辑</button>
 								<button ng-click="editInstallment()" ng-if="(purchase.status == 503 || purchase.status == 501) && purchase.installment.installmentDetails.length == $index+1 && !editBox" class="ok" style="float: right;">编辑</button>
 								<button ng-click="cancelEdit()" class="off" ng-if="purchase.installment.installmentDetails.length == $index+1 && editBox">取消</button>
 								<button ng-click="cancelEdit()" class="off" ng-if="purchase.installment.installmentDetails.length == $index+1 && editBox">取消</button>
-								<button ng-click="updateInstallment(purchase.installment)" class="ok" ng-if="purchase.installment.installmentDetails.length == $index+1 && editBox">保存</button>
+								<button ng-click="updateInstallment(purchase.installment)" class="ok" ng-if="purchase.installment.installmentDetails.length == $index+1 && editBox" ng-mouseleave="saveInstallmentLeave()" ng-mouseenter="saveInstallmentEnter()">保存</button>
 							</span>
 							</span>
 						</li>
 						</li>
 						<li ng-repeat="item in installmentDetails" class="line" ng-if="!installmentBox">
 						<li ng-repeat="item in installmentDetails" class="line" ng-if="!installmentBox">