Browse Source

新增招标功能

git-svn-id: svn+ssh://10.10.101.21/source/platform/platform-b2b@7304 f3bf4e98-0cf0-11e4-a00c-a99a8b9d557d
dongbw 9 years ago
parent
commit
cbefd4f7f4
40 changed files with 5145 additions and 587 deletions
  1. 523 0
      src/main/java/com/uas/platform/b2b/controller/PurchaseTenderController.java
  2. 14 0
      src/main/java/com/uas/platform/b2b/dao/EnterpriseBaseInfoDao.java
  3. 17 0
      src/main/java/com/uas/platform/b2b/dao/PurchaseTenderDao.java
  4. 21 0
      src/main/java/com/uas/platform/b2b/dao/PurchaseTenderItemDao.java
  5. 234 0
      src/main/java/com/uas/platform/b2b/model/EnterpriseBaseInfo.java
  6. 415 0
      src/main/java/com/uas/platform/b2b/model/PurchaseTender.java
  7. 171 0
      src/main/java/com/uas/platform/b2b/model/PurchaseTenderItem.java
  8. 10 30
      src/main/java/com/uas/platform/b2b/search/SearchService.java
  9. 20 60
      src/main/java/com/uas/platform/b2b/search/SearchServiceImpl.java
  10. 7 0
      src/main/java/com/uas/platform/b2b/service/EnterpriseBaseInfoService.java
  11. 95 0
      src/main/java/com/uas/platform/b2b/service/PurchaseTenderService.java
  12. 11 0
      src/main/java/com/uas/platform/b2b/service/impl/EnterpriseBaseInfoServiceImpl.java
  13. 289 0
      src/main/java/com/uas/platform/b2b/service/impl/PurchaseTenderServiceImpl.java
  14. 105 0
      src/main/java/com/uas/platform/b2b/temporary/model/PurcTender.java
  15. 3 3
      src/main/webapp/resources/css/index.css
  16. BIN
      src/main/webapp/resources/img/tender/daipingbiao.png
  17. BIN
      src/main/webapp/resources/img/tender/daitoubiao.png
  18. BIN
      src/main/webapp/resources/img/tender/liubiao.png
  19. BIN
      src/main/webapp/resources/img/tender/select.png
  20. BIN
      src/main/webapp/resources/img/tender/toubiaozhong.png
  21. BIN
      src/main/webapp/resources/img/tender/upload.png
  22. BIN
      src/main/webapp/resources/img/tender/weizhongbiao.png
  23. BIN
      src/main/webapp/resources/img/tender/yijiebiao.png
  24. BIN
      src/main/webapp/resources/img/tender/yitoubiao.png
  25. BIN
      src/main/webapp/resources/img/tender/zailuru.png
  26. BIN
      src/main/webapp/resources/img/tender/zhaobiao.png
  27. BIN
      src/main/webapp/resources/img/tender/zhongbiao.png
  28. 571 451
      src/main/webapp/resources/js/index/app.js
  29. 141 42
      src/main/webapp/resources/js/index/services/Purc.js
  30. 4 0
      src/main/webapp/resources/tpl/index/purc/left.html
  31. 464 0
      src/main/webapp/resources/tpl/index/purc/tender.html
  32. 271 0
      src/main/webapp/resources/tpl/index/purc/tender_evaluation.html
  33. 43 0
      src/main/webapp/resources/tpl/index/purc/tender_vendor.html
  34. 360 0
      src/main/webapp/resources/tpl/index/purc/tenderlist.html
  35. 2 0
      src/main/webapp/resources/tpl/index/sale/left.html
  36. 348 0
      src/main/webapp/resources/tpl/index/sale/opentenderlist.html
  37. 1 1
      src/main/webapp/resources/tpl/index/sale/quotation_new_cust.html
  38. 346 0
      src/main/webapp/resources/tpl/index/sale/tender.html
  39. 306 0
      src/main/webapp/resources/tpl/index/sale/tender_vendor.html
  40. 353 0
      src/main/webapp/resources/tpl/index/sale/tenderlist.html

+ 523 - 0
src/main/java/com/uas/platform/b2b/controller/PurchaseTenderController.java

@@ -0,0 +1,523 @@
+package com.uas.platform.b2b.controller;
+
+import com.alibaba.dubbo.common.utils.CollectionUtils;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.uas.platform.b2b.model.*;
+import com.uas.platform.b2b.search.SearchService;
+import com.uas.platform.b2b.service.AttachService;
+import com.uas.platform.b2b.service.PurchaseTenderService;
+import com.uas.platform.b2b.service.UserService;
+import com.uas.platform.b2b.support.SystemSession;
+import com.uas.platform.b2b.support.UsageBufferedLogger;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import com.uas.platform.core.model.Constant;
+import com.uas.platform.core.model.PageParams;
+import com.uas.platform.core.util.serializer.FlexJsonUtils;
+import com.uas.platform.core.web.bind.RequestState;
+import com.uas.search.b2b.model.MultiValue;
+import com.uas.search.b2b.model.SPage;
+import com.uas.search.b2b.model.Sort;
+import com.uas.search.b2b.util.SearchConstants;
+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.transaction.annotation.Transactional;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by dongbw on 17/03/07 14:19.
+ */
+@Controller
+@RequestMapping("/tender")
+public class PurchaseTenderController {
+
+
+//    @Autowired
+//    private EnterpriseBaseInfoService enterpriseBaseInfoService;
+
+    @Autowired
+    private PurchaseTenderService purchaseTenderService;
+
+    @Autowired
+    private SearchService searchService;
+
+    @Autowired
+    private UserService userService;
+
+    @Autowired
+    private AttachService attachService;
+
+    private final static UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+
+    /**
+     * 作为采购方,发布招标单
+     *
+     * @param tender
+     * @return
+     */
+    @RequestMapping(value = "/publish", method = RequestMethod.POST)
+    @ResponseBody
+    @Transactional
+    public ResponseEntity<String> publishTender(String tender, String enterpriseBaseInfo) {
+        PurchaseTender purchaseTender = FlexJsonUtils.fromJson(tender, PurchaseTender.class);
+        if (null != enterpriseBaseInfo) {
+            enterpriseBaseInfo = "[".concat(enterpriseBaseInfo);
+            enterpriseBaseInfo = enterpriseBaseInfo.concat("]");
+            List<Enterprise> enterprises = FlexJsonUtils.fromJsonArray(enterpriseBaseInfo, Enterprise.class);
+            System.out.println("enterpriseBaseInfo" + JSON.toJSONString(enterprises));
+            purchaseTenderService.publish(purchaseTender, enterprises);
+        } else {
+            purchaseTenderService.publishOpen(purchaseTender);
+        }
+        logger.log("招标", "采购方招标单发布", "标题" + purchaseTender.getTitle()+ "企业uu" + SystemSession.getUser().getEnterprise().getUu());
+        return new ResponseEntity<String>(HttpStatus.OK);
+    }
+
+    /**
+     * 作为采购方,保存招标单
+     *
+     * @param tender
+     * @param enterpriseBaseInfo
+     * @return
+     */
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @ResponseBody
+    @Transactional
+    public ResponseEntity<String> saveTender(String tender, String enterpriseBaseInfo) {
+        PurchaseTender purchaseTender = FlexJsonUtils.fromJson(tender, PurchaseTender.class);
+        if (null != enterpriseBaseInfo) {
+            enterpriseBaseInfo = "[".concat(enterpriseBaseInfo);
+            enterpriseBaseInfo = enterpriseBaseInfo.concat("]");
+            List<Enterprise> enterprises = FlexJsonUtils.fromJsonArray(enterpriseBaseInfo, Enterprise.class);
+            System.out.println("enterpriseBaseInfo" + JSON.toJSONString(enterprises));
+            purchaseTenderService.save(purchaseTender, enterprises);
+        } else {
+            purchaseTenderService.saveOpen(purchaseTender);
+        }
+        return new ResponseEntity<String>(HttpStatus.OK);
+    }
+
+    /**
+     * 供应商投标
+     *
+     * @param bid
+     * @param tenderItem
+     * @return
+     */
+    @RequestMapping(value = "/reply", method = RequestMethod.POST)
+    @ResponseBody
+    public ResponseEntity<String> replyTender(String bid, String tenderItem) {
+        System.out.println("投标" + JSON.toJSONString(bid));
+        PurchaseTender tender = FlexJsonUtils.fromJson(bid, PurchaseTender.class);
+        PurchaseTenderItem item = FlexJsonUtils.fromJson(tenderItem, PurchaseTenderItem.class);
+        purchaseTenderService.reply(tender, item);
+        logger.log("供应商投标", "供应商对招标单进行投标",  "供应商名称" + item.getEnterpriseBaseInfo().getEnName() + ",价格" + item.getPrice() + ",税率" + item.getTaxrate()+ item.getCode());
+        return new ResponseEntity<String>(HttpStatus.OK);
+    }
+
+    /**
+     * 查看招标单
+     *
+     * @param id
+     * @return
+     */
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public PurchaseTender getTenderById(@PathVariable("id") Long id) {
+        return purchaseTenderService.findById(id);
+    }
+
+    /**
+     * 采购方查看投标单
+     *
+     * @param id
+     * @return
+     */
+    @RequestMapping(value = "/item/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public PurchaseTenderItem getBidById(@PathVariable("id") Long id) {
+       return purchaseTenderService.findByItemId(id);
+    }
+
+    /**
+     * 供应商查看投标单
+     *
+     * @param id
+     * @return
+     */
+    @RequestMapping(value = "vendorTenderDetail/{vendUU}/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public PurchaseTenderItem getVendorItemByIdAndEnUU(@PathVariable("vendUU")Long vendUU,@PathVariable("id") Long id) {
+        return purchaseTenderService.findByEnUUAndId(vendUU, id);
+    }
+
+
+    /**
+     * 查看评标单
+     *
+     * @param id
+     * @return
+     */
+    @RequestMapping(value = "/items/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public List<PurchaseTenderItem> getTenderItemsById(@PathVariable("id") Long id) {
+        System.out.println("controller item" + JSON.toJSONString(purchaseTenderService.getItemsByTenderId(id)));
+        return purchaseTenderService.getItemsByTenderId(id);
+    }
+
+    /**
+     * 招标方定标
+     *
+     * @param json
+     * @return
+     */
+    @RequestMapping(value = "/decide", method = RequestMethod.POST)
+    @ResponseBody
+    public ResponseEntity<String> decideTender(@RequestBody String json) {
+        System.out.println("json" + JSON.toJSONString(json));
+        PurchaseTender purchaseTender = FlexJsonUtils.fromJson(json, PurchaseTender.class);
+        purchaseTender = purchaseTenderService.decide(purchaseTender);
+        logger.log("供应商投标", "供应商对招标单进行投标",  "标题" + purchaseTender.getTitle() + purchaseTender.getCode());
+        return new ResponseEntity<String>(HttpStatus.OK);
+    }
+
+    /**
+     * 作为供应商,查看收到的招标单(全部)
+     *
+     * @param params
+     * @return
+     */
+    @RequestMapping(method = RequestMethod.GET)
+    @ResponseBody
+    public SPage<PurchaseTender> getAllTenders(PageParams params, String searchFilter) {
+        logger.log("客户招标单", "查看客户发出的招标单(全部)");
+        JSONObject jsonObject = JSONObject.parseObject(searchFilter);
+        String keyword = jsonObject.getString("keyword");
+        com.uas.search.b2b.model.PageParams pageParams = searchService.convertPageParams(params, searchFilter);
+        // 判断当前用户是否被客户分配
+        SearchFilter filter = userService.distribute();
+        if (filter != null && filter.getDistribute() == null) {
+            return null;
+        }
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("pt_id", false, Sort.Type.LONG, new Long(1)));
+        pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
+        pageParams.getFilters().put("pt_ispublish", Constant.YES);
+        pageParams.getFilters().put("pt_ifopen", Constant.NO);
+        pageParams.getFilters().put("pti_ptid", SystemSession.getUser().getEnterprise().getUu());
+        return searchService.searchPurcTenderIds(keyword, pageParams);
+    }
+
+
+    /**
+     * 作为供应商,查看收到的招标单(待投标)
+     *
+     * @param params
+     * @return
+     */
+    @RequestMapping(params = RequestState.TODO, method = RequestMethod.GET)
+    @ResponseBody
+    public SPage<PurchaseTender> getTodoTenders(PageParams params, String searchFilter) {
+        logger.log("客户招标单", "查看客户发出的招标单(待投标)");
+        System.out.println("params" + JSON.toJSONString(params));
+        System.out.println("searchFilter" + JSON.toJSONString(searchFilter));
+        JSONObject jsonObject = JSONObject.parseObject(searchFilter);
+        String keyword = jsonObject.getString("keyword");
+        com.uas.search.b2b.model.PageParams pageParams = searchService.convertPageParams(params, searchFilter);
+        // 判断当前用户是否被客户分配
+        SearchFilter filter = userService.distribute();
+        if (filter != null && filter.getDistribute() == null) {
+            return null;
+        }
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("pt_id", false, Sort.Type.LONG, new Long(1)));
+        pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
+        pageParams.getFilters().put("pti_ptid", SystemSession.getUser().getEnterprise().getUu());
+        String itemStatus = SystemSession.getUser().getEnterprise().getUu() + "待投标";
+        pageParams.getFilters().put("pti_ptid", itemStatus);
+        pageParams.getFilters().put("pt_ispublish", Constant.YES);
+        pageParams.getFilters().put("pt_ifopen", Constant.NO);
+        pageParams.getFilters().put("pt_overdue", Constant.NO);
+        System.out.println("pageParams" + JSON.toJSONString(pageParams));
+        System.out.println("return" + JSON.toJSONString(searchService.searchPurcTenderIds(keyword, pageParams)));
+        return searchService.searchPurcTenderIds(keyword, pageParams);
+    }
+
+
+    /**
+     * 作为供应商,查看收到的招标单(过期)
+     *
+     * @param params
+     * @return
+     */
+    @RequestMapping(params = RequestState.END, method = RequestMethod.GET)
+    @ResponseBody
+    public SPage<PurchaseTender> getEndTenders(PageParams params, String searchFilter) {
+        logger.log("客户招标单", "查看客户发出的招标单(已过期)");
+        JSONObject jsonObject = JSONObject.parseObject(searchFilter);
+        String keyword = jsonObject.getString("keyword");
+        com.uas.search.b2b.model.PageParams pageParams = searchService.convertPageParams(params, searchFilter);
+        // 判断当前用户是否被客户分配
+        SearchFilter filter = userService.distribute();
+        if (filter != null && filter.getDistribute() == null) {
+            return null;
+        }
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("pt_id", false, Sort.Type.LONG, new Long(1)));
+        pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
+        pageParams.getFilters().put("pti_ptid", SystemSession.getUser().getEnterprise().getUu());
+        pageParams.getFilters().put("pt_ispublish", Constant.YES);
+        pageParams.getFilters().put("pt_ifopen", Constant.NO);
+        pageParams.getFilters().put("pt_status", "待投标");
+        pageParams.getFilters().put("pt_overdue", Constant.YES);
+        return searchService.searchPurcTenderIds(keyword, pageParams);
+    }
+
+
+    /**
+     * 作为供应商,查看平台开放招标单(全部)
+     *
+     * @param params
+     * @return
+     */
+    @RequestMapping(value = "/open", method = RequestMethod.GET)
+    @ResponseBody
+    public SPage<PurchaseTender> getAllOpenTenders(PageParams params, String searchFilter) {
+        logger.log("平台公开招标单", "查看平台公开招标单(全部)");
+        System.out.println("params" + JSON.toJSONString(params));
+        System.out.println("searchFilter" + JSON.toJSONString(searchFilter));
+        JSONObject jsonObject = JSONObject.parseObject(searchFilter);
+        String keyword = jsonObject.getString("keyword");
+        com.uas.search.b2b.model.PageParams pageParams = searchService.convertPageParams(params, searchFilter);
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("pt_id", false, Sort.Type.LONG, new Long(1)));
+        pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
+        pageParams.getFilters().put("pt_ispublish", Constant.YES);
+        pageParams.getFilters().put("pt_ifopen", Constant.YES);
+        System.out.println("pageParams" + JSON.toJSONString(pageParams));
+        System.out.println("return" + JSON.toJSONString(searchService.searchPurcTenderIds(keyword, pageParams)));
+        return searchService.searchPurcTenderIds(keyword, pageParams);
+    }
+
+
+    /**
+     * 作为供应商,查看平台开放招标单(待投标)
+     *
+     * @param params
+     * @return
+     */
+    @RequestMapping(value = "/open", params = RequestState.TODO, method = RequestMethod.GET)
+    @ResponseBody
+    public SPage<PurchaseTender> getTodoOpenTenders(PageParams params, String searchFilter) {
+        logger.log("平台公开招标单", "查看平台公开招标单(待投标)");
+        System.out.println("params" + JSON.toJSONString(params));
+        System.out.println("searchFilter" + JSON.toJSONString(searchFilter));
+        JSONObject jsonObject = JSONObject.parseObject(searchFilter);
+        String keyword = jsonObject.getString("keyword");
+        com.uas.search.b2b.model.PageParams pageParams = searchService.convertPageParams(params, searchFilter);
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("pt_id", false, Sort.Type.LONG, new Long(1)));
+        pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
+        pageParams.getFilters().put("pt_ispublish", Constant.YES);
+        pageParams.getFilters().put("pt_ifopen", Constant.YES);
+        pageParams.getFilters().put("pt_overdue", Constant.NO);
+        String itemStatus = SystemSession.getUser().getEnterprise().getUu() + "待投标";
+        pageParams.getFilters().put("pti_ptid", itemStatus);
+        System.out.println("pageParams" + JSON.toJSONString(pageParams));
+        System.out.println("return" + JSON.toJSONString(searchService.searchPurcTenderIds(keyword, pageParams)));
+        return searchService.searchPurcTenderIds(keyword, pageParams);
+    }
+
+
+    /**
+     * 作为供应商,查看平台开放招标单(过期)
+     *
+     * @param params
+     * @return
+     */
+    @RequestMapping(value = "/open", params = RequestState.END, method = RequestMethod.GET)
+    @ResponseBody
+    public SPage<PurchaseTender> getEndOpenTenders(PageParams params, String searchFilter) {
+        logger.log("平台公开招标单", "查看平台公开招标单(已过期)");
+        JSONObject jsonObject = JSONObject.parseObject(searchFilter);
+        String keyword = jsonObject.getString("keyword");
+        com.uas.search.b2b.model.PageParams pageParams = searchService.convertPageParams(params, searchFilter);
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("pt_id", false, Sort.Type.LONG, new Long(1)));
+        pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
+        pageParams.getFilters().put("pt_ispublish", Constant.YES);
+        pageParams.getFilters().put("pt_ifopen", Constant.YES);
+        pageParams.getFilters().put("pt_overdue", Constant.YES);
+        pageParams.getFilters().put("pt_status", "待投标");
+        return searchService.searchPurcTenderIds(keyword, pageParams);
+    }
+
+    /**
+     * 作为采购方,查看发出的招标单
+     *
+     * @param params
+     * @return
+     */
+    @RequestMapping(value = "/purc", method = RequestMethod.GET)
+    @ResponseBody
+    public SPage<PurchaseTender> getMyAllTenders(PageParams params, String searchFilter) {
+        logger.log("招标单", "查看自己发出的招标单(全部)");
+        JSONObject jsonObject = JSONObject.parseObject(searchFilter);
+        String keyword = jsonObject.getString("keyword");
+        com.uas.search.b2b.model.PageParams pageParams = searchService.convertPageParams(params, searchFilter);
+        // 当前登录企业作为客户
+        SearchFilter filter = userService.distribute();
+        if (filter != null && filter.getDistribute() == null) {
+            return null;
+        }
+        buildFilter(filter, pageParams);
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("pt_id", false, Sort.Type.LONG, new Long(1)));
+        pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
+        pageParams.getFilters().put("pt_enuu", SystemSession.getUser().getEnterprise().getUu());
+        return searchService.searchPurcTenderIds(keyword, pageParams);
+    }
+
+    /**
+     *  filter处理
+     *
+     * @param filter
+     * @param pageParams
+     */
+    private void buildFilter(SearchFilter filter, com.uas.search.b2b.model.PageParams pageParams) {
+        if (filter != null && !CollectionUtils.isEmpty(filter.getDistribute())) {
+            List<Object> list = new ArrayList<>();
+            for (Object object : filter.getDistribute()) {
+                list.add(object);
+            }
+            pageParams.getFilters().put("pti_venduu", new MultiValue(list, true));
+        }
+    }
+
+    /**
+     * 作为采购方,查看发出的招标单(待评标)
+     *
+     * @param params
+     * @return
+     */
+    @RequestMapping(value = "/purc", params = RequestState.DONE, method = RequestMethod.GET)
+    @ResponseBody
+    public SPage<PurchaseTender> getMyDoneTenders(PageParams params, String searchFilter) {
+        logger.log("招标单", "查看自己发出的招标单(待评标)");
+        JSONObject jsonObject = JSONObject.parseObject(searchFilter);
+        String keyword = jsonObject.getString("keyword");
+        com.uas.search.b2b.model.PageParams pageParams = searchService.convertPageParams(params, searchFilter);
+        // 当前登录企业作为客户
+        SearchFilter filter = userService.distribute();
+        if (filter != null && filter.getDistribute() == null) {
+            return null;
+        }
+        buildFilter(filter, pageParams);
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("pt_id", false, Sort.Type.LONG, new Long(1)));
+        pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
+        pageParams.getFilters().put("pt_enuu", SystemSession.getUser().getEnterprise().getUu());
+        pageParams.getFilters().put("pt_ispublish", Constant.YES);
+        pageParams.getFilters().put("pt_status", "待评标");
+        pageParams.getFilters().put("pt_overdue", Constant.YES);
+        pageParams.getFilters().put("pt_result", Constant.NO);
+        return searchService.searchPurcTenderIds(keyword, pageParams);
+    }
+
+    /**
+     * 作为采购方,查看发出的招标单(待投标)
+     *
+     * @param params
+     * @return
+     */
+    @RequestMapping(value = "/purc", params = RequestState.TODO, method = RequestMethod.GET)
+    @ResponseBody
+    public SPage<PurchaseTender> getMyTodoTenders(PageParams params, String searchFilter) {
+        logger.log("招标单", "查看自己发出的招标单(待投标)");
+        JSONObject jsonObject = JSONObject.parseObject(searchFilter);
+        String keyword = jsonObject.getString("keyword");
+        com.uas.search.b2b.model.PageParams pageParams = searchService.convertPageParams(params, searchFilter);
+        // 当前登录企业作为客户
+        SearchFilter filter = userService.distribute();
+        if (filter != null && filter.getDistribute() == null) {
+            return null;
+        }
+        buildFilter(filter, pageParams);
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("pt_id", false, Sort.Type.LONG, new Long(1)));
+        pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
+        pageParams.getFilters().put("pt_enuu", SystemSession.getUser().getEnterprise().getUu());
+        pageParams.getFilters().put("pt_ispublish", Constant.YES);
+        pageParams.getFilters().put("pt_status", "待投标");
+        pageParams.getFilters().put("pt_overdue", Constant.NO);
+        return searchService.searchPurcTenderIds(keyword, pageParams);
+    }
+
+
+    /**
+     *  作为客户,查看发出的招标单(待发布)
+     *
+     * @param params
+     * @param searchFilter
+     *
+     */
+    @RequestMapping(value = "/purc", params = RequestState.WAITING, method = RequestMethod.GET)
+    @ResponseBody
+    public SPage<PurchaseTender> getWaitingPTenders(PageParams params, String searchFilter) {
+        logger.log("招标单", "查看自己发出的招标单(待发布)");
+        JSONObject jsonObject = JSONObject.parseObject(searchFilter);
+        String keyword = jsonObject.getString("keyword");
+        com.uas.search.b2b.model.PageParams pageParams = searchService.convertPageParams(params, searchFilter);
+        // 当前登录企业作为客户
+
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("pt_id", false, Sort.Type.LONG, new Long(1)));
+        pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
+        pageParams.getFilters().put("pt_enuu", SystemSession.getUser().getEnterprise().getUu());
+        SearchFilter filter = userService.distribute();
+        if (filter != null && filter.getDistribute() == null) {
+            return null;
+        }
+        buildFilter(filter, pageParams);
+        pageParams.getFilters().put("pt_ispublish", Constant.NO);
+        pageParams.getFilters().put("pt_status", "待发布");
+        return searchService.searchPurcTenderIds(keyword, pageParams);
+    }
+
+     /**
+     * 招标附件上传
+     *
+     * @param tender
+     * @return
+     */
+     @RequestMapping(value = "/addTenderAttach", method = RequestMethod.POST)
+     @ResponseBody
+     public ModelMap addTenderAttaches(String tender, FileUpload uploadItem) {
+         System.out.println("FileUpload" + JSON.toJSONString(uploadItem));
+         PurchaseTender purchaseTender = FlexJsonUtils.fromJson(tender, PurchaseTender.class);
+         System.out.println("attach" + JSON.toJSONString(tender));
+         return purchaseTenderService.addTenderAttaches(purchaseTender, uploadItem);
+     }
+
+    /**
+     * 投标附件上传
+     *
+     * @param tenderItem
+     * @return
+     */
+    @RequestMapping(value = "/addTenderItemAttach", method = RequestMethod.POST)
+    @ResponseBody
+    public ModelMap addTenderItemAttaches(String tenderItem, FileUpload uploadItem) {
+        System.out.println("FileUpload" + JSON.toJSONString(uploadItem));
+        PurchaseTenderItem item = FlexJsonUtils.fromJson(tenderItem, PurchaseTenderItem.class);
+        System.out.println("attach" + JSON.toJSONString(tenderItem));
+        return purchaseTenderService.addTenderItemAttaches(item, uploadItem);
+    }
+}

+ 14 - 0
src/main/java/com/uas/platform/b2b/dao/EnterpriseBaseInfoDao.java

@@ -0,0 +1,14 @@
+package com.uas.platform.b2b.dao;
+
+import com.uas.platform.b2b.model.EnterpriseBaseInfo;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Created by dongbw on 17/03/07 14:13.
+ */
+@Repository
+public interface EnterpriseBaseInfoDao extends JpaSpecificationExecutor<EnterpriseBaseInfo>,JpaRepository<EnterpriseBaseInfo, Long> {
+
+}

+ 17 - 0
src/main/java/com/uas/platform/b2b/dao/PurchaseTenderDao.java

@@ -0,0 +1,17 @@
+package com.uas.platform.b2b.dao;
+
+import com.uas.platform.b2b.model.PurchaseTender;
+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 dongbw on 17/03/07 14:10.
+ */
+@Repository
+public interface PurchaseTenderDao extends JpaSpecificationExecutor<PurchaseTender>,JpaRepository<PurchaseTender, Long> {
+
+    List<PurchaseTender> findByCode(String code);
+}

+ 21 - 0
src/main/java/com/uas/platform/b2b/dao/PurchaseTenderItemDao.java

@@ -0,0 +1,21 @@
+package com.uas.platform.b2b.dao;
+
+import com.uas.platform.b2b.model.PurchaseTenderItem;
+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 dongbw on 17/03/07 14:10.
+ */
+@Repository
+public interface PurchaseTenderItemDao extends JpaSpecificationExecutor<PurchaseTenderItem>,JpaRepository<PurchaseTenderItem, Long> {
+
+    List<PurchaseTenderItem> findByCode(String code);
+
+//    @Query("select m.id,m.applyStatus,m.description,m.price,m.taxrate from PurchaseTenderItem m where m.code=:code order by m.price desc")
+//    List<PurchaseTenderItem> findByTenderCode(@Param("code") String code);
+
+}

+ 234 - 0
src/main/java/com/uas/platform/b2b/model/EnterpriseBaseInfo.java

@@ -0,0 +1,234 @@
+package com.uas.platform.b2b.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import org.codehaus.jackson.annotate.JsonIgnore;
+
+import javax.persistence.*;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+import java.util.Set;
+
+/**
+ *  用于招标中的企业基本信息
+ * Created by dongbw on 17/03/07 11:50.
+ */
+
+@Table(name = "sec$enterprisebaseinfo")
+@Entity
+public class EnterpriseBaseInfo {
+
+    /**
+     * 序列号
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 企业uu
+     */
+    @Id
+    @Column(name = "en_uu")
+    private Long uu;
+
+    /**
+     * 公司名称
+     */
+    @NotNull
+    @Column(name = "en_name")
+    private String enName;
+
+    /**
+     * 注册地址
+     */
+    @Column(name = "en_address")
+    private String enAddress;
+
+    /**
+     * 企业执照号
+     */
+    @Column(name = "en_businesscode")
+    private String enBusinessCode;
+
+    /**
+     * 成立时间
+     */
+    @Column(name = "en_establishdate")
+    private Date enEstablishDate;
+
+    /**
+     * 员工人数
+     */
+    @Column(name = "en_emnum")
+    private Long emNum;
+
+    /**
+     * 公司电话
+     */
+    @Column(name = "en_tel")
+    private String enTel;
+    /**
+     * 传真
+     */
+    @Column(name = "en_fax")
+    private String enFax;
+
+    /**
+     * 联系人
+     */
+    @Column(name = "en_user")
+    private String enUser;
+
+    /**
+     * 联系人电话
+     */
+    @Column(name = "en_usertel")
+    private String userTel;
+
+    /**
+     * 开户行
+     */
+    @Column(name = "en_bank")
+    private String bank;
+
+    /**
+     * 经营范围
+     */
+    @Column(name = "en_scope")
+    private String scope;
+
+    /**
+     * 备注
+     */
+    @Column(name = "en_remark")
+    private String remark;
+
+    /**
+     * 投标明细
+     */
+    @OneToMany(mappedBy = "enterpriseBaseInfo", cascade = CascadeType.REFRESH, fetch = FetchType.EAGER)
+    @OrderBy("id desc")
+    private Set<PurchaseTenderItem> purchaseTenderItems;
+
+    public EnterpriseBaseInfo(Long uu, String enBusinessCode, String enName, String enAddress) {
+        this.uu = uu;
+        this.enBusinessCode = enBusinessCode;
+        this.enName = enName;
+        this.enAddress = enAddress;
+    }
+
+    public EnterpriseBaseInfo() {
+    }
+
+    @JsonIgnore
+    @JSONField(serialize = false)
+    public Set<PurchaseTenderItem> getPurchaseTenderItems() {
+        return purchaseTenderItems;
+    }
+
+    public void setPurchaseTenderItems(Set<PurchaseTenderItem> purchaseTenderItems) {
+        this.purchaseTenderItems = purchaseTenderItems;
+    }
+
+    public Long getUu() {
+        return uu;
+    }
+
+    public void setUu(Long uu) {
+        this.uu = uu;
+    }
+
+    public String getEnName() {
+        return enName;
+    }
+
+    public void setEnName(String enName) {
+        this.enName = enName;
+    }
+
+    public String getEnAddress() {
+        return enAddress;
+    }
+
+    public void setEnAddress(String enAddress) {
+        this.enAddress = enAddress;
+    }
+
+    public String getEnBusinessCode() {
+        return enBusinessCode;
+    }
+
+    public void setEnBusinessCode(String enBusinessCode) {
+        this.enBusinessCode = enBusinessCode;
+    }
+
+    public Date getEnEstablishDate() {
+        return enEstablishDate;
+    }
+
+    public void setEnEstablishDate(Date enEstablishDate) {
+        this.enEstablishDate = enEstablishDate;
+    }
+
+    public Long getEmNum() {
+        return emNum;
+    }
+
+    public void setEmNum(Long emNum) {
+        this.emNum = emNum;
+    }
+
+    public String getEnTel() {
+        return enTel;
+    }
+
+    public void setEnTel(String enTel) {
+        this.enTel = enTel;
+    }
+
+    public String getEnFax() {
+        return enFax;
+    }
+
+    public void setEnFax(String enFax) {
+        this.enFax = enFax;
+    }
+
+    public String getEnUser() {
+        return enUser;
+    }
+
+    public void setEnUser(String enUser) {
+        this.enUser = enUser;
+    }
+
+    public String getUserTel() {
+        return userTel;
+    }
+
+    public void setUserTel(String userTel) {
+        this.userTel = userTel;
+    }
+
+    public String getBank() {
+        return bank;
+    }
+
+    public void setBank(String bank) {
+        this.bank = bank;
+    }
+
+    public String getScope() {
+        return scope;
+    }
+
+    public void setScope(String scope) {
+        this.scope = scope;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+}

+ 415 - 0
src/main/java/com/uas/platform/b2b/model/PurchaseTender.java

@@ -0,0 +1,415 @@
+package com.uas.platform.b2b.model;
+
+import org.hibernate.annotations.Where;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+/**
+ *  招标单信息(因为存在根据日期判断状态,需要使用定时任务,采用视图)
+ * Created by dongbw on 17/03/07 11:16.
+ */
+
+@Table(name = "v$purc$tender")
+@Entity
+public class PurchaseTender implements Serializable {
+    /**
+     * 序列号
+     */
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "purc$tender_gen")
+    @SequenceGenerator(name = "purc$tender_gen", sequenceName = "purc$tender_seq", allocationSize = 1)
+    @Column(name = "pt_id")
+    private Long id;
+
+    /**
+     * 招标编号
+     */
+    @Column(name = "pt_code")
+    private String code;
+
+    /**
+     * 招标标题
+     */
+    @Column(name = "pt_title")
+    private String title;
+
+    /**
+     * 录入日期
+     */
+    @Column(name = "pt_modified")
+    private Date modified;
+
+    /**
+     * 单据最后时间
+     */
+    @Column(name = "pt_date")
+    private Date date;
+
+    /**
+     * 联系人
+     */
+    @Column(name = "pt_user")
+    private String user;
+
+    /**
+     * 联系人uu
+     */
+    @Column(name = "pt_usertel")
+    private String userTel;
+
+//    /**
+//     * 招标企业uu
+//     */
+//    @Column(name = "pt_enuu")
+//    private Long enUU;
+    /**
+     * 企业基本信息
+     */
+    @OneToOne
+    @JoinColumn(name = "pt_enuu")
+    private Enterprise enterprise;
+
+    /**
+     * 投标截止日期
+     */
+    @Column(name = "pt_enddate")
+    private Date endDate;
+
+    /**
+     *  结果公布日期
+     */
+    @Column(name = "pt_publishdate")
+    private Date publishDate;
+
+    /**
+     * 状态
+     */
+    @Column(name = "pt_status")
+    private String status;
+
+    /**
+     * 物料名称
+     */
+    @Column(name = "pt_prodtitle")
+    private String prodTitle;
+
+    /**
+     * 物料型号
+     */
+    @Column(name = "pt_prodcode")
+    private String prodCode;
+
+    /**
+     * 单位
+     */
+    @Column(name = "pt_unit")
+    private String unit;
+
+    /**
+     * 数量
+     */
+    @Column(name = "pt_qty")
+    private Long qty;
+
+    /**
+     * 币别
+     */
+    @Column(name = "pt_currency")
+    private String currency;
+
+    /**
+     * 是否开放报名(1为开放,0为指定供应商)
+     */
+    @Column(name = "pt_ifopen")
+    private Short ifOpen;
+
+    /**
+     * 是否含税(1含税,0不含税)
+     */
+    @Column(name = "pt_iftax")
+    private Short ifTax;
+
+    /**
+     * 收货地址
+     */
+    @Column(name = "pt_shipaddress")
+    private String shipAddress;
+
+    /**
+     * 付款方式
+     */
+    @Column(name = "pt_payment")
+    private String payment;
+
+    /**
+     * 发票类型(0表示不要发票, 1表示增值税普通发票, 2表示增值税专用发票)
+     */
+    @Column(name = "pt_invoicetype")
+    private Short invoiceType;
+
+    /**
+     * 证照要求
+     */
+    @Column(name = "pt_certificate")
+    private String certificate;
+
+    /**
+     * 发布状态(保存为0,发布为1)
+     */
+    @Column(name = "pt_ispublish")
+    private Short isPublish;
+
+    /**
+     * 投标明细
+     */
+    @OneToMany(mappedBy = "tender", cascade = { CascadeType.REFRESH, CascadeType.PERSIST, CascadeType.REMOVE,
+            CascadeType.MERGE }, fetch = FetchType.EAGER)
+    @OrderBy("id desc")
+    private Set<PurchaseTenderItem> purchaseTenderItems;
+
+    /**
+     * 招标附件
+     */
+    @OneToMany(fetch = FetchType.EAGER)
+    @JoinColumn(name = "rel_key")
+    @org.hibernate.annotations.ForeignKey(name = "none")
+    @Where(clause = "rel_table = 'purc$tender'")
+    private Set<Attach> tenderAttaches;
+
+
+    /**
+     * 是否截止(0未截止,1已截止)
+     */
+    @Column(name = "pt_overdue", insertable = false, updatable = false)
+    private Short overdue;
+
+    /**
+     * 是否公布结果(0未公布,1已公布)
+     */
+    @Column(name = "pt_result", insertable = false, updatable = false)
+    private Short result;
+
+    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;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public Date getModified() {
+        return modified;
+    }
+
+    public void setModified(Date modified) {
+        this.modified = modified;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public Short getIsPublish() {
+        return isPublish;
+    }
+
+    public void setIsPublish(Short isPublish) {
+        this.isPublish = isPublish;
+    }
+
+    public Set<PurchaseTenderItem> getPurchaseTenderItems() {
+        return purchaseTenderItems;
+    }
+
+    public void setPurchaseTenderItems(Set<PurchaseTenderItem> purchaseTenderItems) {
+        this.purchaseTenderItems = purchaseTenderItems;
+    }
+
+    public String getUser() {
+        return user;
+    }
+
+    public void setUser(String user) {
+        this.user = user;
+    }
+
+    public String getUserTel() {
+        return userTel;
+    }
+
+    public void setUserTel(String userTel) {
+        this.userTel = userTel;
+    }
+
+    public Enterprise getEnterprise() {
+        return enterprise;
+    }
+
+    public void setEnterprise(Enterprise enterprise) {
+        this.enterprise = enterprise;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
+
+    public Date getPublishDate() {
+        return publishDate;
+    }
+
+    public void setPublishDate(Date publishDate) {
+        this.publishDate = publishDate;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getProdTitle() {
+        return prodTitle;
+    }
+
+    public void setProdTitle(String prodTitle) {
+        this.prodTitle = prodTitle;
+    }
+
+    public String getProdCode() {
+        return prodCode;
+    }
+
+    public void setProdCode(String prodCode) {
+        this.prodCode = prodCode;
+    }
+
+    public String getUnit() {
+        return unit;
+    }
+
+    public void setUnit(String unit) {
+        this.unit = unit;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public Long getQty() {
+        return qty;
+    }
+
+    public void setQty(Long qty) {
+        this.qty = qty;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public Short getIfOpen() {
+        return ifOpen;
+    }
+
+    public void setIfOpen(Short ifOpen) {
+        this.ifOpen = ifOpen;
+    }
+
+    public Short getIfTax() {
+        return ifTax;
+    }
+
+    public void setIfTax(Short ifTax) {
+        this.ifTax = ifTax;
+    }
+
+    public String getShipAddress() {
+        return shipAddress;
+    }
+
+    public void setShipAddress(String shipAddress) {
+        this.shipAddress = shipAddress;
+    }
+
+    public String getPayment() {
+        return payment;
+    }
+
+    public void setPayment(String payment) {
+        this.payment = payment;
+    }
+
+    public Short getInvoiceType() {
+        return invoiceType;
+    }
+
+    public void setInvoiceType(Short invoiceType) {
+        this.invoiceType = invoiceType;
+    }
+
+    public String getCertificate() {
+        return certificate;
+    }
+
+    public void setCertificate(String certificate) {
+        this.certificate = certificate;
+    }
+
+    public Set<Attach> getTenderAttaches() {
+        return tenderAttaches;
+    }
+
+    public void setTenderAttaches(Set<Attach> tenderAttaches) {
+        this.tenderAttaches = tenderAttaches;
+    }
+}
+
+

+ 171 - 0
src/main/java/com/uas/platform/b2b/model/PurchaseTenderItem.java

@@ -0,0 +1,171 @@
+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.List;
+import java.util.Set;
+
+/**
+ *  投标单信息
+ * Created by dongbw on 17/03/07 11:16.
+ */
+
+@Table(name = "purc$tenderitem")
+@Entity
+public class PurchaseTenderItem {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "purc$tenderitem_gen")
+    @SequenceGenerator(name = "purc$tenderitem_gen", sequenceName = "purc$tenderitem_seq", allocationSize = 1)
+    @Column(name = "pti_id")
+    private Long id;
+
+    /**
+     * 税率
+     */
+    @Column(name = "pti_taxrate")
+    private Long taxrate;
+
+    /**
+     * 单价
+     */
+    @Column(name = "pti_price")
+    private Double price;
+
+
+    /**
+     * 说明
+     */
+    @Column(name = "pti_description")
+    private String description;
+
+    /**
+     * 说明
+     */
+    @Column(name = "pti_code")
+    private String code;
+
+
+    /**
+     * 中标状态(为空表示未处理,0表示未中标,1表示已中标)
+     */
+    @Column(name = "pti_applystatus")
+    private Short applyStatus;
+
+    /**
+     * 投标状态(用于search项目的单据过滤,是否投标其实可以通过是否存在价格判断)
+     */
+    @Column(name = "pti_status")
+    private String status;
+
+    /**
+     * 投标附件
+     */
+    @OneToMany(fetch = FetchType.EAGER)
+    @JoinColumn(name = "rel_key")
+    @org.hibernate.annotations.ForeignKey(name = "none")
+    @Where(clause = "rel_table = 'purc$tenderitem'")
+    private Set<Attach> bidAttaches;
+
+    /**
+     * 招标单
+     */
+    @ManyToOne(cascade = CascadeType.REFRESH)
+    @JoinColumn(name = "pti_ptid", nullable = false)
+    private PurchaseTender tender;
+
+    /**
+     * 投标企业基本信息
+     */
+    @ManyToOne(cascade = {CascadeType.REFRESH,CascadeType.MERGE,CascadeType.PERSIST})
+    @JoinColumn(name = "pti_venduu", nullable = false)
+    private EnterpriseBaseInfo enterpriseBaseInfo;
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getTaxrate() {
+        return taxrate;
+    }
+
+    public void setTaxrate(Long taxrate) {
+        this.taxrate = taxrate;
+    }
+
+    public Double getPrice() {
+        return price;
+    }
+
+    public void setPrice(Double price) {
+        this.price = price;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public Short getApplyStatus() {
+        return applyStatus;
+    }
+
+    public void setApplyStatus(Short applyStatus) {
+        this.applyStatus = applyStatus;
+    }
+
+    public Set<Attach> getBidAttaches() {
+        return bidAttaches;
+    }
+
+    public void setBidAttaches(Set<Attach> bidAttaches) {
+        this.bidAttaches = bidAttaches;
+    }
+
+    @JsonIgnore
+    @JSONField(serialize = false)
+    public PurchaseTender getTender() {
+        return tender;
+    }
+
+    public void setTender(PurchaseTender tender) {
+        this.tender = tender;
+    }
+
+    public EnterpriseBaseInfo getEnterpriseBaseInfo() {
+        return enterpriseBaseInfo;
+    }
+
+    public void setEnterpriseBaseInfo(EnterpriseBaseInfo enterpriseBaseInfo) {
+        this.enterpriseBaseInfo = enterpriseBaseInfo;
+    }
+
+
+}

+ 10 - 30
src/main/java/com/uas/platform/b2b/search/SearchService.java

@@ -1,35 +1,6 @@
 package com.uas.platform.b2b.search;
 
-import com.uas.platform.b2b.model.Component;
-import com.uas.platform.b2b.model.Enterprise;
-import com.uas.platform.b2b.model.MakeAccept;
-import com.uas.platform.b2b.model.MakeOrder;
-import com.uas.platform.b2b.model.MakeOrderChangeItem;
-import com.uas.platform.b2b.model.MakeReturn;
-import com.uas.platform.b2b.model.Product;
-import com.uas.platform.b2b.model.PurchaseAccept;
-import com.uas.platform.b2b.model.PurchaseApBill;
-import com.uas.platform.b2b.model.PurchaseApCheck;
-import com.uas.platform.b2b.model.PurchaseBadIn;
-import com.uas.platform.b2b.model.PurchaseBadOut;
-import com.uas.platform.b2b.model.PurchaseForecastAll;
-import com.uas.platform.b2b.model.PurchaseInquiryItem;
-import com.uas.platform.b2b.model.PurchaseInquiryMould;
-import com.uas.platform.b2b.model.PurchaseMRB;
-import com.uas.platform.b2b.model.PurchaseNotice;
-import com.uas.platform.b2b.model.PurchaseOrderAll;
-import com.uas.platform.b2b.model.PurchaseOrderChange;
-import com.uas.platform.b2b.model.PurchaseOrderDone;
-import com.uas.platform.b2b.model.PurchaseOrderEnd;
-import com.uas.platform.b2b.model.PurchaseOrderTodo;
-import com.uas.platform.b2b.model.PurchaseOrderWaiting;
-import com.uas.platform.b2b.model.PurchaseProofingApproval;
-import com.uas.platform.b2b.model.PurchaseProofingItem;
-import com.uas.platform.b2b.model.PurchaseProofingSend;
-import com.uas.platform.b2b.model.PurchaseReturn;
-import com.uas.platform.b2b.model.SaleARCheck;
-import com.uas.platform.b2b.model.SaleQuotationAll;
-import com.uas.platform.b2b.model.SaleSendAll;
+import com.uas.platform.b2b.model.*;
 import com.uas.search.b2b.model.PageParams;
 import com.uas.search.b2b.model.SPage;
 
@@ -252,6 +223,15 @@ public interface SearchService {
 	 */
 	public SPage<PurchaseInquiryMould> searchPurcInquiryMouldIds(String keyword, PageParams pageParams);
 
+	/**
+	 * 招标单
+	 *
+	 * @param keyword
+	 * @param pageParams
+	 * @return
+	 */
+	public SPage<PurchaseTender> searchPurcTenderIds(String keyword, PageParams pageParams);
+
 	/**
 	 * 将com.uas.platform.core.model.PageParams转为搜索项目下的PageParams
 	 * 

+ 20 - 60
src/main/java/com/uas/platform/b2b/search/SearchServiceImpl.java

@@ -13,72 +13,15 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
+import com.alibaba.fastjson.JSON;
+import com.uas.platform.b2b.dao.*;
+import com.uas.platform.b2b.model.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 
 import com.alibaba.fastjson.JSONObject;
-import com.uas.platform.b2b.dao.ComponentDao;
-import com.uas.platform.b2b.dao.EnterpriseDao;
-import com.uas.platform.b2b.dao.MakeAcceptDao;
-import com.uas.platform.b2b.dao.MakeOrderChangeItemDao;
-import com.uas.platform.b2b.dao.MakeOrderDao;
-import com.uas.platform.b2b.dao.MakeReturnDao;
-import com.uas.platform.b2b.dao.ProductDao;
-import com.uas.platform.b2b.dao.PurchaseAcceptDao;
-import com.uas.platform.b2b.dao.PurchaseApBillDao;
-import com.uas.platform.b2b.dao.PurchaseApCheckDao;
-import com.uas.platform.b2b.dao.PurchaseBadInDao;
-import com.uas.platform.b2b.dao.PurchaseBadOutDao;
-import com.uas.platform.b2b.dao.PurchaseForecastAllDao;
-import com.uas.platform.b2b.dao.PurchaseInquiryItemDao;
-import com.uas.platform.b2b.dao.PurchaseInquiryMouldDao;
-import com.uas.platform.b2b.dao.PurchaseMRBDao;
-import com.uas.platform.b2b.dao.PurchaseNoticeDao;
-import com.uas.platform.b2b.dao.PurchaseOrderAllDao;
-import com.uas.platform.b2b.dao.PurchaseOrderChangeDao;
-import com.uas.platform.b2b.dao.PurchaseOrderDoneDao;
-import com.uas.platform.b2b.dao.PurchaseOrderEndDao;
-import com.uas.platform.b2b.dao.PurchaseOrderTodoDao;
-import com.uas.platform.b2b.dao.PurchaseOrderWaitingDao;
-import com.uas.platform.b2b.dao.PurchaseProofingApprovalDao;
-import com.uas.platform.b2b.dao.PurchaseProofingItemDao;
-import com.uas.platform.b2b.dao.PurchaseProofingSendDao;
-import com.uas.platform.b2b.dao.PurchaseReturnDao;
-import com.uas.platform.b2b.dao.SaleARCheckDao;
-import com.uas.platform.b2b.dao.SaleQuotationAllDao;
-import com.uas.platform.b2b.dao.SaleSendAllDao;
-import com.uas.platform.b2b.model.Component;
-import com.uas.platform.b2b.model.Enterprise;
-import com.uas.platform.b2b.model.MakeAccept;
-import com.uas.platform.b2b.model.MakeOrder;
-import com.uas.platform.b2b.model.MakeOrderChangeItem;
-import com.uas.platform.b2b.model.MakeReturn;
-import com.uas.platform.b2b.model.Product;
-import com.uas.platform.b2b.model.PurchaseAccept;
-import com.uas.platform.b2b.model.PurchaseApBill;
-import com.uas.platform.b2b.model.PurchaseApCheck;
-import com.uas.platform.b2b.model.PurchaseBadIn;
-import com.uas.platform.b2b.model.PurchaseBadOut;
-import com.uas.platform.b2b.model.PurchaseForecastAll;
-import com.uas.platform.b2b.model.PurchaseInquiryItem;
-import com.uas.platform.b2b.model.PurchaseInquiryMould;
-import com.uas.platform.b2b.model.PurchaseMRB;
-import com.uas.platform.b2b.model.PurchaseNotice;
-import com.uas.platform.b2b.model.PurchaseOrderAll;
-import com.uas.platform.b2b.model.PurchaseOrderChange;
-import com.uas.platform.b2b.model.PurchaseOrderDone;
-import com.uas.platform.b2b.model.PurchaseOrderEnd;
-import com.uas.platform.b2b.model.PurchaseOrderTodo;
-import com.uas.platform.b2b.model.PurchaseOrderWaiting;
-import com.uas.platform.b2b.model.PurchaseProofingApproval;
-import com.uas.platform.b2b.model.PurchaseProofingItem;
-import com.uas.platform.b2b.model.PurchaseProofingSend;
-import com.uas.platform.b2b.model.PurchaseReturn;
-import com.uas.platform.b2b.model.SaleARCheck;
-import com.uas.platform.b2b.model.SaleQuotationAll;
-import com.uas.platform.b2b.model.SaleSendAll;
 import com.uas.platform.core.persistence.criteria.PredicateFactory;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.search.b2b.model.PageParams;
@@ -188,6 +131,9 @@ public class SearchServiceImpl implements com.uas.platform.b2b.search.SearchServ
 	@Autowired
 	private EnterpriseDao enterpriseDao;
 
+	@Autowired
+	private PurchaseTenderDao purchaseTenderDao;
+
 	private ConcurrentHashMap<String, Field> sortFields = new ConcurrentHashMap<String, Field>();
 
 	private Field getPropertyField(Class<?> targetCls, String properyName) {
@@ -620,4 +566,18 @@ public class SearchServiceImpl implements com.uas.platform.b2b.search.SearchServ
 		return toSPage(idsPage, content);
 	}
 
+	/**
+	 *  招标单
+	 * @param keyword
+	 * @param pageParams
+	 * @return
+	 */
+	@Override
+	public SPage<PurchaseTender> searchPurcTenderIds(String keyword, PageParams pageParams) {
+		SPage<Long> idsPage = searchService.searchIds(keyword, Table_name.PURC$TENDER, pageParams);
+		List<PurchaseTender> content = purchaseTenderDao.findAll(idsPage.getContent());
+		sortByProperty(content, PurchaseTender.class, "id", idsPage.getContent());
+		return toSPage(idsPage, content);
+	}
+
 }

+ 7 - 0
src/main/java/com/uas/platform/b2b/service/EnterpriseBaseInfoService.java

@@ -0,0 +1,7 @@
+package com.uas.platform.b2b.service;
+
+/**
+ * Created by dongbw on 17/03/07 14:17.
+ */
+public interface EnterpriseBaseInfoService {
+}

+ 95 - 0
src/main/java/com/uas/platform/b2b/service/PurchaseTenderService.java

@@ -0,0 +1,95 @@
+package com.uas.platform.b2b.service;
+
+import com.uas.platform.b2b.model.Enterprise;
+import com.uas.platform.b2b.model.FileUpload;
+import com.uas.platform.b2b.model.PurchaseTender;
+import com.uas.platform.b2b.model.PurchaseTenderItem;
+import org.springframework.ui.ModelMap;
+
+import java.util.List;
+
+/**
+ * Created by dongbw on 17/03/07 14:15.
+ */
+public interface PurchaseTenderService {
+
+    /**
+     * 保存招标单
+     *
+     * @param tender
+     * @return
+     */
+    void save(PurchaseTender tender, List<Enterprise> enterprises);
+
+    /**
+     * 发布招标单
+     *
+     * @param tender
+     * @return
+     */
+    void publish(PurchaseTender tender, List<Enterprise> enterprises);
+
+    /**
+     * 投标
+     *
+     * @param item
+     * @return
+     */
+    PurchaseTenderItem reply(PurchaseTender tender, PurchaseTenderItem item);
+
+    /**
+     * 根据id获取投标单
+     *
+     * @param bidId
+     * @return
+     */
+    PurchaseTenderItem findByItemId(Long bidId);
+
+
+    /**
+     * 采购方定标操作
+     *
+     * @param purchaseTender
+     * @return
+     */
+    PurchaseTender decide(PurchaseTender purchaseTender);
+
+    /**
+     * 根据id获取招标单
+     *
+     * @param bidId
+     * @return
+     */
+    PurchaseTender findById(Long bidId);
+
+    /**
+     *  根据id获取评标单
+     * @param id
+     * @return
+     */
+    List<PurchaseTenderItem> getItemsByTenderId(Long id);
+
+    /**
+     *  根据id和enuu获取客户投标单
+     * @param vendUU
+     * @param id
+     * @return
+     */
+    PurchaseTenderItem findByEnUUAndId(Long vendUU, Long id);
+
+    /**
+     *  发布公开招标单
+     * @param purchaseTender
+     */
+    void publishOpen(PurchaseTender purchaseTender);
+
+    /**
+     *  保存公开招标单
+     * @param purchaseTender
+     */
+    void saveOpen(PurchaseTender purchaseTender);
+
+    ModelMap addTenderAttaches(PurchaseTender purchaseTender, FileUpload uploadItem);
+
+    ModelMap addTenderItemAttaches(PurchaseTenderItem item, FileUpload uploadItem);
+}

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

@@ -0,0 +1,11 @@
+package com.uas.platform.b2b.service.impl;
+
+import com.uas.platform.b2b.service.EnterpriseBaseInfoService;
+import org.springframework.stereotype.Service;
+
+/**
+ * Created by dongbw on 17/03/07 14:17.
+ */
+@Service
+public class EnterpriseBaseInfoServiceImpl implements EnterpriseBaseInfoService {
+}

+ 289 - 0
src/main/java/com/uas/platform/b2b/service/impl/PurchaseTenderServiceImpl.java

@@ -0,0 +1,289 @@
+package com.uas.platform.b2b.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.uas.platform.b2b.dao.*;
+import com.uas.platform.b2b.model.*;
+import com.uas.platform.b2b.service.AttachService;
+import com.uas.platform.b2b.service.PurchaseTenderService;
+import com.uas.platform.b2b.support.SystemSession;
+import com.uas.platform.core.model.Constant;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.ui.ModelMap;
+
+import java.util.*;
+
+/**
+ * Created by dongbw on 17/03/07 14:16.
+ */
+@Service
+public class PurchaseTenderServiceImpl implements PurchaseTenderService {
+
+    @Autowired
+    private PurchaseTenderDao purchaseTenderDao;
+
+    @Autowired
+    private PurchaseTenderItemDao purchaseTenderItemDao;
+
+    @Autowired
+    private AttachDao attachDao;
+
+    @Autowired
+    private AttachService attachService;
+
+    @Autowired
+    private EnterpriseDao enterpriseDao;
+
+    @Autowired
+    private EnterpriseBaseInfoDao enterpriseBaseInfoDao;
+
+    /**
+     * 保存招标单
+     *
+     * @param tender
+     * @return
+     */
+    @Override
+    public void save(PurchaseTender tender, List<Enterprise> enterprises) {
+        tender.setIsPublish(Constant.NO);
+        tender.setStatus("在录入");
+        tender.setEnterprise(SystemSession.getUser().getEnterprise());
+        purchaseTenderItemDao.save(saveTenderItem(tender, enterprises));
+    }
+
+    /**
+     * 发布招标单
+     *
+     * @param tender
+     * @return
+     */
+    @Override
+    public void publish(PurchaseTender tender, List<Enterprise> enterprises) {
+        tender.setIsPublish(Constant.YES);
+        tender.setStatus("待投标");
+        tender.setEnterprise(SystemSession.getUser().getEnterprise());
+        purchaseTenderItemDao.save(saveTenderItem(tender, enterprises));
+    }
+
+    @Override
+    public void publishOpen(PurchaseTender tender) {
+        tender.setIsPublish(Constant.YES);
+        tender.setStatus("待投标");
+        tender.setEnterprise(SystemSession.getUser().getEnterprise());
+        purchaseTenderDao.save(tender);
+    }
+
+    @Override
+    public void saveOpen(PurchaseTender tender) {
+        tender.setIsPublish(Constant.NO);
+        tender.setStatus("待发布");
+        tender.setEnterprise(SystemSession.getUser().getEnterprise());
+        purchaseTenderDao.save(tender);
+    }
+
+    @Override
+    public ModelMap addTenderAttaches(PurchaseTender purchaseTender, FileUpload uploadItem) {
+        System.out.println("enter addtenderattachs impl");
+        ModelMap map = new ModelMap();
+        Set<Attach> attaches = new HashSet<>();
+        if (uploadItem.getFile() != null) {// 附件存在
+            Attach attach = attachService.upload(uploadItem, "tenderAttachs", "招标附件");
+            if (attach == null) {
+                map.put("error", "文件太大");
+            } else {
+                attach.setRelativeTable("purc$tender");
+                attaches.add(attach);
+//                purchaseTender = purchaseTenderDao.save(purchaseTender);
+            }
+        }
+        List<PurchaseTender> tenders = purchaseTenderDao.findByCode(purchaseTender.getCode());
+        PurchaseTender tender = tenders.get(0);
+        tender.setTenderAttaches(attaches);
+        System.out.println("tender attach impl" + JSON.toJSONString(tender));
+        attachDao.save(attaches);
+        tender = purchaseTenderDao.save(tender);
+        if (!CollectionUtils.isEmpty(tenders)) {
+            map.put("id", tender.getId());
+            map.put("success", "招标附件上传成功");
+        }
+        System.out.println("return addtenderattachs impl" + JSON.toJSONString(map));
+        return map;
+    }
+
+    @Override
+    public ModelMap addTenderItemAttaches(PurchaseTenderItem item, FileUpload uploadItem) {
+        ModelMap map = new ModelMap();
+        Set<Attach> attaches = new HashSet<>();
+        if (uploadItem.getFile() != null) {// 附件存在
+            Attach attach = attachService.upload(uploadItem, "tenderItemAttachs", "投标附件");
+            if (attach == null) {
+                map.put("error", "文件太大");
+            } else {
+                attach.setRelativeTable("purc$tenderitem");
+                attaches.add(attach);
+//                purchaseTender = purchaseTenderDao.save(purchaseTender);
+            }
+        }
+        List<PurchaseTender> tenders = purchaseTenderDao.findByCode(item.getCode());
+        PurchaseTenderItem purchaseTenderItem = new PurchaseTenderItem();
+        Set<PurchaseTenderItem> tenderItems = tenders.get(0).getPurchaseTenderItems();
+        for (PurchaseTenderItem tenderItem: tenderItems) {
+            if (tenderItem.getEnterpriseBaseInfo().getUu().intValue() == SystemSession.getUser().getEnterprise().getUu().intValue()) {
+                purchaseTenderItem = purchaseTenderItemDao.findOne(tenderItem.getId());
+                System.out.println("找到了匹配的项");
+            }
+        }
+        purchaseTenderItem.setBidAttaches(attaches);
+        purchaseTenderItem.setTender(tenders.get(0));
+        System.out.println("tenderItem attach impl" + JSON.toJSONString(purchaseTenderItem));
+        attachDao.save(attaches);
+        purchaseTenderItem = purchaseTenderItemDao.save(purchaseTenderItem);
+        map.put("id", purchaseTenderItem.getId());
+        map.put("success", "投标附件上传成功");
+        System.out.println("return addtenderItemattachs impl" + JSON.toJSONString(map));
+        return map;
+    }
+
+    private List<PurchaseTenderItem> saveTenderItem (PurchaseTender tender, List<Enterprise> enterprises) {
+        List<PurchaseTenderItem> tenderItems = new ArrayList<>();
+        for (Enterprise enterprise: enterprises) {
+            PurchaseTenderItem tenderItem = new PurchaseTenderItem();
+            tenderItem.setTender(tender);
+            tenderItem.setCode(tender.getCode());
+            EnterpriseBaseInfo enBaseInfo = enterpriseBaseInfoDao.findOne(enterprise.getUu());
+            if (null == enBaseInfo) {
+                enBaseInfo = new EnterpriseBaseInfo(enterprise.getUu(),enterprise.getEnBussinessCode(),enterprise.getEnName(),enterprise.getEnAddress());
+            }
+            tenderItem.setEnterpriseBaseInfo(enBaseInfo);
+            tenderItem.setStatus(enBaseInfo.getUu() + "待投标");
+            purchaseTenderDao.save(tender);
+            tenderItems.add(tenderItem);
+        }
+        return tenderItems;
+    }
+
+
+
+    /**
+     * 投标
+     *
+     * @param item
+     * @return
+     */
+    @Override
+    public PurchaseTenderItem reply(PurchaseTender tender, PurchaseTenderItem item) {
+        PurchaseTender purchaseTender = purchaseTenderDao.findOne(tender.getId());
+        purchaseTender.setStatus("待评标");
+        purchaseTender.setModified(new Date());
+        purchaseTenderDao.save(purchaseTender);
+//        enterpriseBaseInfoDao.save(item.getEnterpriseBaseInfo());
+        PurchaseTenderItem tenderItem = purchaseTenderItemDao.findOne(item.getId());
+        tenderItem.setEnterpriseBaseInfo(item.getEnterpriseBaseInfo());
+        tenderItem.setPrice(item.getPrice());
+        tenderItem.setTaxrate(item.getTaxrate());
+        tenderItem.setStatus(item.getEnterpriseBaseInfo().getUu() + "已投标");
+        System.out.println("reply impl" + JSON.toJSONString(tenderItem));
+        return purchaseTenderItemDao.save(tenderItem);
+    }
+
+    /**
+     * 根据id获取投标单(供应商进入投标)
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    public PurchaseTenderItem findByItemId(Long id) {
+        PurchaseTender tender = purchaseTenderDao.findOne(id);
+        tender.setModified(new Date());
+        Long enUU = SystemSession.getUser().getEnterprise().getUu();
+        return returnPurchaseTenderItem(tender, enUU);
+    }
+
+    /**
+     * 根据id和供应商uu获取投标单(采购方查看投标单)
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    public PurchaseTenderItem findByEnUUAndId(Long enUU, Long id) {
+        PurchaseTender tender = purchaseTenderDao.findOne(id);
+        return returnPurchaseTenderItem(tender, enUU);
+    }
+
+    private PurchaseTenderItem returnPurchaseTenderItem(PurchaseTender tender, Long enUU) {
+        PurchaseTenderItem tenderItem = new PurchaseTenderItem();
+        if (!CollectionUtils.isEmpty(tender.getPurchaseTenderItems())) {
+            Set<PurchaseTenderItem> tenderItems = tender.getPurchaseTenderItems();
+            for (PurchaseTenderItem item : tenderItems) {
+                if (null != item.getEnterpriseBaseInfo()) {
+                    if (item.getEnterpriseBaseInfo().getUu().intValue() == enUU.intValue()) {
+                        item.setTender(tender);
+//                        item.setStatus(enUU + "待投标");
+                        return item;
+                    }
+                }
+            }
+        }
+        // 如果不存在就新建一个投标单。
+        tenderItem.setTender(tender);
+        tenderItem.setCode(tender.getCode());
+        EnterpriseBaseInfo enBaseInfo = enterpriseBaseInfoDao.findOne(enUU);
+        if (null == enBaseInfo) {
+            Enterprise enterprise = enterpriseDao.findOne(enUU);
+            if (null != enterprise) {
+                enBaseInfo = new EnterpriseBaseInfo(enterprise.getUu(),enterprise.getEnBussinessCode(),enterprise.getEnName(),enterprise.getEnAddress());
+            }
+        }
+        tenderItem.setEnterpriseBaseInfo(enBaseInfo);
+        tenderItem.setStatus(enUU + "待投标");
+        System.out.println("getItem impl tender" + JSON.toJSONString(tender));
+        System.out.println("getItem impl tenderItem" + JSON.toJSONString(tenderItem));
+        Set<PurchaseTenderItem> items = new HashSet<>();
+        if (!CollectionUtils.isEmpty(tender.getPurchaseTenderItems())) {
+            items = tender.getPurchaseTenderItems();
+        }
+        items.add(tenderItem);
+        tender.setPurchaseTenderItems(items);
+        purchaseTenderDao.save(tender);
+        return tenderItem;
+    }
+
+    /**
+     * 采购方定标操作
+     *
+     * @param purchaseTender
+     * @return
+     */
+    @Override
+    public PurchaseTender decide(PurchaseTender purchaseTender) {
+        System.out.println("decide impl" + JSON.toJSONString(purchaseTender));
+        purchaseTender.setStatus("已结标");
+        for (PurchaseTenderItem tenderItem : purchaseTender.getPurchaseTenderItems()) {
+            tenderItem.setTender(purchaseTender);
+            purchaseTenderItemDao.save(tenderItem);
+        }
+        return purchaseTenderDao.save(purchaseTender);
+    }
+
+    @Override
+    public PurchaseTender findById(Long id) {
+        return purchaseTenderDao.findOne(id);
+    }
+
+    @Override
+    public List<PurchaseTenderItem> getItemsByTenderId(Long id) {
+        System.out.println("enter impl getItemsByTenderId");
+        PurchaseTender tender = purchaseTenderDao.findOne(id);
+        List<PurchaseTenderItem> tenderItems = new ArrayList<>();
+        for (PurchaseTenderItem tenderItem : tender.getPurchaseTenderItems()) {
+            tenderItems.add(tenderItem);
+        }
+        System.out.println("getItemsByTenderId" + JSON.toJSONString(tenderItems));
+        return tenderItems;
+    }
+
+
+}

+ 105 - 0
src/main/java/com/uas/platform/b2b/temporary/model/PurcTender.java

@@ -0,0 +1,105 @@
+package com.uas.platform.b2b.temporary.model;
+
+import com.uas.platform.b2b.model.Attach;
+import com.uas.platform.b2b.model.Enterprise;
+import com.uas.platform.b2b.model.EnterpriseBaseInfo;
+import com.uas.platform.b2b.model.PurchaseTender;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Created by dongbw on 17/03/14 17:23.
+ */
+public class PurcTender {
+
+    private Long id;
+
+    private String taxrate;
+
+    private String price;
+
+    private String description;
+
+    private String applyStatus;
+
+    private Set<Attach> bidAttachs;
+
+    private PurchaseTender tender;
+
+    private EnterpriseBaseInfo enterpriseBaseInfo;
+
+    private List<Enterprise> enterprises;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getTaxrate() {
+        return taxrate;
+    }
+
+    public void setTaxrate(String taxrate) {
+        this.taxrate = taxrate;
+    }
+
+    public String getPrice() {
+        return price;
+    }
+
+    public void setPrice(String price) {
+        this.price = price;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getApplyStatus() {
+        return applyStatus;
+    }
+
+    public void setApplyStatus(String applyStatus) {
+        this.applyStatus = applyStatus;
+    }
+
+    public Set<Attach> getBidAttachs() {
+        return bidAttachs;
+    }
+
+    public void setBidAttachs(Set<Attach> bidAttachs) {
+        this.bidAttachs = bidAttachs;
+    }
+
+    public PurchaseTender getTender() {
+        return tender;
+    }
+
+    public void setTender(PurchaseTender tender) {
+        this.tender = tender;
+    }
+
+    public EnterpriseBaseInfo getEnterpriseBaseInfo() {
+        return enterpriseBaseInfo;
+    }
+
+    public void setEnterpriseBaseInfo(EnterpriseBaseInfo enterpriseBaseInfo) {
+        this.enterpriseBaseInfo = enterpriseBaseInfo;
+    }
+
+    public List<Enterprise> getEnterprises() {
+        return enterprises;
+    }
+
+    public void setEnterprises(List<Enterprise> enterprises) {
+        this.enterprises = enterprises;
+    }
+}

+ 3 - 3
src/main/webapp/resources/css/index.css

@@ -11,7 +11,7 @@ body {
 		"\9ED1\4F53", Arial, sans-serif;
 	color: #222;
 	font-size: 14px;
-	background-color: #eff2f9;
+	background-color: #f5f5f5;
 }
 
 #top, #header, #footer {
@@ -195,7 +195,7 @@ a.none:hover {
 	border-color: #dcdcdc;
 }
 
-.btn-info.btn-line {
+/*.btn-info.btn-line {
 	background-color: #fff;
 	color: #56a022;
 	border-color: #56a022;
@@ -205,7 +205,7 @@ a.none:hover {
 	background-color: #56a022;
 	color: #fff;
 	border-color: #56a022;
-}
+}*/
 
 /*dropdown*/
 .dropdown-menu {

BIN
src/main/webapp/resources/img/tender/daipingbiao.png


BIN
src/main/webapp/resources/img/tender/daitoubiao.png


BIN
src/main/webapp/resources/img/tender/liubiao.png


BIN
src/main/webapp/resources/img/tender/select.png


BIN
src/main/webapp/resources/img/tender/toubiaozhong.png


BIN
src/main/webapp/resources/img/tender/upload.png


BIN
src/main/webapp/resources/img/tender/weizhongbiao.png


BIN
src/main/webapp/resources/img/tender/yijiebiao.png


BIN
src/main/webapp/resources/img/tender/yitoubiao.png


BIN
src/main/webapp/resources/img/tender/zailuru.png


BIN
src/main/webapp/resources/img/tender/zhaobiao.png


BIN
src/main/webapp/resources/img/tender/zhongbiao.png


File diff suppressed because it is too large
+ 571 - 451
src/main/webapp/resources/js/index/app.js


+ 141 - 42
src/main/webapp/resources/js/index/services/Purc.js

@@ -121,53 +121,149 @@ define([ 'ngResource'], function() {
 			}
 		});
 	}]).factory('PurcInquiry', ['$resource', function($resource) {
-		return $resource('sale/inquiry/:id', {}, {
-			getAll: {
-				isArray: true
-			},
-			getTodo: {
-				params: {
-					_state: 'todo'
-				}
-			},
-			getDone: {
+        return $resource('sale/inquiry/:id', {}, {
+            getAll: {
+                isArray: true
+            },
+            getTodo: {
+                params: {
+                    _state: 'todo'
+                }
+            },
+            getDone: {
+                params: {
+                    _state: 'done'
+                }
+            },
+            getEnd: {
+                params: {
+                    _state: 'end'
+                }
+            },
+            reply: {
+                url: 'sale/inquiry/items/:itemId/reply',
+                method: 'POST',
+                params: {
+                    itemId: 'itemId'
+                }
+            }, getItem: {
+                url: 'sale/inquiry/items/:itemId',
+                method: 'GET',
+                params: {
+                    itemId: 'itemId'
+                }
+            }, saveItem: {
+                url: 'sale/inquiry/items/:itemId',
+                method: 'POST',
+                params: {
+                    itemId: 'itemId'
+                }
+            }, getHistory: {
+                url: 'sale/inquiry/items/:itemId/history',
+                method: 'GET',
+                params: {
+                    itemId: 'itemId'
+                },
+                isArray: true
+            }
+        });
+    }]).factory('PurcTender', ['$resource', function($resource) {
+    	return $resource('tender', {}, {
+            getMyAll: {
+                url: 'tender/purc'
+            },
+            getMyDone: {
+                url: 'tender/purc',
+                params: {
+                    _state: 'done'
+                }
+            },
+            getMyTodo: {
+                url: 'tender/purc',
+                params: {
+                    _state: 'todo'
+                }
+            },
+            getMyWaiting: {
+                url: 'tender/purc',
+                params: {
+                    _state: 'waiting'
+                }
+            },
+            getAll: {
+            },
+            getTodo: {
+                params: {
+                    _state: 'todo'
+                }
+            },
+            getEnd: {
+                params: {
+                    _state: 'end'
+                }
+            },
+            getOpenAll: {
+            	url: 'tender/open'
+            },
+            getOpenTodo: {
+                url: 'tender/open',
+                params: {
+                    _state: 'todo'
+                }
+            },
+            getOpenEnd: {
+                url: 'tender/open',
+                params: {
+                    _state: 'end'
+                }
+            },
+    		getOne: {
+    			url: 'tender/:id',
+				method: 'GET',
 				params: {
-					_state: 'done'
-				}
+    				id: 'id'
+				}
+			},
+            getItem: {
+                url: 'tender/item/:id',
+                method: 'GET',
+                params: {
+                    id: 'id'
+                }
+            },
+            getVendorTenderItem: {
+                url: 'tender/vendorTenderDetail/:vendUU/:id',
+                method: 'GET',
+                params: {
+                	vendUU: 'vendUU',
+                    id: 'id'
+                }
+            },
+            getItems: {
+                url: 'tender/items/:id',
+                method: 'GET',
+                params: {
+                    id: 'id'
+                },
+                isArray: true
+            },
+			save: {
+                url: 'tender/save',
+                method: 'POST'
 			},
-			getEnd: {
-				params: {
-					_state: 'end'
-				}
+			publish: {
+                url: 'tender/publish',
+                method: 'POST'
 			},
 			reply: {
-				url: 'sale/inquiry/items/:itemId/reply',
-				method: 'POST',
-				params: {
-					itemId: 'itemId'
-				}
-			}, getItem: {
-				url: 'sale/inquiry/items/:itemId',
-				method: 'GET',
-				params: {
-					itemId: 'itemId'
-				}
-			}, saveItem: {
-				url: 'sale/inquiry/items/:itemId',
-				method: 'POST',
-				params: {
-					itemId: 'itemId'
-				}
-			}, getHistory: {
-				url: 'sale/inquiry/items/:itemId/history',
-				method: 'GET',
-				params: {
-					itemId: 'itemId'
-				},
-				isArray: true
-			}
+                url: 'tender/reply',
+                method: 'POST'
+			},
+            decide: {
+                url: 'tender/decide',
+                method: 'POST'
+            }
 		});
-		//TODO 
 	}]).factory('PurcInquiryMould', ['$resource', function($resource) {
 		return $resource('sale/mould/:id', {}, {
 			getAll: {
@@ -488,6 +584,9 @@ define([ 'ngResource'], function() {
 				// 调取使用uas系统的供应商信息
 				url: 'purc/vendor/serve',
 				isArray: true
+			},
+			getVendor: {
+				url: 'vendor',
 			}
 		});
 	}]).factory('Quotation', ['$resource', function($resource){

+ 4 - 0
src/main/webapp/resources/tpl/index/purc/left.html

@@ -25,6 +25,10 @@
 	<ul class="list-unstyled">
 		<li ui-sref-active="active"><a ui-sref="purc.cart">购物车</a></li>
 	</ul>
+	<!-- 测试 -->
+	<ul class="list-unstyled">
+		<li ui-sref-active="active"><a ui-sref="purc.tenderlist">招标</a></li>
+	</ul>
 </div>
 <div class="left-nav">
 	<ul class="list-unstyled">

+ 464 - 0
src/main/webapp/resources/tpl/index/purc/tender.html

@@ -0,0 +1,464 @@
+<!--  招标单  -->
+<style>
+
+    /* 标题 */
+    .tender-label {
+        height: 30px;
+        margin-left: 10px;
+        margin-right: 10px;
+        background-color: #e8e8e8;
+        box-shadow: 0 0 5px #6f6f6f;
+        border-top-right-radius: 20px;
+    }
+    /* 主体 */
+    .purc-tender {
+        line-height: 2;
+        font-family: "Microsoft Yahei Regular";
+        font-size: 14px;
+    }
+    .purc-tender .row {
+        margin-left: 0px;
+        margin-right: 0px;
+        padding-left: 15px;
+        padding-right: 15px;
+    }
+    .tender-content {
+        background-color: #fff;
+    }
+
+    .tender-content>div>div {
+        margin-top: 3px;
+        margin-bottom: 3px;
+    }
+    /* 二级标题栏 */
+    .title-div {
+        font-family: "Microsoft Yahei Regular";
+        font-size: 14px;
+        font-weight: 600;
+        padding-left: 30px;
+        height: 50px;
+        padding-top: 11px;
+    }
+
+    /* 输入框前描述 */
+    .tender-desc {
+        width: 100px;
+        float: left;
+        padding-top: 4px;
+    }
+    /* 输入框 */
+    .tender-input {
+        border: none;
+        border-bottom: 1px solid #323232;
+        text-align: center;
+    }
+    .tender-input:focus{
+        outline:none;
+        border-bottom: 1px solid #5078cb;
+    }
+
+    /* 收货地址 */
+    .address-group {
+        border-bottom: 1px solid #323232;
+        border-bottom-left-radius: 0;
+        margin-right: 20px;
+    }
+    .address-group>input:focus{
+        outline: none;
+    }
+
+    /* 基本信息 */
+    .base-info {
+        border-bottom: 1px solid #e8e8e8;
+        padding-bottom: 30px;
+        padding-top: 20px;
+        margin-bottom: 0; /* 去除index中公共样式影响 */
+    }
+
+    /* 地址附加图标 */
+    .address-addon {
+        border: none;
+        background: none;
+    }
+
+    /* 下拉选项 */
+    .select-menu {
+        margin: 4px;
+        width: 100px;
+        padding: 0 5%;
+    }
+
+    select {
+        /*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/
+        border: solid 1px #5078cb;
+
+        /*很关键:将默认的select选择框样式清除*/
+        appearance:none;
+        -moz-appearance:none;
+        -webkit-appearance:none;
+
+        /*在选择框的最右侧中间显示小箭头图片*/
+        background: url("resources/img/tender/select.png") no-repeat scroll right center transparent;
+
+
+        /*为下拉小箭头留出一点位置,避免被文字覆盖*/
+        padding-right: 14px;
+    }
+
+
+    /*清除ie的默认选择框样式清除,隐藏下拉箭头*/
+    select::-ms-expand { display: none; }
+
+    /* 日期选择器 */
+    .purc-tender .date-picker {
+        padding-top: 10px;
+    }
+    .purc-tender .date-picker input {
+        border-radius: 0;
+        border: 1px solid #5078cb;
+        border-right: none;
+        font-size: 12px;
+    }
+    .purc-tender .date-picker span .btn-open {
+        color: #fff;
+        background-color: #5078cb;
+        border-radius: 0;
+        border: 1px solid #5078cb;
+        border-left: none;
+    }
+
+    /* 修改本页内btn的样式 及datepicker中的btn-success的样式 */
+    .tender-content .date-picker .btn {
+        border-radius: 0;
+    }
+
+    .tender-content .date-picker .btn-success {
+        background-color: #327EBE;
+    }
+    .tender-content .date-picker ul {
+        border-radius: 0;
+    }
+    .tender-content .date-picker ul div:focus {
+        outline: none;
+        border-radius: 0;
+        border: none;
+    }
+
+    /* 附件上传 */
+    .purc-tender .base-info .attach-upload input {
+        /*height: 100px;*/
+        /*width: 60%;*/
+        height: 50px;
+        margin: 6px 0 0px 100px;
+    }
+    .purc-tender .base-info .attach-upload input:hover {
+        cursor: pointer;
+    }
+    /* 原来的图片点击上传,但是这样无法展示已选附件 */
+   /* .upload-bg {
+        width: 100px;
+        height: 100px;
+        background-image: url('resources/img/tender/upload.png');
+        margin-top: 10px;
+        margin-left: 100px;
+        border: 1px solid #e8e8e8;
+    }*/
+    /* 供应商信息 添加供应商 */
+    .vend-info  a.add-vendor {
+         color: #5078cb;
+     }
+    .vend-info  a.add-vendor:hover {
+        cursor: pointer;
+        color: #55b6ff;
+    }
+    .vend-info  a.remove-vendor {
+        color: #FF2E2F;
+    }
+    .vend-info  a.remove-vendor:hover {
+        cursor: pointer;
+        color: #D32526;
+    }
+
+    /* 单选框 复选框 */
+    input[type="radio"],input[type="checkbox"] {
+        vertical-align:text-bottom;
+        margin-bottom:2px;
+        margin-bottom:-2px\9;
+    }
+    .vend-info .input-select {
+        float: left;
+        padding-top: 4px;
+        margin-left: -20px;
+    }
+
+    .vend-info .input-select input {
+        margin-right: 8px;
+    }
+
+    /* 右下角按钮 */
+    .tender-content>div {
+        background-color: #fff;
+    }
+    .tender-content>div>div>button {
+        width: 94px;
+        height: 36px;
+        font-size: 14px;
+        font-family: "Microsoft Yahei Regular";
+        color: #fff;
+        border-radius: 0;
+    }
+    .tender-content>div>div.btn-publish>button {
+        background-color: #327EBE;
+    }
+    .tender-content>div>div.btn-save>button {
+        background-color: #32bebc;
+    }
+
+
+    .read-only {
+        border: none;
+        color: #969595;
+    }
+
+    .read-only:focus {
+        border: none;
+    }
+
+</style>
+
+<div class="ng-scope">
+    <form name="tenderForm">
+        <div class="purc-tender">
+            <!--<div class="loading in" ng-class="{'in': loading}">
+            <i></i>
+            </div>-->
+            <div class="tender-label list-unstyled">
+                <strong style="padding: 0 10px 0 10px;">|</strong><label>招标单</label>
+            </div>
+            <div class="tender-content ng-scope" ng-controller="PurcNewTenderCtrl">
+                <div class="title-div" style="border-bottom: 1px dashed #327ebe;">
+                    <span>基本信息</span>&nbsp;
+                    <span style="color: rgb(211,37,38);">*</span>
+                </div>
+                <div class="row base-info">
+                    <div class = "col-xs-4">
+                        <div class="tender-desc">招标标题:</div>
+                        <input class="tender-input" type="text" name="title" ng-model="tenderItem.tender.title" required/>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="tender-desc">联系人:</div>
+                        <input class="tender-input" type="text" name="user" ng-model="tenderItem.tender.user" required/>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="tender-desc">联系电话:</div>
+                        <input class="tender-input" type="text" name="userTel" ng-model="tenderItem.tender.userTel" required/>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="tender-desc">产品名称:</div>
+                        <input class="tender-input" type="text" name="prodTitle" ng-model="tenderItem.tender.prodTitle" required/>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="tender-desc">产品型号:</div>
+                        <input class="tender-input" type="text" name="prodCode" ng-model="tenderItem.tender.prodCode" required/>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="tender-desc">单位:</div>
+                        <!--<select class="select-menu" ng-show="tenderItem.$editing && !input-self">
+                            <option name="unit" value ="pcs">PCS</option>
+                            <option value ="kpcs">KPCS</option>
+                            <option value = "" ng-checked="input-self">填写单位</option>
+                        </select>-->
+                        <input class="tender-input" type="text" name="unit" ng-model="tenderItem.tender.unit" required/>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="tender-desc">采购数量:</div>
+                        <input class="tender-input" name="qty" ng-model="tenderItem.tender.qty" type="number" required/>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="tender-desc">交易币别:</div>
+                        <select class="select-menu" data-style="btn-primary">
+                            <option name="currency" ng-model="tenderItem.tender.currency" value ="RMB">RMB</option>
+                            <option name="currency" ng-model="tenderItem.tender.currency" value ="USD">USD</option>
+                            <option name="currency" ng-model="tenderItem.tender.currency" value ="HKD">HKD</option>
+                            <option name="currency" ng-model="tenderItem.tender.currency" value = "EUR">EUR</option>
+                        </select>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="tender-desc">是否含税:</div>
+                        <select class="select-menu">
+                            <option ng-model="tenderItem.tender.ifTax" value ="yes">是</option>
+                            <option ng-model="tenderItem.tender.ifTax" value ="no">否</option>
+                        </select>
+                    </div>
+                    <div class="col-xs-12">
+                        <div class="tender-desc">收货地址:</div>
+                        <span style="border-bottom: 1px solid #323232;"></span>
+                        <div class="input-group address-group">
+                            <span class="address-addon input-group-addon glyphicon glyphicon-map-marker" style="color: #5078cb;"></span>
+                            <input type="text" name="shipAddress" style="width: 100%; border: none;" ng-model="tenderItem.tender.shipAddress" placeholder="填写总部所在详细地址" required/>
+                        </div>
+                    </span>
+                    </div>
+                    <div class="col-xs-4">
+                        <span class="tender-desc" style="padding-top: 15px;">投标截止时间:</span>
+                        <div class="input-group input-trigger date-picker">
+                            <input type="text" ng-model="tenderItem.tender.endDate" required
+                                   class="form-control" placeholder="点击选择截止日期" readonly="readonly"
+                                   datepicker-popup="yyyy-MM-dd" is-open="condition.$fromOpened"
+                                   ng-required="true" max-date="tenderItem.tender.publishDate" current-text="今天" min-date = "getMinDate()"
+                                   clear-text="清除" close-text="关闭"
+                                   datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+                                   ng-click="openDatePicker($event, condition, '$fromOpened')"
+                                   ng-change="onDateCondition()"> <span
+                                class="input-group-btn">
+							<button type="button" class="btn btn-default btn-open"
+                                    ng-click="openDatePicker($event, condition, '$fromOpened')">
+								<i class="fa fa-calendar"></i>
+							</button>
+						</span>
+                        </div>
+                    </div>
+                    <div class="col-xs-4">
+                        <span class="tender-desc" style="padding-top: 15px;">公布结果时间:</span>
+                        <div class="input-group input-trigger date-picker">
+                            <input type="text" ng-model="tenderItem.tender.publishDate" required
+                                   class="form-control" placeholder="点击选择公布日期" readonly="readonly"
+                                   datepicker-popup="yyyy-MM-dd" is-open="condition.$toOpened"
+                                   ng-required="true" min-date="getMinDate()"
+                                   current-text="今天" clear-text="清除" close-text="关闭"
+                                   datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+                                   ng-focus="openDatePicker($event, condition, '$toOpened')"
+                                   ng-change="onDateCondition()"> <span
+                                class="input-group-btn">
+							<button type="button" class="btn btn-default btn-open"
+                                    ng-click="openDatePicker($event, condition, '$toOpened')">
+								<i class="fa fa-calendar"></i>
+							</button>
+						</span>
+                        </div>
+                    </div>
+                    <div class="col-xs-4">
+                    </div>
+                    <div class="col-xs-12">
+                        <div class="tender-desc">上传招标文件:</div>
+                        <div class="attach-upload">
+                            <input type="file" ng-file-select accept="image/*,application/pdf,*.pdf"
+                                   name="file" ng-model="MyFiles">
+                        </div>
+                        <div class="upload-bg"></div>
+                        <div style="margin-left: 100px; color: #969595; font-size: 12px; font-family: 'Microsoft Yahei Regular';">
+                            提示:选择附件大小不超过5MB,可上传JPG,PNG,EXCEL,WORD,PDF
+                        </div>
+                        <!--<div style="margin-left: 100px; color: #969595; font-size: 12px; font-family: 'Microsoft Yahei Regular';">
+                            如果需要上传多个文件,请尝试同时选取多个文件
+                        </div>-->
+                    </div>
+                </div>
+                <div  class="title-div" style="border-bottom: 1px dashed #327ebe;">
+                    <span>供应商信息</span>
+                </div>
+                <div class="row vend-info">
+                    <!--<div class="col-xs-10">
+                        <div class="tender-desc" style="font-size: 12px;font-family: 'Microsoft Yahei Regular'; margin-left: -60px; color: #969595;">(非必选)</div>
+                    </div>-->
+                    <div class="col-xs-12">
+                        <div class="tender-desc">是否开放报名:</div>
+                        <div class="input-select col-xs-4">
+                            <input  class="tender-input" name="ifOpen" type="radio" value="0" ng-model="tenderItem.tender.ifOpen"/>
+                            <span>只允许我邀请的供应商参与</span>
+                        </div>
+                        <div class="input-select col-xs-4">
+                            <input class="tender-input" name="ifOpen" type="radio" value="1" ng-model="tenderItem.tender.ifOpen"/>
+                            <span>允许优软平台的供应商参与</span>
+                        </div>
+                    </div>
+                    <div class="col-xs-12" ng-show="tenderItem.tender.ifOpen == 0 && tenderItem.$editing">
+                        <a class="add-vendor tender-desc" ng-click="dbfindVendor()" href="javascript:void(0)">
+                            <i class="fa fa-plus-square"></i>添加供应商&nbsp;
+                        </a>
+                    </div>
+                    <div class="col-xs-12" style="" ng-repeat="en in tenderItem.enterpriseBaseInfo" ng-show="tenderItem.tender.ifOpen == 0 && tenderItem.$editing">
+                        <div class="col-xs-2 control-label" style="width: 100px;">供应商{{$index + 1}}</div>
+                        <div for="uu{{$index + 1}}" class="col-xs-1" style="width: 20px;">UU</div>
+                        <div class="col-xs-2">
+                            <input class="tender-input" ng-model="en.uu" type="number" id="uu{{$index + 1}}" readonly ng-required="tenderItem.tender.ifOpen == 0">
+                        </div>
+                        <div for="enName{{$index + 1}}" class="col-xs-1" style="width: 60px; margin-left: 20px; margin-right: -20px;">名称</div>
+                        <div class="col-xs-3">
+                            <input ng-model="en.enName" type="text" style="width: 100%;" class="tender-input" readonly id="enName{{$index + 1}}"
+                                   ng-required="tenderItem.tender.ifOpen == 0">
+                        </div>
+                        <div class="col-xs-1">
+                            <a class="remove-vendor" ng-if="tenderItem.$editing" href="javascript:void(0)" ng-click="removeVendor($index)"><i class="fa fa-trash-o"></i>删除</a>
+                        </div>
+                    </div>
+                    <div class="col-xs-12" style="border-bottom: 1px dashed #327ebe;">
+                        <div class="tender-desc">供应商报名要求</div>
+                    </div>
+                    <div class="col-xs-12">
+                        <div class="tender-desc">交易方式:</div>
+                        <input class="tender-input" style="width: 80%; text-align: left;" required name="payment" type="text" ng-model="tenderItem.tender.payment" placeholder="必填,填写付款方式,如现金、月结30天等"/>
+                    </div>
+                    <div class="col-xs-2"></div>
+                    <div class="col-xs-12">
+                        <div class="tender-desc">发票要求:</div>
+                        <div class="input-select col-xs-3">
+                            <input class="tender-input"  name="invoiceType" type="radio" value="2" ng-model="tenderItem.tender.invoiceType"/>
+                            <span>增值税专用发票</span>
+                        </div>
+                        <div class="input-select col-xs-3">
+                            <input class="tender-input" name="invoiceType" type="radio" value="1" ng-model="tenderItem.tender.invoiceType" />
+                            <span>增值税普通发票</span>
+                        </div>
+                        <div class="input-select col-xs-3">
+                            <input class="tender-input"  name="invoiceType" type="radio" value="0" ng-model="tenderItem.tender.invoiceType" />
+                            <span>不需要发票</span>
+                        </div>
+                    </div>
+                    <div class="col-xs-12">
+                        <div class="tender-desc">证照要求:<span class="tender-desc" style="font-size: 12px; font-family: 'Microsoft Yahei'; color: #969595;margin-top:-10px;">(多选)</span></div>
+                        <div class="input-select col-xs-3" ng-repeat="certificate in certificates">
+                            <input type="checkbox" name="certificate" ng-model="certificate.checked" value="certificate">
+                            <span ng-bind="certificate.name"></span>
+                        </div>
+                        <!--<div class="input-select col-xs-3">
+                            <input class="tender-input"  name="certificate" type="checkbox" value="三/五证合一" />
+                            <span>三/五证合一</span>
+                        </div>
+                        <div class="input-select col-xs-3">
+                            <input class="tender-input" name="certificate" type="checkbox" value="营业执照" />
+                            <span>营业执照</span>
+                        </div>
+                        <div class="input-select col-xs-3">
+                            <input class="tender-input"  name="certificate" type="checkbox" value="组织机构代码证" />
+                            <span>组织机构代码证</span>
+                        </div>-->
+                    </div>
+                   <!-- <div class="col-xs-12">
+                        <span class="tender-desc" style="font-size: 12px; font-family: 'Microsoft Yahei'; color: #969595;margin-top:-15px;">(多选)</span>
+                        <div class="input-select col-xs-3">
+                            <input class="tender-input" name="certificate" type="checkbox" value="一般纳税人证明材料" />
+                            <span>一般纳税人证明材料</span>
+                        </div>
+                        <div class="input-select col-xs-3">
+                            <input class="tender-input" name="certificate" type="checkbox" value="统计登记证" />
+                            <span>统计登记证</span>
+                        </div>
+                        <div class="input-select col-xs-3">
+                            <input class="tender-input" name="certificate" type="checkbox" value="社会保险登记证" />
+                            <span>社会保险登记证</span>
+                        </div>
+                    </div>-->
+                </div>
+                <div class="col-xs-12" style="padding: 30px;">
+                    <div class="col-xs-2 pull-right btn-publish">
+                        <button class="btn" ng-disabled="tenderForm.$invalid" ng-click="save(true)">发布</button>
+                    </div>
+                    <div class="col-xs-2 pull-right btn-save">
+                        <button class="btn" ng-disabled="tenderForm.$invalid" ng-click="save(false)">保存</button>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </form>
+</div>

+ 271 - 0
src/main/webapp/resources/tpl/index/purc/tender_evaluation.html

@@ -0,0 +1,271 @@
+<!-- 投标单 -->
+<style>
+
+    /* 标题 */
+    .bid-label {
+        height: 30px;
+        margin-left: 10px;
+        margin-right: 10px;
+        background-color: #e8e8e8;
+        box-shadow: 0 0 5px #6f6f6f;
+        border-top-right-radius: 20px;
+    }
+    /* 主体 */
+    .purc-bid {
+        line-height: 2;
+        font-family: "Microsoft Yahei Regular";
+        font-size: 14px;
+    }
+    .purc-bid .row {
+        margin-left: 0px;
+        margin-right: 0px;
+        padding-left: 15px;
+        padding-right: 15px;
+    }
+    .bid-content {
+        background-color: #fff;
+    }
+
+    .bid-content>div>div {
+        margin-top: 3px;
+        margin-bottom: 3px;
+    }
+
+    /* 读取显示无法修改的数据 */
+    .unchanged-info {
+        font-family: "Microsoft Yahei Regular";
+        color: #969595;
+        overflow: hidden;
+    }
+    /* 二级标题栏 */
+    .title-div {
+        font-family: "Microsoft Yahei Regular";
+        font-size: 14px;
+        font-weight: 600;
+        padding-left: 30px;
+        height: 50px;
+        padding-top: 11px;
+    }
+
+    /* 输入框前描述 */
+    .bid-desc {
+        width: 100px;
+        float: left;
+    }
+    /* 输入框 */
+    .bid-input {
+        border: none;
+        border-bottom: 1px solid #323232;
+        text-align: center;
+    }
+    .bid-input:focus{
+        outline:none;
+        border-bottom: 1px solid #5078cb;
+    }
+
+
+    /* 基本信息 */
+    .base-info {
+        border-bottom: 1px solid #969595;
+        padding-bottom: 30px;
+        padding-top: 20px;
+        margin-bottom: 0; /* 去除index中公共样式影响 */
+    }
+
+    /* 右下角按钮 */
+    .bid-content>div {
+        background-color: #fff;
+    }
+    .bid-content>div>div>button {
+        width: 94px;
+        height: 36px;
+        font-size: 14px;
+        font-family: "Microsoft Yahei Regular";
+        color: #fff;
+        border-radius: 0;
+    }
+    .bid-content>div>div.btn-bid>button {
+        background-color: #327EBE;
+    }
+
+    /* 列表内容 */
+    .tender-table {
+       padding: 0 20px;
+    }
+    .tender-table .header {
+        height: 50px;
+        background-color: #fff;
+        color: rgb(50,50,50);
+        font-family: "Microsoft Yahei Regular";
+        border-bottom: 1px solid #327ebe;
+    }
+    .tender-table thead>tr>th:first-child,.tender-table tbody>tr>td:first-child {
+        padding-left: 30px;
+    }
+    .tender-table tr {
+        height: 50px;
+        border-bottom: 1px dashed #969595;
+    }
+
+    .tender-table>tbody {
+        height: 100px;
+        font-family: "Microsoft Yahei Regular";
+        font-size: 14px;
+        color: #323232;
+        border: 1px solid transparent;
+    }
+    .tender-table tbody tr td a {
+         font-family: "Microsoft Yahei Regular";
+         color: #327ebe;
+         font-size: 12px;
+     }
+    .tender-table tbody tr td a:hover {
+        color: #D32526;
+        cursor: pointer;
+    }
+
+    /* 输入框 */
+    .tender-input {
+        border: none;
+        width: 100px;
+    }
+    .tender-input:focus{
+        outline:none;
+    }
+</style>
+
+<div class="ng-scope">
+    <form name="bidForm">
+        <div class="purc-bid">
+            <!--<div class="col-xs-12" style="font-size: 14px; height: 36px; padding-top: 10px;">
+                <span style="font-family: 'Microsoft Yahei Regular'; font-weight: 600; color: rgb(0,0,0);">服务>招标></span><span style="color: #327EBE;">待投标</span>
+            </div>-->
+            <div class="bid-label list-unstyled">
+                <strong style="padding: 0 10px 0 10px;">|</strong><label>评标单</label>
+            </div>
+            <div class="bid-content ng-scope" ng-controller="PurcEvaluationCtrl">
+                <div class="title-div" style="border-bottom: 1px dashed #327ebe;">
+                    <span>基本信息</span>
+                </div>
+                <div class="row base-info">
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">招标标题:</div>
+                        <div class="unchanged-info">{{tender.title}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">联系人:</div>
+                        <div class="unchanged-info">{{tender.user}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">联系电话:</div>
+                        <div class="unchanged-info">{{tender.userTel}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">产品名称:</div>
+                        <div class="unchanged-info">{{tender.prodTitle}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">产品型号:</div>
+                        <div class="unchanged-info">{{tender.prodCode}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">单位:</div>
+                        <div class="unchanged-info">{{tender.unit}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">采购数量:</div>
+                        <div class="unchanged-info">{{tender.qty}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">交易币别:</div>
+                        <div class="unchanged-info">{{tender.currency}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">是否含税:</div>
+                        <div class="unchanged-info" ng-if="tender.ifTax == 1">是</div>
+                        <div class="unchanged-info" ng-if="tender.ifTax == 0">否</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">投标截止时间:</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">{{tender.publishDate | date:'yyyy-MM-dd'}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">付款方式:</div>
+                        <div class="unchanged-info">{{tender.payment}}</div>
+                    </div>
+                    <div class = "col-xs-12">
+                        <div class="bid-desc">收货地址:</div>
+                        <div class="unchanged-info">{{tender.shipAddress}}</div>
+                    </div>
+                    <div class = "col-xs-12">
+                        <div class="bid-desc">证照要求:</div>
+                        <div class="unchanged-info">{{tender.certificate}}</div>
+                    </div>
+                </div>
+                <div  class="title-div" style="border-bottom: 1px dashed #327ebe;">
+                    <span>供应商信息</span>
+                </div>
+                <form name = "evaluationForm">
+                    <table class="tender-table block" ng-table="tableParams">
+                        <thead>
+                        <tr class="header">
+                            <th width="300">招标供应商</th>
+                            <th width="50">税率</th>
+                            <th width="50">单价</th>
+                            <th width="100">含税金额</th>
+                            <th width="100">不含税金额</th>
+                            <th width="150">说明</th>
+                            <th width="70">定标</th>
+                            <th width="70">不定标</th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        <tr ng-if="tender.purchaseTenderItems == '' || tender.purchaseTenderItems == null" style="font-family: 'Microsoft Yahei Regular'; font-size: 14px; color: #969595;">
+                            <td colspan="8">暂无企业参加招标</td>
+                        </tr>
+                        <tr ng-repeat="item in tender.purchaseTenderItems track by item.id">
+                            <td width="300">{{item.enterpriseBaseInfo.enName}}&nbsp;
+                                <a ui-sref="sale.vendortender({vendUU:item.enterpriseBaseInfo.uu, id:tender.id})" target="_self" title="查看投标单">查看投标单</a>
+                            </td>
+                            <td width="50">
+                                <div>{{item.taxrate}}</div>
+                                <!--<input class="tender-input" type="number" name="taxrate" ng-model="item.taxrate" placeholder="点此输入税率"/>-->
+                            </td>
+                            <td width="50">
+                                <div>{{item.price}}</div>
+                                <!--<input class="tender-input" type="number" name="price" ng-model="item.price" placeholder="点此输入单价"/>-->
+                            </td>
+                            <td width="70">
+                                <div>{{item.price * tender.qty * item.taxrate || 0}}</div>
+                            </td>
+                            <td width="70">
+                                <div>{{item.price * tender.qty * (1 -item.taxrate/100) || 0}}</div>
+                            </td>
+                            <td width="150">
+                                <input class="tender-input" type="text" ng-model="item.description" placeholder="点此输入说明">
+                            </td>
+                            <td width="70">
+                                <input type="radio" ng-model="item.applyStatus" value="1"/>
+                            </td>
+                            <td width="70">
+                                <input type="radio" ng-model="item.applyStatus" value="0"/>
+                            </td>
+                        </tr>
+                        </tbody>
+                    </table>
+                </form>
+                <div class="col-xs-12" style="padding: 30px 0;">
+                    <div class="col-xs-2 pull-right btn-bid">
+                        <button class="btn"
+                                ng-disabled="evaluationForm.$invalid || tender.overdue == 0" ng-hide="tender.result == 1 || tender.status == '已结标'"
+                                ng-click="submit(tender)">确定</button>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </form>
+</div>

+ 43 - 0
src/main/webapp/resources/tpl/index/purc/tender_vendor.html

@@ -0,0 +1,43 @@
+<style>
+    .btn {
+        border-radius: 0;
+    }
+
+    .modal-content {
+        border-radius: 0;
+    }
+</style>
+<div class="modal-body" style="min-height: 500px; border-radius: 0;">
+    <div class="headerline">
+        <span class="content"><i class="fa fa-fw fa-edit text-primary"></i>招标单 - 选择供应商</span>
+    </div>
+    <table class="block table table-default table-striped table-bordered"
+           ng-table="tableParams">
+        <thead>
+        <tr class="header">
+            <th>序号</th>
+            <th>UU</th>
+            <th>客户名称</th>
+            <th>地址</th>
+            <th><input type="checkbox" name="checkbox" ng-model="checks.checked" ng-click="checkAll()"></th>
+        </tr>
+        </thead>
+        <tbody>
+        <tr ng-repeat="vendor in $data">
+            <td class="text-center">{{$index}}</td>
+            <td class="text-center" ng-bind="::vendor.vendorEnterprise.uu"></td>
+            <td class="text-center" ng-bind="::vendor.vendorEnterprise.enName"></td>
+            <td class="text-center" ng-bind="::vendor.vendorEnterprise.enAddress"></td>
+           <!-- <td class="text-center"><input type="checkbox" ng-click="check(vendor)"></td>-->
+            <td class="text-center"><input ng-model="vendor.checked"
+                                           name="checkbox" ng-click="checkOne(vendor)"
+                                          type="checkbox"></td>
+            <!--<td class="text-center"><a title="选择" href="javascript:void(0)" ng-click="check(vendor)"><i class="fa fa-check-square-o"></i></a></td>-->
+        </tr>
+        </tbody>
+    </table>
+</div>
+<div class="modal-footer">
+    <button class="btn btn-info" style="border-radius: 0;" ng-click="close()" type="button">确认</button>
+    <button class="btn btn-default" style="border-radius: 0;" ng-click="cancel()" type="button">取消</button>
+</div>

+ 360 - 0
src/main/webapp/resources/tpl/index/purc/tenderlist.html

@@ -0,0 +1,360 @@
+<style>
+    /* 顶部搜索框 */
+    .top-nav {
+        margin-bottom: 10px;
+    }
+    .top-nav #search_input {
+        height: 36px;
+        font-size: 16px;
+        font-family: '微软雅黑';
+        border: 1px solid #327EBE;
+        border-top-left-radius: 0;
+        border-bottom-left-radius: 0;
+        text-align: center;
+    }
+
+    .top-nav #search_btn {
+        height: 36px;
+        padding-top: 0;
+        padding-bottom: 0;
+        font-size: 16px;
+        background: #327EBE;
+        border: 1px solid #327EBE;
+        color: #fff;
+        border-top-right-radius: 0;
+        border-bottom-right-radius: 0;
+    }
+
+    /* 主内容区 */
+    .main-content {
+        font-size: 14px;
+    }
+
+    /* 选项菜单 招标单按钮*/
+    .div-menu .text-num {
+        color: rgb(211,37,38);
+        padding: 0 5px;
+    }
+
+    .btn-tender {
+        border-radius: 0;
+        width: 100%;
+        height: 40px;
+        font-size: 14px;
+    }
+
+    /* 选项按钮 */
+    /* 当前激活 */
+    .div-menu .menu-status .btn-selected {
+        background-color: #fff;
+        color: #D32526;
+        border: none;
+        border-bottom: 2px solid #D32526;
+        border-radius: 0;
+
+    }
+
+    .div-menu .menu-status .btn-selected:hover {
+        background-color: #f5f5f5;
+    }
+
+    .div-menu .btn-select {
+        background-color: #fff;
+        color: #000000;
+        border: none;
+        border-radius: 0;
+        height: 40px;
+        font-weight: 600;
+        font-family: "Microsoft Yahei Regular";
+        padding: 0 20px 0 20px;
+        border-bottom: 2px solid #fff;
+    }
+
+    .div-menu {
+        border-bottom: 16px solid #f5f5f5;
+        height: 56px;
+    }
+
+    .div-menu .btn-select:hover {
+         border-bottom: 2px solid #D32526;
+    }
+    .div-menu .btn-select:focus {
+        border-bottom: 2px solid #D32526;
+    }
+    .div-menu .btn-select:first-child {
+        margin-left: 10px;
+     }
+
+    .div-menu>div:first-child .btn {
+        font-size: 16px;
+    }
+
+    /* 列表内容 */
+    .tender-table {
+        text-align: center;
+    }
+    .tender-table .header {
+        height: 50px;
+        background-color: #fff;
+        color: rgb(50,50,50);
+        font-family: "Microsoft Yahei Regular";
+        border-bottom: 1px solid #969595;
+    }
+    .tender-table .header>th {
+        text-align: center;
+    }
+    .tender-table>tbody {
+        font-family: "Microsoft Yahei Regular";
+        font-size: 14px;
+        color: #323232;
+        border: 1px solid transparent;
+    }
+    .tender-table>tbody>tr:nth-child(odd) {
+        height: 100px;
+    }
+    .tender-table tbody>tr:nth-child(odd):hover {
+        border: 2px solid #D32526;
+
+    }
+    .tender-table tbody tr td a {
+        font-family: "Microsoft Yahei Regular";
+        color: #327ebe;
+    }
+
+</style>
+<div ng-controller="PurcTenderCtrl">
+    <!-- 顶部导航及搜索框 -->
+    <div class="top-nav">
+        <div class="col-xs-8" style="font-size: 14px; height: 36px; padding-top: 10px;">
+            <span style="font-family: 'Microsoft Yahei Regular'; font-weight: 600; color: rgb(0,0,0);">服务>采购模块></span><span style="color: #327EBE;">招标</span>
+        </div>
+        <div class="input-group search-group col-xs-4">
+            <input id="search_input" type="search" class="form-control input-sm" ng-model="keyword" ng-search="onSearch()" placeholder="输入招标信息" />
+            <span class="input-group-btn">
+            <button id="search_btn" class="btn btn-selected x-rss-btn x-background-whiteblue" ng-click="onSearch()">&nbsp;&nbsp;搜索&nbsp;&nbsp;</button>
+        </span>
+        </div>
+    </div>
+    <div class="block main-content">
+        <div class="loading in" ng-class="{'in': loading}">
+        <i></i>
+        </div>
+        <!-- 选项菜单和新增按钮 -->
+        <div class="block">
+            <div class="row div-menu">
+                <div class="col-xs-8" style="width: 766px; height: 40px; font-size: 16px; font-weight: 600; font-family: 'Microsoft Yahei Regular'; color: #000000;">
+                    <div class="btn-group menu-status">
+                        <div class="btn-group">
+                            <button type="button" class="btn btn-select"
+                                    ng-class="{'btn-selected':active=='all'}" ng-click="setActive('all')">全部</button>
+                        </div>
+                        <div class="btn-group">
+                            <button type="button" class="btn btn-select"
+                                    ng-class="{'btn-selected':active=='done'}" ng-click="setActive('done')">待评标</button>
+                        </div>
+                        <div class="btn-group">
+                            <button type="button" class="btn btn-select"
+                                    ng-class="{'btn-selected':active=='todo'}" ng-click="setActive('todo')">待投标</button>
+                        </div>
+                        <div class="btn-group">
+                            <button type="button" class="btn btn-select"
+                                    ng-class="{'btn-selected':active=='waiting'}" ng-click="setActive('waiting')">待发布</button>
+                        </div>
+                    </div>
+                    <div class="col-xs-1 pull-right" style="padding-top: 5px;">
+                        共<span class="text-num">{{tableParams.total()}}</span>
+                    </div>
+                </div>
+                <!--<div class="col-xs-2 toggle">
+                    <a ng-click="condition.$open=!condition.$open" class="text-simple"><span ng-bind="condition.$open ? '简化筛选条件' : '更多筛选条件'"></span><i class="fa fa-fw" ng-class="{'fa-angle-up': condition.$open, 'fa-angle-down': !condition.$open}"></i></a>
+                </div>-->
+                <div class="col-xs-2 pull-right" style="padding-left: 0;padding-right: 15px; border-left: 16px solid #f5f5f5;">
+                    <a ui-sref="purc.tender" type="button" title="新增招标单" class="btn btn-tender">
+                        <img src="resources/img/tender/zhaobiao.png">
+                        <span class="f16" style="color: #327EBE;">招标单</span>
+                    </a>
+                </div>
+            </div>
+            <!--<div class="more" ng-class="{'open': condition.$open}">
+                <form class="form-inline">
+                    <div class="form-group ">
+                        <label>单据日期:</label>
+                        <div class="btn-group btn-menu" dropdown
+                             is-open="condition.$dateZoneOpen">
+                            <button type="button" dropdown-toggle style="width: 85px;"
+                                    class="btn btn-default btn-xs dropdown-toggle">
+                                {{dateZoneText}}<i class="fa fa-fw fa-angle-down icon-right"></i></span>
+                            </button>
+                            <ul class="dropdown-menu">
+                                <li><a ng-click="changeDateZone(-1)">不限</a></li>
+                                <li><a ng-click="changeDateZone(1)">一个月内</a></li>
+                                <li><a ng-click="changeDateZone(6)">半年内</a></li>
+                                <li><a ng-click="changeDateZone()">半年前</a></li>
+                            </ul>
+                        </div>
+                        <div class="input-group input-group-xs input-trigger">
+                            <input type="text" ng-model="condition.dateFrom"
+                                   class="form-control" placeholder="点击选择起始日期" readonly="readonly"
+                                   datepicker-popup="yyyy-MM-dd" is-open="condition.$fromOpened"
+                                   ng-required="true" max-date="condition.dateTo" current-text="今天"
+                                   clear-text="清除" close-text="关闭"
+                                   datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+                                   ng-click="openDatePicker($event, condition, '$fromOpened')"
+                                   ng-change="onDateCondition()"> <span
+                                class="input-group-btn">
+                                <button type="button" class="btn btn-default"
+                                        ng-click="openDatePicker($event, condition, '$fromOpened')">
+                                    <i class="fa fa-calendar"></i>
+                                </button>
+                            </span>
+                        </div>
+                        <div class="input-group input-group-xs input-trigger">
+                            <input type="text" ng-model="condition.dateTo"
+                                   class="form-control" placeholder="点击选择截止日期" readonly="readonly"
+                                   datepicker-popup="yyyy-MM-dd" is-open="condition.$toOpened"
+                                   ng-required="true" min-date="condition.dateFrom"
+                                   current-text="今天" clear-text="清除" close-text="关闭"
+                                   datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+                                   ng-focus="openDatePicker($event, condition, '$toOpened')"
+                                   ng-change="onDateCondition()"> <span
+                                class="input-group-btn">
+                                <button type="button" class="btn btn-default"
+                                        ng-click="openDatePicker($event, condition, '$toOpened')">
+                                    <i class="fa fa-calendar"></i>
+                                </button>
+                            </span>
+                        </div>
+                    </div>
+                </form>
+            </div>-->
+        </div>
+        <table class="tender-table block" ng-table="tableParams">
+            <thead>
+                <tr class="header">
+                    <th width="150">招标标题</th>
+                    <th width="200">产品信息</th>
+                    <th width="150">采购数量</th>
+                    <th width="150">投标截止时间</th>
+                    <th width="150">公布结果时间</th>
+                    <th width="150">状态</th>
+                </tr>
+            <!-- <tr class="toolbar toolbar-top">
+                 <td colspan="5">
+                     <div>
+                         <label><input type="checkbox" class="selector select_all"
+                                       ng-model="checkboxes.checked" ng-click="checkAll()">全选</label> <a ng-if="active=='todo'" href="javascript:void(0)"
+                                                                                                         class="btn btn-default btn-xs" ng-click="replyByBatch()" title="选中的单据按照客户需求的数量和交期默认回复">&nbsp;批量回复&nbsp;</a>
+                         <div class="btn-group dropdown">
+                             <button type="button" class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown" aria-expanded="true">
+                                 &nbsp;&nbsp;标记为&nbsp;&nbsp;<span class="caret"></span>&nbsp;
+                             </button>
+                             <ul class="dropdown-menu" role="menu">
+                                 <li><a href="javascript:void(0)" ng-click="setDisplay('setRead')">已查看</a></li>
+                                 <li><a href="javascript:void(0)" ng-click="setDisplay('setUnRead')">未查看</a></li>
+                                 <li><a href="javascript:void(0)" ng-click="setDisplay('setTop')">置顶</a></li>
+                             </ul>
+                         </div>
+                         <span class="text-muted">
+                                 &nbsp;&nbsp;<i class="fa fa-exclamation-triangle"></i> 批量回复是对选中的单据按照满足客户需求的数量和交期默认回复。
+                             </span>
+                     </div> &lt;!&ndash; 分页 &ndash;&gt;
+                 </td>
+                 <td class="text-center">
+                     <a href="sale/orders/xls?_state={{active}}&searchFilter={{searchFilterXls}}"
+                        target="_self" class="text-simple" title="导出Excel表格"><i class="fa fa-file-excel-o fa-fw"></i>导出</a>
+                 </td>
+             </tr>-->
+            </thead>
+            <tbody ng-if="tableParams.total() == 0">
+            <tr>
+            <td colspan="6">
+            <div class="row text-muted info-container" style="padding: 50px 10px;">
+            <div class="col-md-4 text-center">
+            <br>
+            <br>
+            <div><img src="static/img/all/info.png" width="130px" height="90px"></div>
+            <div class="f16">当前没有对应的招标单!</div>
+            </div>
+            <div class="col-md-8 br-l">
+            <div class="f16">
+            <p>为什么我没有招标单?</p>
+            </div>
+            <div class="f14">
+            <div class="info">
+            <p>您还没有发布招标单,请新增招标单并发布。</p>
+            </div>
+            </div>
+            <br>
+            <br>
+            </div>
+            </div>
+            </td>
+            </tr>
+            </tbody>
+            <!--<tbody ng-repeat="order in $data track by order.id">
+                <tr class="order-bd" ng-repeat="item in order.orderItems track by item.id"
+                    ng-if="!order.$collapsed ">
+
+                </tr>
+            </tbody>-->
+            <tbody ng-repeat="tender in $data">
+                <tr>
+                    <td width="150">
+                        <div>
+                            <a ui-sref="purc.evaluation({id:tender.id})" target="_self" title="点击查看详情">
+                                {{tender.code}}
+                            </a>
+                        </div>
+                        <div>
+                            {{tender.title}}
+                        </div>
+                        <div>
+                            招标类型:
+                            <span ng-if="tender.ifOpen == 1" style="font-weight: 600;">公开招标</span>
+                            <span ng-if="tender.ifOpen == 0" style="font-weight: 600;">指定招标</span>
+                        </div>
+                    </td>
+                    <td width="200">
+                        <div>产品名称:{{tender.prodTitle}}</div>
+                        <!--<div>产品规格:{{tender.prodSpec}}</div>-->
+                        <div>产品所属行业:电子元器件</div>
+                    </td>
+                    <td width="150">{{tender.qty}}</td>
+                    <td width="150">{{tender.endDate | date:'yyyy-MM-dd'}}</td>
+                    <td width="150">{{tender.publishDate | date:'yyyy-MM-dd'}}</td>
+                    <td width="150">
+                        <div ng-if = "tender.status == '已结标' && tender.overdue == 1 && tender.result == 1">
+                            <img src="resources/img/tender/yijiebiao.png">
+                        </div>
+                        <div ng-if = "tender.status == '待评标' && tender.overdue == 1 && tender.result == 1">
+                            <img src="resources/img/tender/liubiao.png">
+                        </div>
+                        <div ng-if = "tender.status == '待评标' && tender.overdue == 1 && tender.result != 1">
+                            <img src="resources/img/tender/daipingbiao.png">
+                        </div>
+                        <div ng-if = "tender.status == '待评标' && tender.overdue != 1">
+                            <img src="resources/img/tender/toubiaozhong.png">
+                        </div>
+                        <!-- overdue与投标截止日期比较  result与公布结果日期比较 -->
+                        <div ng-if = "tender.status == '待投标' && tender.overdue != 1">
+                            <img src="resources/img/tender/daitoubiao.png">
+                        </div>
+                        <div ng-if = "tender.status == '待投标' && tender.overdue == 1">
+                            <img src="resources/img/tender/liubiao.png">
+                        </div>
+                        <div ng-if = "tender.status == '待发布'">
+                            <img src="resources/img/tender/zailuru.png">
+                        </div>
+                    </td>
+                </tr>
+                <tr>
+                    <td colspan="6">
+                        <div style="height: 16px; background-color: #f5f5f5;">
+                            <!-- 间隙 -->
+                        </div>
+                    </td>
+                </tr>
+            </tbody>
+        </table>
+    </div>
+</div>

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

@@ -40,6 +40,8 @@
 		<li ui-sref-active="active"><a ui-sref="sale.order">客户采购订单</a></li>
 		<li ui-sref-active="active"><a ui-sref="sale.change">客户采购变更单</a></li>
 		<li ui-sref-active="active"><a ui-sref="sale.forecast">客户采购预测单</a></li>
+		<li ui-sref-active="active"><a ui-sref="sale.tenderlist">客户指定招标</a></li>
+		<li ui-sref-active="active"><a ui-sref="sale.opentenderlist">平台公开招标</a></li>
 	</ul>
 </div>
 <div class="left-nav">

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

@@ -0,0 +1,348 @@
+<style>
+    /* 顶部搜索框 */
+    .top-nav {
+        margin-bottom: 10px;
+    }
+    .top-nav #search_input {
+        height: 36px;
+        font-size: 16px;
+        font-family: '微软雅黑';
+        border: 1px solid #327EBE;
+        border-top-left-radius: 0;
+        border-bottom-left-radius: 0;
+        text-align: center;
+    }
+
+    .top-nav #search_btn {
+        height: 36px;
+        padding-top: 0;
+        padding-bottom: 0;
+        font-size: 16px;
+        background: #327EBE;
+        border: 1px solid #327EBE;
+        color: #fff;
+        border-top-right-radius: 0;
+        border-bottom-right-radius: 0;
+    }
+
+    /* 主内容区 */
+    .main-content {
+        font-size: 14px;
+    }
+
+    /* 选项菜单 招标单按钮*/
+    .div-menu .text-num {
+        color: rgb(211,37,38);
+        padding: 0 5px;
+    }
+
+    .btn-tender {
+        border-radius: 0;
+        width: 100%;
+        height: 40px;
+        font-size: 14px;
+    }
+
+    /* 选项按钮 */
+    /* 当前激活 */
+    .div-menu .menu-status .btn-selected {
+        background-color: #fff;
+        color: #D32526;
+        border: none;
+        border-bottom: 2px solid #D32526;
+        border-radius: 0;
+
+    }
+
+    .div-menu .menu-status .btn-selected:hover {
+        background-color: #f5f5f5;
+    }
+
+    .div-menu .btn-select {
+        background-color: #fff;
+        color: #000000;
+        border: none;
+        border-radius: 0;
+        height: 40px;
+        font-weight: 600;
+        font-family: "Microsoft Yahei Regular";
+        padding: 0 20px 0 20px;
+        border-bottom: 2px solid #fff;
+    }
+
+    .div-menu {
+        border-bottom: 16px solid #f5f5f5;
+        height: 56px;
+    }
+
+    .div-menu .btn-select:hover {
+        border-bottom: 2px solid #D32526;
+    }
+    .div-menu .btn-select:focus {
+        border-bottom: 2px solid #D32526;
+    }
+    .div-menu .btn-select:first-child {
+        margin-left: 10px;
+     }
+
+    .div-menu>div:first-child .btn {
+        font-size: 16px;
+    }
+
+    /* 列表内容 */
+    .tender-table {
+        text-align: center;
+    }
+    .tender-table .header {
+        height: 50px;
+        background-color: #fff;
+        color: rgb(50,50,50);
+        font-family: "Microsoft Yahei Regular";
+        border-bottom: 1px solid #969595;
+    }
+    .tender-table .header>th {
+        text-align: center;
+    }
+    .tender-table>tbody {
+        font-family: "Microsoft Yahei Regular";
+        font-size: 14px;
+        color: #323232;
+        border: 1px solid transparent;
+    }
+    .tender-table>tbody>tr:nth-child(odd) {
+        height: 100px;
+    }
+    .tender-table tbody>tr:nth-child(odd):hover {
+        border: 2px solid #D32526;
+
+    }
+    .tender-table tbody tr td a {
+        font-family: "Microsoft Yahei Regular";
+        color: #327ebe;
+    }
+
+</style>
+<div ng-controller="SaleOpenTenderCtrl">
+    <!-- 顶部导航及搜索框 -->
+    <div class="top-nav">
+        <div class="col-xs-8" style="font-size: 14px; height: 36px; padding-top: 10px;">
+            <span style="font-family: 'Microsoft Yahei Regular'; font-weight: 600; color: rgb(0,0,0);">服务>销售模块></span><span style="color: #327EBE;">投标</span>
+        </div>
+        <div class="input-group search-group col-xs-4">
+            <input id="search_input" type="search" class="form-control input-sm" ng-model="keyword" ng-search="onSearch()" placeholder="输入投标信息" />
+            <span class="input-group-btn">
+            <button id="search_btn" class="btn btn-selected x-rss-btn x-background-whiteblue" ng-click="onSearch()">&nbsp;&nbsp;搜索&nbsp;&nbsp;</button>
+        </span>
+        </div>
+    </div>
+    <div class="block main-content">
+        <!-- 设计页面是暂时隐藏 -->
+        <!--<div class="loading in" ng-class="{'in': loading}">-->
+        <!--<i></i>-->
+        <!--</div>-->
+        <!-- 选项菜单和新增按钮 -->
+        <div class="block">
+            <div class="row div-menu">
+                <div class="col-xs-8" style="width: 766px; height: 40px; font-size: 16px; font-weight: 600; font-family: 'Microsoft Yahei Regular'; color: #000000;">
+                    <div class="btn-group menu-status">
+                        <div class="btn-group">
+                            <button type="button" class="btn btn-select"
+                                    ng-class="{'btn-selected':active=='all'}" ng-click="setActive('all')">全部</button>
+                        </div>
+                        <div class="btn-group">
+                            <button type="button" class="btn btn-select"
+                                    ng-class="{'btn-selected':active=='todo'}" ng-click="setActive('todo')">待投标</button>
+                        </div>
+                        <div class="btn-group">
+                            <button type="button" class="btn btn-select"
+                                    ng-class="{'btn-selected':active=='end'}" ng-click="setActive('end')">过期</button>
+                        </div>
+                    </div>
+                    <div class="col-xs-1 pull-right" style="padding-top: 5px;">
+                        共<span class="text-num">{{tableParams.total()}}</span>
+                    </div>
+                </div>
+                <!--<div class="col-xs-2 toggle">
+                    <a ng-click="condition.$open=!condition.$open" class="text-simple"><span ng-bind="condition.$open ? '简化筛选条件' : '更多筛选条件'"></span><i class="fa fa-fw" ng-class="{'fa-angle-up': condition.$open, 'fa-angle-down': !condition.$open}"></i></a>
+                </div>-->
+                <!--<div class="col-xs-2 pull-right" style="padding-left: 0;padding-right: 15px; border-left: 16px solid #f5f5f5;">
+                    <a ui-sref="purc.tender" type="button" title="新增投标单" class="btn btn-tender">
+                        <img src="resources/img/tender/zhaobiao.png">
+                        <span class="f16" style="color: #327EBE;">投标单</span>
+                    </a>
+                </div>-->
+            </div>
+            <!--<div class="more" ng-class="{'open': condition.$open}">
+                <form class="form-inline">
+                    <div class="form-group ">
+                        <label>单据日期:</label>
+                        <div class="btn-group btn-menu" dropdown
+                             is-open="condition.$dateZoneOpen">
+                            <button type="button" dropdown-toggle style="width: 85px;"
+                                    class="btn btn-default btn-xs dropdown-toggle">
+                                {{dateZoneText}}<i class="fa fa-fw fa-angle-down icon-right"></i></span>
+                            </button>
+                            <ul class="dropdown-menu">
+                                <li><a ng-click="changeDateZone(-1)">不限</a></li>
+                                <li><a ng-click="changeDateZone(1)">一个月内</a></li>
+                                <li><a ng-click="changeDateZone(6)">半年内</a></li>
+                                <li><a ng-click="changeDateZone()">半年前</a></li>
+                            </ul>
+                        </div>
+                        <div class="input-group input-group-xs input-trigger">
+                            <input type="text" ng-model="condition.dateFrom"
+                                   class="form-control" placeholder="点击选择起始日期" readonly="readonly"
+                                   datepicker-popup="yyyy-MM-dd" is-open="condition.$fromOpened"
+                                   ng-required="true" max-date="condition.dateTo" current-text="今天"
+                                   clear-text="清除" close-text="关闭"
+                                   datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+                                   ng-click="openDatePicker($event, condition, '$fromOpened')"
+                                   ng-change="onDateCondition()"> <span
+                                class="input-group-btn">
+                                <button type="button" class="btn btn-default"
+                                        ng-click="openDatePicker($event, condition, '$fromOpened')">
+                                    <i class="fa fa-calendar"></i>
+                                </button>
+                            </span>
+                        </div>
+                        <div class="input-group input-group-xs input-trigger">
+                            <input type="text" ng-model="condition.dateTo"
+                                   class="form-control" placeholder="点击选择截止日期" readonly="readonly"
+                                   datepicker-popup="yyyy-MM-dd" is-open="condition.$toOpened"
+                                   ng-required="true" min-date="condition.dateFrom"
+                                   current-text="今天" clear-text="清除" close-text="关闭"
+                                   datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+                                   ng-focus="openDatePicker($event, condition, '$toOpened')"
+                                   ng-change="onDateCondition()"> <span
+                                class="input-group-btn">
+                                <button type="button" class="btn btn-default"
+                                        ng-click="openDatePicker($event, condition, '$toOpened')">
+                                    <i class="fa fa-calendar"></i>
+                                </button>
+                            </span>
+                        </div>
+                    </div>
+                </form>
+            </div>-->
+        </div>
+        <table class="tender-table block" ng-table="tableParams">
+            <thead>
+                <tr class="header">
+                    <th width="150">招标标题</th>
+                    <th width="200">产品信息</th>
+                    <th width="150">采购数量</th>
+                    <th width="150">投标截止时间</th>
+                    <th width="150">公布结果时间</th>
+                    <th width="150">状态</th>
+                </tr>
+            <!-- <tr class="toolbar toolbar-top">
+                 <td colspan="5">
+                     <div>
+                         <label><input type="checkbox" class="selector select_all"
+                                       ng-model="checkboxes.checked" ng-click="checkAll()">全选</label> <a ng-if="active=='todo'" href="javascript:void(0)"
+                                                                                                         class="btn btn-default btn-xs" ng-click="replyByBatch()" title="选中的单据按照客户需求的数量和交期默认回复">&nbsp;批量回复&nbsp;</a>
+                         <div class="btn-group dropdown">
+                             <button type="button" class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown" aria-expanded="true">
+                                 &nbsp;&nbsp;标记为&nbsp;&nbsp;<span class="caret"></span>&nbsp;
+                             </button>
+                             <ul class="dropdown-menu" role="menu">
+                                 <li><a href="javascript:void(0)" ng-click="setDisplay('setRead')">已查看</a></li>
+                                 <li><a href="javascript:void(0)" ng-click="setDisplay('setUnRead')">未查看</a></li>
+                                 <li><a href="javascript:void(0)" ng-click="setDisplay('setTop')">置顶</a></li>
+                             </ul>
+                         </div>
+                         <span class="text-muted">
+                                 &nbsp;&nbsp;<i class="fa fa-exclamation-triangle"></i> 批量回复是对选中的单据按照满足客户需求的数量和交期默认回复。
+                             </span>
+                     </div> &lt;!&ndash; 分页 &ndash;&gt;
+                 </td>
+                 <td class="text-center">
+                     <a href="sale/orders/xls?_state={{active}}&searchFilter={{searchFilterXls}}"
+                        target="_self" class="text-simple" title="导出Excel表格"><i class="fa fa-file-excel-o fa-fw"></i>导出</a>
+                 </td>
+             </tr>-->
+            </thead>
+            <tbody ng-if="tableParams.total() == 0">
+            <tr>
+            <td colspan="6">
+            <div class="row text-muted info-container" style="padding: 50px 10px;">
+            <div class="col-md-4 text-center">
+            <br>
+            <br>
+            <div><img src="static/img/all/info.png" width="130px" height="90px"></div>
+            <div class="f16">当前没有对应的公开招标单!</div>
+            </div>
+            <div class="col-md-8 br-l">
+            <div class="f16">
+            <p>为什么我没有接收到的公开招标单?</p>
+            </div>
+            <div class="f14">
+            <div class="info">
+            <p>还没有企业发布平台公开招标单<br>
+            解决:等待其他平台用户发布公开招标单</p>
+            </div>
+            </div>
+            <br>
+            <br>
+            </div>
+            </div>
+            </td>
+            </tr>
+            </tbody>
+            <!--<tbody ng-repeat="order in $data track by order.id">
+                <tr class="order-bd" ng-repeat="item in order.orderItems track by item.id"
+                    ng-if="!order.$collapsed ">
+
+                </tr>
+            </tbody>-->
+            <tbody ng-repeat="tender in $data">
+                <tr>
+                    <td width="150">
+                        <div>
+                            {{tender.code}}
+                        </div>
+                        <div>
+                            {{tender.title}}
+                        </div>
+                        <div ng-show="currentEn.uu != tender.enterprise.uu"><!-- 当前企业的公开招标不显示 -->
+                            <a ui-sref="sale.tender({id:tender.id})" target="_self" title="生成投标单">转投标单</a>
+                        </div>
+                        <div ng-show="currentEn.uu == tender.enterprise.uu">
+                            <div><Strong>当前企业发布</Strong></div>
+                            <a ui-sref="purc.evaluation({id:tender.id})" target="_self" title="查看详情">查看评标单</a>
+                        </div>
+                    </td>
+                    <td width="200">
+                        <div>产品名称:{{tender.prodTitle}}</div>
+                        <!--<div>产品规格:{{tender.prodSpec}}</div>-->
+                        <div>产品所属行业:电子元器件</div>
+                    </td>
+                    <td width="150">{{tender.qty}}</td>
+                    <td width="150">{{tender.endDate | date:'yyyy-MM-dd'}}</td>
+                    <td width="150">{{tender.publishDate | date:'yyyy-MM-dd'}}</td>
+                    <td width="150">
+                        <div ng-if = "getTenderStatus(tender) == 'daitoubiao'">
+                            <img src="resources/img/tender/daitoubiao.png">
+                        </div>
+                        <div ng-if = "getTenderStatus(tender) == 'yitoubiao'">
+                            <img src="resources/img/tender/yitoubiao.png">
+                        </div>
+                        <div ng-if = "getTenderStatus(tender) == 'zhongbiao'">
+                            <img src="resources/img/tender/zhongbiao.png">
+                        </div>
+                        <div ng-if = "getTenderStatus(tender) == 'weizhongbiao'">
+                            <img src="resources/img/tender/weizhongbiao.png">
+                        </div>
+                    </td>
+                </tr>
+                <tr>
+                    <td colspan="6">
+                        <div style="height: 16px; background-color: #f5f5f5;">
+                            <!-- 间隙 -->
+                        </div>
+                    </td>
+                </tr>
+            </tbody>
+        </table>
+    </div>
+</div>

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

@@ -6,7 +6,7 @@
 		<div class="form-group">
 			<label class="col-md-2 col-sm-2 control-label">筛选:</label>
 			<div class="col-md-8 col-sm-8">
-				<input type="text" class="form-control input-sm" 
+				<input type="text" class="form-control input-sm"
 					required placeholder="输入客户名称关键字查询" autofocus>
 			</div>
 		</div>

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

@@ -0,0 +1,346 @@
+<!-- 投标单 -->
+<style>
+
+    /* 标题 */
+    .bid-label {
+        height: 30px;
+        margin-left: 10px;
+        margin-right: 10px;
+        background-color: #e8e8e8;
+        box-shadow: 0 0 5px #6f6f6f;
+        border-top-right-radius: 20px;
+    }
+    /* 主体 */
+    .purc-bid {
+        line-height: 2;
+        font-family: "Microsoft Yahei Regular";
+        font-size: 14px;
+    }
+    .purc-bid .row {
+        margin-left: 0px;
+        margin-right: 0px;
+        padding-left: 15px;
+        padding-right: 15px;
+    }
+    .bid-content {
+        background-color: #fff;
+    }
+
+    .bid-content>div>div {
+        margin-top: 3px;
+        margin-bottom: 3px;
+    }
+
+    /* 读取显示无法修改的数据 */
+    .unchanged-info {
+        font-family: "Microsoft Yahei Regular";
+        color: #969595;
+        overflow: hidden;
+    }
+    /* 二级标题栏 */
+    .title-div {
+        font-family: "Microsoft Yahei Regular";
+        font-size: 14px;
+        font-weight: 600;
+        padding-left: 30px;
+        height: 50px;
+        padding-top: 11px;
+    }
+
+    /* 输入框前描述 */
+    .bid-desc {
+        width: 100px;
+        float: left;
+    }
+    /* 输入框 */
+    .bid-input {
+        border: none;
+        border-bottom: 1px solid #323232;
+        text-align: center;
+    }
+    .bid-input:focus{
+        outline:none;
+        border-bottom: 1px solid #5078cb;
+    }
+
+
+    /* 基本信息 */
+    .base-info {
+        border-bottom: 1px solid #e8e8e8;
+        padding-bottom: 30px;
+        padding-top: 20px;
+        margin-bottom: 0; /* 去除index中公共样式影响 */
+    }
+
+    .prod-info {
+        border-bottom: 1px solid #e8e8e8;
+        padding-bottom: 30px;
+        padding-top: 20px;
+    }
+
+    /* 附件上传 */
+    .purc-tender .base-info .attach-upload input {
+        /*height: 100px;*/
+        /*width: 60%;*/
+        height: 50px;
+        margin: 6px 0 0px 100px;
+    }
+    .purc-tender .base-info .attach-upload input:hover {
+        cursor: pointer;
+    }
+    .upload-bg {
+        width: 100px;
+        height: 100px;
+        background-image: url('resources/img/tender/upload.png');
+        margin-top: 10px;
+        margin-left: 100px;
+        border: 1px solid #e8e8e8;
+    }
+
+    /* 右下角按钮 */
+    .bid-content>div {
+        background-color: #fff;
+    }
+    .bid-content>div>div>button {
+        width: 94px;
+        height: 36px;
+        font-size: 14px;
+        font-family: "Microsoft Yahei Regular";
+        color: #fff;
+        border-radius: 0;
+    }
+    .bid-content>div>div.btn-bid>button {
+        background-color: #327EBE;
+    }
+
+    /* 日期选择器 */
+    .purc-bid .date-picker input {
+        border-radius: 0;
+        border: 1px solid #5078cb;
+        border-right: none;
+        font-size: 12px;
+    }
+    .purc-bid .date-picker span .btn-open {
+        color: #fff;
+        background-color: #5078cb;
+        border-radius: 0;
+        border: 1px solid #5078cb;
+        border-left: none;
+    }
+
+    /* 修改本页内btn的样式 及datepicker中的btn-success的样式 */
+    .purc-bid .date-picker .btn {
+        border-radius: 0;
+    }
+
+    .purc-bid .date-picker .btn-success {
+        background-color: #327EBE;
+    }
+    .purc-bid .date-picker ul {
+        border-radius: 0;
+    }
+    .purc-bid .date-picker ul div:focus {
+        outline: none;
+        border-radius: 0;
+        border: none;
+    }
+</style>
+
+<div class="ng-scope">
+    <form name="bidForm">
+        <div class="purc-bid">
+            <div class="bid-label list-unstyled">
+                <strong style="padding: 0 10px 0 10px;">|</strong><label>投标单</label>
+            </div>
+            <div class="bid-content ng-scope" ng-controller="SaleTenderDetailCtrl">
+                <div class="title-div" style="border-bottom: 1px dashed #327ebe;">
+                    <span>基本信息</span>&nbsp;
+                </div>
+                <div class="row base-info">
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">招标编号:</div>
+                        <div class="unchanged-info">{{bid.code}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">招标项目:</div>
+                        <div class="unchanged-info">{{bid.title}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">招标企业:</div>
+                        <div class="unchanged-info">{{bid.enterprise.enName}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">联系人:</div>
+                        <div class="unchanged-info">{{bid.user}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">联系电话:</div>
+                        <div class="unchanged-info">{{bid.userTel}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">交易币别:</div>
+                        <div class="unchanged-info">{{bid.currency}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">是否含税:</div>
+                        <div class="unchanged-info" ng-bind="bid.ifTax == 1 ? '是': '否'"></div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">投标截止时间:</div>
+                        <div class="unchanged-info">{{bid.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>
+                    <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>
+                    <div class = "col-xs-8">
+                        <div class="bid-desc">交易方式:</div>
+                        <div class="unchanged-info">{{bid.payment}}</div>
+                    </div>
+                    <div class = "col-xs-12">
+                        <div class="bid-desc">交货地址:</div>
+                        <div class="unchanged-info">{{bid.shipAddress}}</div>
+                    </div>
+                    <div class = "col-xs-12">
+                        <div class="bid-desc">证照要求:</div>
+                        <div class="unchanged-info">{{bid.certificate}}</div>
+                    </div>
+                    <div ng-if="bid.tenderAttaches.length" class="col-xs-8" style="height: 50px;">
+                        招标附件:<a class="file" ng-repeat="attach in bid.tenderAttaches" href="file/{{attach.id}}">{{::attach.name}}</a>
+                    </div>
+                </div>
+                <div  class="title-div" style="border-bottom: 1px dashed #327ebe;">
+                    <span>产品信息</span>
+                    <span style="color: rgb(211,37,38);">*</span>
+                </div>
+                <div class="row prod-info">
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">产品名称:</div>
+                        <div class="unchanged-info">{{bid.prodTitle}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">产品型号:</div>
+                        <div class="unchanged-info">{{bid.prodCode}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">单位:</div>
+                        <div class="unchanged-info">{{bid.unit}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">采购数量:</div>
+                        <div class="unchanged-info">{{bid.qty}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">币别:</div>
+                        <div class="unchanged-info">{{bid.currency}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">税率:</div>
+                        <input class="bid-input" ng-model="item.taxrate" value="taxrate" type="number" required ng-pattern="/^(100|[1-9]\d|\d)$/"/>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">单价:</div>
+                        <input class="bid-input" ng-model="item.price" value="price" required ng-pattern="/^\d{1,9}$|^\d{1,9}[.]\d{1,6}$/" placeholder="最多六位小数"/>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">含税金额:</div>
+                        <div class="unchanged-info">{{item.price * item.qty || ''}}</div>
+                    </div>
+                    <div class="col-xs-12">
+                        <div class="bid-desc">投标附件:</div>
+                        <div class="attach-upload">
+                            <input type="file" ng-file-select name="file" ng-model="MyFiles">
+                        </div>
+                        <!--<div class="upload-bg"></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>
+                <div  class="title-div" style="border-bottom: 1px dashed #327ebe;">
+                    <span>投标企业基本信息</span>
+                    <span style="color: rgb(211,37,38);">*</span>
+                </div>
+                <div class="row prod-info">
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">企业名称:</div>
+                        <div class="unchanged-info">{{item.enterpriseBaseInfo.enName}}</div>
+                    </div>
+                    <div class = "col-xs-8">
+                        <div class="bid-desc">注册地址:</div>
+                        <div class="unchanged-info">{{item.enterpriseBaseInfo.enAddress}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">企业UU号:</div>
+                        <div class="unchanged-info">{{item.enterpriseBaseInfo.uu}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">营业执照号:</div>
+                        <div class="unchanged-info">{{item.enterpriseBaseInfo.enBusinessCode}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">成立时间:</div>
+                        <div class="bid-desc" ng-show="item.enterpriseBaseInfo.enEstablishDate">{{item.enterpriseBaseInfo.enEstablishDate | date:'yyyy-MM-dd'}}</div>
+                        <div class="input-group input-trigger date-picker" ng-show="item.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"
+                                   ng-required="true" max-date="getMaxDate()" current-text="今天"
+                                   clear-text="清除" close-text="关闭"
+                                   datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+                                   ng-click="openDatePicker($event, condition, '$fromOpened')"
+                                   ng-change="onDateCondition()"> <span
+                                class="input-group-btn">
+							<button type="button" class="btn btn-default btn-open"
+                                    ng-click="openDatePicker($event, condition, '$fromOpened')">
+								<i class="fa fa-calendar"></i>
+							</button>
+						</span>
+                        </div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">员工人数:</div>
+                        <input class="bid-input" ng-model="item.enterpriseBaseInfo.emNum" type="number" />
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">企业电话:</div>
+                        <input class="bid-input" ng-model="item.enterpriseBaseInfo.enTel" type="text" />
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">企业传真:</div>
+                        <input class="bid-input" ng-model="item.enterpriseBaseInfo.enFax" type="text" />
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">联系人:</div>
+                        <input class="bid-input" ng-model="item.enterpriseBaseInfo.enUser" type="text" />
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">联系电话:</div>
+                        <input class="bid-input" ng-model="item.enterpriseBaseInfo.userTel" type="text" />
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">开户银行:</div>
+                        <input class="bid-input" ng-model="item.enterpriseBaseInfo.bank" 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="item.enterpriseBaseInfo.scope" 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="item.enterpriseBaseInfo.remark" 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="bidForm.$invalid" ng-hide="bid.overdue == 1 || item.status != itemStatusTodo" ng-click="bidIt(bid,item)">投标</button>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </form>
+</div>

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

@@ -0,0 +1,306 @@
+<!-- 投标单 -->
+<style>
+
+    /* 标题 */
+    .bid-label {
+        height: 30px;
+        margin-left: 10px;
+        margin-right: 10px;
+        background-color: #e8e8e8;
+        box-shadow: 0 0 5px #6f6f6f;
+        border-top-right-radius: 20px;
+    }
+    /* 主体 */
+    .purc-bid {
+        line-height: 2;
+        font-family: "Microsoft Yahei Regular";
+        font-size: 14px;
+    }
+    .purc-bid .row {
+        margin-left: 0px;
+        margin-right: 0px;
+        padding-left: 15px;
+        padding-right: 15px;
+    }
+    .bid-content {
+        background-color: #fff;
+    }
+
+    .bid-content>div>div {
+        margin-top: 3px;
+        margin-bottom: 3px;
+    }
+
+    /* 读取显示无法修改的数据 */
+    .unchanged-info {
+        font-family: "Microsoft Yahei Regular";
+        color: #969595;
+        overflow: hidden;
+    }
+    /* 二级标题栏 */
+    .title-div {
+        font-family: "Microsoft Yahei Regular";
+        font-size: 14px;
+        font-weight: 600;
+        padding-left: 30px;
+        height: 50px;
+        padding-top: 11px;
+    }
+
+    /* 输入框前描述 */
+    .bid-desc {
+        width: 100px;
+        float: left;
+    }
+    /* 输入框 */
+    .bid-input {
+        border: none;
+        border-bottom: 1px solid #323232;
+        text-align: center;
+    }
+    .bid-input:focus{
+        outline:none;
+        border-bottom: 1px solid #5078cb;
+    }
+
+
+    /* 基本信息 */
+    .base-info {
+        border-bottom: 1px solid #e8e8e8;
+        padding-bottom: 30px;
+        padding-top: 20px;
+        margin-bottom: 0; /* 去除index中公共样式影响 */
+    }
+
+    .prod-info {
+        border-bottom: 1px solid #e8e8e8;
+        padding-bottom: 30px;
+        padding-top: 20px;
+    }
+
+    /* 附件上传 */
+    .purc-bid .prod-info .attach-upload input {
+        width: 100px;
+        height: 100px;
+        opacity: 0;
+        margin-top: 10px;
+        margin-left: 100px;
+        position: absolute;
+    }
+    .purc-bid .prod-info .attach-upload input:hover {
+        cursor: pointer;
+    }
+    .upload-bg {
+        width: 100px;
+        height: 100px;
+        background-image: url('resources/img/tender/upload.png');
+        margin-top: 10px;
+        margin-left: 100px;
+        border: 1px solid #e8e8e8;
+    }
+
+    /* 右下角按钮 */
+    .bid-content>div {
+        background-color: #fff;
+    }
+    .bid-content>div>div>button {
+        width: 94px;
+        height: 36px;
+        font-size: 14px;
+        font-family: "Microsoft Yahei Regular";
+        color: #fff;
+        border-radius: 0;
+    }
+    .bid-content>div>div.btn-bid>button {
+        background-color: #327EBE;
+    }
+
+    /* 日期选择器 */
+    .purc-bid .date-picker input {
+        border-radius: 0;
+        border: 1px solid #5078cb;
+        border-right: none;
+        font-size: 12px;
+    }
+    .purc-bid .date-picker span .btn-open {
+        color: #fff;
+        background-color: #5078cb;
+        border-radius: 0;
+        border: 1px solid #5078cb;
+        border-left: none;
+    }
+
+    /* 修改本页内btn的样式 及datepicker中的btn-success的样式 */
+    .purc-bid .date-picker .btn {
+        border-radius: 0;
+    }
+
+    .purc-bid .date-picker .btn-success {
+        background-color: #327EBE;
+    }
+    .purc-bid .date-picker ul {
+        border-radius: 0;
+    }
+    .purc-bid .date-picker ul div:focus {
+        outline: none;
+        border-radius: 0;
+        border: none;
+    }
+</style>
+
+<div class="ng-scope">
+    <form name="bidForm">
+        <div class="purc-bid">
+            <div class="bid-label list-unstyled">
+                <strong style="padding: 0 10px 0 10px;">|</strong><label>投标单</label>
+            </div>
+            <div class="bid-content ng-scope" ng-controller="SaleVendorTenderDetailCtrl">
+                <div class="title-div" style="border-bottom: 1px dashed #327ebe;">
+                    <span>基本信息</span>&nbsp;
+                </div>
+                <div class="row base-info">
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">招标编号:</div>
+                        <div class="unchanged-info">{{bid.code}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">招标项目:</div>
+                        <div class="unchanged-info">{{bid.title}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">招标企业:</div>
+                        <div class="unchanged-info">{{bid.enterprise.enName}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">联系人:</div>
+                        <div class="unchanged-info">{{bid.user}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">联系电话:</div>
+                        <div class="unchanged-info">{{bid.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>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">公布结果时间:</div>
+                        <div class="unchanged-info">{{bid.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>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">交易方式:</div>
+                        <div class="unchanged-info">{{bid.payment}}</div>
+                    </div>
+                    <div class = "col-xs-8">
+                        <div class="bid-desc">证照要求:</div>
+                        <div class="unchanged-info">{{bid.certificate}}</div>
+                    </div>
+                </div>
+                <div  class="title-div" style="border-bottom: 1px dashed #327ebe;">
+                    <span>产品信息</span>
+                    <span style="color: rgb(211,37,38);">*</span>
+                </div>
+                <div class="row prod-info">
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">产品名称:</div>
+                        <div class="unchanged-info">{{bid.prodTitle}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">产品型号:</div>
+                        <div class="unchanged-info">{{bid.prodCode}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">单位:</div>
+                        <div class="unchanged-info">{{bid.unit}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">采购数量:</div>
+                        <div class="unchanged-info">{{bid.qty}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">币别:</div>
+                        <div class="unchanged-info">{{bid.currency}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">税率:</div>
+                        <div>{{item.taxrate}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">单价:</div>
+                        <div>{{item.price}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">含税金额:</div>
+                        <div class="unchanged-info">{{item.price * bid.qty || ''}}</div>
+                    </div>
+                    <div ng-if="item.bidAttaches.length" class="col-xs-8" style="height: 50px;">
+                        <div>投标附件:</div>
+                        <a class="file" ng-repeat="attach in item.bidAttaches" href="file/{{attach.id}}">{{::attach.name}}</a>
+                    </div>
+                </div>
+                <div  class="title-div" style="border-bottom: 1px dashed #327ebe;">
+                    <span>投标企业基本信息</span>
+                    <span style="color: rgb(211,37,38);">*</span>
+                </div>
+                <div class="row prod-info">
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">企业名称:</div>
+                        <div>{{item.enterpriseBaseInfo.enName}}</div>
+                    </div>
+                    <div class = "col-xs-8">
+                        <div class="bid-desc">注册地址:</div>
+                        <div>{{item.enterpriseBaseInfo.enAddress}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">企业UU号:</div>
+                        <div>{{item.enterpriseBaseInfo.uu}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">营业执照号:</div>
+                        <div>{{item.enterpriseBaseInfo.enBusinessCode}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">成立时间:</div>
+                        <div>{{item.enterpriseBaseInfo.enEstablishDate | date: 'yyyy-MM-dd'}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">员工人数:</div>
+                        <div>{{item.enterpriseBaseInfo.emNum}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">企业电话:</div>
+                        <div>{{item.enterpriseBaseInfo.enTel}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">企业传真:</div>
+                        <div>{{item.enterpriseBaseInfo.enFax}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">联系人:</div>
+                        <div>{{item.enterpriseBaseInfo.enUser}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">联系电话:</div>
+                        <div>{{item.enterpriseBaseInfo.userTel}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">开户银行:</div>
+                        <div>{{item.enterpriseBaseInfo.bank}}</div>
+                    </div>
+                    <div class = "col-xs-12">
+                        <div class="bid-desc">经营范围:</div>
+                        <div>{{item.enterpriseBaseInfo.scope}}</div>
+                    </div>
+                    <div class = "col-xs-12">
+                        <div class="bid-desc">备注:</div>
+                        <div>{{item.enterpriseBaseInfo.remark}}</div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </form>
+</div>

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

@@ -0,0 +1,353 @@
+<style>
+    /* 顶部搜索框 */
+    .top-nav {
+        margin-bottom: 10px;
+    }
+    .top-nav #search_input {
+        height: 36px;
+        font-size: 16px;
+        font-family: '微软雅黑';
+        border: 1px solid #327EBE;
+        border-top-left-radius: 0;
+        border-bottom-left-radius: 0;
+        text-align: center;
+    }
+
+    .top-nav #search_btn {
+        height: 36px;
+        padding-top: 0;
+        padding-bottom: 0;
+        font-size: 16px;
+        background: #327EBE;
+        border: 1px solid #327EBE;
+        color: #fff;
+        border-top-right-radius: 0;
+        border-bottom-right-radius: 0;
+    }
+
+    /* 主内容区 */
+    .main-content {
+        font-size: 14px;
+    }
+
+    /* 选项菜单 招标单按钮*/
+    .div-menu .text-num {
+        color: rgb(211,37,38);
+        padding: 0 5px;
+    }
+
+    .btn-tender {
+        border-radius: 0;
+        width: 100%;
+        height: 40px;
+        font-size: 14px;
+    }
+
+    /* 选项按钮 */
+    /* 当前激活 */
+    .div-menu .menu-status .btn-selected {
+        background-color: #fff;
+        color: #D32526;
+        border: none;
+        border-bottom: 2px solid #D32526;
+        border-radius: 0;
+
+    }
+
+    .div-menu .menu-status .btn-selected:hover {
+        background-color: #f5f5f5;
+    }
+
+    .div-menu .btn-select {
+        background-color: #fff;
+        color: #000000;
+        border: none;
+        border-radius: 0;
+        height: 40px;
+        font-weight: 600;
+        font-family: "Microsoft Yahei Regular";
+        padding: 0 20px 0 20px;
+        border-bottom: 2px solid #fff;
+    }
+
+    .div-menu {
+        border-bottom: 16px solid #f5f5f5;
+        height: 56px;
+    }
+
+    .div-menu .btn-select:hover {
+        border-bottom: 2px solid #D32526;
+    }
+
+    .div-menu .btn-select:focus {
+        border-bottom: 2px solid #D32526;
+    }
+    .div-menu .btn-select:first-child {
+        margin-left: 10px;
+     }
+
+    .div-menu>div:first-child .btn {
+        font-size: 16px;
+    }
+
+    /* 列表内容 */
+    .tender-table {
+        text-align: center;
+    }
+    .tender-table .header {
+        height: 50px;
+        background-color: #fff;
+        color: rgb(50,50,50);
+        font-family: "Microsoft Yahei Regular";
+        border-bottom: 1px solid #969595;
+    }
+    .tender-table .header>th {
+        text-align: center;
+    }
+    .tender-table>tbody {
+        font-family: "Microsoft Yahei Regular";
+        font-size: 14px;
+        color: #323232;
+        border: 1px solid transparent;
+    }
+    .tender-table>tbody>tr:nth-child(odd) {
+        height: 100px;
+    }
+    .tender-table tbody>tr:nth-child(odd):hover {
+        border: 2px solid #D32526;
+
+    }
+    .tender-table tbody tr td a {
+        font-family: "Microsoft Yahei Regular";
+        color: #327ebe;
+    }
+
+</style>
+<div ng-controller="SaleTenderCtrl">
+    <!-- 顶部导航及搜索框 -->
+    <div class="top-nav">
+        <div class="col-xs-8" style="font-size: 14px; height: 36px; padding-top: 10px;">
+            <span style="font-family: 'Microsoft Yahei Regular'; font-weight: 600; color: rgb(0,0,0);">服务>销售模块></span><span style="color: #327EBE;">投标</span>
+        </div>
+        <div class="input-group search-group col-xs-4">
+            <input id="search_input" type="search" class="form-control input-sm" ng-model="keyword" ng-search="onSearch()" placeholder="输入投标信息" />
+            <span class="input-group-btn">
+            <button id="search_btn" class="btn btn-selected x-rss-btn x-background-whiteblue" ng-click="onSearch()">&nbsp;&nbsp;搜索&nbsp;&nbsp;</button>
+        </span>
+        </div>
+    </div>
+    <div class="block main-content">
+        <!-- 设计页面是暂时隐藏 -->
+        <!--<div class="loading in" ng-class="{'in': loading}">-->
+        <!--<i></i>-->
+        <!--</div>-->
+        <!-- 选项菜单和新增按钮 -->
+        <div class="block">
+            <div class="row div-menu">
+                <div class="col-xs-8" style="width: 766px; height: 40px; font-size: 16px; font-weight: 600; font-family: 'Microsoft Yahei Regular'; color: #000000;">
+                    <div class="btn-group menu-status">
+                        <div class="btn-group">
+                            <button type="button" class="btn btn-select"
+                                    ng-class="{'btn-selected':active=='all'}" ng-click="setActive('all')">全部</button>
+                        </div>
+                        <div class="btn-group">
+                            <button type="button" class="btn btn-select"
+                                    ng-class="{'btn-selected':active=='todo'}" ng-click="setActive('todo')">待投标</button>
+                        </div>
+                        <div class="btn-group">
+                            <button type="button" class="btn btn-select"
+                                    ng-class="{'btn-selected':active=='end'}" ng-click="setActive('end')">过期</button>
+                        </div>
+                    </div>
+                    <div class="col-xs-1 pull-right" style="padding-top: 5px;">
+                        共<span class="text-num">{{tableParams.total()}}</span>
+                    </div>
+                </div>
+                <!--<div class="col-xs-2 toggle">
+                    <a ng-click="condition.$open=!condition.$open" class="text-simple"><span ng-bind="condition.$open ? '简化筛选条件' : '更多筛选条件'"></span><i class="fa fa-fw" ng-class="{'fa-angle-up': condition.$open, 'fa-angle-down': !condition.$open}"></i></a>
+                </div>-->
+                <!--<div class="col-xs-2 pull-right" style="padding-left: 0;padding-right: 15px; border-left: 16px solid #f5f5f5;">
+                    <a ui-sref="purc.tender" type="button" title="新增投标单" class="btn btn-tender">
+                        <img src="resources/img/tender/zhaobiao.png">
+                        <span class="f16" style="color: #327EBE;">投标单</span>
+                    </a>
+                </div>-->
+            </div>
+            <!--<div class="more" ng-class="{'open': condition.$open}">
+                <form class="form-inline">
+                    <div class="form-group ">
+                        <label>单据日期:</label>
+                        <div class="btn-group btn-menu" dropdown
+                             is-open="condition.$dateZoneOpen">
+                            <button type="button" dropdown-toggle style="width: 85px;"
+                                    class="btn btn-default btn-xs dropdown-toggle">
+                                {{dateZoneText}}<i class="fa fa-fw fa-angle-down icon-right"></i></span>
+                            </button>
+                            <ul class="dropdown-menu">
+                                <li><a ng-click="changeDateZone(-1)">不限</a></li>
+                                <li><a ng-click="changeDateZone(1)">一个月内</a></li>
+                                <li><a ng-click="changeDateZone(6)">半年内</a></li>
+                                <li><a ng-click="changeDateZone()">半年前</a></li>
+                            </ul>
+                        </div>
+                        <div class="input-group input-group-xs input-trigger">
+                            <input type="text" ng-model="condition.dateFrom"
+                                   class="form-control" placeholder="点击选择起始日期" readonly="readonly"
+                                   datepicker-popup="yyyy-MM-dd" is-open="condition.$fromOpened"
+                                   ng-required="true" max-date="condition.dateTo" current-text="今天"
+                                   clear-text="清除" close-text="关闭"
+                                   datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+                                   ng-click="openDatePicker($event, condition, '$fromOpened')"
+                                   ng-change="onDateCondition()"> <span
+                                class="input-group-btn">
+                                <button type="button" class="btn btn-default"
+                                        ng-click="openDatePicker($event, condition, '$fromOpened')">
+                                    <i class="fa fa-calendar"></i>
+                                </button>
+                            </span>
+                        </div>
+                        <div class="input-group input-group-xs input-trigger">
+                            <input type="text" ng-model="condition.dateTo"
+                                   class="form-control" placeholder="点击选择截止日期" readonly="readonly"
+                                   datepicker-popup="yyyy-MM-dd" is-open="condition.$toOpened"
+                                   ng-required="true" min-date="condition.dateFrom"
+                                   current-text="今天" clear-text="清除" close-text="关闭"
+                                   datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+                                   ng-focus="openDatePicker($event, condition, '$toOpened')"
+                                   ng-change="onDateCondition()"> <span
+                                class="input-group-btn">
+                                <button type="button" class="btn btn-default"
+                                        ng-click="openDatePicker($event, condition, '$toOpened')">
+                                    <i class="fa fa-calendar"></i>
+                                </button>
+                            </span>
+                        </div>
+                    </div>
+                </form>
+            </div>-->
+        </div>
+        <table class="tender-table block" ng-table="tableParams">
+            <thead>
+                <tr class="header">
+                    <th width="150">招标标题</th>
+                    <th width="200">产品信息</th>
+                    <th width="150">采购数量</th>
+                    <th width="150">投标截止时间</th>
+                    <th width="150">公布结果时间</th>
+                    <th width="150">状态</th>
+                </tr>
+            <!-- <tr class="toolbar toolbar-top">
+                 <td colspan="5">
+                     <div>
+                         <label><input type="checkbox" class="selector select_all"
+                                       ng-model="checkboxes.checked" ng-click="checkAll()">全选</label> <a ng-if="active=='todo'" href="javascript:void(0)"
+                                                                                                         class="btn btn-default btn-xs" ng-click="replyByBatch()" title="选中的单据按照客户需求的数量和交期默认回复">&nbsp;批量回复&nbsp;</a>
+                         <div class="btn-group dropdown">
+                             <button type="button" class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown" aria-expanded="true">
+                                 &nbsp;&nbsp;标记为&nbsp;&nbsp;<span class="caret"></span>&nbsp;
+                             </button>
+                             <ul class="dropdown-menu" role="menu">
+                                 <li><a href="javascript:void(0)" ng-click="setDisplay('setRead')">已查看</a></li>
+                                 <li><a href="javascript:void(0)" ng-click="setDisplay('setUnRead')">未查看</a></li>
+                                 <li><a href="javascript:void(0)" ng-click="setDisplay('setTop')">置顶</a></li>
+                             </ul>
+                         </div>
+                         <span class="text-muted">
+                                 &nbsp;&nbsp;<i class="fa fa-exclamation-triangle"></i> 批量回复是对选中的单据按照满足客户需求的数量和交期默认回复。
+                             </span>
+                     </div> &lt;!&ndash; 分页 &ndash;&gt;
+                 </td>
+                 <td class="text-center">
+                     <a href="sale/orders/xls?_state={{active}}&searchFilter={{searchFilterXls}}"
+                        target="_self" class="text-simple" title="导出Excel表格"><i class="fa fa-file-excel-o fa-fw"></i>导出</a>
+                 </td>
+             </tr>-->
+            </thead>
+            <tbody ng-if="tableParams.total() == 0">
+            <tr>
+            <td colspan="6">
+            <div class="row text-muted info-container" style="padding: 50px 10px;">
+            <div class="col-md-4 text-center">
+            <br>
+            <br>
+            <div><img src="static/img/all/info.png" width="130px" height="90px"></div>
+            <div class="f16">当前没有对应的招标单!</div>
+            </div>
+            <div class="col-md-8 br-l">
+            <div class="f16">
+            <p>为什么我没有接收到客户的招标单?</p>
+            </div>
+            <div class="f14">
+            <div class="info">
+            <p>1、您的客户还没有发布招标单<br>
+            解决:与您的客户沟通确认单据是否已经发布</p>
+            </div>
+            <div class="info">
+            <p>2、客户指定的投标供应商不包括您<br>
+            解决:与您的客户沟通确认是否添加了您为指定投标供应商</p>
+            </div>
+            <!--<div class="info">-->
+            <!--<p>3、您的客户正在使用旧版本的UAS商务平台<br>-->
+            <!--解决:我们仍有部分用户在使用旧版本UAS商务平台系统,你可以用您的企业UU号和管理员个人UU号 <a href="http://www.usoftchina.com" class="text-bold text-link" title="http://www.usoftchina.com" target="_blank">登陆旧版本UAS商务平台</a></p>-->
+            <!--</div>-->
+            </div>
+            <br>
+            <br>
+            </div>
+            </div>
+            </td>
+            </tr>
+            </tbody>
+            <!--<tbody ng-repeat="order in $data track by order.id">
+                <tr class="order-bd" ng-repeat="item in order.orderItems track by item.id"
+                    ng-if="!order.$collapsed ">
+
+                </tr>
+            </tbody>-->
+            <tbody ng-repeat="tender in $data">
+                <tr>
+                    <td width="150">
+                        <div>
+                            {{tender.code}}
+                        </div>
+                        <div>
+                            {{tender.title}}
+                        </div>
+                        <div>
+                            <a ui-sref="sale.tender({id:tender.id})" target="_self" title="点击查看详情">查看详情</a>
+                        </div>
+                    </td>
+                    <td width="200">
+                        <div>产品名称:{{tender.prodTitle}}</div>
+                        <!--<div>产品规格:{{tender.prodSpec}}</div>-->
+                        <div>产品所属行业:电子元器件</div>
+                    </td>
+                    <td width="150">{{tender.qty}}</td>
+                    <td width="150">{{tender.endDate | date:'yyyy-MM-dd'}}</td>
+                    <td width="150">{{tender.publishDate | date:'yyyy-MM-dd'}}</td>
+                    <td width="150">
+                        <div ng-if = "getTenderStatus(tender) == 'daitoubiao'">
+                            <img src="resources/img/tender/daitoubiao.png">
+                        </div>
+                        <div ng-if = "getTenderStatus(tender) == 'yitoubiao'">
+                            <img src="resources/img/tender/yitoubiao.png">
+                        </div>
+                        <div ng-if = "getTenderStatus(tender) == 'zhongbiao'">
+                            <img src="resources/img/tender/zhongbiao.png">
+                        </div>
+                        <div ng-if = "getTenderStatus(tender) == 'weizhongbiao'">
+                            <img src="resources/img/tender/weizhongbiao.png">
+                        </div>
+                    </td>
+                </tr>
+                <tr>
+                    <td colspan="6">
+                        <div style="height: 16px; background-color: #f5f5f5;">
+                            <!-- 间隙 -->
+                        </div>
+                    </td>
+                </tr>
+            </tbody>
+        </table>
+    </div>
+</div>

Some files were not shown because too many files changed in this diff