Browse Source

Merge branch 'dev' of ssh://10.10.101.21/source/platform-b2b into en_info

# Conflicts:
#	src/main/java/com/uas/platform/b2b/model/Enterprise.java
#	src/main/java/com/uas/platform/b2b/v2/service/impl/EnterpriseServiceImpl.java
wangmh 8 years ago
parent
commit
d1331c2f91
53 changed files with 1783 additions and 550 deletions
  1. 16 23
      src/main/java/com/uas/platform/b2b/controller/BaseInfoController.java
  2. 6 11
      src/main/java/com/uas/platform/b2b/controller/CartController.java
  3. 18 33
      src/main/java/com/uas/platform/b2b/controller/DeputyOrderController.java
  4. 23 22
      src/main/java/com/uas/platform/b2b/controller/PurchaseTenderController.java
  5. 23 12
      src/main/java/com/uas/platform/b2b/controller/RoleController.java
  6. 7 7
      src/main/java/com/uas/platform/b2b/controller/UserController.java
  7. 9 1
      src/main/java/com/uas/platform/b2b/dao/EnterpriseDao.java
  8. 1 1
      src/main/java/com/uas/platform/b2b/dao/PurchaseNoticeDao.java
  9. 22 0
      src/main/java/com/uas/platform/b2b/dao/PurchaseOrderCartDao.java
  10. 15 0
      src/main/java/com/uas/platform/b2b/dao/PurchaseTenderErpDao.java
  11. 24 3
      src/main/java/com/uas/platform/b2b/dao/RoleDao.java
  12. 9 0
      src/main/java/com/uas/platform/b2b/dao/SaleTenderErpDao.java
  13. 11 2
      src/main/java/com/uas/platform/b2b/erp/controller/UserSpaceDetailController.java
  14. 28 0
      src/main/java/com/uas/platform/b2b/erp/model/B2BCustomer.java
  15. 28 0
      src/main/java/com/uas/platform/b2b/erp/model/B2BVendor.java
  16. 10 0
      src/main/java/com/uas/platform/b2b/erp/model/Inquiry.java
  17. 26 13
      src/main/java/com/uas/platform/b2b/erp/model/PurchaseTenderErp.java
  18. 118 7
      src/main/java/com/uas/platform/b2b/erp/model/SaleTenderErp.java
  19. 4 1
      src/main/java/com/uas/platform/b2b/model/Cart.java
  20. 6 2
      src/main/java/com/uas/platform/b2b/model/EnterpriseDetail.java
  21. 3 1
      src/main/java/com/uas/platform/b2b/model/PurchaseInquiryItem.java
  22. 482 0
      src/main/java/com/uas/platform/b2b/model/PurchaseOrderCart.java
  23. 331 0
      src/main/java/com/uas/platform/b2b/model/PurchaseOrderCartItem.java
  24. 21 5
      src/main/java/com/uas/platform/b2b/model/QueriableMember.java
  25. 3 5
      src/main/java/com/uas/platform/b2b/model/SaleTender.java
  26. 9 5
      src/main/java/com/uas/platform/b2b/service/PurchaseTenderService.java
  27. 16 2
      src/main/java/com/uas/platform/b2b/service/RoleService.java
  28. 13 1
      src/main/java/com/uas/platform/b2b/service/impl/BaseInfoServiceImpl.java
  29. 16 20
      src/main/java/com/uas/platform/b2b/service/impl/CartServiceImpl.java
  30. 43 15
      src/main/java/com/uas/platform/b2b/service/impl/PurchaseTenderServiceImpl.java
  31. 11 0
      src/main/java/com/uas/platform/b2b/service/impl/RoleServiceImpl.java
  32. 6 0
      src/main/java/com/uas/platform/b2b/service/impl/UserServiceImpl.java
  33. 54 0
      src/main/java/com/uas/platform/b2b/temporary/model/UserSpaceDetail.java
  34. 1 0
      src/main/java/com/uas/platform/b2b/v2/controller/EnterpriseController.java
  35. 4 0
      src/main/webapp/WEB-INF/web.xml
  36. 124 160
      src/main/webapp/resources/js/index/app.js
  37. 13 1
      src/main/webapp/resources/js/index/services/Account.js
  38. 8 0
      src/main/webapp/resources/js/index/services/Purc.js
  39. 13 0
      src/main/webapp/resources/tpl/error/index.html
  40. 1 1
      src/main/webapp/resources/tpl/index/approvalFlow/user.html
  41. 5 1
      src/main/webapp/resources/tpl/index/baseInfo/customersInfo.html
  42. 12 8
      src/main/webapp/resources/tpl/index/baseInfo/myRequest.html
  43. 12 8
      src/main/webapp/resources/tpl/index/baseInfo/newPartner.html
  44. 12 27
      src/main/webapp/resources/tpl/index/baseInfo/searchresult.html
  45. 5 1
      src/main/webapp/resources/tpl/index/baseInfo/servicerInfo.html
  46. 5 1
      src/main/webapp/resources/tpl/index/baseInfo/vendorsInfo.html
  47. 1 1
      src/main/webapp/resources/tpl/index/purc/addOrder.html
  48. 2 2
      src/main/webapp/resources/tpl/index/purc/cart_detail.html
  49. 5 2
      src/main/webapp/resources/tpl/index/purc/modal/purc_uplodaByBatch.html
  50. 1 1
      src/main/webapp/resources/tpl/index/sale/inquiry.html
  51. 103 95
      src/main/webapp/resources/tpl/index/sale/tender.html
  52. 4 8
      src/main/webapp/resources/tpl/index/sale/tenderlist.html
  53. 40 41
      src/main/webapp/resources/tpl/index/sale/vendor_tender.html

+ 16 - 23
src/main/java/com/uas/platform/b2b/controller/BaseInfoController.java

@@ -1,28 +1,5 @@
 package com.uas.platform.b2b.controller;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Sort.Direction;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.ui.ModelMap;
-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.ResponseBody;
-import org.springframework.web.bind.annotation.ResponseStatus;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.servlet.ModelAndView;
-
 import com.alibaba.fastjson.JSONObject;
 import com.uas.account.util.AccountUtils;
 import com.uas.platform.b2b.model.Enterprise;
@@ -51,6 +28,22 @@ import com.uas.search.b2b.model.SPage;
 import com.uas.search.b2b.model.Sort;
 import com.uas.search.b2b.model.Sort.Type;
 import com.uas.search.b2b.util.SearchConstants;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Sort.Direction;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
 
 /**
  * 基础资料设置<br>

+ 6 - 11
src/main/java/com/uas/platform/b2b/controller/CartController.java

@@ -1,16 +1,5 @@
 package com.uas.platform.b2b.controller;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.ui.ModelMap;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
 import com.alibaba.dubbo.common.utils.CollectionUtils;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2b.model.PurchaseOrderAll;
@@ -30,6 +19,12 @@ import com.uas.search.b2b.model.SPage;
 import com.uas.search.b2b.model.Sort;
 import com.uas.search.b2b.model.Sort.Type;
 import com.uas.search.b2b.util.SearchConstants;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 购物车

+ 18 - 33
src/main/java/com/uas/platform/b2b/controller/DeputyOrderController.java

@@ -1,42 +1,10 @@
 package com.uas.platform.b2b.controller;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URLDecoder;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.ui.ModelMap;
-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.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.servlet.ModelAndView;
-
 import com.alibaba.dubbo.common.utils.CollectionUtils;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2b.manage.service.MasterService;
-import com.uas.platform.b2b.model.AccessToken;
-import com.uas.platform.b2b.model.DeputyEnterprise;
-import com.uas.platform.b2b.model.DeputyHisVendors;
-import com.uas.platform.b2b.model.DeputyLastOrderKeywords;
-import com.uas.platform.b2b.model.DeputyOrder;
-import com.uas.platform.b2b.model.DeputyOrderKeywords;
-import com.uas.platform.b2b.model.DeputyOrdersLog;
-import com.uas.platform.b2b.model.DeputyPaymentCompany;
-import com.uas.platform.b2b.model.FileUpload;
-import com.uas.platform.b2b.model.SearchFilter;
-import com.uas.platform.b2b.model.Vendor;
+import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.AccessTokenService;
 import com.uas.platform.b2b.service.DeputyOrderService;
@@ -60,6 +28,22 @@ import com.uas.search.b2b.model.Sort;
 import com.uas.search.b2b.model.Sort.Type;
 import com.uas.search.b2b.util.SearchConstants;
 import com.uas.sso.common.util.HttpUtil.ResponseWrap;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 代采订单
@@ -668,6 +652,7 @@ public class DeputyOrderController {
 			ResponseWrap res = com.uas.sso.common.util.HttpUtil.doGet(redirectUrl.toString());
 			if (!res.isSuccess())
 				map.put("error", "暂未获取到相关数据");
+			System.out.println(res.getContent());
 			JSONObject jsonObject = JSONObject.parseObject(res.getContent());
 			if (jsonObject != null) {
 				String nodeStr = URLDecoder.decode(jsonObject.getString("nodes"), "UTF-8");

+ 23 - 22
src/main/java/com/uas/platform/b2b/controller/PurchaseTenderController.java

@@ -2,7 +2,11 @@ package com.uas.platform.b2b.controller;
 
 import com.alibaba.dubbo.common.utils.CollectionUtils;
 import com.alibaba.fastjson.JSONObject;
-import com.uas.platform.b2b.model.*;
+import com.uas.platform.b2b.erp.model.SaleTenderErp;
+import com.uas.platform.b2b.model.Attach;
+import com.uas.platform.b2b.model.FileUpload;
+import com.uas.platform.b2b.model.PurchaseTender;
+import com.uas.platform.b2b.model.SearchFilter;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.PurchaseTenderService;
 import com.uas.platform.b2b.service.UserService;
@@ -39,7 +43,6 @@ import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
-import java.util.Objects;
 
 /**
  * 招标单
@@ -114,25 +117,13 @@ public class PurchaseTenderController {
     /**
      * 供应商投标
      *
-     * @param enBaseInfo  投标企业信息
-     * @param tenderItems 投标明细
      *
      */
     @RequestMapping(value = "/reply", method = RequestMethod.POST)
     @ResponseBody
-    public ResponseEntity<String> replyTender(String tenderItems, String enBaseInfo, String attaches, String saleTender) {
-        tenderItems = "[".concat(tenderItems);
-        tenderItems = tenderItems.concat("]");
-        List<SaleTenderItem> saleTenderItems = FlexJsonUtils.fromJsonArray(tenderItems, SaleTenderItem.class);
-        EnterpriseBaseInfo vendor = FlexJsonUtils.fromJson(enBaseInfo, EnterpriseBaseInfo.class);
-        List<Attach> saleTenderAttaches = new ArrayList<>();
-        if (attaches != null && !Objects.equals(attaches, "")) {
-            attaches = "[".concat(attaches);
-            attaches = attaches.concat("]");
-            saleTenderAttaches = FlexJsonUtils.fromJsonArray(attaches, Attach.class);
-        }
-        SaleTender saleTender1 = FlexJsonUtils.fromJson(saleTender, SaleTender.class);
-        purchaseTenderService.reply(saleTenderItems, vendor, saleTenderAttaches, saleTender1);
+    public ResponseEntity<String> replyTender(@RequestBody String saleTender) {
+        SaleTenderErp saleTender1 = FlexJsonUtils.fromJson(saleTender, SaleTenderErp.class);
+        purchaseTenderService.reply(saleTender1);
 //        logger.log("供应商投标", "供应商对招标单进行投标",  "供应商名称" + saleTenderItems.get(0).getSaleTender().getEnterpriseBaseInfo().getEnName() + ",招标单号: "+ saleTenderItems.get(0).getTenderProd().getTender().getCode());
         return new ResponseEntity<String>(HttpStatus.OK);
     }
@@ -158,10 +149,23 @@ public class PurchaseTenderController {
      */
     @RequestMapping(value = "/getSaleTenderDetail/{tenderId}", method = RequestMethod.GET)
     @ResponseBody
-    public SaleTender getSaleTenderDetail(@PathVariable("tenderId") Long tenderId) {
+    public ModelMap getSaleTenderDetail(@PathVariable("tenderId") Long tenderId) {
         return purchaseTenderService.findMySaleTenderDetailByTenderId(tenderId);
     }
 
+    /**
+     * 查看供应商投标单详情
+     *
+     * @param vendUU 供应商UU
+     * @param tenderId 招标单id
+     *
+     */
+    @RequestMapping(value = "/getVendorSaleTenderDetail/{vendUU}/{tenderId}", method = RequestMethod.GET)
+    @ResponseBody
+    public ModelMap getVendorSaleTenderDetail(@PathVariable("vendUU") Long vendUU, @PathVariable("tenderId") Long tenderId) {
+        return purchaseTenderService.findVendorSaleTenderDetailByTenderId(vendUU, tenderId);
+    }
+
 
     /**
      * 公开招标转投标单
@@ -255,7 +259,6 @@ public class PurchaseTenderController {
         pageParams.getFilters().put("tp_ptid", SystemSession.getUser().getEnterprise().getUu());
         pageParams.getFilters().put("pt_ispublish", Constant.YES);
         pageParams.getFilters().put("pt_result", Constant.YES);
-//        pageParams.getFilters().put("pt_ifopen", Constant.NO);
         return searchService.searchPurcTenderIds(keyword, pageParams);
     }
 
@@ -284,10 +287,9 @@ public class PurchaseTenderController {
         pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
         pageParams.getFilters().put("tp_ptid", SystemSession.getUser().getEnterprise().getUu());
         pageParams.getFilters().put("pt_ispublish", Constant.YES);
-//        pageParams.getFilters().put("pt_ifopen", Constant.NO);
         pageParams.getFilters().put("pt_overdue", Constant.YES);
         pageParams.getFilters().put("pt_result", Constant.NO);
-        pageParams.getFilters().put("pt_status", "待评标");
+//        pageParams.getFilters().put("pt_status", "待评标");
         return searchService.searchPurcTenderIds(keyword, pageParams);
     }
 
@@ -316,7 +318,6 @@ public class PurchaseTenderController {
         pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
         pageParams.getFilters().put("st_venduu", SystemSession.getUser().getEnterprise().getUu());
         pageParams.getFilters().put("st_ispublish", Constant.YES);
-//        pageParams.getFilters().put("pt_ifopen", Constant.NO);
         pageParams.getFilters().put("st_overdue", Constant.NO);
         pageParams.getFilters().put("st_status", "已投标");
         return searchService.searchSaleTenderIds(keyword, pageParams);

+ 23 - 12
src/main/java/com/uas/platform/b2b/controller/RoleController.java

@@ -1,22 +1,18 @@
 package com.uas.platform.b2b.controller;
 
-import java.util.List;
-
-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.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.ResponseBody;
-
 import com.uas.platform.b2b.model.Role;
 import com.uas.platform.b2b.service.RoleService;
 import com.uas.platform.b2b.support.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;
 
 /**
  * 账户管理--角色
@@ -71,4 +67,19 @@ public class RoleController {
 		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(); }
 }

+ 7 - 7
src/main/java/com/uas/platform/b2b/controller/UserController.java

@@ -198,13 +198,13 @@ public class UserController {
 	 * 
 	 * @return
 	 */
-	@RequestMapping(method = RequestMethod.PUT)
-	public ResponseEntity<String> saveUser(@RequestBody String json, HttpServletRequest request) {
-		User user = FlexJsonUtils.fromJson(json, User.class);
-		user = userService.updateUserInfo(user);
-		if (user != null) {
-			logger.log("用户信息", "修改用户信息,UU:" + user.getUserUU());
-			if (SystemSession.getUser().getUserUU().equals(user.getUserUU()))
+			@RequestMapping(method = RequestMethod.PUT)
+			public ResponseEntity<String> saveUser(@RequestBody String json, HttpServletRequest request) {
+				User user = FlexJsonUtils.fromJson(json, User.class);
+				user = userService.updateUserInfo(user);
+				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 - 1
src/main/java/com/uas/platform/b2b/dao/EnterpriseDao.java

@@ -49,7 +49,7 @@ public interface EnterpriseDao extends JpaSpecificationExecutor<Enterprise>,JpaR
 	 * @param names
 	 * @return
 	 */
-	@Query("select e.uu,e.enName from Enterprise e where e.enName IN (:names)")
+	@Query("select e.uu,e.enName,e.enBussinessCode,e.enAddress,e.enCorporation from Enterprise e where e.enName IN (:names)")
 	public List<Object[]> findByEnNames(@Param("names") List<String> names);
 
 	/**
@@ -88,4 +88,12 @@ public interface EnterpriseDao extends JpaSpecificationExecutor<Enterprise>,JpaR
 	 */
 	public EnterpriseInfo findEnterpriseInfoByUu(Long uu);
 
+	/**
+	 * 通过营业执照和名称找企业
+	 * @param enBussinessCode
+	 * @param enName
+	 * @return
+	 */
+	List<Enterprise> findByEnBussinessCodeAndEnName(String enBussinessCode, String enName);
+
 }

+ 1 - 1
src/main/java/com/uas/platform/b2b/dao/PurchaseNoticeDao.java

@@ -136,6 +136,6 @@ public interface PurchaseNoticeDao extends JpaSpecificationExecutor<PurchaseNoti
 	 * @Param ids 未读单据id
 	 * @return
 	 */
-	@Query("select count(p), p.status from PurchaseNotice p where p.id in :ids and (p.end is null or p.end = 0) group by p.status")
+	@Query("select count(p), p.status from PurchaseNotice p where p.id in :ids and (p.end is null or p.end = 0) and p.waiting=0 group by p.status")
 	List<Object[]> getUnreadCountEveryStatus(@Param("ids") List<Long> ids);
 }

+ 22 - 0
src/main/java/com/uas/platform/b2b/dao/PurchaseOrderCartDao.java

@@ -0,0 +1,22 @@
+package com.uas.platform.b2b.dao;
+
+import com.uas.platform.b2b.model.PurchaseOrderCart;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * Created by hejq on 2017-09-01.
+ */
+@Repository
+public interface PurchaseOrderCartDao extends JpaRepository<PurchaseOrderCart, Long>, JpaSpecificationExecutor<PurchaseOrderCart> {
+
+    /**
+     * 查询当前企业的购物车信息
+     *
+     * @return
+     */
+    List<PurchaseOrderCart> findByEnUUAndStatus(Long enUU, Short status);
+}

+ 15 - 0
src/main/java/com/uas/platform/b2b/dao/PurchaseTenderErpDao.java

@@ -0,0 +1,15 @@
+package com.uas.platform.b2b.dao;
+
+import com.uas.platform.b2b.erp.model.PurchaseTenderErp;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Created by dongbw
+ */
+@Repository
+public interface PurchaseTenderErpDao extends JpaSpecificationExecutor<PurchaseTenderErp>,JpaRepository<PurchaseTenderErp, Long> {
+
+
+}

+ 24 - 3
src/main/java/com/uas/platform/b2b/dao/RoleDao.java

@@ -1,13 +1,12 @@
 package com.uas.platform.b2b.dao;
 
-import java.util.List;
-
+import com.uas.platform.b2b.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 com.uas.platform.b2b.model.Role;
+import java.util.List;
 
 @Repository
 public interface RoleDao extends JpaRepository<Role, Long> {
@@ -44,4 +43,26 @@ public interface RoleDao extends JpaRepository<Role, Long> {
 	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);
 }

+ 9 - 0
src/main/java/com/uas/platform/b2b/dao/SaleTenderErpDao.java

@@ -11,4 +11,13 @@ import org.springframework.stereotype.Repository;
 @Repository
 public interface SaleTenderErpDao extends JpaSpecificationExecutor<SaleTenderErp>,JpaRepository<SaleTenderErp, Long> {
 
+    /**
+     * 根据招标单id和供应商uu获取当前投标单
+     * @param tenderId
+     * @param vendUU
+     * @return
+     */
+    SaleTenderErp findByPtIdAndVendUU(Long tenderId, Long vendUU);
+
+    SaleTenderErp findByCodeAndEnUUAndVendUU(String code, Long enUU, Long vendUU);
 }

+ 11 - 2
src/main/java/com/uas/platform/b2b/erp/controller/UserSpaceDetailController.java

@@ -8,6 +8,7 @@ import com.uas.platform.b2b.erp.model.B2BVendor;
 import com.uas.platform.b2b.erp.model.PageInfo;
 import com.uas.platform.b2b.model.InvitationRecord;
 import com.uas.platform.b2b.model.SearchFilter;
+import com.uas.platform.b2b.model.User;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.AddPartnerService;
 import com.uas.platform.b2b.service.InvitationRecordService;
@@ -110,8 +111,16 @@ public class UserSpaceDetailController {
 			} else {
 				pageParams.getFilters().put("in_enuu", SystemSession.getUser().getEnterprise().getUu());
 			}
-			if (pageInfo.getUseruu() != null && ifSelf == 1) { // 只看自己就加入自己uu过滤,查看所有就加入已激活状态,只显示已注册邀请。
-				pageParams.getFilters().put("in_useruu", pageInfo.getUseruu());
+			if (ifSelf == 1) { // 只看自己就加入自己uu过滤,查看所有就加入已激活状态,只显示已注册邀请。
+				if (pageInfo.getUseruu() != null) {
+					// 如果传入的uu在本企业找不到角色,就返回空
+					User user = userService.findUserByEnUUAndUserUU(SystemSession.getUser().getEnterprise().getUu(), pageInfo.getUseruu());
+					if (null == user) {
+						return records;
+					} else {
+						pageParams.getFilters().put("in_useruu", pageInfo.getUseruu());
+					}
+				}
 			} else {
 				pageParams.getFilters().put("in_active", Constant.YES);
 			}

+ 28 - 0
src/main/java/com/uas/platform/b2b/erp/model/B2BCustomer.java

@@ -61,6 +61,16 @@ public class B2BCustomer {
      */
     private Short customerswitch;
 
+    /**
+     * 行业
+     */
+    private String cu_industry;
+
+    /**
+     * 主营业务
+     */
+    private String cu_mainbusiness;
+
     public B2BCustomer(Vendor vendor) {
         this.setB2b_vendor_id(vendor.getId());
         this.setCustomerswitch(vendor.getCustswitch());
@@ -70,6 +80,8 @@ public class B2BCustomer {
             this.setCu_shortname(vendor.getMyEnterprise().getEnShortname());
             this.setCu_businesscode(vendor.getMyEnterprise().getEnBussinessCode());
             this.setCu_tel(vendor.getMyEnterprise().getEnTel());
+            this.setCu_mainbusiness(vendor.getMyEnterprise().getTags());
+            this.setCu_industry(vendor.getMyEnterprise().getProfession());
         }
         this.setCu_uu(String.valueOf(vendor.getMyEnUU()));
         if (vendor.getVendorUser() != null) {
@@ -172,4 +184,20 @@ public class B2BCustomer {
     public void setCustomerswitch(Short customerswitch) {
         this.customerswitch = customerswitch;
     }
+
+    public String getCu_industry() {
+        return cu_industry;
+    }
+
+    public void setCu_industry(String cu_industry) {
+        this.cu_industry = cu_industry;
+    }
+
+    public String getCu_mainbusiness() {
+        return cu_mainbusiness;
+    }
+
+    public void setCu_mainbusiness(String cu_mainbusiness) {
+        this.cu_mainbusiness = cu_mainbusiness;
+    }
 }

+ 28 - 0
src/main/java/com/uas/platform/b2b/erp/model/B2BVendor.java

@@ -76,6 +76,16 @@ public class B2BVendor {
      */
     private Short servicerSwitch;
 
+    /**
+     * 主营业务
+     */
+    private String ve_businessrange;
+
+    /**
+     * 行业
+     */
+    private String ve_industry;
+
     public B2BVendor(Vendor vendor) {
         this.setB2b_vendor_id(vendor.getId());
         this.setVendorSwitch(vendor.getVendswitch());
@@ -86,6 +96,8 @@ public class B2BVendor {
             this.setVe_shortname(vendor.getVendorEnterprise().getEnShortname());
             this.setVe_webserver(vendor.getVendorEnterprise().getEnBussinessCode());
             this.setVe_tel(vendor.getVendorEnterprise().getEnTel());
+            this.setVe_industry(vendor.getVendorEnterprise().getProfession());
+            this.setVe_businessrange(vendor.getVendorEnterprise().getTags());
         }
         this.setVe_uu(String.valueOf(vendor.getVendEnUU()));
         if (vendor.getVendorUser() != null) {
@@ -205,4 +217,20 @@ public class B2BVendor {
     public void setVe_email(String ve_email) {
         this.ve_email = ve_email;
     }
+
+    public String getVe_businessrange() {
+        return ve_businessrange;
+    }
+
+    public void setVe_businessrange(String ve_businessrange) {
+        this.ve_businessrange = ve_businessrange;
+    }
+
+    public String getVe_industry() {
+        return ve_industry;
+    }
+
+    public void setVe_industry(String ve_industry) {
+        this.ve_industry = ve_industry;
+    }
 }

+ 10 - 0
src/main/java/com/uas/platform/b2b/erp/model/Inquiry.java

@@ -27,6 +27,7 @@ public class Inquiry {
 	private String in_remark;
 	private String in_pricetype;
 	private List<InquiryDetail> details;
+	private String in_kind; //询价类型
 	/**
 	 * 主动报价时,平台的主动报价单SaleQuotation的ID
 	 */
@@ -154,6 +155,14 @@ public class Inquiry {
 		this.attaches = attaches;
 	}
 
+	public String getIn_kind() {
+		return in_kind;
+	}
+
+	public void setIn_kind(String in_kind) {
+		this.in_kind = in_kind;
+	}
+
 	/**
 	 * 转为平台的采购询价
 	 * 
@@ -172,6 +181,7 @@ public class Inquiry {
 		inquiry.setEnvironment(this.in_environment);
 		inquiry.setSourceId(this.in_id);
 		inquiry.setPriceType(this.in_pricetype);
+		inquiry.setInquirytype(this.in_kind);
 		inquiry.setIsOpen(Constant.NO); // erp传过来的询价单,默认为非公开
 		if (!CollectionUtils.isEmpty(this.details)) {
 			Set<PurchaseInquiryItem> inquiryItems = new HashSet<PurchaseInquiryItem>();

+ 26 - 13
src/main/java/com/uas/platform/b2b/erp/model/PurchaseTenderErp.java

@@ -4,19 +4,7 @@ import java.io.Serializable;
 import java.util.Date;
 import java.util.Set;
 
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.OneToMany;
-import javax.persistence.OneToOne;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.Table;
+import javax.persistence.*;
 
 import com.uas.platform.b2b.model.Attach;
 import com.uas.platform.b2b.model.Enterprise;
@@ -181,6 +169,15 @@ public class PurchaseTenderErp implements Serializable {
     @Column(name = "pt_auditstatus")
     private Short auditStatus;
 
+    /**
+     * 是否全包 (1为全包,0为部分供料)
+     */
+    @Column(name = "pt_ifall")
+    private Short ifAll;
+
+    @Transient
+    private Short bidEnNum;
+
     public Long getId() {
         return id;
     }
@@ -372,6 +369,22 @@ public class PurchaseTenderErp implements Serializable {
     public void setAuditStatus(Short auditStatus) {
         this.auditStatus = auditStatus;
     }
+
+    public Short getIfAll() {
+        return ifAll;
+    }
+
+    public void setIfAll(Short ifAll) {
+        this.ifAll = ifAll;
+    }
+
+    public Short getBidEnNum() {
+        return bidEnNum;
+    }
+
+    public void setBidEnNum(Short bidEnNum) {
+        this.bidEnNum = bidEnNum;
+    }
 }
 
 

+ 118 - 7
src/main/java/com/uas/platform/b2b/erp/model/SaleTenderErp.java

@@ -54,17 +54,49 @@ public class SaleTenderErp implements Serializable {
     private Date date;
 
     /**
-     * 招标方联系人
+     * 供应商联系人
      */
     @Column(name = "st_user")
     private String user;
 
     /**
-     * 招标方联系人电话
+     * 供应商联系人uu
+     */
+    @Column(name = "st_useruu")
+    private Long useruu;
+
+    /**
+     * 联系人
+     */
+    @OneToOne
+    @JoinColumn(name = "st_useruu", insertable = false, updatable = false)
+    private UserBaseInfo userInfo;
+
+    /**
+     * 招标发起人uu
+     */
+    @Column(name = "st_recorderuu")
+    private Long recorderuu;
+
+    /**
+     * 招标发起人
+     */
+    @OneToOne(cascade = CascadeType.REFRESH )
+    @JoinColumn(name = "st_recorderuu", insertable = false, updatable = false)
+    private UserBaseInfo recorder;
+
+    /**
+     * 供应商联系人电话
      */
     @Column(name = "st_usertel")
     private String userTel;
 
+    /**
+     * 供应商联系人邮箱
+     */
+    @Column(name = "st_useremail")
+    private String userEmail;
+
     /**
      * 招标企业uu
      */
@@ -144,11 +176,6 @@ public class SaleTenderErp implements Serializable {
     @Column(name = "st_status")
     private String status;
 
-//    /**
-//     * 招标附件
-//     */
-//    private Set<Attach> tenderAttaches;
-
     /**
      * 投标附件
      */
@@ -183,6 +210,26 @@ public class SaleTenderErp implements Serializable {
     @Column(name = "st_auditstatus")
     private Short auditStatus;
 
+    /**
+     * 招标单id(消息跳转url用)
+     */
+    @Column(name = "st_ptid")
+    private Long ptId;
+
+    /**
+     * 是否已过期,根据enddate判断,为视图虚拟列 0 未过期,1已过期
+     * @param tender
+     */
+    @Column(name = "st_overdue", insertable = false, updatable = false)
+    private Short overdue;
+
+    /**
+     * 是否已过期,根据publishdate判断,为视图虚拟列 0 未公布,1已公布
+     * @param tender
+     */
+    @Column(name = "st_result", insertable = false, updatable = false)
+    private Short result;
+
     /**
      * 是否全包 (1为全包,0为部分供料)
      */
@@ -439,4 +486,68 @@ public class SaleTenderErp implements Serializable {
     public void setTaxrate(Integer taxrate) {
         this.taxrate = taxrate;
     }
+
+    public Long getUseruu() {
+        return useruu;
+    }
+
+    public void setUseruu(Long useruu) {
+        this.useruu = useruu;
+    }
+
+    public UserBaseInfo getUserInfo() {
+        return userInfo;
+    }
+
+    public void setUserInfo(UserBaseInfo userInfo) {
+        this.userInfo = userInfo;
+    }
+
+    public Long getRecorderuu() {
+        return recorderuu;
+    }
+
+    public void setRecorderuu(Long recorderuu) {
+        this.recorderuu = recorderuu;
+    }
+
+    public UserBaseInfo getRecorder() {
+        return recorder;
+    }
+
+    public void setRecorder(UserBaseInfo recorder) {
+        this.recorder = recorder;
+    }
+
+    public String getUserEmail() {
+        return userEmail;
+    }
+
+    public void setUserEmail(String userEmail) {
+        this.userEmail = userEmail;
+    }
+
+    public Long getPtId() {
+        return ptId;
+    }
+
+    public void setPtId(Long ptId) {
+        this.ptId = ptId;
+    }
+
+    public Short getOverdue() {
+        return overdue;
+    }
+
+    public void setOverdue(Short overdue) {
+        this.overdue = overdue;
+    }
+
+    public Short getResult() {
+        return result;
+    }
+
+    public void setResult(Short result) {
+        this.result = result;
+    }
 }

+ 4 - 1
src/main/java/com/uas/platform/b2b/model/Cart.java

@@ -1,5 +1,7 @@
 package com.uas.platform.b2b.model;
 
+import org.hibernate.annotations.Where;
+
 import java.io.Serializable;
 import java.util.Date;
 import java.util.Set;
@@ -167,7 +169,8 @@ public class Cart implements Serializable {
 	/**
 	 * 购物车明细
 	 */
-	@OneToMany(mappedBy = "cart", cascade = { CascadeType.REFRESH }, fetch = FetchType.EAGER)
+	@OneToMany(mappedBy = "cart",  cascade = { CascadeType.REFRESH, CascadeType.PERSIST, CascadeType.REMOVE,
+			CascadeType.MERGE }, fetch = FetchType.EAGER)
 	@OrderBy("number")
 	private Set<CartDetail> cartDetails;
 

+ 6 - 2
src/main/java/com/uas/platform/b2b/model/EnterpriseDetail.java

@@ -1,11 +1,11 @@
 package com.uas.platform.b2b.model;
 
+import org.springframework.util.CollectionUtils;
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import org.springframework.util.CollectionUtils;
-
 
 /**
  * 企业信息明细对外查询接口的模型
@@ -22,6 +22,8 @@ public class EnterpriseDetail {
 	private String management; //经营模式
 	private String products;  //主营产品
 	private String infos;
+	private String businessCode; // 营业执照
+	private String corporation; // 法人代表
 	public String getName() {
 		return name;
 	}
@@ -82,6 +84,8 @@ public class EnterpriseDetail {
 		this.management=enterprise.getEnManagement();
 		this.products=enterprise.getEnProducts();
 		this.infos=enterprise.getEnInfo();
+		this.businessCode = enterprise.getEnBussinessCode();
+		this.corporation = enterprise.getEnCorporation();
 		
 	}
 

+ 3 - 1
src/main/java/com/uas/platform/b2b/model/PurchaseInquiryItem.java

@@ -605,7 +605,9 @@ public class PurchaseInquiryItem {
 							&& (this.inquiry.getCheck() == null || this.inquiry.getCheck() != Constant.YES)
 							&& this.agreed == null));
 		}
-		return this.status == Status.NOT_REPLY.value();
+		return this.status == Status.NOT_REPLY.value() || (this.status == Status.REPLIED.value()
+				&& (this.inquiry.getCheck() == null || this.inquiry.getCheck() != Constant.YES)
+				&& this.agreed == null);
 	}
 
     public static List<PurchaseInquiryItem> distinct(List<PurchaseInquiryItem> purcitems) {

+ 482 - 0
src/main/java/com/uas/platform/b2b/model/PurchaseOrderCart.java

@@ -0,0 +1,482 @@
+package com.uas.platform.b2b.model;
+
+import org.hibernate.annotations.Where;
+
+import javax.persistence.*;
+import java.util.Date;
+import java.util.Set;
+
+/**
+ * 平台里面,以供应商的角度来查看采购订单 <br>
+ * 级联采购明细<br>
+ * 已结案采购单
+ * 
+ * @author yingp
+ * 
+ */
+@Table(name = "purc$orders", indexes = { @Index(name = "purc$orders_date", columnList = "pu_date") })
+@Where(clause = "pu_status = 311")
+@Entity
+public class PurchaseOrderCart {
+
+	@Id
+	@Column(name = "pu_id")
+	private Long id;
+
+	/**
+	 * 采购企业UU
+	 */
+	@Column(name = "pu_enuu")
+	private Long enUU;
+
+	/**
+	 * 采购企业
+	 */
+	@OneToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH })
+	@JoinColumn(name = "pu_enuu", insertable = false, updatable = false)
+	private EnterpriseInfo enterprise;
+
+	/**
+	 * 采购单所属采购员
+	 */
+	@OneToOne(cascade = { CascadeType.REFRESH })
+	@JoinColumn(name = "pu_useruu", insertable = false, updatable = false)
+	private UserBaseInfo user;
+
+	/**
+	 * 采购单所属采购员UU
+	 */
+	@Column(name = "pu_useruu")
+	private Long userUU;
+
+	/**
+	 * 采购单号
+	 */
+	@Column(name = "pu_code")
+	private String code;
+
+	/**
+	 * 采购类型
+	 */
+	@Column(name = "pu_type")
+	private String type;
+
+	/**
+	 * 单据归属日期
+	 */
+	@Column(name = "pu_date")
+	private Date date;
+
+	/**
+	 * 录单人
+	 */
+	@Column(name = "pu_recorder")
+	private String recorder;
+
+	/**
+	 * 审核人
+	 */
+	@Column(name = "pu_auditor")
+	private String auditor;
+
+	/**
+	 * 供应商UU
+	 */
+	@Column(name = "pu_venduu")
+	private Long vendUU;
+
+	/**
+	 * 供应商联系人UU
+	 */
+	@Column(name = "pu_venduseruu")
+	private Long vendUserUU;
+
+	/**
+	 * 收货地址
+	 */
+	@Column(name = "pu_shipaddress")
+	private String shipAddress;
+
+	/**
+	 * 备注
+	 */
+	@Column(name = "pu_remark")
+	private String remark;
+
+	/**
+	 * 付款币种
+	 */
+	@Column(name = "pu_currency")
+	private String currency;
+
+	/**
+	 * 汇率
+	 */
+	@Column(name = "pu_rate")
+	private Float rate;
+
+	/**
+	 * 付款方式
+	 */
+	@Column(name = "pu_payments")
+	private String payments;
+
+	/**
+	 * 处理状态(已回复、未回复),全部回复后改为已回复
+	 */
+	@Column(name = "pu_status")
+	private Short status;
+
+	/**
+	 * 从平台传到供应商ERP的状态
+	 */
+	@Column(name = "pu_sendstatus")
+	private Short sendStatus;
+
+	/**
+	 * 采购单明细
+	 */
+	@OneToMany(mappedBy = "order", cascade = { CascadeType.REFRESH, CascadeType.PERSIST, CascadeType.REMOVE,
+			CascadeType.MERGE }, fetch = FetchType.EAGER)
+	@OrderBy("number")
+	private Set<PurchaseOrderCartItem> orderItems;
+
+	/**
+	 * 1表示该采购单的明细至少有一条结案的情况
+	 */
+	@Column(name = "pu_end")
+	private Short end;
+	
+	/**
+	 * 显示状态(0 已查看 , 1 未查看, 2 置顶)
+	 */
+	@Column(name = "pu_display")
+	private Short display;
+
+	public Short getCustPrint() {
+		return custPrint;
+	}
+
+	public void setCustPrint(Short custPrint) {
+		this.custPrint = custPrint;
+	}
+
+	/**
+	 * 打印次数(供应商)
+	 */
+	@Column(name = "pu_print")
+	private Short print;
+
+	/**
+	 * 打印次数(采购方)
+	 */
+	@Column(name = "pu_custprint")
+	private Short custPrint;
+
+	/**
+	 * 应付供应商名称
+	 */
+	@Column(name = "pu_receivename")
+	private String receiveName;
+
+	/**
+	 * 客户公司名称
+	 */
+	@Column(name = "pu_cop")
+	private String cop;
+
+	/**
+	 * 应付供应商编号
+	 */
+	@Column(name = "pu_receivecode")
+	private String receiveCode;
+	
+	/**
+	 * 供应商名称
+	 */
+	@Transient
+	private String enName;
+
+	@Column(name = "pu_purpose")
+	private String purpose; // 用途,
+
+	@Column(name = "pu_arcustcode")
+	private String arCustCode; // 买家应收客户,
+
+	@Column(name = "pu_shcustcode")
+	private String shCustCode; // 收货客户,
+
+	@Column(name = "pu_refcode")
+	private String refCode; // 销售单号
+
+	@Column(name = "pu_custcode")
+	private String custCode; // 客户编号,
+
+	@Column(name = "pu_custname")
+	private String custName; // 客户名称。
+
+	public String getPurpose() {
+		return purpose;
+	}
+
+	public void setPurpose(String purpose) {
+		this.purpose = purpose;
+	}
+
+	public String getArCustCode() {
+		return arCustCode;
+	}
+
+	public void setArCustCode(String arCustCode) {
+		this.arCustCode = arCustCode;
+	}
+
+	public String getShCustCode() {
+		return shCustCode;
+	}
+
+	public void setShCustCode(String shCustCode) {
+		this.shCustCode = shCustCode;
+	}
+
+	public String getRefCode() {
+		return refCode;
+	}
+
+	public void setRefCode(String refCode) {
+		this.refCode = refCode;
+	}
+
+	public String getCustCode() {
+		return custCode;
+	}
+
+	public void setCustCode(String custCode) {
+		this.custCode = custCode;
+	}
+
+	public String getCustName() {
+		return custName;
+	}
+
+	public void setCustName(String custName) {
+		this.custName = custName;
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getEnUU() {
+		return enUU;
+	}
+
+	public void setEnUU(Long enUU) {
+		this.enUU = enUU;
+	}
+
+	public EnterpriseInfo getEnterprise() {
+		return enterprise;
+	}
+
+	public void setEnterprise(EnterpriseInfo enterprise) {
+		this.enterprise = enterprise;
+	}
+
+	public UserBaseInfo getUser() {
+		return user;
+	}
+
+	public void setUser(UserBaseInfo user) {
+		this.user = user;
+	}
+
+	public Long getUserUU() {
+		return userUU;
+	}
+
+	public void setUserUU(Long userUU) {
+		this.userUU = userUU;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public Date getDate() {
+		return date;
+	}
+
+	public void setDate(Date date) {
+		this.date = date;
+	}
+
+	public String getRecorder() {
+		return recorder;
+	}
+
+	public void setRecorder(String recorder) {
+		this.recorder = recorder;
+	}
+
+	public String getAuditor() {
+		return auditor;
+	}
+
+	public void setAuditor(String auditor) {
+		this.auditor = auditor;
+	}
+
+	public Long getVendUU() {
+		return vendUU;
+	}
+
+	public void setVendUU(Long vendUU) {
+		this.vendUU = vendUU;
+	}
+
+	public Long getVendUserUU() {
+		return vendUserUU;
+	}
+
+	public void setVendUserUU(Long vendUserUU) {
+		this.vendUserUU = vendUserUU;
+	}
+
+	public String getShipAddress() {
+		return shipAddress;
+	}
+
+	public void setShipAddress(String shipAddress) {
+		this.shipAddress = shipAddress;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public String getCurrency() {
+		return currency;
+	}
+
+	public void setCurrency(String currency) {
+		this.currency = currency;
+	}
+
+	public Float getRate() {
+		return rate;
+	}
+
+	public void setRate(Float rate) {
+		this.rate = rate;
+	}
+
+	public String getPayments() {
+		return payments;
+	}
+
+	public void setPayments(String payments) {
+		this.payments = payments;
+	}
+
+	public Short getStatus() {
+		return status;
+	}
+
+	public void setStatus(Short status) {
+		this.status = status;
+	}
+
+	public Short getSendStatus() {
+		return sendStatus;
+	}
+
+	public void setSendStatus(Short sendStatus) {
+		this.sendStatus = sendStatus;
+	}
+
+	public Set<PurchaseOrderCartItem> getOrderItems() {
+		return orderItems;
+	}
+
+	public void setOrderItems(Set<PurchaseOrderCartItem> orderItems) {
+		this.orderItems = orderItems;
+	}
+
+	public Short getEnd() {
+		return end;
+	}
+
+	public void setEnd(Short end) {
+		this.end = end;
+	}
+
+	public Short getDisplay() {
+		if(this.display == null) this.display = 0;
+		return display;
+	}
+
+	public void setDisplay(Short display) {
+		this.display = display;
+	}
+
+	public Short getPrint() {
+		return print;
+	}
+
+	public void setPrint(Short print) {
+		this.print = print;
+	}
+
+	public String getReceiveName() {
+		return receiveName;
+	}
+
+	public void setReceiveName(String receiveName) {
+		this.receiveName = receiveName;
+	}
+
+	public String getReceiveCode() {
+		return receiveCode;
+	}
+
+	public void setReceiveCode(String receiveCode) {
+		this.receiveCode = receiveCode;
+	}
+
+	public String getEnName() {
+		return enName;
+	}
+
+	public void setEnName(String enName) {
+		this.enName = enName;
+	}
+
+	public String getCop() {
+		return cop;
+	}
+
+	public void setCop(String cop) {
+		this.cop = cop;
+	}
+}

+ 331 - 0
src/main/java/com/uas/platform/b2b/model/PurchaseOrderCartItem.java

@@ -0,0 +1,331 @@
+package com.uas.platform.b2b.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import org.codehaus.jackson.annotate.JsonIgnore;
+import org.hibernate.annotations.Where;
+
+import javax.persistence.*;
+import java.util.Date;
+
+@Table(name = "purc$orderitems")
+@Entity
+public class PurchaseOrderCartItem {
+
+	@Id
+	@Column(name = "pd_id")
+	private Long id;
+
+	/**
+	 * 序号
+	 */
+	@Column(name = "pd_number")
+	private Short number;
+
+	/**
+	 * 采购订单
+	 */
+	@ManyToOne(cascade = CascadeType.ALL, optional = true)
+	@JoinColumn(name = "pd_puid", nullable = false)
+	private PurchaseOrderCart order;
+
+	/**
+	 * 产品ID
+	 */
+	@Column(name = "pd_prid")
+	private Long productId;
+
+	/**
+	 * 产品
+	 */
+	@OneToOne(cascade = { CascadeType.REFRESH })
+	@JoinColumn(name = "pd_prid", insertable = false, updatable = false)
+	private Product product;
+
+	/**
+	 * 数量
+	 */
+	@Column(name = "pd_qty")
+	private Double qty;
+
+	/**
+	 * 已回复的数量
+	 */
+	@Column(name = "pd_replyqty")
+	private Double replyQty;
+
+	/**
+	 * (最近一次)回复的交期
+	 */
+	@Column(name = "pd_replydelivery")
+	private Date replyDelivery;
+
+	/**
+	 * (最近一次)回复的备注
+	 */
+	@Column(name = "pd_replyremark")
+	private String replyRemark;
+
+	/**
+	 * 备注
+	 */
+	@Column(name = "pd_remark")
+	private String remark;
+
+	/**
+	 * 送货工厂
+	 */
+	@Column(name = "pd_factory")
+	private String factory;
+
+	/**
+	 * 供应商规格
+	 */
+	@Column(name = "pd_vendspec")
+	private String vendspec;
+
+	public String getVendspec() {
+		return vendspec;
+	}
+
+	public void setVendspec(String vendspec) {
+		this.vendspec = vendspec;
+	}
+
+	/**
+	 * 含税单价
+	 */
+	@Column(name = "pd_price")
+	private Double price;
+
+	/**
+	 * 税率
+	 */
+	@Column(name = "pd_taxrate")
+	private Float taxrate;
+
+	/**
+	 * 处理状态(已回复、未回复),全部回复后改为已回复
+	 */
+	@Column(name = "pd_status", insertable = false, updatable = false)
+	private Short status;
+
+	/**
+	 * 含税金额
+	 */
+	@Column(name = "pd_amount", insertable = false, updatable = false)
+	private Double amount;
+
+	/**
+	 * 不含税单价
+	 */
+	@Column(name = "pd_notaxprice", insertable = false, updatable = false)
+	private Double noTaxPrice;
+
+	/**
+	 * 不含税金额
+	 */
+	@Column(name = "pd_notaxamount", insertable = false, updatable = false)
+	private Double noTaxAmount;
+
+	/**
+	 * 交货日期
+	 */
+	@Column(name = "pd_delivery")
+	private Date delivery;
+
+	/**
+	 * 客户已验收数量
+	 */
+	@Column(name = "pd_acceptqty")
+	private Double acceptQty;
+
+	/**
+	 * 客户验退数量
+	 */
+	@Column(name = "pd_returnqty")
+	private Double returnQty;
+
+	/**
+	 * 关键词查询相关
+	 */
+	@Transient
+	private Boolean key;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Short getNumber() {
+		return number;
+	}
+
+	public void setNumber(Short number) {
+		this.number = number;
+	}
+
+	public Long getProductId() {
+		return productId;
+	}
+
+	public void setProductId(Long productId) {
+		this.productId = productId;
+	}
+
+	public Product getProduct() {
+		return product;
+	}
+
+	public void setProduct(Product product) {
+		this.product = product;
+	}
+
+	public Double getQty() {
+		return qty;
+	}
+
+	public void setQty(Double qty) {
+		this.qty = qty;
+	}
+
+	public Double getReplyQty() {
+		return replyQty;
+	}
+
+	public void setReplyQty(Double replyQty) {
+		this.replyQty = replyQty;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public Double getPrice() {
+		return price;
+	}
+
+	public void setPrice(Double price) {
+		this.price = price;
+	}
+
+	public Float getTaxrate() {
+		return taxrate;
+	}
+
+	public void setTaxrate(Float taxrate) {
+		this.taxrate = taxrate;
+	}
+
+	public Double getAmount() {
+		return amount;
+	}
+
+	public void setAmount(Double amount) {
+		this.amount = amount;
+	}
+
+	public Double getNoTaxPrice() {
+		return noTaxPrice;
+	}
+
+	public void setNoTaxPrice(Double noTaxPrice) {
+		this.noTaxPrice = noTaxPrice;
+	}
+
+	public Double getNoTaxAmount() {
+		return noTaxAmount;
+	}
+
+	public void setNoTaxAmount(Double noTaxAmount) {
+		this.noTaxAmount = noTaxAmount;
+	}
+
+	public Date getDelivery() {
+		return delivery;
+	}
+
+	public void setDelivery(Date delivery) {
+		this.delivery = delivery;
+	}
+
+	public Date getReplyDelivery() {
+		return replyDelivery;
+	}
+
+	public void setReplyDelivery(Date replyDelivery) {
+		this.replyDelivery = replyDelivery;
+	}
+
+	public String getReplyRemark() {
+		return replyRemark;
+	}
+
+	public void setReplyRemark(String replyRemark) {
+		this.replyRemark = replyRemark;
+	}
+
+	public Short getStatus() {
+		return status;
+	}
+
+	public void setStatus(Short status) {
+		this.status = status;
+	}
+
+	@JsonIgnore
+	@JSONField(serialize = false)
+	public PurchaseOrderCart getOrder() {
+		return order;
+	}
+
+	public void setOrder(PurchaseOrderCart order) {
+		this.order = order;
+	}
+
+	public Double getAcceptQty() {
+		return acceptQty;
+	}
+
+	public void setAcceptQty(Double acceptQty) {
+		this.acceptQty = acceptQty;
+	}
+
+	public Double getReturnQty() {
+		return returnQty;
+	}
+
+	public void setReturnQty(Double returnQty) {
+		this.returnQty = returnQty;
+	}
+
+	public Boolean getKey() {
+		return key;
+	}
+
+	public void setKey(Boolean key) {
+		this.key = key;
+	}
+
+	public String getFactory() {
+		return factory;
+	}
+
+	public void setFactory(String factory) {
+		this.factory = factory;
+	}
+
+	public double getBalance() {
+		double qtyNum, returnQtyNum, acceptQtyNum;
+		qtyNum = qty == null ? 0 : qty;
+		returnQtyNum = returnQty == null ? 0 : returnQty;
+		acceptQtyNum = acceptQty == null ? 0 : acceptQty;
+		return qtyNum + returnQtyNum - acceptQtyNum;
+	}
+}

+ 21 - 5
src/main/java/com/uas/platform/b2b/model/QueriableMember.java

@@ -1,11 +1,11 @@
 package com.uas.platform.b2b.model;
 
+import org.springframework.util.CollectionUtils;
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import org.springframework.util.CollectionUtils;
-
 /**
  * 企业信息对外查询接口的模型
  * 
@@ -18,6 +18,8 @@ public class QueriableMember {
 	private String shortName;
 	private Long uu;
 	private String address;
+	private String businessCode; // 营业执照
+	private String corporation; // 法人代表
 
 	public String getName() {
 		return name;
@@ -51,15 +53,29 @@ public class QueriableMember {
 		this.address = address;
 	}
 
-	public QueriableMember() {
+    public String getBusinessCode() {
+        return businessCode;
+    }
 
-	}
+    public void setBusinessCode(String businessCode) {
+        this.businessCode = businessCode;
+    }
+
+    public String getCorporation() {
+        return corporation;
+    }
+
+    public void setCorporation(String corporation) {
+        this.corporation = corporation;
+    }
 
-	public QueriableMember(Enterprise enterprise) {
+    public QueriableMember(Enterprise enterprise) {
 		this.name = enterprise.getEnName();
 		this.shortName = enterprise.getEnShortname();
 		this.uu = enterprise.getUu();
 		this.address = enterprise.getEnAddress();
+		this.corporation = enterprise.getEnCorporation();
+		this.businessCode = enterprise.getEnBussinessCode();
 	}
 
 	public static List<EnterpriseDetail> getMembers(Collection<Enterprise> enterprises) {

+ 3 - 5
src/main/java/com/uas/platform/b2b/model/SaleTender.java

@@ -73,7 +73,7 @@ public class SaleTender implements Serializable, Comparable<SaleTender> {
      */
     @OneToOne
     @JoinColumn(name = "st_useruu", insertable = false, updatable = false)
-    private User userInfo;
+    private UserBaseInfo userInfo;
 
     /**
      * 招标发起人uu
@@ -406,13 +406,11 @@ public class SaleTender implements Serializable, Comparable<SaleTender> {
         this.useruu = useruu;
     }
 
-    @JsonIgnore
-    @JSONField(serialize = false)
-    public User getUserInfo() {
+    public UserBaseInfo getUserInfo() {
         return userInfo;
     }
 
-    public void setUserInfo(User userInfo) {
+    public void setUserInfo(UserBaseInfo userInfo) {
         this.userInfo = userInfo;
     }
 

+ 9 - 5
src/main/java/com/uas/platform/b2b/service/PurchaseTenderService.java

@@ -1,6 +1,10 @@
 package com.uas.platform.b2b.service;
 
-import com.uas.platform.b2b.model.*;
+import com.uas.platform.b2b.erp.model.SaleTenderErp;
+import com.uas.platform.b2b.model.Attach;
+import com.uas.platform.b2b.model.FileUpload;
+import com.uas.platform.b2b.model.PurchaseTender;
+import com.uas.platform.b2b.model.SearchFilter;
 import com.uas.platform.b2b.temporary.model.TenderContactInfo;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.search.b2b.model.SPage;
@@ -35,11 +39,9 @@ public interface PurchaseTenderService {
      * 投标
      *
      *
-     * @param tenderItems
-     * @param enBaseInfo
      * @return
      */
-    void reply(List<SaleTenderItem> tenderItems, EnterpriseBaseInfo enBaseInfo, List<Attach> attaches, SaleTender saleTender);
+    void reply(SaleTenderErp saleTender);
 
 //    /**
 //     * 根据id获取投标单
@@ -204,5 +206,7 @@ public interface PurchaseTenderService {
 
     SPage<PurchaseTender> findAllBySaleTenderPageInfo(PageInfo pageInfo, SearchFilter filter);
 
-    SaleTender findMySaleTenderDetailByTenderId(Long tenderId);
+    ModelMap findMySaleTenderDetailByTenderId(Long tenderId);
+
+    ModelMap findVendorSaleTenderDetailByTenderId(Long vendUU, Long tenderId);
 }

+ 16 - 2
src/main/java/com/uas/platform/b2b/service/RoleService.java

@@ -1,8 +1,9 @@
 package com.uas.platform.b2b.service;
 
-import java.util.List;
-
 import com.uas.platform.b2b.model.Role;
+import org.springframework.ui.ModelMap;
+
+import java.util.List;
 
 public interface RoleService {
 
@@ -50,4 +51,17 @@ public interface RoleService {
 	 */
 	public void delete(long id);
 
+	/**
+	 * 查询当前用户在当前企业的角色是否是管理员或者销售经理
+	 *
+	 * @return
+	 */
+	public ModelMap getCurrentRoles();
+
+	/**
+	 * 判断是否是当前企业的管理员
+	 *
+	 * @return
+	 */
+	ModelMap isManager();
 }

+ 13 - 1
src/main/java/com/uas/platform/b2b/service/impl/BaseInfoServiceImpl.java

@@ -500,6 +500,13 @@ public class BaseInfoServiceImpl implements BaseInfoService {
 		if (!CollectionUtils.isEmpty(details.getContent())) {
 			for (com.uas.account.entity.UserSpaceDetail detail : details.getContent()) {
 				UserSpaceDetail spacetDetail = new UserSpaceDetail();
+				if (null != detail.getBusinessCode() && !"None".equals(detail.getBusinessCode())) {
+					List<Enterprise> enterprises = enterpriseDao.findByEnBussinessCodeAndEnName(detail.getBusinessCode(), detail.getName());
+					// 根据营业执照和企业名找到唯一企业时,才设置
+					if (enterprises.size() == 1) {
+						spacetDetail.setUu(enterprises.get(0).getUu());
+					}
+				}
 				spacetDetail.setAddress(detail.getAddress());
 				spacetDetail.setAdminEmail(detail.getAdminEmail());
 				spacetDetail.setAdminName(detail.getAdminName());
@@ -608,7 +615,12 @@ public class BaseInfoServiceImpl implements BaseInfoService {
 					orderDetail.setNumber(i);
 					orderDetail.setPuid(order.getId());
 					orderDetail.setPrice(Double.valueOf(orderitem.getPrice()));
-					orderDetail.setTaxrate(orderitem.getTaxrate());
+					// 这里根据币别设置税率信息,非RMB全部设置0
+					if(!order.getCurrency().equals("RMB")) {
+						orderDetail.setTaxrate((float) 0);
+					} else {
+						orderDetail.setTaxrate(orderitem.getTaxrate());
+					}
 				} else {
 					orderDetail = purchaseOrderAllItemDao.findOne(orderitem.getId());
 					orderDetail.setRemark(orderitem.getRemark());

+ 16 - 20
src/main/java/com/uas/platform/b2b/service/impl/CartServiceImpl.java

@@ -2,9 +2,11 @@ package com.uas.platform.b2b.service.impl;
 
 import com.uas.platform.b2b.dao.PurchaseOrderAllDao;
 import com.uas.platform.b2b.dao.PurchaseOrderAllItemDao;
+import com.uas.platform.b2b.dao.PurchaseOrderCartDao;
 import com.uas.platform.b2b.dao.VendorDao;
 import com.uas.platform.b2b.model.PurchaseOrderAll;
 import com.uas.platform.b2b.model.PurchaseOrderAllItem;
+import com.uas.platform.b2b.model.PurchaseOrderCart;
 import com.uas.platform.b2b.model.Vendor;
 import com.uas.platform.b2b.service.CartService;
 import com.uas.platform.b2b.support.SystemSession;
@@ -44,6 +46,9 @@ public class CartServiceImpl implements CartService {
 	@Autowired
 	private PurchaseOrderAllDao purchaseOrderAllDao;
 
+	@Autowired
+	private PurchaseOrderCartDao cartDao;
+
 	@Override
 	public SPage<PurchaseOrderAll> getCartList(PageParams params, String keyword) {
 		SPage<PurchaseOrderAll> orders = new SPage<PurchaseOrderAll>();
@@ -85,16 +90,13 @@ public class CartServiceImpl implements CartService {
 	@Override
 	public ModelMap deleteCart(Long id) {
 		ModelMap map = new ModelMap();
-		PurchaseOrderAll purcOrder = purchaseOrderAllDao.findOne(id);
-		if (purcOrder != null && !CollectionUtils.isEmpty(purcOrder.getOrderItems())) {
-			purchaseOrderAllItemDao.delete(purcOrder.getOrderItems());
-			purchaseOrderAllDao.delete(id);
-		} else if (purcOrder != null && CollectionUtils.isEmpty(purcOrder.getOrderItems())) {
-			purchaseOrderAllDao.delete(id);
-		} else {
+		// 采用可以级联删除的dao方法,更加快速
+		try {
+			cartDao.delete(id);
+			map.put("success", "删除成功");
+		} catch (Exception e) {
 			map.put("error", "该单据不存在,可能已被删除");
 		}
-		map.put("success", "删除成功");
 		return map;
 	}
 
@@ -114,20 +116,14 @@ public class CartServiceImpl implements CartService {
 	@Override
 	public ModelMap deleteCarts() {
 		ModelMap map = new ModelMap();
-		List<PurchaseOrderAll> orders = purchaseOrderAllDao
-				.findByEnUUAndStatus(SystemSession.getUser().getEnterprise().getUu(), (short) Status.UNAUDIT.value());
+		List<PurchaseOrderCart> orders = cartDao.findByEnUUAndStatus(SystemSession.getUser().getEnterprise().getUu(), (short) Status.UNAUDIT.value());
 		if (!CollectionUtils.isEmpty(orders)) {
-			for (PurchaseOrderAll order : orders) {
-				if (!CollectionUtils.isEmpty(order.getOrderItems())) {
-					for (PurchaseOrderAllItem detail : order.getOrderItems()) {
-						purchaseOrderAllItemDao.delete(detail.getId());
-					}
-				}
+			try {
+				cartDao.delete(orders);
+				map.put("success", "购物车已清空");
+			} catch (Exception e) {
+				map.put("error", "购物车删除失败");
 			}
-			purchaseOrderAllDao.delete(orders);
-			map.put("success", "购物车已清空");
-		} else {
-			map.put("error", "购物车删除失败");
 		}
 		return map;
 	}

+ 43 - 15
src/main/java/com/uas/platform/b2b/service/impl/PurchaseTenderServiceImpl.java

@@ -3,6 +3,9 @@ package com.uas.platform.b2b.service.impl;
 import com.uas.platform.b2b.core.util.ContextUtils;
 import com.uas.platform.b2b.core.util.ThreadTask;
 import com.uas.platform.b2b.dao.*;
+import com.uas.platform.b2b.erp.model.PurchaseTenderErp;
+import com.uas.platform.b2b.erp.model.SaleTenderErp;
+import com.uas.platform.b2b.erp.model.SaleTenderItemErp;
 import com.uas.platform.b2b.event.PurchaseTenderDecideReleaseEvent;
 import com.uas.platform.b2b.event.PurchaseTenderSaveReleaseEvent;
 import com.uas.platform.b2b.model.*;
@@ -86,6 +89,12 @@ public class PurchaseTenderServiceImpl implements PurchaseTenderService {
     @Autowired
     private DistributeDao distributeDao;
 
+    @Autowired
+    private SaleTenderErpDao saleTenderErpDao;
+
+    @Autowired
+    private PurchaseTenderErpDao purchaseTenderErpDao;
+
 
     /**
      *  发布或保存(新录入单据)
@@ -660,14 +669,14 @@ public class PurchaseTenderServiceImpl implements PurchaseTenderService {
     /**
      * 投标
      *
-     * @param tenderItems  投标明细
-     * @param enBaseInfo  企业投标信息
      */
     @Override
-    public void reply(List<SaleTenderItem> tenderItems, EnterpriseBaseInfo enBaseInfo, List<Attach> attaches, SaleTender saleTender) {
-        enterpriseBaseInfoDao.save(enBaseInfo);
+    public void reply(SaleTenderErp saleTender) {
+        if (null != saleTender.getEnterpriseBaseInfo()) {
+            enterpriseBaseInfoDao.save(saleTender.getEnterpriseBaseInfo());
+        }
         Double totalMoney = 0d;
-        for (SaleTenderItem tenderItem : tenderItems) {
+        for (SaleTenderItemErp tenderItem : saleTender.getSaleTenderItems()) {
             SaleTenderItem saleTenderItem = saleTenderItemDao.findOne(tenderItem.getId());
             // 需要修改建索引主表中的字段来触发索引更新
             saleTenderItem.getTenderProd().getTender().setModified(new Date());
@@ -681,19 +690,20 @@ public class PurchaseTenderServiceImpl implements PurchaseTenderService {
                 saleTenderItemDao.save(saleTenderItem);
             }
         }
-        saleTender.setStatus("已投标");
-        saleTender.setModified(new Date());
-        Set<Attach> attachSet = new HashSet<>();
-        attachSet.addAll(attaches);
-        saleTender.setBidAttaches(attachSet);
-        saleTender.setTotalMoney(totalMoney);
-        saleTenderDao.save(saleTender);
+        SaleTender saleTender1 = saleTenderDao.findOne(saleTender.getId());
+        saleTender1.setStatus("已投标");
+        saleTender1.setModified(new Date());
+        saleTender1.setBidAttaches(saleTender.getBidAttaches());
+        saleTender1.setTotalMoney(totalMoney);
+        saleTender1.setCycle(saleTender.getCycle());
+        saleTender1.setTaxrate(saleTender.getTaxrate());
+        saleTenderDao.save(saleTender1);
     }
 
     private static Double mul(Double v1, Double v2) {
         BigDecimal b1 = new BigDecimal(v1.toString());
         BigDecimal b2 = new BigDecimal(v2.toString());
-        return b1.multiply(b2).doubleValue();
+        return b1.multiply(b2).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
     }
 
 
@@ -852,9 +862,27 @@ public class PurchaseTenderServiceImpl implements PurchaseTenderService {
     }
 
     @Override
-    public SaleTender findMySaleTenderDetailByTenderId(Long tenderId) {
+    public ModelMap findMySaleTenderDetailByTenderId(Long tenderId) {
+        ModelMap map = new ModelMap();
         Long vendUU = SystemSession.getUser().getEnterprise().getUu();
-        return saleTenderDao.findByPtId(tenderId, vendUU);
+        PurchaseTenderErp tender = purchaseTenderErpDao.findOne(tenderId);
+        SaleTenderErp saleTender = saleTenderErpDao.findByPtIdAndVendUU(tenderId, vendUU);
+        map.put("tender", tender);
+        map.put("saleTender", saleTender);
+        return map;
+    }
+
+    @Override
+    public ModelMap findVendorSaleTenderDetailByTenderId(Long vendUU, Long tenderId) {
+        ModelMap map = new ModelMap();
+        PurchaseTenderErp tender = purchaseTenderErpDao.findOne(tenderId);
+        SaleTenderErp saleTender = saleTenderErpDao.findByPtIdAndVendUU(tenderId, vendUU);
+        if (null == saleTender) {
+            saleTender = saleTenderErpDao.findByCodeAndEnUUAndVendUU(tender.getCode(), tender.getEnUU(), vendUU);
+        }
+        map.put("tender", tender);
+        map.put("saleTender", saleTender);
+        return map;
     }
 }
 

+ 11 - 0
src/main/java/com/uas/platform/b2b/service/impl/RoleServiceImpl.java

@@ -11,6 +11,7 @@ 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;
 
@@ -86,4 +87,14 @@ public class RoleServiceImpl implements RoleService {
 		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);
+	}
+
 }

+ 6 - 0
src/main/java/com/uas/platform/b2b/service/impl/UserServiceImpl.java

@@ -196,6 +196,12 @@ public class UserServiceImpl implements UserService {
 			newUser.setUserIdcode(user.getUserIdcode());
 			newUser.setEnterprise(SystemSession.getUser().getEnterprise());
 			newUser.setIp(SystemSession.getUser().getIp());
+			//只需要基本信息同步到账户中心
+			try {
+				postToAccountCenter(newUser);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
 			// 修改用户角色,只对用户的当前企业的角色进行修改
 			if (!CollectionUtils.isEmpty(user.getRoles())) {
 				Set<Role> existRoles = newUser.getRoles();

+ 54 - 0
src/main/java/com/uas/platform/b2b/temporary/model/UserSpaceDetail.java

@@ -48,6 +48,13 @@ public class UserSpaceDetail implements Serializable {
 	private String area;
 	private String industry;
 	private String domain;
+	private String contactMan;
+	private String contactTel;
+	private String contactEmail;
+	private String profession;
+	private String tags;
+
+	private Long uu;
 
 	@NotEmpty(message = "{us.admin.name.null}")
 	private String adminName;
@@ -457,4 +464,51 @@ public class UserSpaceDetail implements Serializable {
 		this.current = current;
 	}
 
+	public String getProfession() {
+		return profession;
+	}
+
+	public void setProfession(String profession) {
+		this.profession = profession;
+	}
+
+	public String getTags() {
+		return tags;
+	}
+
+	public void setTags(String tags) {
+		this.tags = tags;
+	}
+
+	public String getContactMan() {
+		return contactMan;
+	}
+
+	public void setContactMan(String contactMan) {
+		this.contactMan = contactMan;
+	}
+
+	public String getContactTel() {
+		return contactTel;
+	}
+
+	public void setContactTel(String contactTel) {
+		this.contactTel = contactTel;
+	}
+
+	public String getContactEmail() {
+		return contactEmail;
+	}
+
+	public void setContactEmail(String contactEmail) {
+		this.contactEmail = contactEmail;
+	}
+
+	public Long getUu() {
+		return uu;
+	}
+
+	public void setUu(Long uu) {
+		this.uu = uu;
+	}
 }

+ 1 - 0
src/main/java/com/uas/platform/b2b/v2/controller/EnterpriseController.java

@@ -84,6 +84,7 @@ public class EnterpriseController {
 		if (enterprise != null) {
 			enterprise.setEnName(userSpaceDetail.getName());
 			enterprise.setEnShortname(userSpaceDetail.getShortName());
+			enterprise.setEnAddress(userSpaceDetail.getAddress());
 			try {
 				enterpriseService.save(enterprise);
 				return "success";

+ 4 - 0
src/main/webapp/WEB-INF/web.xml

@@ -130,4 +130,8 @@
 		<filter-name>cors</filter-name>
 		<url-pattern>/*</url-pattern>
 	</filter-mapping>
+	<error-page>
+		<error-code>404</error-code>
+		<location>/static/tpl/error/index.html</location>
+	</error-page>
 </web-app>

+ 124 - 160
src/main/webapp/resources/js/index/app.js

@@ -1791,7 +1791,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
     app.controller('TenderCtrl', ['$scope', 'SnapshotService', function ($scope, SnapshotService) {
         // SnapshotService.getTender(250, function(data){
         //     $scope.tenders = data;
-        //     console.log(data);
         //     var newDate = new Date();
         //     newDate = newDate.setDate(newDate.getDate() - 3);
         //     angular.forEach($scope.tenders, function(tender) {
@@ -1825,12 +1824,18 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
     }]);
 
     // 客户
-    app.controller('CustomerCtrl', ['$scope', 'VendorService', 'BaseService', 'AuthenticationService', 'ngTableParams', '$modal', 'toaster', 'Vendor', 'AccountUser', function ($scope, VendorService, BaseService, AuthenticationService, ngTableParams, $modal, toaster, Vendor, AccountUser) {
+    app.controller('CustomerCtrl', ['$scope', 'VendorService', 'BaseService', 'AuthenticationService', 'ngTableParams', '$modal', 'toaster', 'Vendor', 'AccountUser', 'CurrentRole', function ($scope, VendorService, BaseService, AuthenticationService, ngTableParams, $modal, toaster, Vendor, AccountUser, CurrentRole) {
         BaseService.scrollBackToTop();
         $scope.userInfoResult = true;
         AuthenticationService.getAuthentication().success(function (data) {
             $scope.loading = false;
             $scope.thisUser = data;
+        });
+        // 获取当前用户分配客户的操作权限
+        CurrentRole.roles({}, function (data) {
+            $scope.enabled =  data.count > 0 ? true : false ;
+        }, function (response) {
+
         });
         var getCustInfos = function (custuu) {
             if (custuu) {
@@ -1874,8 +1879,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
             AccountUser.getEnTransfer ({custUU: customer.myEnterprise.uu}, function(data) {
                 customer.enTransfer = data.result;
                 //是管理员,或者被转移了权限时
-                console.log(customer.enTransfer);
-                if ($scope.thisUser.sys || customer.enTransfer) {
+                if ($scope.enabled || customer.enTransfer) {
                     var modalInstance = $modal.open({
                         animation: true,
                         templateUrl: 'static/tpl/index/account/add_userInfo.html',
@@ -2312,8 +2316,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                 }
             });
             $scope.transfer = transfer;
-            console.log($scope.havedone);
-            console.log($scope.transfer);
             $scope.isChanged = !angular.equals($scope.havedone, $scope.transfer);
         };
         $scope.isChanged = false;
@@ -2387,7 +2389,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                             toaster.pop('error', '保存失败', "您未选择权限转移对象");
                         } else {
                             $scope.loading = true;
-                            console.log($scope.target);
                             AccountUser.transferMyDistribute({custUU: customer.myEnterprise.uu, userUU: $scope.target.userUU}, {} ,function (data) {
                                 $scope.loading = false;
                                 toaster.pop('success', '提示', '保存成功');
@@ -2932,7 +2933,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                 getService()[getState($scope.active)].call(null, BaseService.parseParams(pageParams), function (page) {
                     $scope.loading = false;
                     if (page) {
-                    	console.log(page);
                         //获取每个明细单最新回复数
                         angular.forEach(page.content, function(order){
                             angular.forEach(order.orderItems, function(item){
@@ -3444,7 +3444,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
     }]);
 
     //客户采购询价
-    app.controller('SaleInquiryCtrl', ['$scope', '$filter', 'PurcInquiry', 'ngTableParams', 'toaster', 'BaseService', 'PurcInquiryInfo', '$upload', '$rootScope', 'token', function ($scope, $filter, PurcInquiry, ngTableParams, toaster, BaseService, PurcInquiryInfo, $upload, $rootScope, token) {
+    app.controller('SaleInquiryCtrl', ['$scope', '$filter', 'PurcInquiry', 'ngTableParams', 'toaster', 'BaseService', 'PurcInquiryInfo', '$upload', '$rootScope', 'token', '$timeout', function ($scope, $filter, PurcInquiry, ngTableParams, toaster, BaseService, PurcInquiryInfo, $upload, $rootScope, token, $timeout) {
         BaseService.scrollBackToTop();
         if ($rootScope.active) {
             $scope.active = $rootScope.active;
@@ -3653,7 +3653,8 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                 if ((i > 0 ? r.lapQty : 1) || r.price) {
                     replies.push(r);
                 }
-                if (i > 0 && r.lapQty <= item.replies[i - 1].lapQty || r.lapQty == null) {
+                // 直接比较是字符串比较,需要先转换再比较  2017年9月7日 15:05:51
+                if (i > 0 && parseInt(r.lapQty) <= parseInt(item.replies[i - 1].lapQty) || r.lapQty == null) {
                     valid = false;
                     validLapQty = r.lapQty;
                 }
@@ -3668,33 +3669,52 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                 }
                 $scope.loading = false;
             } else {
-                var file = item.myFiles, file = file && file.length > 0 ? file[0] : null;
-                $upload.upload({
-                    url: 'sale/inquiry/addAttach',
-                    file: file,
-                    method: 'POST',
-                    data: {
-                        item: item
-                    }
-                }).success(function (data) {
-                    if (data.item) {
-                        item = data.item;
-                    }
-                });
                 if (withSteps) { // 保存并报价
                     PurcInquiry.reply({itemId: item.id, token: $scope.token}, item, function () {
-                        $scope.loading = false;
-                        toaster.pop('info', '提示', '报价成功');
-                        $scope.tableParams.reload();
+                        var file = item.myFiles, file = file && file.length > 0 ? file[0] : null;
+                        $upload.upload({
+                            url: 'sale/inquiry/addAttach',
+                            file: file,
+                            method: 'POST',
+                            data: {
+                                item: item
+                            }
+                        }).success(function (data) {
+                            if (data.item) {
+                                item = data.item;
+                            }
+                            $scope.loading = false;
+                            toaster.pop('info', '提示', '报价成功');
+                            $scope.tableParams.reload();
+                        }).error(function (data) {
+                            $scope.loading = false;
+                            toaster.pop('error', '附件上传失败');
+                        });
                     }, function (response) {
                         $scope.loading = false;
                         toaster.pop('error', '询价失效', response.data);
                     });
                 } else {  // 保存
                     PurcInquiry.saveItem({itemId: item.id, token: $scope.token}, item, function () {
-                        $scope.loading = false;
-                        toaster.pop('info', '提示', '保存成功');
-                        $scope.tableParams.reload();
+                        var file = item.myFiles, file = file && file.length > 0 ? file[0] : null;
+                        $upload.upload({
+                            url: 'sale/inquiry/addAttach',
+                            file: file,
+                            method: 'POST',
+                            data: {
+                                item: item
+                            }
+                        }).success(function (data) {
+                            if (data.item) {
+                                item = data.item;
+                            }
+                            $scope.loading = false;
+                            toaster.pop('info', '提示', '保存成功');
+                            $scope.tableParams.reload();
+                        }).error(function (data) {
+                            $scope.loading = false;
+                            toaster.pop('error', '附件上传失败');
+                        });
                     }, function (response) {
                         $scope.loading = false;
                         toaster.pop('error', '保存失败', response.data);
@@ -3772,7 +3792,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                     attach.type = attach.name.substr(attach.name.lastIndexOf('.') + 1);
                 });
                 $scope.inquiry = inquiry;
-                console.log($scope.inquiry);
             });
         };
         loadData();
@@ -4052,7 +4071,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         };
 
         $scope.removeChecked = function () {
-            console.log($scope.vendors);
             if ($scope.vendors.length > 0) {
                 $scope.vendors = [];
                 $rootScope.tenderVendor = '';
@@ -4219,7 +4237,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
 
             modalInstance.result.then(function (data) {
                 angular.forEach(data, function (prod) {
-                    console.log(prod);
                     $scope.inquiry.inquiryItems.push(prod);
                     for (var i = 0; i < $scope.inquiry.inquiryItems.length; i++) {
                         if ($scope.inquiry.inquiryItems[i].prodCode == null) { // 如果没有填写就删除这行数据
@@ -4874,7 +4891,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         // };
 
         $scope.nowdate = new Date().getTime() - 24 * 3600 * 1000;
-        console.log($scope.nowdate);
         var getOpenState = function (active) {
             var fn = 'getOpenAll';
             switch (active) {
@@ -4951,7 +4967,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                 $scope.inquiryItem = data.inquiryItem;
                 if (data.id) {
                     $scope.id = data.id;
-                    console.log($scope.id);
                     $scope.currentHasBid = true;
                 }
             }, function (response) {
@@ -5785,7 +5800,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
 
         //是否不能被点击
         $scope.isDisabled = function () {
-        	console.log($scope.item);
             return $scope.item.quotation.status == 101 && $scope.item.agreed == null;
         }
 
@@ -8303,7 +8317,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         var loadData = function () {
             FaApBillOut.get({id:$stateParams.id},function (data) {
                 $scope.data = data;
-                console.log(data);
                 if($scope.data.status){
 
                 }else{
@@ -8474,7 +8487,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
 
                             });
                             $scope.data = data;
-                            console.log($scope.data);
                             $scope.checkboxes.checked = true;
                             $scope.getTotalMoney();
                         } else {
@@ -8502,7 +8514,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         $scope.checkAll = function () {
             $scope.totalMoney = 0;
             $scope.filteredData = $filter('filter')($scope.data, $scope.condition.prodTitle || $scope.condition.uuorname || $scope.condition.venduuorname ||  $scope.condition.prodSpec || $scope.condition.factory);
-            console.log($scope.filteredData );
             var uuorname = $scope.suuorname;
             var venduuorname = $scope.venduuorname;
             var dateFrom = $scope.condition.dateFrom;
@@ -8610,7 +8621,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                 //本次开票新的开票数
                 //$scope.thisBilledQty = 0;
                 if(checkItem.$selected == true) {
-                    console.log(checkItem);
                     $scope.apBillOut.custName = checkItem.apCheck.custName;
                     $scope.apBillOut.enUu = checkItem.apCheck.enUu;
 
@@ -8688,7 +8698,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                     }
 
                     //应收开票单明细行数据
-                    console.log(checkItem);
                     //$scope.item.orderCode = check.orderCode;
                     //$scope.item.orderClass = check.piClass;
                     //$scope.item.orderDetno = check.orderDetno;
@@ -8859,7 +8868,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         var loadData = function () {
             FaApBill.get({id: $stateParams.id}, function (data) {
                 $scope.bill = data;
-                console.log(data);
                 $scope.loading = false;
             });
         };
@@ -10077,7 +10085,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
 
     }]);
 
-    app.controller('UserCtrl', ['$scope', '$filter', 'AuthenticationService', 'AccountUser', 'BaseService', 'ngTableParams', 'toaster', '$modal', '$http', 'ngAlert', 'AccountEnterprise', function ($scope, $filter, AuthenticationService, AccountUser, BaseService, ngTableParams, toaster, $modal, $http, ngAlert, AccountEnterprise) {
+    app.controller('UserCtrl', ['$scope', '$filter', 'AuthenticationService', 'AccountUser', 'BaseService', 'ngTableParams', 'toaster', '$modal', '$http', 'ngAlert', 'AccountEnterprise', 'CurrentRole', function ($scope, $filter, AuthenticationService, AccountUser, BaseService, ngTableParams, toaster, $modal, $http, ngAlert, AccountEnterprise, CurrentRole) {
         BaseService.scrollBackToTop();
         $scope.editing = false;
         $scope.loading = true;
@@ -10094,6 +10102,14 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
             $scope.user = data;
         });
         var users = [];
+
+        var getMangagerInfo = function() {
+            CurrentRole.isManager({}, function(data) {
+               $scope.isManager = data.isManager;
+            });
+        };
+        getMangagerInfo();
+
         $scope.tableParams = new ngTableParams({
             page: 1,
             count: 20,
@@ -10470,7 +10486,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
          setBtnTimeDown($scope.btnTimes);
          $scope.msgInfoError = false;
          },function(response){
-         console.log(response);
          $scope.loading = false;
          $scope.msgInfoError = false;
          $scope.sendCheckMsg = false;
@@ -10669,7 +10684,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
             if (save) {
                 if (user.userUU) {
                     user.roles = $scope.checked;
-                    console.log(user.roles);
                     AccountUser.update({}, user, function () {
                         toaster.pop('success', '提示', '保存成功');
                         $modalInstance.close(true);
@@ -13467,18 +13481,22 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
     app.controller('PurcUploadByBatchCtrl', ['$scope', 'toaster', '$upload', '$modalInstance', function ($scope, toaster, $upload, $modalInstance) {
         // 通过excel批量上传物料
         $scope.result = null;
+        $scope.loading = false;
         $scope.upload = function () {
+            $scope.loading = true;
             var file = $scope.myFiles[0];
             $upload.upload({
                 url: 'purchase/release/excel',
                 file: file,
                 method: 'POST'
             }).success(function (data) {
+                $scope.loading = false;
                 $scope.result = data;
                 $scope.success = $scope.result.success;
                 $scope.total = $scope.result.total;
                 $scope.alters = $scope.result.alters;
             }).error(function (response) {
+                $scope.loading = false;
                 toaster.pop('error', response.data || response);
             });
         };
@@ -13492,6 +13510,11 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
             $modalInstance.close($scope.result.products);
         }
 
+        // 点击确定时增加加载标志
+        $scope.addClass = function() {
+            $scope.loading = true;
+        }
+
         $scope.cancel = function () {
             $modalInstance.dismiss();
         }
@@ -15837,7 +15860,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                 toaster.pop('info', '提示', '交货时间未选择');
             } else {
                 angular.forEach($scope.deOrder.deputyOrderItems, function (orderitem, index) {
-                    console.log(orderitem);
                     if (orderitem.prodname == null) {
                         toaster.pop('info', '提示', '订单明细第' + (index + 1) + '行产品名称未填写');
                     } else if (orderitem.prodcode == null) {
@@ -16301,7 +16323,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                 toaster.pop('info', '提示', '交货时间未选择');
             } else {
                 angular.forEach($scope.deOrder.deputyOrderItems, function (orderitem, index) {
-                    console.log(orderitem);
                     if (orderitem.prodname == null) {
                         toaster.pop('info', '提示', '订单明细第' + (index + 1) + '行产品名称未填写');
                     } else if (orderitem.prodcode == null) {
@@ -16845,7 +16866,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         // $scope.onAssociateKindClick = function(kind, submit) {
         //     KindAPI.getParents({childId : kind.id}, {}, function(data) {
         //         $scope.actives = data;
-        //         console.log(data);
         //         var size = data.length;
         //         if (size > 0) {
         //             submit.gradeOneKiName = $scope.actives[0].nameCn;
@@ -16861,7 +16881,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         //                 }
         //             }
         //         }
-        //         console.log(submit);
         //     })
         // };
 
@@ -18103,20 +18122,12 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
      */
     app.controller('SaleVendorTenderDetailCtrl', ['$scope', '$filter', 'PurcTender', 'ngTableParams', 'toaster', 'BaseService', '$stateParams', '$modal', '$rootScope', function ($scope, $filter, PurcTender, ngTableParams, toaster, BaseService, $stateParams, $modal, $rootScope) {
         $scope.loading = true;
-        PurcTender.getOne({id: $stateParams.id}, function (data) {
-            $scope.bid = data;
-            var vendUU = Number($stateParams.vendUU);
-            angular.forEach(data.purchaseTenderProds, function (tenderProd) {
-                angular.forEach(tenderProd.saleTenderItems, function (saleTenderItem) {
-                    if (saleTenderItem.saleTender.vendUU === vendUU) {// 与传出的参数venUU相等,即为查看企业对应的明细
-                        tenderProd.currentItem = saleTenderItem;
-                        $scope.saleTender = saleTenderItem.saleTender;
-                        $scope.currentEnBaseInfo = saleTenderItem.saleTender.enterpriseBaseInfo;
-                    }
-                });
-            });
+        PurcTender.getVendorSaleTenderDetail({tenderId: $stateParams.id, vendUU:$stateParams.vendUU}, function (data) {
+            $scope.saleTender = data.saleTender;
+            $scope.tender = data.tender;
             $scope.loading = false;
         }, function (response) {
+            $scope.loading = false;
             toaster.pop('error', '数据加载失败', response.data);
         });
 
@@ -18130,47 +18141,14 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         if (!$scope.attaches) {
             $scope.attaches = []; // 存放上传了的附件
         }
-        $scope.loading = true;
-        // var staticItem = null;
-        // $scope.loading  = true;
-
-        // PurcTender.getItem({id: $stateParams.id}, function(data){
-        //     $scope.item = data; // 用于投标
-        //     if ($scope.item.enterpriseBaseInfo != null) {
-        //         $scope.itemStatusTodo = $scope.item.enterpriseBaseInfo.uu + "待投标";
-        //     }
-        //     staticItem = angular.copy(data);
-        //     $scope.loading  = false;
-        // }, function(response){
-        //     $scope.loading  = false;
-        //     toaster.pop('error', '数据加载失败', response.data);
-        // });
-
-        var sleep = function (d) {
-            for (var t = Date.now(); Date.now() - t <= d;);
-        };
-
         AccountEnterprise.get({}, function (data) {
             $scope.currentEn = data;
         });
 
-        PurcTender.getOne({id: $stateParams.id}, function (data) {
-            $scope.bid = data;
-            angular.forEach(data.purchaseTenderProds, function (tenderProd) {
-                angular.forEach(tenderProd.saleTenderItems, function (saleTenderItem) {
-                    if (!$scope.currentEn) {
-                        AccountEnterprise.get({}, function (data) {
-                            $scope.currentEn = data;
-                        });
-                    }
-                    if (saleTenderItem.saleTender.vendUU === $scope.currentEn.uu) {
-                        tenderProd.currentItem = saleTenderItem;
-                        $scope.saleTender = saleTenderItem.saleTender;
-                        $scope.attaches = saleTenderItem.saleTender.bidAttaches;
-                        $scope.currentEnBaseInfo = saleTenderItem.saleTender.enterpriseBaseInfo;
-                    }
-                });
-            });
+        $scope.loading = true;
+        PurcTender.getSaleTenderDetail({tenderId: $stateParams.id}, function (data) {
+            $scope.saleTender = data.saleTender;
+            $scope.tender = data.tender;
             $scope.loading = false;
         }, function (response) {
             $scope.loading = false;
@@ -18190,9 +18168,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
 
         $scope.removeAttach = function (attachId, index) {
             $scope.attaches.splice(index, 1);
-            // PurcTender.removeAttach({attachId : id}, {}, function() {
-            //
-            // });
         };
 
         var taxrateYes = false;
@@ -18200,37 +18175,33 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         var priceYes = false;
         $scope.canSave = false;
         $scope.validateThis = function (value, type) {
-            switch (type) {
-                case 'taxrate':
-                    var regex = /^\+?[0-9][0-9]{0,1}$/;
-                    if (regex.test(value)) {
-                        taxrateYes = true;
-                    } else {
-                        if (value) {
+            if ("" != value) {
+                switch (type) {
+                    case 'taxrate':
+                        var regex = /^\+?[0-9][0-9]{0,1}$/;
+                        if (regex.test(value)) {
+                            taxrateYes = true;
+                        } else {
                             toaster.pop('warning', '警告', '税率不合法,请重新填写');
                         }
-                    }
-                    break;
-                case 'cycle':
-                    regex = /^\+?[1-9][0-9]*$/;
-                    if (regex.test(value)) {
-                        cycleYes = true;
-                    } else {
-                        if (value) {
+                        break;
+                    case 'cycle':
+                        regex = /^\+?[1-9][0-9]*$/;
+                        if (regex.test(value)) {
+                            cycleYes = true;
+                        } else {
                             toaster.pop('warning', '警告', '周期不合法,请重新填写');
                         }
-                    }
-                    break;
-                case 'price':
-                    regex = /^(0|[0-9][0-9]{0,9})(\.[0-9]{1,6})?$/;
-                    if (regex.test(value) && value !== 0) {
-                        priceYes = true;
-                    } else {
-                        if (value) {
+                        break;
+                    case 'price':
+                        regex = /^(0|[0-9][0-9]{0,9})(\.[0-9]{1,6})?$/;
+                        if (regex.test(value) && value !== 0) {
+                            priceYes = true;
+                        } else {
                             toaster.pop('warning', '警告', '请确认单价是否填写正确');
                         }
-                    }
-                    break;
+                        break;
+                }
             }
         };
 
@@ -18244,55 +18215,52 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
             }
         };
 
-        $scope.validateProds = function (tenderProd) {
+        $scope.validateProds = function (saleTender) {
             $scope.canSave = true;
             var cycleRegex = /^\+?[1-9][0-9]*$/;
             var taxrateRegex = /^\+?[0-9][0-9]{0,1}$/;
             var priceRegex = /^(([0-9]+\.[0-9]{1,6})|([0-9]*[1-9][0-9]*\.[0-9]{1,6})|([0-9]*[1-9][0-9]*))$/; // 非零最多六位小数正实数
-            if ($scope.bid.ifAll == 1) { // 全包时需要所有信息都填写并合法才可以投标
+            if ($scope.tender.ifAll == 1) { // 全包时需要所有信息都填写并合法才可以投标
                 // 全包全部需要填写,且需要符合正则式
-                angular.forEach($scope.bid.purchaseTenderProds, function(prod) {
-                    if ((!prod.currentItem.cycle || !prod.currentItem.price) || (!cycleRegex.test(prod.currentItem.cycle) || !priceRegex.test(prod.currentItem.price))) {
+                angular.forEach(saleTender.saleTenderItems, function(item) {
+                    if ((!item.cycle || !item.price) || (!cycleRegex.test(item.cycle) || !priceRegex.test(item.price))) {
                         $scope.canSave = false;
                     }
                 });
-                if (!$scope.saleTender.cycle || !$scope.saleTender.taxrate || !cycleRegex.test($scope.saleTender.cycle) || !taxrateRegex.test($scope.saleTender.taxrate)) {
+                if (!saleTender.cycle || !saleTender.taxrate || !cycleRegex.test(saleTender.cycle) || !taxrateRegex.test(saleTender.taxrate)) {
                     $scope.canSave = false;
                 }
-            } else {
-                if (tenderProd.currentItem.cycle || tenderProd.currentItem.taxrate || tenderProd.currentItem.price) {
-                    // /^(0|[0-9][0-9]{0,9})(\.[0-9]{1,6})?$/;
-                    // 判断填写过的有为0或不符合正则式的,设置不能保存
-                    if (!cycleRegex.test(tenderProd.currentItem.cycle) || !taxrateRegex.test(tenderProd.currentItem.taxrate) || !priceRegex.test(tenderProd.currentItem.price)) {
-                        $scope.canSave = false;
-                    } else {
-                        $scope.canSave = true;
+            } else { // 非全包模式
+                angular.forEach(saleTender.saleTenderItems, function(item) {
+                    if (item.cycle || item.taxrate || item.price) {
+                        // /^(0|[0-9][0-9]{0,9})(\.[0-9]{1,6})?$/;
+                        // 判断填写过的有为0或不符合正则式的,设置不能保存
+                        if (!cycleRegex.test(item.cycle) || !taxrateRegex.test(item.taxrate) || !priceRegex.test(item.price)) {
+                            $scope.canSave = false;
+                        } else {
+                            $scope.canSave = true;
+                        }
                     }
-                }
+                });
             }
         };
 
         // 投标
-        $scope.bidIt = function (tender, currentEnBaseInfo, saleTender) {
+        $scope.bidIt = function (saleTender) {
             $scope.loading = true;
-            if (currentEnBaseInfo.enEstablishDate instanceof Date) {
-                currentEnBaseInfo.enEstablishDate = currentEnBaseInfo.enEstablishDate.getTime();
+            if (saleTender.enterpriseBaseInfo.enEstablishDate instanceof Date) {
+                saleTender.enterpriseBaseInfo.enEstablishDate = saleTender.enterpriseBaseInfo.enEstablishDate.getTime();
             }
-            var saleTenderItems = [];
-            angular.forEach(tender.purchaseTenderProds, function (tenderProd) {
-                if (tenderProd.currentItem) {
-                    if ("" !== tenderProd.currentItem.price && "" !== tenderProd.currentItem.taxrate && "" !== tenderProd.currentItem.cycle) {
-                        tenderProd.currentItem.saleTender = {};
-                        saleTenderItems.push(tenderProd.currentItem);
-                    }
+            saleTender.bidAttaches.push.apply(saleTender.bidAttaches, $scope.attaches);
+            angular.forEach(saleTender.saleTenderItems, function (item) {
+                item.tenderProd = {};
+                if ("" == item.price && "" == item.taxrate && "" == item.cycle) {
+                    item.price = 0;
+                    item.cycle = 0;
+                    item.taxrate = 0;
                 }
             });
-            PurcTender.reply({
-                tenderItems: saleTenderItems,
-                enBaseInfo: currentEnBaseInfo,
-                attaches: $scope.attaches,
-                saleTender: saleTender
-            }, {}, function (data) {
+            PurcTender.reply({}, saleTender, function (data) {
                 $scope.loading = false;
                 toaster.pop('info', '成功', '投标成功');
                 // $window.location.reload();
@@ -18356,7 +18324,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                     }
                 });
                 // $rootScope.tenderVendor = $scope.tenderProd.enterpriseBaseInfo;
-                // console.log($scope.tenderProd.enterpriseBaseInfo);
                 $scope.loading = false;
 
                 $scope.attaches = $scope.tender.tenderAttaches;
@@ -18464,7 +18431,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         //     var priceRegex = /^(([0-9]+\.[0-9]{1,6})|([0-9]*[1-9][0-9]*\.[0-9]{1,6})|([0-9]*[1-9][0-9]*))$/; // 非零最多六位小数正实数
         //     // /^(0|[0-9][0-9]{0,9})(\.[0-9]{1,6})?$/;
         //     // 判断填写过的有为0或不符合正则式的,设置不能保存
-        //     console.log(tenderProd.currentItem.cycle);
         //     if (tenderProd.currentItem.cycle !== null && (!cycleRegex.test(tenderProd.currentItem.cycle)) || (tenderProd.currentItem.taxrate !== null && !taxrateRegex.test(tenderProd.currentItem.taxrate)) || (tenderProd.currentItem.price !==null && (!priceRegex.test(tenderProd.currentItem.price) && tenderProd.currentItem.price !== 0))) {
         //         $scope.canSave = false;
         //     } else {
@@ -18935,7 +18901,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
             code: 'XJ' + $filter('date')(new Date(), 'yyMMddsss'),
             showdate: $filter('date')(new Date, 'yyyy-MM-dd'),
             priceType: '采购',
-            isOpen: 1,
+            isOpen: 0,
             invoice: 0,
             ifTax: 1,
             currency: 'RMB'
@@ -19111,7 +19077,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
 
             modalInstance.result.then(function (data) {
                 angular.forEach(data, function (prod) {
-                    console.log(prod);
                     $scope.inquiry.inquiryItems.push(prod);
                     for (var i = 0; i < $scope.inquiry.inquiryItems.length; i++) {
                         if ($scope.inquiry.inquiryItems[i].prodCode == null) { // 如果没有填写就删除这行数据
@@ -20359,7 +20324,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         //提交
         $scope.submit = function (prodInfo) {
             $scope.prodInfo.isPurchase = 1;
-            console.log(prodInfo);
             var file = $scope.myFiles, file = file && file.length > 0 ? file[0] : null;// 可以不传附件
             $upload.upload({
                 url: 'product/baseInfo/addNewProduct',

+ 13 - 1
src/main/webapp/resources/js/index/services/Account.js

@@ -39,5 +39,17 @@ define([ 'ngResource' ], function() {
 				method: 'GET'
 			}
 		})
-	}]);
+	}]).factory('CurrentRole', ['$resource', function($resource) {
+        return $resource('account/role', {}, {
+            //当前企业对应的角色是否是销售经理或管理员
+            roles: {
+                url: 'account/role/currentRole',
+                method: 'GET'
+            },
+			isManager: {
+            	url: 'account/role/isManager',
+				mehtod: 'GET'
+			}
+        })
+    }]);
 });

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

@@ -532,6 +532,14 @@ define([ 'ngResource'], function() {
                     tenderId: 'tenderId'
                 }
             },
+            getVendorSaleTenderDetail: {
+                url: 'tender/getVendorSaleTenderDetail/:vendUU/:tenderId',
+                method: 'GET',
+                params: {
+                	vendUU: 'vendUU',
+                    tenderId: 'tenderId'
+                }
+            },
             addItems: {
                 url: 'tender/addItems/:id',
                 method: 'POST',

+ 13 - 0
src/main/webapp/resources/tpl/error/index.html

@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>404</title>
+</head>
+<body>
+<script type="text/javascript">
+    //去除掉undefined
+    window.location.href=window.location.href.replace('/undefined', '#/index');
+</script>
+</body>
+</html>

+ 1 - 1
src/main/webapp/resources/tpl/index/approvalFlow/user.html

@@ -455,7 +455,7 @@
 						</td>
 						<!-- 系统管理员无法被编辑限制,因为用户反馈注册用户都是业务员,需要权限来保护隐私,所以拿掉这个限制 -->
 						<!-- ng-show="user.sys && enterprise.enAdminuu != u.userUU" -->
-						<td class="row-operator" >
+						<td class="row-operator" ng-show="isManager">
 							<a class="operator-trigger" href="javascript:void(0);"><i class="fa fa-pencil fa-lg" ng-show="(user.sys && enterprise.enAdminuu != u.userUU) || $data.length == 1"></i></a>
 							<ul class="list-unstyle list-inline operator-menu" ng-show="(user.sys && enterprise.enAdminuu != u.userUU) || $data.length == 1">
 								<li><a ng-click="editUserRole(u)"><i class="fa fa-fw fa-pencil-square-o" style="color: #fff"></i>编辑</a></li>

+ 5 - 1
src/main/webapp/resources/tpl/index/baseInfo/customersInfo.html

@@ -125,7 +125,7 @@
 				<div class="col-xs-9">
 					<div class="search">
 						<div class="form-group form-group-sm has-feedback" dropdown auto-close="outsideClick" on-toggle="searchAdvance=open">
-							<input type="search" class="form-control input-sm" ng-model="keyword" ng-search="onSearch()" placeholder="企业名称/营业执照/法人/联系人/企业UU" />
+							<input type="search" class="form-control input-sm" ng-model="keyword" ng-search="onSearch()" placeholder="输入企业名称等关键词进行搜索" />
 							<a class="btn input-group-addon" ng-click="onSearch()">搜索</a>
 						</div>
 					</div>
@@ -179,6 +179,10 @@
 								<div class="col-md-3"><span class="text-muted">电话:</span><span ng-bind="::customer.myUser.userTel"></span></div>
 								<div class="col-md-3"><span class="text-muted">邮箱:</span><span ng-bind="::customer.myUser.userEmail"></span></div>
 							</div>
+							<div class="row">
+								<div class="col-md-3"><span class="text-muted">行业:</span><span ng-bind="::customer.myEnterprise.profession"></span></div>
+								<div class="col-md-7"><span class="text-muted">主营业务:</span><span ng-bind="::customer.myEnterprise.tags"></span></div>
+							</div>
 							<div class="row">
 								<div class="col-md-12">
 									<span class="text-muted">企业地址:</span><span ng-bind="::customer.myEnterprise.enAddress"></span>

+ 12 - 8
src/main/webapp/resources/tpl/index/baseInfo/myRequest.html

@@ -346,7 +346,7 @@
 				<div class="col-xs-9">
 					<div class="search">
 						<div class="form-group form-group-sm has-feedback" dropdown auto-close="outsideClick" on-toggle="searchAdvance=open">
-							<input type="search" class="form-control input-sm" ng-model="keyword" ng-search="onSearch()" placeholder="企业名称/营业执照/法人/联系人/企业UU" />
+							<input type="search" class="form-control input-sm" ng-model="keyword" ng-search="onSearch()" placeholder="输入企业名称等关键词进行搜索" />
 							<a class="btn input-group-addon" ng-click="onSearch()">搜索</a>
 						</div>
 					</div>
@@ -367,16 +367,20 @@
 		<tr class="height72 order-hd" ng-dblclick="order.$collapsed=!order.$collapsed" ng-class="{'text-bold': order.display>0}">
 			<td class="first" colspan="4">
 				<div class="row">
-					<div ng-if="::request.vendUID" class="col-md-3"><span class="text-muted">营业执照:</span><span ng-bind="::request.vendUID"></span></div>
-					<div ng-if="::request.enterprise.enCorporation" class="col-md-3"><span class="text-muted">法定代表人:</span><span ng-bind="::request.enterprise.enCorporation"></span></div>
-					<div ng-if="::request.enterprise.uu" class="col-md-4"><span class="text-muted">企业UU:</span><span ng-bind="::request.enterprise.uu"></span></div>
+					<div class="col-md-3"><span class="text-muted">营业执照:</span><span ng-bind="::request.vendUID"></span></div>
+					<div class="col-md-3"><span class="text-muted">法定代表人:</span><span ng-bind="::request.enterprise.enCorporation"></span></div>
+					<div class="col-md-4"><span class="text-muted">企业UU:</span><span ng-bind="::request.enterprise.uu"></span></div>
 				</div>
 				<div class="row">
-					<div ng-if="::request.contact.userName" class="col-md-3"><span class="text-muted">联系人:</span><span ng-bind="::request.contact.userName"></span></div>
-					<div ng-if="::request.contact.userTel" class="col-md-3"><span class="text-muted">联系电话:</span><span ng-bind="::request.contact.userTel"></span></div>
-					<div ng-if="::request.contact.userEmail" class="col-md-4"><span class="text-muted">邮箱:</span><span ng-bind="::request.contact.userEmail"></span></div>
+					<div class="col-md-3"><span class="text-muted">联系人:</span><span ng-bind="::request.contact.userName"></span></div>
+					<div class="col-md-3"><span class="text-muted">联系电话:</span><span ng-bind="::request.contact.userTel"></span></div>
+					<div class="col-md-4"><span class="text-muted">邮箱:</span><span ng-bind="::request.contact.userEmail"></span></div>
 				</div>
-				<div ng-if="::request.enterprise.enAddress" class="row col-md-12"><span class="text-muted">企业地址:</span><span ng-bind="::request.enterprise.enAddress"></span></div>
+				<div class="row">
+					<div class="col-md-3"><span class="text-muted">行业:</span><span ng-bind="::request.enterprise.profession"></span></div>
+					<div class="col-md-7"><span class="text-muted">经营范围:</span><span ng-bind="::request.enterprise.tags"></span></div>
+				</div>
+				<div class="row col-md-12"><span class="text-muted">企业地址:</span><span ng-bind="::request.enterprise.enAddress"></span></div>
 			</td>
 			<td class="text-center">
 				<p ng-if="request.statusCode==313 && request.vendor != 1"><a class="btn label-success white" ng-click="addSupplier(request.vendUID)">添加供应商 </a></p>

+ 12 - 8
src/main/webapp/resources/tpl/index/baseInfo/newPartner.html

@@ -344,7 +344,7 @@
                 <div class="col-xs-9">
                     <div class="search">
                         <div class="form-group form-group-sm has-feedback" dropdown auto-close="outsideClick" on-toggle="searchAdvance=open">
-                            <input type="search" class="form-control input-sm" ng-model="keyword" ng-search="onSearch()" placeholder="企业名称/营业执照/法人/联系人/企业UU" />
+                            <input type="search" class="form-control input-sm" ng-model="keyword" ng-search="onSearch()" placeholder="输入企业名称等关键词进行搜索" />
                             <a class="btn input-group-addon" ng-click="onSearch()">搜索</a>
                         </div>
                     </div>
@@ -365,20 +365,24 @@
         <tr class="height72 order-hd" ng-dblclick="order.$collapsed=!order.$collapsed" ng-class="{'text-bold': order.display>0}">
             <td class="first" colspan="4">
                 <div class="row">
-                    <div ng-if="::request.vendUID" class="col-md-3"><span class="text-muted">营业执照:</span><span ng-bind="::request.vendUID"></span></div>
-                    <div ng-if="::request.enterprise.enCorporation" class="col-md-3"><span class="text-muted">法定代表人:</span><span ng-bind="::request.enterprise.enCorporation"></span></div>
-                    <div ng-if="::request.enterprise.uu" class="col-md-4"><span class="text-muted">企业UU:</span><span ng-bind="::request.enterprise.uu"></span></div>
+                    <div class="col-md-3"><span class="text-muted">营业执照:</span><span ng-bind="::request.vendUID"></span></div>
+                    <div class="col-md-3"><span class="text-muted">法定代表人:</span><span ng-bind="::request.enterprise.enCorporation"></span></div>
+                    <div class="col-md-4"><span class="text-muted">企业UU:</span><span ng-bind="::request.enterprise.uu"></span></div>
                 </div>
                 <span class="text-icon" ng-if="request.statusCode==313 && request.method == 1">已通过</span>
                 <span class="text-icon" ng-if="request.statusCode==310 && request.method==1">未通过</span>
                 <span class="text-icon" ng-if="request.statusCode==313 && request.method == 0">已同意</span>
                 <span class="text-icon" ng-if="request.statusCode==310 && request.method==0">已拒绝</span>
                 <div class="row">
-                    <div ng-if="::request.contact.userName" class="col-md-3"><span class="text-muted">联系人:</span><span ng-bind="::request.contact.userName"></span></div>
-                    <div ng-if="::request.contact.userTel" class="col-md-3"><span class="text-muted">联系电话:</span><span ng-bind="::request.contact.userTel"></span></div>
-                    <div ng-if="::request.contact.userEmail" class="col-md-4"><span class="text-muted">邮箱:</span><span ng-bind="::request.contact.userEmail"></span></div>
+                    <div class="col-md-3"><span class="text-muted">联系人:</span><span ng-bind="::request.contact.userName"></span></div>
+                    <div class="col-md-3"><span class="text-muted">联系电话:</span><span ng-bind="::request.contact.userTel"></span></div>
+                    <div class="col-md-4"><span class="text-muted">邮箱:</span><span ng-bind="::request.contact.userEmail"></span></div>
                 </div>
-                <div ng-if="::request.enterprise.enAddress" class="row col-md-12"><span class="text-muted">企业地址:</span><span ng-bind="::request.enterprise.enAddress"></span></div>
+                <div class="row">
+                    <div class="col-md-3"><span class="text-muted">行业:</span><span ng-bind="::request.enterprise.profession"></span></div>
+                    <div class="col-md-7"><span class="text-muted">主营业务:</span><span ng-bind="::request.enterprise.tags"></span></div>
+                </div>
+                <div class="row col-md-12"><span class="text-muted">企业地址:</span><span ng-bind="::request.enterprise.enAddress"></span></div>
             </td>
             <td width="140" class="text-center">
               <p ng-if="request.statusCode==313 && request.vendor == 0"><a class="btn label-success white" ng-click="addSupplier(request.vendUID)">添加供应商 </a></p>

+ 12 - 27
src/main/webapp/resources/tpl/index/baseInfo/searchresult.html

@@ -314,7 +314,7 @@
 				<div class="col-xs-9">
 					<div class="search">
 						<div class="form-group form-group-sm has-feedback" dropdown auto-close="outsideClick" on-toggle="searchAdvance=open">
-							<input type="search" class="form-control input-sm" ng-model="keyword" ng-search="onSearch(keyword)" placeholder="企业名称/营业执照/法人/联系人/企业UU" />
+							<input type="search" class="form-control input-sm" ng-model="keyword" ng-search="onSearch(keyword)" placeholder="输入企业名称等关键词进行搜索" />
 							<a class="btn input-group-addon" ng-click="onSearch(keyword)">搜索</a>
 						</div>
 					</div>
@@ -325,30 +325,10 @@
 			</div>
 		</div>
 	</div>
-<!--<div class="myReuest search-bg condition block" style="margin-bottom: 0;">
-		<div class="row">
-			<div class="col-xs-5">
-				<div class="search">
-					<div class="form-group form-group-sm has-feedback" dropdown auto-close="outsideClick" on-toggle="searchAdvance=open">
-						<input type="search" class="form-control input-sm" ng-model="keyword" ng-search="onSearch(keyword)" placeholder="输入企业名称、简称、管理员姓名进行搜索" />
-						<div id="searchContainer" class="dropdown-menu">
-						</div>
-						<a class="btn input-group-addon" ng-click="onSearch(keyword)">搜索</a>
-					</div>
-				</div>
-			</div>
-			<div class="col-xs-2">
-				<p>搜索到<em>{{tableParams.total()}}</em>条</p>
-			</div>
-			<div class="invite-right col-xs-5">
-				<p ng-if="tip != null && tableParams.total() > 0" style="float: right;"><a ng-click="invite(tip)" class="text-inverse">立即邀请</a><span class="invite-text">{{tip}}</span>注册优软云</p>
-			</div>
-		</div>
-	</div>-->
 <table class="enterprise-table block" ng-table="tableParams">
 	<tbody ng-repeat="enterprise in $data" class="company-list">
 		<tr class="enterprise-hd" ng-dblclick="enterprise.$collapsed=!enterprise.$collapsed">
-			<td colspan="4"><span ng-bind-html="::enterprise.name| getkey:keyword" class="text-center"></span><span ng-if="::enterprise.shortName != null">(<em ng-bind-html="::enterprise.shortName| getkey:keyword"></em>)</span><img src="static/img/logo/youruanrenzheng.png" id="logo" ng-if="enterprise.status == 313"></td>
+			<td colspan="4"><span ng-bind-html="::enterprise.name| getkey:keyword" class="text-center"></span>&nbsp;<img src="static/img/logo/youruanrenzheng.png" id="logo" ng-if="enterprise.status == 313"></td>
 			<td width="180" class="grey01 text-center" ng-if="enterprise.status != 313">当前企业不是优软云用户</td>
 			<td width="140" class="grey01 text-center" ng-if="enterprise.status == 313">优软云用户</td>
 		</tr>
@@ -356,14 +336,19 @@
 			<td class="product" colspan="4">
 				<div class="row">
 					<span class="col-md-3"><span class="text-muted">营业执照:</span><span ng-bind="::enterprise.businessCode" ></span></span>
-					<span class="col-md-3" ng-if="::enterprise.industry != null"><span class="text-muted">企业类型:</span><span class="text-muted" ng-bind="::enterprise.industry"></span></span>
+					<span class="col-md-3"><span class="text-muted">法定代表人:</span><span ng-bind="::enterprise.corporation" ></span></span>
+					<span class="col-md-3"><span class="text-muted">企业UU:</span><span ng-bind="::enterprise.uu" ></span></span>
 				</div>
 				<div class="row">
-					<span  ng-if="::enterprise.adminName != null" class="col-md-3"><span class="text-muted">管理员:</span><em ng-bind-html="::enterprise.adminName| getkey:keyword"></em></span>
-					<span ng-if="::enterprise.adminTel != null" class="col-md-3"><span class="text-muted">电话:</span>{{::enterprise.adminTel}}</span>
-					<span ng-if="::enterprise.adminEmail != null" class="col-md-5"><span class="text-muted">邮箱:</span>{{::enterprise.adminEmail}}</span>
+					<span class="col-md-3"><span class="text-muted">管理员:</span><em ng-bind-html="::enterprise.adminName| getkey:keyword"></em></span>
+					<span class="col-md-3"><span class="text-muted">电话:</span>{{::enterprise.adminTel}}</span>
+					<span class="col-md-5"><span class="text-muted">邮箱:</span>{{::enterprise.adminEmail}}</span>
 				</div>
-				<div class="row" ng-if="::enterprise.address != null">
+				<div class="row">
+					<span class="col-md-3"><span class="text-muted">行业:</span><span ng-bind="::enterprise.profession"></span></span>
+					<span class="col-md-8"><span class="text-muted">经营范围:</span><span ng-bind="::enterprise.tags"></span></span>
+				</div>
+				<div class="row">
 					<span class="col-md-12"><span class="text-muted">企业地址:</span><span ng-bind="::enterprise.address"></span></span>
 				</div>
 			</td>

+ 5 - 1
src/main/webapp/resources/tpl/index/baseInfo/servicerInfo.html

@@ -159,7 +159,7 @@
 				<div class="col-xs-9">
 					<div class="search">
 						<div class="form-group form-group-sm has-feedback" dropdown auto-close="outsideClick" on-toggle="searchAdvance=open">
-							<input type="search" class="form-control input-sm" ng-model="keyword" ng-search="onSearch(keyword)" placeholder="企业名称/营业执照/法人/联系人/企业UU" />
+							<input type="search" class="form-control input-sm" ng-model="keyword" ng-search="onSearch(keyword)" placeholder="输入企业名称等关键词进行搜索" />
 							<a class="btn input-group-addon" ng-click="onSearch(keyword)">搜索</a>
 						</div>
 					</div>
@@ -196,6 +196,10 @@
 								<div class="col-md-3"><span class="text-muted">电话:</span><span ng-bind="::vendor.vendorUser.userTel"></span></div>
 								<div class="col-md-3"><span class="text-muted">邮箱:</span><span ng-bind="::vendor.vendorUser.userEmail"></span></div>
 							</div>
+							<div class="row">
+								<div class="col-md-3"><span class="text-muted">行业:</span><span ng-bind="::vendor.vendorEnterprise.profession"></span></div>
+								<div class="col-md-7"><span class="text-muted">主营业务:</span><span ng-bind="::vendor.vendorEnterprise.tags"></span></div>
+							</div>
 							<div class="row">
 								<div class="col-md-12">
 									<span class="text-muted">企业地址:</span><span ng-bind="::vendor.vendorEnterprise.enAddress"></span>

+ 5 - 1
src/main/webapp/resources/tpl/index/baseInfo/vendorsInfo.html

@@ -159,7 +159,7 @@
 				<div class="col-xs-9">
 					<div class="search">
 						<div class="form-group form-group-sm has-feedback" dropdown auto-close="outsideClick" on-toggle="searchAdvance=open">
-							<input type="search" class="form-control input-sm" ng-model="keyword" ng-search="onSearch(keyword)" placeholder="企业名称/营业执照/法人/联系人/企业UU" />
+							<input type="search" class="form-control input-sm" ng-model="keyword" ng-search="onSearch(keyword)" placeholder="输入企业名称等关键词进行搜索" />
 							<a class="btn input-group-addon" ng-click="onSearch(keyword)">搜索</a>
 						</div>
 					</div>
@@ -198,6 +198,10 @@
 								<div class="col-md-3"><span class="text-muted">电话:</span><span ng-bind="::vendor.vendorUser.userTel"></span></div>
 								<div class="col-md-3"><span class="text-muted">邮箱:</span><span ng-bind="::vendor.vendorUser.userEmail"></span></div>
 							</div>
+							<div class="row">
+								<div class="col-md-3"><span class="text-muted">行业:</span><span ng-bind="::vendor.vendorEnterprise.profession"></span></div>
+								<div class="col-md-7"><span class="text-muted">经营范围:</span><span ng-bind="::vendor.vendorEnterprise.tags"></span></div>
+							</div>
 							<div class="row">
 								<div class="col-md-12">
 									<span class="text-muted">企业地址:</span><span ng-bind="::vendor.vendorEnterprise.enAddress"></span>

+ 1 - 1
src/main/webapp/resources/tpl/index/purc/addOrder.html

@@ -142,7 +142,7 @@
 								style="cursor: pointer; width: 568px;" /></span>
 						</div>
 					</li>
-					<li>
+					<li ng-show="false">
 						<div class="fl">
 							<em>税率:</em> <span class="fl" required="required"
 								ng-if="order.currency == 'RMB'"> <select

+ 2 - 2
src/main/webapp/resources/tpl/index/purc/cart_detail.html

@@ -138,7 +138,7 @@
 							</span>
 						</div>
 					</li>
-					<!--<li>
+					<li ng-show="false">
 						<div class="fl">
 							<em>税率:</em> 
 							<span class="fl" required="required" ng-if="order.currency == 'RMB'"> 
@@ -151,7 +151,7 @@
 								class="text select02 wid100" value="0" readonly>
 							</span>
 						</div>
-					</li>-->
+					</li>
 				</ul>
 				<div class="com_title01"
 					ng-if="order.orderItems.length == 0 && order.receiveCode">

+ 5 - 2
src/main/webapp/resources/tpl/index/purc/modal/purc_uplodaByBatch.html

@@ -13,6 +13,9 @@
 		<a style="padding-left: 780px;" ng-click="cancel()"><i class="fa fa-close"></i></a>
 	</div>
 </div>
+<div class="loading " ng-class="{'in': loading}">
+	<i></i>
+</div>
 <div class="modal-body Deputy" style="min-height: 200px;">
 	<div class="content f14 text-bold">第一步、下载Excel模板</div>
 	<div class="box-item">
@@ -45,7 +48,7 @@
 					<button ng-click="upload()" class="btn btn-success btn-sm">
 						确认上传 <i class="fa fa-upload"></i>
 					</button>
-				</div class="col-xs-4">
+				</div>
 			</div>
 			<div>
 			</div>
@@ -61,7 +64,7 @@
 </div>
 <div class="modal-footer Deputy">
 	<div class="text-center">
-		<button class="btn btn-success btn-sm" ng-click="enSure()" type="button">确定</button>
+		<button class="btn btn-success btn-sm" ng-click=" addClass(); enSure()" type="button">确定</button>
 		<button class="btn btn-danger btn-sm" ng-click="cancel()" type="button">取消</button>
 	</div>
 </div>

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

@@ -396,7 +396,7 @@
 					<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-class="{'input-error': !replylapQtys[$index]}"  ng-change="verifylapQty(reply.lapQty,$index, inquiryItem)"
-								   ng-model="reply.lapQty" min="{{$index == 0 ? 0 :(inquiryItem.replies[$index - 1].lapQty + 1)}}"
+								   ng-model="reply.lapQty" min="{{$index == 0 ? 0 :(inquiryItem.replies[$index - 1].lapQty + 1)}}" ng-pattern="/^\+?[1-9]\d*$/"
 								   ng-Readonly="$index == 0"  placeholder="数量" />
 								   <span class="input-group-btn" ng-show="$index != 0">
 									<button class="btn btn-default" type="button"

+ 103 - 95
src/main/webapp/resources/tpl/index/sale/tender.html

@@ -256,123 +256,123 @@
                 <div class="title-div" style="border-bottom: 1px dashed #327ebe;">
                     <span>基本信息</span>&nbsp;
                     <!-- 投标单状态 -->
-                    <div class="img-status" ng-if="saleTender.status == '待投标' && bid.overdue != 1">
+                    <div class="img-status" ng-if="saleTender.status == '待投标' && tender.overdue != 1">
                         <img src="static/img/tender/daitoubiao.png">
                     </div>
-                    <div class="img-status" ng-if="saleTender.status == '已投标' && bid.overdue != 1">
+                    <div class="img-status" ng-if="saleTender.status == '已投标' && tender.overdue != 1">
                         <img src="static/img/tender/yitoubiao.png">
                     </div>
-                    <div class="img-status" ng-if="saleTender.status == '已投标' && bid.result != 1 && bid.overdue == 1">
+                    <div class="img-status" ng-if="saleTender.status == '已投标' && tender.result != 1 && tender.overdue == 1">
                         <img src="static/img/tender/daipingbiao.png">
                     </div>
-                    <div class="img-status" ng-if="saleTender.status == '已投标' && bid.result == 1">
+                    <div class="img-status" ng-if="tender.status == '已结标' && tender.result == 1">
                         <img src="static/img/tender/yijiebiao.png">
                     </div>
-                    <div class="img-status" ng-if="saleTender.status != '已投标' && bid.overdue == 1">
+                    <div class="img-status" ng-if="tender.status == '流标' && tender.result == 1">
                         <img src="static/img/tender/liubiao.png">
                     </div>
                 </div>
                 <div class="row base-info">
                     <div class = "col-xs-4">
                         <div class="bid-desc">招标编号:</div>
-                        <div class="unchanged-info">{{bid.code}}</div>
+                        <div class="unchanged-info">{{tender.code}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">招标项目:</div>
-                        <div class="unchanged-info">{{bid.title}}</div>
+                        <div class="unchanged-info">{{tender.title}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">招标企业:</div>
-                        <div class="unchanged-info">{{bid.enterprise.enName}}</div>
+                        <div class="unchanged-info">{{tender.enterprise.enName}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">联系人:</div>
-                        <div class="unchanged-info">{{bid.user}}</div>
+                        <div class="unchanged-info">{{tender.user}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">联系电话:</div>
-                        <div class="unchanged-info">{{bid.userTel}}</div>
+                        <div class="unchanged-info">{{tender.userTel}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">投标截止时间:</div>
-                        <div class="unchanged-info">{{bid.endDate | date:'yyyy-MM-dd'}}</div>
+                        <div class="unchanged-info">{{tender.endDate | date:'yyyy-MM-dd'}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">公布结果时间:</div>
-                        <div class="unchanged-info">{{bid.publishDate | date:'yyyy-MM-dd'}}</div>
+                        <div class="unchanged-info">{{tender.publishDate | date:'yyyy-MM-dd'}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">交易币别:</div>
-                        <div class="unchanged-info">{{bid.currency}}</div>
+                        <div class="unchanged-info">{{tender.currency}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">是否含税:</div>
-                        <div class="unchanged-info" ng-bind="bid.ifTax == 1 ? '是': '否'"></div>
+                        <div class="unchanged-info" ng-bind="tender.ifTax == 1 ? '是': '否'"></div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">付款方式:</div>
-                        <div class="unchanged-info">{{bid.payment}}</div>
+                        <div class="unchanged-info">{{tender.payment}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">是否开放报名:</div>
-                        <div class="unchanged-info" ng-bind="bid.ifOpen == 1 ? '是': '否'"></div>
+                        <div class="unchanged-info" ng-bind="tender.ifOpen == 1 ? '是': '否'"></div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">发票要求:</div>
-                        <div class="unchanged-info" ng-if="bid.invoiceType == 2">增值税专用发票</div>
-                        <div class="unchanged-info" ng-if="bid.invoiceType == 1">增值税普通发票</div>
-                        <div class="unchanged-info" ng-if="bid.invoiceType == 0">不需要发票</div>
+                        <div class="unchanged-info" ng-if="tender.invoiceType == 2">增值税专用发票</div>
+                        <div class="unchanged-info" ng-if="tender.invoiceType == 1">增值税普通发票</div>
+                        <div class="unchanged-info" ng-if="tender.invoiceType == 0">不需要发票</div>
                     </div>
                     <div class = "col-xs-12">
                         <div class="bid-desc">交货地址:</div>
-                        <div class="unchanged-info">{{bid.shipAddress}}</div>
+                        <div class="unchanged-info">{{tender.shipAddress}}</div>
                     </div>
                     <div class = "col-xs-12">
                         <div class="bid-desc">证照要求:</div>
-                        <div class="unchanged-info">{{bid.certificate}}</div>
+                        <div class="unchanged-info">{{tender.certificate}}</div>
                     </div>
-                    <div ng-if="bid.tenderAttaches.length" class="col-xs-12" ng-repeat="attach in bid.tenderAttaches">
+                    <div ng-if="tender.tenderAttaches.length" class="col-xs-12" ng-repeat="attach in tender.tenderAttaches">
                         <span ng-show="$index == 0" class="bid-desc">招标附件:</span>
                         <span ng-show="$index != 0" class="bid-desc">&nbsp;</span>
                         <a class="" style="padding-left: 0; color: #5078cb;" href="file/{{attach.id}}">{{::attach.name}}</a>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">招标类型:</div>
-                        <div class="unchanged-info" ng-if="bid.ifAll == 1">全包</div>
-                        <div class="unchanged-info" ng-if="bid.ifAll == 0">甲供料</div>
-                        <div class="unchanged-info" ng-if="!bid.ifAll">无</div>
+                        <div class="unchanged-info" ng-if="tender.ifAll == 1">全包</div>
+                        <div class="unchanged-info" ng-if="tender.ifAll == 0">甲供料</div>
+                        <div class="unchanged-info" ng-if="tender.ifAll == null">无</div>
                     </div>
-                    <div class = "col-xs-4" ng-if="bid.ifAll == 1">
+                    <div class = "col-xs-4" ng-if="tender.ifAll == 1">
                         <div class="bid-desc">项目周期<span style="color: #d2272d;">*</span>:</div>
-                        <div class="unchanged-info" ng-if="bid.overdue == 1">{{saleTender.cycle || '未填'}}</div>
-                        <input ng-if="bid.overdue != 1" class="bid-input" title="请输入项目周期(天)" ng-model="saleTender.cycle" ng-change="validateProds()" ng-pattern="/^\+?[1-9][0-9]*$/"/>
+                        <div class="unchanged-info" ng-if="tender.overdue == 1">{{saleTender.cycle || '未填'}}</div>
+                        <input ng-if="tender.overdue != 1" class="bid-input" title="请输入项目周期(天)" ng-model="saleTender.cycle" ng-change="validateProds(saleTender)" ng-pattern="/^\+?[1-9][0-9]*$/"/>
                     </div>
-                    <div class = "col-xs-4" ng-if="bid.ifAll == 1">
+                    <div class = "col-xs-4" ng-if="tender.ifAll == 1">
                         <div class="bid-desc">税率<span style="color: #d2272d;">*</span>:</div>
-                        <div class="unchanged-info" ng-if="bid.overdue == 1">{{saleTender.taxrate || '未填'}}</div>
-                        <input ng-if="bid.overdue != 1"  class="bid-input" title="请输入税率" ng-model="saleTender.taxrate" ng-change="validateProds()" ng-pattern="/^(\d|[1-9]\d)$/"/>
+                        <div class="unchanged-info" ng-if="tender.overdue == 1">{{saleTender.taxrate || '未填'}}</div>
+                        <input ng-if="tender.overdue != 1"  class="bid-input" title="请输入税率" ng-model="saleTender.taxrate" ng-change="validateProds(saleTender)" ng-pattern="/^(\d|[1-9]\d)$/"/>
                     </div>
-                    <div class = "col-xs-4" ng-if="bid.ifAll == 1 && bid.result == 1">
+                    <div class = "col-xs-4" ng-if="tender.ifAll == 1 && tender.result == 1">
                         <div class="bid-desc">定标结果:</div>
-                        <div ng-if="bid.purchaseTenderProds[0].currentItem.applyStatus == '1'">
+                        <div ng-if="saleTender.saleTenderItems[0].applyStatus == '1'">
                             <img src="static/img/tender/zhongbiao.png">
                         </div>
-                        <div ng-if="bid.purchaseTenderProds[0].currentItem.applyStatus != '1'">
+                        <div ng-if="saleTender.saleTenderItems[0].applyStatus != '1'">
                             <img src="static/img/tender/weizhongbiao.png">
                         </div>
                     </div>
-                    <div class = "col-xs-8" ng-if="bid.ifAll == 1 && bid.result == 1">
+                    <div class = "col-xs-8" ng-if="tender.ifAll == 1 && tender.result == 1">
                         <div class="bid-desc">定标说明:</div>
-                        <div class="unchanged-info">{{bid.purchaseTenderProds[0].currentItem.description}}</div>
+                        <div class="unchanged-info">{{saleTender.saleTenderItems[0].description}}</div>
                     </div>
                 </div>
                 <div class="wrap">
                     <div class="content">
                         <!-- 非全包产品信息展示 -->
-                        <div class="tender-list" ng-if="bid.ifAll != 1">
+                        <div class="tender-list" ng-if="tender.ifAll != 1">
                             <!--产品信息-->
                             <div class="com_title01"><span>产品信息</span><em>*</em></div>
-                            <dl ng-show = "bid.result != 1 || bid.auditStatus == 0" >
+                            <dl ng-show = "tender.result != 1 || tender.auditStatus == 0" >
                                 <dt>
                                     <span>序号</span>
                                     <span class="wid01">产品</span>
@@ -383,25 +383,31 @@
                                     <span>单价</span>
                                     <span>含税金额</span>
                                 </dt>
-                                <dd ng-repeat="prod in bid.purchaseTenderProds | orderBy: 'index'">
+                                <dd ng-repeat="item in saleTender.saleTenderItems | orderBy: 'tenderProd.index'">
                                     <span>{{$index + 1}}</span>
                                     <span class="wid01">
-                                        <p>产品型号:{{prod.prodCode}}</p>
-                                        <p>产品名称:{{prod.prodTitle}}</p>
-                                        <p ng-show="prod.brand">品牌:<i ng-bind="prod.brand" style="font-style: inherit"></i></p>
+                                        <p>产品型号:{{item.tenderProd.prodCode}}</p>
+                                        <p>产品名称:{{item.tenderProd.prodTitle}}</p>
+                                        <p ng-show="item.tenderProd.brand">品牌:<i ng-bind="item.tenderProd.brand" style="font-style: inherit"></i></p>
                                     </span>
-                                    <span ng-bind="prod.unit"></span>
-                                    <span ng-bind="prod.qty"></span>
-                                    <!--<span><input type="text" class="editAble" ng-model="prod.currentItem.cycle" ng-pattern="/^\+?[1-9][0-9]*$/" ng-change="validateThis(prod.currentItem.cycle, 'cycle')" placeholder="点击填写周期"/></span>
-                                    <span><input type="text" class="editAble" ng-model="prod.currentItem.taxrate" ng-pattern="/^\+?[0-9][0-9]{0,1}$/" ng-change="validateThis(prod.currentItem.taxrate, 'taxrate')" placeholder="点击填写税率"/></span>
-                                    <span><input type="text" class="editAble" ng-model="prod.currentItem.price" ng-pattern="/^(0|[0-9][0-9]{0,9})(\.[0-9]{1,6})?$/" ng-change="validateThis(prod.currentItem.price, 'price')" ng-focus="validPrice(prod.currentItem.price)" ng-blur="validPrice(prod.currentItem.price)" placeholder="点击填写单价"/></span>-->
-                                    <span><input type="text" class="editAble" ng-model="prod.currentItem.cycle" ng-pattern="/^\+?[1-9][0-9]*$/" ng-change="validateProds(prod);validateThis(prod.currentItem.cycle, 'cycle')" ng-blur="validateThis(prod.currentItem.cycle, 'cycle');validateProds(prod);" ng-focus="validateThis(prod.currentItem.cycle, 'cycle');validateProds(prod);" placeholder="请输入周期"/></span>
-                                    <span><input type="text" class="editAble" ng-model="prod.currentItem.taxrate" ng-pattern="/^\+?[0-9][0-9]{0,1}$/" ng-change="validateProds(prod);validateThis(prod.currentItem.taxrate, 'taxrate')" ng-focus="validateThis(prod.currentItem.taxrate, 'taxrate');validateProds(prod);" ng-blur="validateThis(prod.currentItem.taxrate, 'taxrate');validateProds(prod);" placeholder="请输入税率"/></span>
-                                    <span><input type="text" class="editAble" ng-model="prod.currentItem.price" ng-pattern="/^(0|[0-9][0-9]{0,9})(\.[0-9]{1,6})?$/" ng-change="validateProds(prod);" ng-blur="validateThis(prod.currentItem.price, 'price');validateProds(prod);" ng-focus="validateProds(prod);" placeholder="请输入单价"/></span>
-                                    <span ng-bind="prod.currentItem.price * prod.qty || '' | number:2"></span>
+                                    <span ng-bind="item.tenderProd.unit"></span>
+                                    <span ng-bind="item.tenderProd.qty"></span>
+                                    <span><input type="text" class="editAble" ng-model="item.cycle" ng-pattern="/^\+?[1-9][0-9]*$/"
+                                                 ng-change="validateProds(saleTender);validateThis(item.cycle, 'cycle')"
+                                                 ng-blur="validateProds(saleTender);"
+                                                 ng-focus="validateProds(saleTender);" placeholder="请输入周期"/></span>
+                                    <span><input type="text" class="editAble" ng-model="item.taxrate" ng-pattern="/^\+?[0-9][0-9]{0,1}$/"
+                                                 ng-change="validateProds(saleTender);validateThis(item.taxrate, 'taxrate')"
+                                                 ng-focus="validateProds(saleTender);"
+                                                 ng-blur="validateProds(saleTender);" placeholder="请输入税率"/></span>
+                                    <span><input type="text" class="editAble" ng-model="item.price" ng-pattern="/^(0|[0-9][0-9]{0,9})(\.[0-9]{1,6})?$/"
+                                                 ng-change="validateProds(saleTender);" ng-blur="validateProds(saleTender);validateThis(item.price, 'price')"
+                                                 ng-focus="validateProds(saleTender);" placeholder="请输入单价"/></span>
+                                    <span ng-bind="item.price * item.tenderProd.qty || '' | number:2"></span>
                                 </dd>
                             </dl>
-                            <dl ng-show = "bid.result == 1 && bid.auditStatus != 0">
+                            <!-- 已结标 -->
+                            <dl ng-show = "tender.result == 1 && tender.auditStatus != 0">
                                 <dt>
                                     <span class="result-index">序号</span>
                                     <span class="wid01-result">产品信息</span>
@@ -414,29 +420,26 @@
                                     <span class="result">评标结果</span>
                                     <span class="result">评标说明</span>
                                 </dt>
-                                <dd ng-repeat="prod in bid.purchaseTenderProds | orderBy: 'index'">
+                                <dd ng-repeat="item in saleTender.saleTenderItems | orderBy: 'tenderProd.index'">
                                     <span class="result-index">{{$index + 1}}</span>
                                     <span class="wid01-result">
-                                        <p>产品型号:{{prod.prodCode}}</p>
-                                        <p>产品名称:{{prod.prodTitle}}</p>
-                                        <p>品牌:{{prod.brand}}</p>
+                                        <p>产品型号:{{item.tenderProd.prodCode}}</p>
+                                        <p>产品名称:{{item.tenderProd.prodTitle}}</p>
+                                        <p ng-show="item.tenderProd.brand">品牌:<i ng-bind="item.tenderProd.brand" style="font-style: inherit"></i></p>
                                     </span>
-                                    <span class="result" ng-bind="prod.unit"></span>
-                                    <span class="result" ng-bind="prod.qty"></span>
-                                    <!--<span><input type="text" class="editAble" ng-model="prod.currentItem.cycle" ng-pattern="/^\+?[1-9][0-9]*$/" ng-change="validateThis(prod.currentItem.cycle, 'cycle')" placeholder="点击填写周期"/></span>
-                                    <span><input type="text" class="editAble" ng-model="prod.currentItem.taxrate" ng-pattern="/^\+?[0-9][0-9]{0,1}$/" ng-change="validateThis(prod.currentItem.taxrate, 'taxrate')" placeholder="点击填写税率"/></span>
-                                    <span><input type="text" class="editAble" ng-model="prod.currentItem.price" ng-pattern="/^(0|[0-9][0-9]{0,9})(\.[0-9]{1,6})?$/" ng-change="validateThis(prod.currentItem.price, 'price')" ng-focus="validPrice(prod.currentItem.price)" ng-blur="validPrice(prod.currentItem.price)" placeholder="点击填写单价"/></span>-->
-                                    <span class="result"><input readonly type="text" class="editAble" ng-model="prod.currentItem.cycle" ng-pattern="/^\+?[1-9][0-9]*$/" ng-change="validateProds(prod);validateThis(prod.currentItem.cycle, 'cycle')" ng-blur="validateThis(prod.currentItem.cycle, 'cycle');validateProds(prod);" ng-focus="validateThis(prod.currentItem.cycle, 'cycle');validateProds(prod);" placeholder="请输入周期"/></span>
-                                    <span class="result"><input readonly type="text" class="editAble" ng-model="prod.currentItem.taxrate" ng-pattern="/^\+?[0-9][0-9]{0,1}$/" ng-change="validateProds(prod);validateThis(prod.currentItem.taxrate, 'taxrate')" ng-focus="validateThis(prod.currentItem.taxrate, 'taxrate');validateProds(prod);" ng-blur="validateThis(prod.currentItem.taxrate, 'taxrate');validateProds(prod);" placeholder="请输入税率"/></span>
-                                    <span class="result"><input readonly type="text" class="editAble" ng-model="prod.currentItem.price" ng-pattern="/^(0|[0-9][0-9]{0,9})(\.[0-9]{1,6})?$/" ng-change="validateProds(prod);" ng-blur="validateThis(prod.currentItem.price, 'price');validateProds(prod);" ng-focus="validateProds(prod);" placeholder="请输入单价"/></span>
-                                    <span class="result" ng-bind="bid.auditStatus != 0 ? (prod.currentItem.price * prod.qty | number:2) : 0;"></span>
-                                    <span class="result" ng-bind="bid.auditStatus != 0 ? (prod.currentItem.applyStatus == 1 ? '中标' : '未中标') : '未中标';"></span>
-                                    <span class="result" ng-bind="bid.auditStatus != 0 ? prod.currentItem.description: '';"></span>
+                                    <span class="result" ng-bind="item.tenderProd.unit"></span>
+                                    <span class="result" ng-bind="item.tenderProd.qty"></span>
+                                    <span class="result" ng-bind="item.cycle"></span>
+                                    <span class="result" ng-bind="item.taxrate"></span>
+                                    <span class="result" ng-bind="item.price"></span>
+                                    <span class="result" ng-bind="item.price * item.tenderProd.qty || '' | number:2"></span>
+                                    <span class="result" ng-bind="tender.auditStatus != 0 ? (item.applyStatus == 1 ? '中标' : '未中标') : '未中标';"></span>
+                                    <span class="result" ng-bind="tender.auditStatus != 0 ? item.description: '';"></span>
                                 </dd>
                             </dl>
                         </div>
                         <!-- 全包产品信息展示 -->
-                        <div class="tender-list" ng-if="bid.ifAll == 1">
+                        <div class="tender-list" ng-if="tender.ifAll == 1">
                             <!--产品信息-->
                             <div class="com_title01"><span>产品信息</span><em>*</em></div>
                             <dl>
@@ -449,36 +452,41 @@
                                     <span>单价</span>
                                     <span>含税金额</span>
                                 </dt>
-                                <dd ng-repeat="prod in bid.purchaseTenderProds | orderBy: 'index'">
+                                <dd ng-repeat="item in saleTender.saleTenderItems | orderBy: 'tenderProd.index'">
                                     <span>{{$index + 1}}</span>
                                     <span class="wid-all">
-                                        <p>产品型号:{{prod.prodCode}}</p>
-                                        <p>产品名称:{{prod.prodTitle}}</p>
-                                        <p ng-show="prod.brand">品牌:<i ng-bind="prod.brand" style="font-style: inherit"></i></p>
+                                        <p>产品型号:{{item.tenderProd.prodCode}}</p>
+                                        <p>产品名称:{{item.tenderProd.prodTitle}}</p>
+                                        <p ng-show="item.tenderProd.brand">品牌:<i ng-bind="item.tenderProd.brand" style="font-style: inherit"></i></p>
                                     </span>
-                                    <span ng-bind="prod.unit"></span>
-                                    <span ng-bind="prod.qty"></span>
-                                    <span><input type="text" class="editAble" ng-model="prod.currentItem.cycle" ng-pattern="/^\+?[1-9][0-9]*$/" ng-change="validateProds(prod);validateThis(prod.currentItem.cycle, 'cycle')" ng-blur="validateThis(prod.currentItem.cycle, 'cycle');validateProds(prod);" ng-focus="validateThis(prod.currentItem.cycle, 'cycle');validateProds(prod);" placeholder="请输入周期"/></span>
-                                    <span><input type="text" class="editAble" ng-model="prod.currentItem.price" ng-pattern="/^(0|[0-9][0-9]{0,9})(\.[0-9]{1,6})?$/" ng-change="validateProds(prod);" ng-blur="validateThis(prod.currentItem.price, 'price');validateProds(prod);" ng-focus="validateProds(prod);" placeholder="请输入单价"/></span>
-                                    <span ng-bind="prod.currentItem.price * prod.qty || '' | number:2"></span>
+                                    <span ng-bind="item.tenderProd.unit"></span>
+                                    <span ng-bind="item.tenderProd.qty"></span>
+                                    <span><input type="text" class="editAble" ng-model="item.cycle" ng-pattern="/^\+?[1-9][0-9]*$/"
+                                                 ng-change="validateProds(saleTender);validateThis(item.cycle, 'cycle')"
+                                                 ng-blur="validateProds(saleTender);"
+                                                 ng-focus="validateProds(saleTender);" placeholder="请输入周期"/></span>
+                                    <span><input type="text" class="editAble" ng-model="item.price" ng-pattern="/^(0|[0-9][0-9]{0,9})(\.[0-9]{1,6})?$/"
+                                                 ng-change="validateProds(saleTender);" ng-blur="validateProds(saleTender);validateThis(item.price, 'price')"
+                                                 ng-focus="validateProds(saleTender);" placeholder="请输入单价"/></span>
+                                    <span ng-bind="item.price * item.tenderProd.qty || '' | number:2"></span>
                                 </dd>
                             </dl>
                         </div>
                     </div>
                 </div>
-                <div style="min-height: 150px;" ng-hide="bid.overdue == 1">
+                <div style="min-height: 150px;" ng-hide="tender.overdue == 1">
                     <div class="bid-desc" style="margin-left: 20px;">投标附件:</div>
                     <div class="fileInputContainer">
                         <input class="fileInput" type="file" ng-file-select name="file" ng-model="myFile" ng-change="upload(myFile)" />
                         <!-- href="file/{{attach.id}}" -->
                         <div class="attach-file" ng-repeat="attach in attaches">
                             <a style="color: #5078cb;" href="file/{{attach.id}}">{{::attach.name}}</a>&nbsp;&nbsp;
-                            <a ng-click="removeAttach(attach.id, $index, bid.id)" title="删除"><i class="fa fa-trash-o fa-lg"></i></a>
+                            <a ng-click="removeAttach(attach.id, $index, tender.id)" title="删除"><i class="fa fa-trash-o fa-lg"></i></a>
                         </div>
                     </div>
                     <span style="margin-left: 100px; color: #969595; font-size: 12px; font-family: 'Microsoft Yahei Regular';">提示:选择附件大小不超过5MB,可上传JPG,PNG,EXCEL,WORD,PDF</span>
                 </div>
-                <div style="min-height: 50px;" ng-show="bid.overdue == 1 && attaches.length > 0">
+                <div style="min-height: 50px;" ng-show="tender.overdue == 1 && attaches.length > 0">
                     <div class="bid-desc" style="margin-left: 20px;">投标附件:</div>
                     <div class="">
                         <div ng-repeat="attach in attaches">
@@ -493,24 +501,24 @@
                 <div class="row prod-info">
                     <div class = "col-xs-4">
                         <div class="bid-desc">企业名称:</div>
-                        <div class="unchanged-info">{{currentEnBaseInfo.enName}}</div>
+                        <div class="unchanged-info">{{saleTender.enterpriseBaseInfo.enName}}</div>
                     </div>
                     <div class = "col-xs-8">
                         <div class="bid-desc">注册地址:</div>
-                        <div class="unchanged-info">{{currentEnBaseInfo.enAddress}}</div>
+                        <div class="unchanged-info">{{saleTender.enterpriseBaseInfo.enAddress}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">企业UU号:</div>
-                        <div class="unchanged-info">{{currentEnBaseInfo.uu}}</div>
+                        <div class="unchanged-info">{{saleTender.enterpriseBaseInfo.uu}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">营业执照号:</div>
-                        <div class="unchanged-info">{{currentEnBaseInfo.enBusinessCode}}</div>
+                        <div class="unchanged-info">{{saleTender.enterpriseBaseInfo.enBusinessCode}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">成立时间:</div>
-                        <div class="bid-desc" ng-show="currentEnBaseInfo.enEstablishDate">{{currentEnBaseInfo.enEstablishDate | date:'yyyy-MM-dd'}}</div>
-                        <div class="input-group input-trigger date-picker" ng-show="currentEnBaseInfo.enEstablishDate == null">
+                        <div class="bid-desc" ng-show="saleTender.enterpriseBaseInfo.enEstablishDate">{{saleTender.enterpriseBaseInfo.enEstablishDate | date:'yyyy-MM-dd'}}</div>
+                        <div class="input-group input-trigger date-picker" ng-show="saleTender.enterpriseBaseInfo.enEstablishDate == null">
                             <input type="text" ng-model="item.enterpriseBaseInfo.enEstablishDate"
                                    class="form-control" placeholder="点击选择日期" readonly="readonly"
                                    datepicker-popup="yyyy-MM-dd" is-open="condition.$fromOpened"
@@ -529,40 +537,40 @@
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">员工人数:</div>
-                        <input class="bid-input" ng-model="currentEnBaseInfo.emNum" type="text" ng-change="validateThis(currentEnBaseInfo.emNum, 'emNum')" ng-focus="validateThis(currentEnBaseInfo.emNum, 'emNum')" ng-blur="validateThis(currentEnBaseInfo.emNum, 'emNum')" ng-pattern="/^\+?[1-9][0-9]*$/" />
+                        <input class="bid-input" ng-model="saleTender.enterpriseBaseInfo.emNum" ng-readonly="tender.overdue == 1" type="text" ng-change="validateThis(currentEnBaseInfo.emNum, 'emNum')" ng-focus="validateThis(currentEnBaseInfo.emNum, 'emNum')" ng-blur="validateThis(currentEnBaseInfo.emNum, 'emNum')" ng-pattern="/^\+?[1-9][0-9]*$/" />
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">企业电话:</div>
-                        <input class="bid-input" ng-model="currentEnBaseInfo.enTel" type="text" />
+                        <input class="bid-input" ng-model="saleTender.enterpriseBaseInfo.enTel" ng-readonly="tender.overdue == 1" type="text" />
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">企业传真:</div>
-                        <input class="bid-input" ng-model="currentEnBaseInfo.enFax" type="text" />
+                        <input class="bid-input" ng-model="saleTender.enterpriseBaseInfo.enFax" ng-readonly="tender.overdue == 1" type="text" />
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">管理员:</div>
-                        <input class="bid-input" ng-model="currentEnBaseInfo.enUser" type="text" />
+                        <input class="bid-input" ng-model="saleTender.enterpriseBaseInfo.enUser" ng-readonly="tender.overdue == 1" type="text" />
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">联系电话:</div>
-                        <input class="bid-input" ng-model="currentEnBaseInfo.userTel" type="text" />
+                        <input class="bid-input" ng-model="saleTender.enterpriseBaseInfo.userTel" ng-readonly="tender.overdue == 1" type="text" />
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">开户银行:</div>
-                        <input class="bid-input" ng-model="currentEnBaseInfo.bank" type="text" />
+                        <input class="bid-input" ng-model="saleTender.enterpriseBaseInfo.bank" ng-readonly="tender.overdue == 1" type="text" />
                     </div>
                     <div class = "col-xs-12">
                         <div class="bid-desc">经营范围:</div>
-                        <input class="bid-input" style="width: 80%; text-align: left;" ng-model="currentEnBaseInfo.scope" type="text" />
+                        <input class="bid-input" style="width: 80%; text-align: left;" ng-model="saleTender.enterpriseBaseInfo.scope" ng-readonly="tender.overdue == 1" type="text" />
                     </div>
                     <div class = "col-xs-12">
                         <div class="bid-desc">备注:</div>
-                        <input class="bid-input" style="width: 80%; text-align: left;" ng-model="currentEnBaseInfo.remark" type="text" />
+                        <input class="bid-input" style="width: 80%; text-align: left;" ng-model="saleTender.enterpriseBaseInfo.remark" ng-readonly="tender.overdue == 1" type="text" />
                     </div>
                 </div>
                 <div class="col-xs-12" style="padding: 30px;">
                     <div class="col-xs-2 pull-right btn-bid">
-                        <button class="btn" ng-disabled="bid.overdue == 1 || !canSave || !emNumYes" ng-click="bidIt(bid, currentEnBaseInfo, saleTender)">投标</button>
+                        <button class="btn" ng-disabled="tender.overdue == 1 || !canSave || !emNumYes" ng-click="bidIt(saleTender)">投标</button>
                     </div>
                 </div>
             </div>

+ 4 - 8
src/main/webapp/resources/tpl/index/sale/tenderlist.html

@@ -445,8 +445,7 @@
                 <th width="150">状态</th>
             </tr>
             </thead>
-            <tbody class="is-done" ng-repeat="tender in $data  | orderBy:'-id'"
-                   ng-show="active == 'end' || active == 'waiting'">
+            <tbody class="is-done" ng-repeat="tender in $data  | orderBy:'-id'" ng-show="active == 'end' || active == 'waiting'">
             <tr class="pro-line-sty01">
                 <td class="list-notnum" width="350">
                     <div>招标标题:{{tender.title}}</div>
@@ -482,21 +481,18 @@
                 <td>
                     <!-- 投标单状态 -->
                     <!-- 已评标 start -->
-                    <div ng-if="tender.status == '已结标' && tenderProd.currentItem.applyStatus == 1 && tenderProd.currentItem.price">
+                    <div ng-if="tender.result == 1 && tender.status == '已结标' && tenderProd.currentItem.applyStatus == 1 && tenderProd.currentItem.price">
                         <img src="static/img/tender/zhongbiao.png">
                     </div>
-                    <div ng-if="(tender.status == '已结标' && !tenderProd.currentItem.applyStatus) || tender.status == '流标' || (tender.status == '待评标' && tender.result == 1) || tender.status == '待投标'">
+                    <div ng-if="tender.result == 1 && ((tender.status == '已结标' && !tenderProd.currentItem.applyStatus) || tender.status == '流标' || (tender.status == '待评标' && tender.result == 1) || tender.status == '待投标')">
                         <!-- 报了到期没评、评了没有采纳 -->
                         <img src="static/img/tender/weizhongbiao.png">
                     </div>
                     <!-- 已评标end -->
                     <!-- 已投标start -->
-                    <div ng-if="tender.status == '待评标' && tender.overdue == 1 && tender.result != 1">
+                    <div ng-if="tender.overdue == 1 && tender.result != 1">
                         <img src="static/img/tender/daipingbiao.png">
                     </div>
-                    <!--<div ng-if="tender.status == '待评标' && tender.overdue == 1 && tender.result != 1 && !tenderProd.currentItem.price">-->
-                    <!--<img src="static/img/tender/weitoubiao.png">-->
-                    <!--</div>-->
                     <div ng-if="tender.status == '待评标' && tender.overdue != 1 && (tenderProd.currentItem.price && tenderProd.currentItem.saleTender.auditStatus != 0)">
                         <img src="static/img/tender/yitoubiao.png">
                     </div>

+ 40 - 41
src/main/webapp/resources/tpl/index/sale/vendor_tender.html

@@ -219,64 +219,64 @@
                 <div class="row base-info">
                     <div class = "col-xs-4">
                         <div class="bid-desc">招标编号:</div>
-                        <div class="unchanged-info">{{bid.code}}</div>
+                        <div class="unchanged-info">{{tender.code}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">招标项目:</div>
-                        <div class="unchanged-info">{{bid.title}}</div>
+                        <div class="unchanged-info">{{tender.title}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">招标企业:</div>
-                        <div class="unchanged-info">{{bid.enterprise.enName}}</div>
+                        <div class="unchanged-info">{{tender.enterprise.enName}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">联系人:</div>
-                        <div class="unchanged-info">{{bid.user}}</div>
+                        <div class="unchanged-info">{{tender.user}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">联系电话:</div>
-                        <div class="unchanged-info">{{bid.userTel}}</div>
+                        <div class="unchanged-info">{{tender.userTel}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">投标截止时间:</div>
-                        <div class="unchanged-info">{{bid.endDate | date:'yyyy-MM-dd'}}</div>
+                        <div class="unchanged-info">{{tender.endDate | date:'yyyy-MM-dd'}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">公布结果时间:</div>
-                        <div class="unchanged-info">{{bid.publishDate | date:'yyyy-MM-dd'}}</div>
+                        <div class="unchanged-info">{{tender.publishDate | date:'yyyy-MM-dd'}}</div>
                     </div>
                     <div class = "col-xs-8">
                         <div class="bid-desc">交货地址:</div>
-                        <div class="unchanged-info">{{bid.shipAddress}}</div>
+                        <div class="unchanged-info">{{tender.shipAddress}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">交易币别:</div>
-                        <div class="unchanged-info">{{bid.currency}}</div>
+                        <div class="unchanged-info">{{tender.currency}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">是否含税:</div>
-                        <div class="unchanged-info" ng-bind="bid.ifTax == 1 ? '是': '否'"></div>
+                        <div class="unchanged-info" ng-bind="tender.ifTax == 1 ? '是': '否'"></div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">付款方式:</div>
-                        <div class="unchanged-info">{{bid.payment}}</div>
+                        <div class="unchanged-info">{{tender.payment}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">是否开放报名:</div>
-                        <div class="unchanged-info" ng-bind="bid.ifOpen == 1 ? '是': '否'"></div>
+                        <div class="unchanged-info" ng-bind="tender.ifOpen == 1 ? '是': '否'"></div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">发票要求:</div>
-                        <div class="unchanged-info" ng-if="bid.invoiceType == 2">增值税专用发票</div>
-                        <div class="unchanged-info" ng-if="bid.invoiceType == 1">增值税普通发票</div>
-                        <div class="unchanged-info" ng-if="bid.invoiceType == 0">不需要发票</div>
+                        <div class="unchanged-info" ng-if="tender.invoiceType == 2">增值税专用发票</div>
+                        <div class="unchanged-info" ng-if="tender.invoiceType == 1">增值税普通发票</div>
+                        <div class="unchanged-info" ng-if="tender.invoiceType == 0">不需要发票</div>
                     </div>
                     <div class = "col-xs-12">
                         <div class="bid-desc">证照要求:</div>
-                        <div class="unchanged-info">{{bid.certificate}}</div>
+                        <div class="unchanged-info">{{tender.certificate}}</div>
                     </div>
-                    <div ng-if="bid.tenderAttaches.length" class="col-xs-8" style="height: 50px;">
-                        招标附件:<a class="file" style="color: #5078cb;" ng-repeat="attach in bid.tenderAttaches" href="file/{{attach.id}}">{{::attach.name}}</a>
+                    <div ng-if="tender.tenderAttaches.length" class="col-xs-8" style="height: 50px;">
+                        招标附件:<a class="file" style="color: #5078cb;" ng-repeat="attach in tender.tenderAttaches" href="file/{{attach.id}}">{{::attach.name}}</a>
                     </div>
                 </div>
                 <div class="wrap">
@@ -295,19 +295,18 @@
                                     <span>单价</span>
                                     <span>含税金额</span>
                                 </dt>
-                                <dd ng-repeat="prod in bid.purchaseTenderProds | orderBy : 'index'">
+                                <dd ng-repeat="item in saleTender.saleTenderItems | orderBy : 'tenderProd.index'">
                                     <span>{{$index + 1}}</span>
                                     <span class="wid01">
-                                        <p>产品编号:{{prod.prodCode}}</p>
-                                        <p>产品名称:{{prod.prodTitle}}</p>
-                                        <!--<p>产品规格:<span ng-bind="prod.prodSpec"></span></p>-->
+                                        <p>产品编号:{{item.tenderProd.prodCode}}</p>
+                                        <p>产品名称:{{item.tenderProd.prodTitle}}</p>
                                     </span>
-                                    <span ng-bind="prod.unit"></span>
-                                    <span ng-bind="prod.qty"></span>
-                                    <span ng-bind="prod.currentItem.cycle"></span>
-                                    <span ng-bind="prod.currentItem.taxrate"></span>
-                                    <span ng-bind="prod.currentItem.price|number:6"></span>
-                                    <span ng-bind="prod.currentItem.price * prod.qty || '' | number:2"></span>
+                                    <span ng-bind="item.tenderProd.unit"></span>
+                                    <span ng-bind="item.tenderProd.qty"></span>
+                                    <span ng-bind="item.cycle"></span>
+                                    <span ng-bind="item.taxrate"></span>
+                                    <span ng-bind="item.price|number:6"></span>
+                                    <span ng-bind="item.price * item.tenderProd.qty || '' | number:2"></span>
                                 </dd>
                             </dl>
                         </div>
@@ -327,55 +326,55 @@
                 <div class="row prod-info">
                     <div class = "col-xs-4">
                         <div class="bid-desc">企业名称:</div>
-                        <div class="unchanged-info">{{currentEnBaseInfo.enName}}</div>
+                        <div class="unchanged-info">{{saleTender.enterpriseBaseInfo.enName}}</div>
                     </div>
                     <div class = "col-xs-8">
                         <div class="bid-desc">注册地址:</div>
-                        <div class="unchanged-info">{{currentEnBaseInfo.enAddress}}</div>
+                        <div class="unchanged-info">{{saleTender.enterpriseBaseInfo.enAddress}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">企业UU号:</div>
-                        <div class="unchanged-info">{{currentEnBaseInfo.uu}}</div>
+                        <div class="unchanged-info">{{saleTender.enterpriseBaseInfo.uu}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">营业执照号:</div>
-                        <div class="unchanged-info">{{currentEnBaseInfo.enBusinessCode}}</div>
+                        <div class="unchanged-info">{{saleTender.enterpriseBaseInfo.enBusinessCode}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">成立时间:</div>
-                        <div class="bid-desc" ng-show="currentEnBaseInfo.enEstablishDate">{{currentEnBaseInfo.enEstablishDate | date:'yyyy-MM-dd'}}</div>
+                        <div class="bid-desc" ng-show="saleTender.enterpriseBaseInfo.enEstablishDate">{{saleTender.enterpriseBaseInfo.enEstablishDate | date:'yyyy-MM-dd'}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">员工人数:</div>
-                        <div class="unchanged-info">{{currentEnBaseInfo.emNum}}</div>
+                        <div class="unchanged-info">{{saleTender.enterpriseBaseInfo.emNum}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">企业电话:</div>
-                        <div class="unchanged-info">{{currentEnBaseInfo.enTel}}</div>
+                        <div class="unchanged-info">{{saleTender.enterpriseBaseInfo.enTel}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">企业传真:</div>
-                        <div class="unchanged-info">{{currentEnBaseInfo.enFax}}</div>
+                        <div class="unchanged-info">{{saleTender.enterpriseBaseInfo.enFax}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">联系人:</div>
-                        <div class="unchanged-info">{{currentEnBaseInfo.enUser}}</div>
+                        <div class="unchanged-info">{{saleTender.enterpriseBaseInfo.enUser}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">联系电话:</div>
-                        <div class="unchanged-info">{{currentEnBaseInfo.userTel}}</div>
+                        <div class="unchanged-info">{{saleTender.enterpriseBaseInfo.userTel}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">开户银行:</div>
-                        <div class="unchanged-info">{{currentEnBaseInfo.bank}}</div>
+                        <div class="unchanged-info">{{saleTender.enterpriseBaseInfo.bank}}</div>
                     </div>
                     <div class = "col-xs-12">
                         <div class="bid-desc">经营范围:</div>
-                        <div class="unchanged-info">{{currentEnBaseInfo.scope}}</div>
+                        <div class="unchanged-info">{{saleTender.enterpriseBaseInfo.scope}}</div>
                     </div>
                     <div class = "col-xs-12">
                         <div class="bid-desc">备注:</div>
-                        <div class="unchanged-info">{{currentEnBaseInfo.remark}}</div>
+                        <div class="unchanged-info">{{saleTender.enterpriseBaseInfo.remark}}</div>
                     </div>
                 </div>
                 <!--<div class="col-xs-12" style="padding: 30px;">-->