Browse Source

git-svn-id: svn+ssh://10.10.101.21/source/platform/platform-b2b@743 f3bf4e98-0cf0-11e4-a00c-a99a8b9d557d

administrator 11 years ago
parent
commit
fe3f59f61f

+ 5 - 4
src/main/java/com/uas/platform/b2b/controller/SaleInquiryController.java

@@ -13,7 +13,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
 
-import com.uas.platform.b2b.model.PurchaseInquiry;
 import com.uas.platform.b2b.model.PurchaseInquiryItem;
 import com.uas.platform.b2b.service.PurchaseInquiryService;
 import com.uas.platform.b2b.support.SystemSession;
@@ -112,7 +111,7 @@ public class SaleInquiryController {
 	 */
 	@RequestMapping(value = "/{id}", method = RequestMethod.GET)
 	@ResponseBody
-	public PurchaseInquiry getReceivedPurchaseOrderItemById(@PathVariable("id") Long id) {
+	public List<PurchaseInquiryItem> getReceivedPurchaseOrderItemById(@PathVariable("id") Long id) {
 		return purchaseInquiryService.findById(id);
 	}
 
@@ -124,7 +123,8 @@ public class SaleInquiryController {
 	 * @return
 	 */
 	@RequestMapping(value = "/items/{inquiryItemId}/reply", method = RequestMethod.POST)
-	public ResponseEntity<String> replyInquiryItem(@RequestBody String json, @PathVariable("inquiryItemId") Long inquiryItemId) {
+	public ResponseEntity<String> replyInquiryItem(@RequestBody String json,
+			@PathVariable("inquiryItemId") Long inquiryItemId) {
 		PurchaseInquiryItem item = FlexJsonUtils.fromJson(json, PurchaseInquiryItem.class);
 		item = purchaseInquiryService.reply(item);
 		logger.log("客户询价单", "给单个客户询价明细填写价格并确认报价", item.replyDescription(), item.getInquiry().getCode(), inquiryItemId);
@@ -139,7 +139,8 @@ public class SaleInquiryController {
 	 * @return
 	 */
 	@RequestMapping(value = "/items/{inquiryItemId}", method = RequestMethod.POST)
-	public ResponseEntity<String> saveInquiryItem(@RequestBody String json, @PathVariable("inquiryItemId") Long inquiryItemId) {
+	public ResponseEntity<String> saveInquiryItem(@RequestBody String json,
+			@PathVariable("inquiryItemId") Long inquiryItemId) {
 		PurchaseInquiryItem item = FlexJsonUtils.fromJson(json, PurchaseInquiryItem.class);
 		item = purchaseInquiryService.save(item);
 		logger.log("客户询价单", "给单个客户询价明细填写价格", item.replyDescription(), item.getInquiry().getCode(), inquiryItemId);

+ 14 - 2
src/main/java/com/uas/platform/b2b/dao/PurchaseInquiryItemDao.java

@@ -11,7 +11,8 @@ import org.springframework.stereotype.Repository;
 import com.uas.platform.b2b.model.PurchaseInquiryItem;
 
 @Repository
-public interface PurchaseInquiryItemDao extends JpaSpecificationExecutor<PurchaseInquiryItem>, JpaRepository<PurchaseInquiryItem, Long> {
+public interface PurchaseInquiryItemDao extends JpaSpecificationExecutor<PurchaseInquiryItem>,
+		JpaRepository<PurchaseInquiryItem, Long> {
 
 	/**
 	 * 按卖家企业ID和明细传到卖家ERP状态查找询价明细
@@ -22,6 +23,16 @@ public interface PurchaseInquiryItemDao extends JpaSpecificationExecutor<Purchas
 	 */
 	List<PurchaseInquiryItem> findByVendUUAndSendStatus(long vendUU, short sendStatus);
 
+	/**
+	 * 按卖家企业ID和询价主记录ID查找
+	 * 
+	 * @param vendUU
+	 * @param inquiryId
+	 * @return
+	 */
+	@Query("from PurchaseInquiryItem d where d.vendUU = :vendUU and d.inquiry.id = :inquiryId")
+	List<PurchaseInquiryItem> findByVendUUAndInquiry(@Param("vendUU") long vendUU, @Param("inquiryId") long inquiryId);
+
 	/**
 	 * 按买家企业ID和明细传报价状态查找询价明细
 	 * 
@@ -41,7 +52,8 @@ public interface PurchaseInquiryItemDao extends JpaSpecificationExecutor<Purchas
 	 * @return
 	 */
 	@Query("from PurchaseInquiryItem d where d.inquiry.enUU = :enUU and d.inquiry.code = :code and d.number = :number")
-	List<PurchaseInquiryItem> findByEnUUAndCodeAndNumber(@Param("enUU") long enUU, @Param("code") String code, @Param("number") short number);
+	List<PurchaseInquiryItem> findByEnUUAndCodeAndNumber(@Param("enUU") long enUU, @Param("code") String code,
+			@Param("number") short number);
 
 	/**
 	 * 按卖家企业ID和询价明细的报价信息传到卖家ERP的状态查找询价明细

+ 1 - 2
src/main/java/com/uas/platform/b2b/service/PurchaseInquiryService.java

@@ -6,7 +6,6 @@ import org.springframework.data.domain.Page;
 
 import com.uas.platform.b2b.erp.model.QuotationDown;
 import com.uas.platform.b2b.model.Attach;
-import com.uas.platform.b2b.model.PurchaseInquiry;
 import com.uas.platform.b2b.model.PurchaseInquiryItem;
 import com.uas.platform.core.model.PageInfo;
 
@@ -42,7 +41,7 @@ public interface PurchaseInquiryService {
 	 * @param id
 	 * @return
 	 */
-	public PurchaseInquiry findById(Long id);
+	public List<PurchaseInquiryItem> findById(Long id);
 
 	/**
 	 * 用询价单明细ID查找询价单明细

+ 22 - 22
src/main/java/com/uas/platform/b2b/service/impl/PurchaseInquiryServiceImpl.java

@@ -58,11 +58,12 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 			PurchaseInquiry inquiry = item.getInquiry();
 			if (item.getVendUserUU() != null) {
 				// Android
-				XingePusher.pushSingleAccountAndroid(item.getVendUserUU().toString(), "新增一条客户询价-", "单号:" + inquiry.getCode() + ",客户:"
-						+ inquiry.getEnterprise().getEnName(), "com.sas.mobile.activity.PurchaseChangeActivity");
+				XingePusher.pushSingleAccountAndroid(item.getVendUserUU().toString(), "新增一条客户询价-",
+						"单号:" + inquiry.getCode() + ",客户:" + inquiry.getEnterprise().getEnName(),
+						"com.sas.mobile.activity.PurchaseChangeActivity");
 				// IOS
-				XingePusher.pushSingleAccountIOS(item.getVendUserUU().toString(), "新增一条客户询价-" + "单号:" + inquiry.getCode() + ",客户:"
-						+ inquiry.getEnterprise().getEnName());
+				XingePusher.pushSingleAccountIOS(item.getVendUserUU().toString(),
+						"新增一条客户询价-" + "单号:" + inquiry.getCode() + ",客户:" + inquiry.getEnterprise().getEnName());
 			}
 		}
 	}
@@ -93,11 +94,12 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 			String tittle = (item.getAgreed() == Constant.YES) ? "客户同意了您的报价" : "客户不同意您的报价";
 			if (item.getVendUserUU() != null) {
 				// Android
-				XingePusher.pushSingleAccountAndroid(item.getVendUserUU().toString(), tittle, "物料:" + item.getProduct().getTitle() + ",客户:"
-						+ inquiry.getEnterprise().getEnName(), "com.sas.mobile.activity.PurchaseChangeActivity");
+				XingePusher.pushSingleAccountAndroid(item.getVendUserUU().toString(), tittle, "物料:"
+						+ item.getProduct().getTitle() + ",客户:" + inquiry.getEnterprise().getEnName(),
+						"com.sas.mobile.activity.PurchaseChangeActivity");
 				// IOS
-				XingePusher.pushSingleAccountIOS(item.getVendUserUU().toString(), tittle + "物料:" + item.getProduct().getTitle() + ",客户:"
-						+ inquiry.getEnterprise().getEnName());
+				XingePusher.pushSingleAccountIOS(item.getVendUserUU().toString(), tittle + "物料:"
+						+ item.getProduct().getTitle() + ",客户:" + inquiry.getEnterprise().getEnName());
 			}
 		}
 	}
@@ -148,11 +150,11 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 					// 消息推送
 					if (userUU != null && userUU != 0) {
 						// Android
-						XingePusher.pushSingleAccountAndroid(userUU.toString(), "询价单回复",
-								"单号:" + item.getInquiry().getCode() + ",第" + item.getNumber() + "行", "");
+						XingePusher.pushSingleAccountAndroid(userUU.toString(), "询价单回复", "单号:"
+								+ item.getInquiry().getCode() + ",第" + item.getNumber() + "行", "");
 						// IOS
-						XingePusher.pushSingleAccountIOS(userUU.toString(),
-								"询价单回复" + "单号:" + item.getInquiry().getCode() + ",第" + item.getNumber() + "行");
+						XingePusher.pushSingleAccountIOS(userUU.toString(), "询价单回复" + "单号:"
+								+ item.getInquiry().getCode() + ",第" + item.getNumber() + "行");
 					}
 				}
 				purchaseInquiryItemDao.save(item);
@@ -206,11 +208,8 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 	}
 
 	@Override
-	public PurchaseInquiry findById(Long id) {
-		List<PurchaseInquiry> inquiries = purchaseInquiryDao.findByVendUUAndId(SystemSession.getUser().getEnterprise().getUu(), id);
-		if (!CollectionUtils.isEmpty(inquiries))
-			return inquiries.get(0);
-		return null;
+	public List<PurchaseInquiryItem> findById(Long id) {
+		return purchaseInquiryItemDao.findByVendUUAndInquiry(SystemSession.getUser().getEnterprise().getUu(), id);
 	}
 
 	@Override
@@ -240,11 +239,11 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 			// 消息推送
 			if (userUU != null && userUU != 0) {
 				// Android
-				XingePusher.pushSingleAccountAndroid(userUU.toString(), "询价单回复",
-						"单号:" + item.getInquiry().getCode() + ",第" + item.getNumber() + "行", "");
+				XingePusher.pushSingleAccountAndroid(userUU.toString(), "询价单回复", "单号:" + item.getInquiry().getCode()
+						+ ",第" + item.getNumber() + "行", "");
 				// IOS
-				XingePusher.pushSingleAccountIOS(userUU.toString(), "询价单回复" + "单号:" + item.getInquiry().getCode() + ",第" + item.getNumber()
-						+ "行");
+				XingePusher.pushSingleAccountIOS(userUU.toString(), "询价单回复" + "单号:" + item.getInquiry().getCode()
+						+ ",第" + item.getNumber() + "行");
 			}
 		}
 		return purchaseInquiryItemDao.save(inquiryItem);
@@ -277,7 +276,8 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 		if (!CollectionUtils.isEmpty(attachs)) {
 			long enUU = SystemSession.getUser().getEnterprise().getUu();
 			for (Attach attach : attachs) {
-				List<PurchaseInquiry> inquiries = purchaseInquiryDao.findByEnUUAndSourceId(enUU, Long.parseLong(attach.getSourceId()));
+				List<PurchaseInquiry> inquiries = purchaseInquiryDao.findByEnUUAndSourceId(enUU,
+						Long.parseLong(attach.getSourceId()));
 				if (!CollectionUtils.isEmpty(inquiries)) {
 					PurchaseInquiry inquiry = inquiries.get(0);
 					attach.setRelativeTable("purc$inquiry");

+ 112 - 0
src/main/webapp/resources/css/index.css

@@ -1145,6 +1145,118 @@ a {
   	background: #fff;
   	z-index: 2;
 }
+/*attach*/
+.global_icon {
+	background: url("../img/merge/full_ico.png") no-repeat bottom right;
+}
+
+.global_icon.larger {
+	height: 118px;
+	width: 118px;
+}
+
+.icon_xls_l {
+	background-position: 0 -855px !important;
+}
+
+.icon_pdf_l {
+	background-position: -120px -735px !important;
+}
+
+.icon_doc_l {
+	background-position: -282px -495px !important;
+}
+
+.icon_txt_l {
+	background-position: -360px -735px !important;
+}
+
+.icon_zip_l {
+	background-position: -120px -855px !important;
+}
+
+.icon_image_l {
+	background-position: -120px -615px !important;
+}
+
+.icon_undefined_l {
+	background-position: 0 -735px;
+}
+
+.attach .item {
+	position: relative;
+	cursor: pointer;
+	width: 180px;
+	height: 180px;
+	border: 1px solid #d6d6d6;
+	margin-bottom: 25px;
+	margin-right: 25px;
+	-webkit-box-shadow: 2px 2px 8px rgba(0, 0, 0, .2);
+	-moz-box-shadow: 2px 2px 8px rgba(0, 0, 0, .2);
+	box-shadow: 2px 2px 8px rgba(0, 0, 0, .2);
+	zoom: 1;
+}
+
+.attach .item .title {
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	width: 100%;
+	height: 30px;
+	line-height: 30px;
+	text-align: center;
+	padding: 0 5px;
+	color: #222;
+	border-top: 1px solid #ccc;
+	background-color: #fff;
+	z-index: 10;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	overflow: hidden;
+}
+
+.attach .item .bg {
+	position: absolute;
+	width: 100%;
+	height: 149px;
+	line-height: 149px;
+	left: 0;
+	top: 0;
+	overflow: hidden;
+	text-align: center;
+	vertical-align: middle;
+	background-color: #f6f6f9;
+	color: #999;
+}
+
+.attach .item .download {
+	position: absolute;
+	left: 0;
+	top: 119px;
+	width: 0;
+	height: 30px;
+	line-height: 30px;
+	background: #090909;
+	opacity: 0;
+	text-align: center;
+	z-index: 99;
+	-webkit-transition: width 0.2s ease-in-out;
+	-moz-transition: width 0.2s ease-in-out;
+	transition: width 0.2s ease-in-out;
+}
+
+.attach .item:hover .download {
+	width: 100%;
+	opacity: .5;
+}
+
+.attach .download a {
+	color: #fff;
+}
+
+.attach .bg .global_icon {
+	margin: 20px auto;
+}
 /*process*/
 .progress.progress-sm {
 	height: 14px;

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


+ 13 - 39
src/main/webapp/resources/js/index/app.js

@@ -69,6 +69,10 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
 			url : "/inquiry",
 			templateUrl : "static/tpl/index/sale/inquiry.html",
 			controller: 'SaleInquiryCtrl'
+		}).state('sale.inquiry_detail', {
+			url : "/inquiry/:id",
+			templateUrl : "static/tpl/index/sale/inquiry_detail.html",
+			controller: 'SaleInquiryDetailCtrl'
 		}).state('sale.quotation', {
 			url : "/quotation",
 			templateUrl : "static/tpl/index/sale/quotation.html",
@@ -93,18 +97,10 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
 			url : "/notice",
 			templateUrl : "static/tpl/index/sale/notice.html",
 			controller: 'SaleNoticeCtrl'
-		}).state('sale.notice_detail', {
-			url : "/notice/:id",
-			templateUrl : "static/tpl/index/sale/notice_detail.html",
-			controller: 'SaleNoticeDetailCtrl'
 		}).state('sale.send', {
 			url : "/send",
 			templateUrl : "static/tpl/index/sale/send.html",
 			controller: 'SaleSendCtrl'
-		}).state('sale.send_detail', {
-			url : "/send/:id",
-			templateUrl : "static/tpl/index/sale/send_detail.html",
-			controller: 'SaleSendDetailCtrl'
 		}).state('sale.forecast', {
 			url : "/forecast",
 			templateUrl : "static/tpl/index/sale/forecast.html",
@@ -872,8 +868,14 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
 	});
 	app.controller('SaleInquiryDetailCtrl', function($scope, $stateParams, PurcInquiry, toaster){
 		var loadData = function() {
-			PurcInquiry.get({id: $stateParams.id}, function(data){
-				$scope.inquiry = data;
+			PurcInquiry.getAll({id: $stateParams.id}, function(data){
+				var inquiry = data[0].inquiry;
+				inquiry.inquiryItems = data;
+				angular.forEach(inquiry.attachs, function(attach){
+					attach.type = attach.name.substr(attach.name.lastIndexOf('.')+1);
+				});
+				console.log(inquiry);
+				$scope.inquiry = inquiry;
 			});
 		};
 		loadData();
@@ -1068,35 +1070,6 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
 			}
 		};	
 	});
-	app.controller('SaleNoticeDetailCtrl', function($scope, $stateParams, PurcNotice, toaster){
-		var loadData = function() {
-			PurcNotice.get({id: $stateParams.id}, function(data){
-				$scope.notice = data;
-			});
-		};
-		loadData();
-		$scope.openDatePicker = function($event, item, openParam) {
-			$event.preventDefault();
-		    $event.stopPropagation();
-		    item[openParam] = !item[openParam];
-		};
-		
-		$scope.onReplyClick = function(notice) {
-			if(!notice.send || !notice.send.qty || notice.send.qty > notice.qty - (notice.endQty || 0)) {
-				toaster.pop('warning', '警告', '数量填写错误!');
-			} else if(!notice.send.code) {
-				toaster.pop('warning', '警告', '请填写发货单号!');
-			} else {
-				var send = {code: notice.send.code, sendItems: [{qty: notice.send.qty}]};
-				PurcNotice.save({id: notice.id}, send, function(){
-					toaster.pop('info', '提示', '发货成功');
-					loadData();
-				}, function(response){
-					toaster.pop('error', '失败', response);
-				});
-			}
-		};
-	});
 	app.controller('SaleNoticeSendByBatchCtrl', function($scope, $modalInstance, Symbol, selectedNotices, PurcNotice, toaster){
 		$scope.notices = selectedNotices;
 		$scope.currency = Symbol.currency;//将币别转化为对应的符号
@@ -1934,6 +1907,7 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
 	 */
 	app.filter('timespan', function(){
 		return function(time) {
+			console.log(time);
 			if(time == null)
 				return '9999年';
 			var now = new Date().getTime(), span = time - now, 

+ 3 - 0
src/main/webapp/resources/js/index/services/Purc.js

@@ -61,6 +61,9 @@ define([ 'ngResource'], function() {
 		});
 	}).factory('PurcInquiry', function($resource) {
 		return $resource('sale/inquiry/:id', {}, {
+			getAll: {
+				isArray: true
+			},
 			getTodo: {
 				params: {
 					_state: 'todo'

+ 4 - 9
src/main/webapp/resources/tpl/index/sale/inquiry.html

@@ -241,7 +241,7 @@
 						</span> <span class="text-num text-bold"
 							title="{{inquiryItem.inquiry.date}}"
 							ng-bind="::inquiryItem.inquiry.date | date:'yyyy-MM-dd'"></span> <span>流水号:<a
-							class="text-num" ng-bind="::inquiryItem.inquiry.code" href="#"></a></span>
+							class="text-num" ng-bind="::inquiryItem.inquiry.code" ui-sref="sale.inquiry_detail({id:inquiryItem.inquiry.id})" target="_blank"></a></span>
 					</div>
 				</td>
 				<td colspan="2"><a href="#"
@@ -265,14 +265,9 @@
 			</tr>
 			<tr class="order-bd">
 				<td class="product">
-					<div class="text-num text-bold">
-						<a href="#" ng-bind="::inquiryItem.product.code"></a>
-					</div>
-					<div>
-						<a href="#" ng-bind="::inquiryItem.product.title"></a>
-					</div>
-					<div class="text-muted"
-						ng-bind="::inquiryItem.product.spec"></div>
+					<div class="text-num text-bold" ng-bind="::inquiryItem.product.code"></div>
+					<div ng-bind="::inquiryItem.product.title"></div>
+					<div class="text-muted" ng-bind="::inquiryItem.product.spec"></div>
 					<div ng-if="inquiryItem.inquiry.attachs.length" class="text-muted">
 						附件:<a class="file" ng-repeat="attach in inquiryItem.inquiry.attachs" href="file/{{attach.id}}">{{::attach.name}}</a>
 					</div>

+ 268 - 0
src/main/webapp/resources/tpl/index/sale/inquiry_detail.html

@@ -0,0 +1,268 @@
+<div class="pane base-info">
+	<div class="pane-header">
+		客户询价单<a href="#" class="pull-right text-simple"><i
+			class="fa fa-print fa-fw"></i>打印</a>
+	</div>
+	<div class="pane-body">
+		<div class="headerline">
+			<span class="index">1</span> <span class="content">单据信息</span>
+		</div>
+		<div class="row row-sm item">
+			<div class="col-xs-3">
+				<span class="title">流水号</span>
+				<div class="content" ng-bind="::inquiry.code"></div>
+			</div>
+			<div class="col-xs-3">
+				<span class="title">日期</span>
+				<div class="content" ng-bind="::inquiry.date | date:'yyyy-MM-dd'"></div>
+			</div>
+			<div class="col-xs-6">
+				<span class="title">客户</span>
+				<div class="content" ng-bind="::inquiry.enterprise.enName"></div>
+			</div>
+		</div>
+		<div class="row row-sm item">
+			<div class="col-xs-3">
+				<span class="title">录单人</span>
+				<div class="content" ng-bind="::inquiry.recorder"></div>
+			</div>
+			<div class="col-xs-3">
+				<span class="title">审核人</span>
+				<div class="content" ng-bind="::inquiry.auditor"></div>
+			</div>
+			<div class="col-xs-6">
+				<span class="title">备注</span>
+				<div class="content" ng-bind="::inquiry.remark"></div>
+			</div>
+		</div>
+		<div class="row row-sm item">
+			<div class="col-xs-6">
+				<span class="title">截止报价</span>
+				<div class="content" ng-bind="::inquiry.endDate | date:'yyyy-MM-dd'"></div>
+			</div>
+		</div>
+		<div class="headerline" ng-if="inquiry.attachs.length">
+			<span class="content">附件</span>
+		</div>
+		<div class="row row-sm attach" ng-if="inquiry.attachs.length">
+			<div class="col-xs-3 item" ng-repeat="file in inquiry.attachs">
+				<div class="bg">
+					<div class="global_icon larger icon_undefined_l"
+						ng-class="{'icon_pdf_l': file.type == 'pdf','icon_xls_l': file.type == 'xls' || file.type == 'xlsx' || file.type == 'et', 'icon_doc_l': file.type == 'doc' || file.type == 'docx', 'icon_txt_l': file.type == 'txt', 'icon_zip_l': file.type == 'zip' || file.type == 'rar', 'icon_image_l': file.type == 'png' || file.type == 'jpg' || file.type == 'jpeg' || file.type == 'bmp'|| file.type == 'gif'}"></div>
+				</div>
+				<div class="title" ng-bind="::file.name"></div>
+				<div class="download">
+					<a href="file/{{file.id}}">下载</a>
+				</div>
+			</div>
+		</div>
+		<div class="headerline">
+			<div class="index">2</div>
+			<div class="content">商品价格详情</div>
+		</div>
+		<div class="block">
+			<table class="block table table-default table-striped">
+				<thead>
+					<tr class="header">
+						<th>商品</th>
+						<th width="90"><span class="text-default">≥</span>分段数</th>
+						<th width="90">价格</th>
+						<th width="40">币别</th>
+						<th width="45">税率</th>
+						<th width="80">最小订购</th>
+						<th width="80">最小包装</th>
+						<th width="120">有效期</th>
+						<th width="75">操作</th>
+					</tr>
+				</thead>
+				<tbody>
+					<tr
+						ng-repeat="inquiryItem in inquiry.inquiryItems track by inquiryItem.id">
+						<td>
+							<div class="text-num text-bold"
+								ng-bind="::inquiryItem.product.code"></div>
+							<div ng-bind="::inquiryItem.product.title"></div>
+							<div class="text-muted" ng-bind="::inquiryItem.product.spec"></div>
+						</td>
+						<td class="text-center">
+							<div ng-show="!inquiryItem.$editing">
+								<div ng-repeat="reply in inquiryItem.replies">
+									<span ng-bind="reply.lapQty"></span>
+								</div>
+							</div>
+							<div style="margin: 0 auto;" ng-if="inquiryItem.$editing">
+								<div ng-repeat="reply in inquiryItem.replies">
+									<div class="form-group input-group input-group-xs">
+										<input type="text" class="form-control input-xs"
+											ng-model="reply.lapQty" min="{{reply.lapQty == 0 ? 0 : 1}}"
+											ng-readonly="inquiryItem.custLap == 1 || reply.lapQty == 0 ? true : false"
+											placeholder="数量" /> <span class="input-group-btn"
+											ng-show="!inquiryItem.custLap && (reply.lapQty == null || reply.lapQty > 0)">
+											<button class="btn btn-default" type="button"
+												ng-click="removeStep(inquiryItem, $index)">
+												<i class="fa fa-trash-o"></i>
+											</button>
+										</span>
+									</div>
+								</div>
+								<a ng-click="addStep(inquiryItem)"
+									class="btn btn-default btn-xs" ng-show="!inquiryItem.custLap">添加分段</a>
+							</div>
+						</td>
+						<td class="text-center">
+							<div ng-show="!inquiryItem.$editing">
+								<div ng-repeat="reply in inquiryItem.replies">
+									<span ng-bind="reply.price"></span> <span
+										ng-show="reply.price == null" class="text-muted">-</span>
+								</div>
+								<div class="dropdown">
+									<a href="javascript:void(0);"
+										class="dropdown-toggle text-default"
+										ng-mouseover="getHistory(inquiryItem)">历史报价<i
+										class="fa fa-fw fa-angle-down"></i></a>
+									<div class="dropdown-menu pane" style="width: 270px;">
+										<div class="pane-body">
+											<ul class="list-unstyled list-menu">
+												<li ng-repeat="historyItem in ::inquiryItem.history">
+													<div ng-class="{'text-inverse': $index==0}">
+														<div class="row row-sm"
+															ng-repeat="historyReply in historyItem.replies">
+															<div class="col-xs-5">≥{{historyReply.lapQty}}</div>
+															<div class="col-xs-5">价格{{historyReply.price}}</div>
+														</div>
+													</div>
+													<div class="text-muted">{{historyItem.inquiry.date |
+														date:'yyyy-MM-dd'}}{{historyItem.inquiry.enterprise.enName}}
+													</div>
+												</li>
+											</ul>
+											<div
+												ng-show="!inquiryItem.history || inquiryItem.history.length == 0"
+												class="text-center text-muted">暂无历史报价</div>
+										</div>
+									</div>
+								</div>
+							</div>
+							<div style="margin: 0 auto;" ng-if="inquiryItem.$editing">
+								<div ng-repeat="reply in inquiryItem.replies">
+									<div class="form-group">
+										<input type="text" class="form-control input-xs"
+											ng-model="reply.price" placeholder="价格" />
+									</div>
+								</div>
+							</div>
+						</td>
+						<td class="text-center" ng-bind="::inquiryItem.currency"></td>
+						<td class="text-center"><span
+							ng-bind="::inquiryItem.taxrate || 0"></span>%</td>
+						<td class="text-center">
+							<div ng-show="!inquiryItem.$editing">
+								<span ng-bind="inquiryItem.minOrderQty"></span> <span
+									ng-show="inquiryItem.minOrderQty == null" class="text-muted">-</span>
+							</div>
+							<div ng-if="inquiryItem.$editing">
+								<input type="text" class="form-control input-xs"
+									ng-model="inquiryItem.minOrderQty" placeholder="最小订购">
+							</div>
+						</td>
+						<td class="text-center">
+							<div ng-show="!inquiryItem.$editing">
+								<span ng-bind="inquiryItem.minPackQty"></span> <span
+									ng-show="inquiryItem.minPackQty == null" class="text-muted">-</span>
+							</div>
+							<div ng-if="inquiryItem.$editing">
+								<input type="text" class="form-control input-xs"
+									ng-model="inquiryItem.minPackQty" placeholder="最小包装">
+							</div>
+						</td>
+						<td class="text-center">
+							<div ng-show="!inquiryItem.$editing"
+								ng-init="parseDate(inquiryItem)">
+								<div ng-show="inquiryItem.vendFromDate">
+									<span class="text-muted">从 </span><span
+										ng-bind="inquiryItem.vendFromDate | date:'yyyy-MM-dd'"></span>
+									<span class="text-muted">到 </span><span
+										ng-bind="inquiryItem.vendToDate | date:'yyyy-MM-dd'"></span>
+								</div>
+								<div ng-show="!inquiryItem.vendFromDate">
+									<span class="text-muted">-</span>
+								</div>
+							</div>
+							<div ng-if="inquiryItem.$editing">
+								<div class="form-group input-group input-group-xs input-trigger">
+									<input type="text" ng-model="inquiryItem.vendFromDate"
+										class="form-control" placeholder="开始日期"
+										datepicker-popup="yyyy-MM-dd"
+										is-open="inquiryItem.$fromOpened"
+										min-date="getMinDate(inquiryItem)" ng-required="true"
+										current-text="今天" clear-text="清除" close-text="关闭"
+										datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+										ng-focus="openDatePicker($event, inquiryItem, '$fromOpened')">
+									<span class="input-group-btn">
+										<button type="button" class="btn btn-default"
+											ng-click="openDatePicker($event, inquiryItem, '$fromOpened')">
+											<i class="fa fa-calendar"></i>
+										</button>
+									</span>
+								</div>
+								<div class="form-group input-group input-group-xs input-trigger">
+									<input type="text" ng-model="inquiryItem.vendToDate"
+										class="form-control" placeholder="结束日期"
+										datepicker-popup="yyyy-MM-dd" is-open="inquiryItem.$toOpened"
+										min-date="inquiryItem.vendFromDate" ng-required="true"
+										current-text="今天" clear-text="清除" close-text="关闭"
+										datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+										ng-focus="openDatePicker($event, inquiryItem, '$toOpened')">
+									<span class="input-group-btn">
+										<button type="button" class="btn btn-default"
+											ng-click="openDatePicker($event, inquiryItem, '$toOpened')">
+											<i class="fa fa-calendar"></i>
+										</button>
+									</span>
+								</div>
+							</div>
+						</td>
+						<td class="text-center">
+							<div
+								ng-if="inquiryItem.status == 201 && inquiryItem.agreed == null"
+								class="block">
+								<span class="text-trans warning">已报价</span>
+							</div>
+							<div ng-if="inquiryItem.status == 201 && inquiryItem.agreed == 1"
+								class="block">
+								<span class="text-trans success">报价已采纳</span>
+							</div>
+							<div ng-if="inquiryItem.status == 201 && inquiryItem.agreed == 0"
+								class="block">
+								<span class="text-trans error">报价未采纳</span>
+							</div>
+							<div ng-if="inquiryItem.status == 200">
+								<div ng-show="!inquiryItem.$editing">
+									<a ng-click="inquiryItem.$editing=!inquiryItem.$editing">报
+										价</a>
+								</div>
+								<div ng-show="inquiryItem.$editing">
+									<div>
+										<a ng-click="inquiryItem.$editing=!inquiryItem.$editing">取消</a>
+									</div>
+									<div>
+										<button ng-click="onReplyClick(inquiryItem)"
+											ng-disabled="!isValid(inquiryItem)"
+											class="btn btn-link btn-xs text-default">保存</button>
+									</div>
+									<div>
+										<button ng-click="onReplyClick(inquiryItem, true)"
+											ng-disabled="!isValid(inquiryItem, true)"
+											class="btn btn-link btn-xs text-inverse">
+											保存并<br>确认报价
+										</button>
+									</div>
+								</div>
+							</div>
+						</td>
+					</tr>
+				</tbody>
+			</table>
+		</div>
+	</div>
+</div>

+ 1 - 1
src/main/webapp/resources/tpl/index/sale/notice.html

@@ -275,7 +275,7 @@
 			<td colspan="2"><a href="#"
 				ng-bind="notice.orderItem.order.enterprise.enName"></a></td>
 			<td class="text-right dropdown" colspan="2" class="order-sum"><a
-				class="dropdown-toggle" href="javascript:void(0);"> <span
+				class="dropdown-toggle" ui-sref="sale.order_detail({id:notice.orderItem.order.id})" target="_blank"> <span
 					class="text-num text-bold" ng-bind="::notice.orderItem.order.code"></span>
 					第{{notice.orderItem.number}}行 <i class="fa fa-fw fa-angle-down"></i>
 			</a>

+ 0 - 0
src/main/webapp/resources/tpl/index/sale/notice_detail.html