Przeglądaj źródła

处理部分招标bug

git-svn-id: svn+ssh://10.10.101.21/source/platform/platform-b2b@7736 f3bf4e98-0cf0-11e4-a00c-a99a8b9d557d
dongbw 9 lat temu
rodzic
commit
f16305dde2

+ 28 - 1
src/main/java/com/uas/platform/b2b/controller/PurchaseTenderController.java

@@ -139,7 +139,7 @@ public class PurchaseTenderController {
     }
 
     /**
-     * 查看招标单(公开招标则创建投标单)
+     * 查看招标单(
      *
      * @param id
      * @return
@@ -150,6 +150,20 @@ public class PurchaseTenderController {
         return purchaseTenderService.findById(id);
     }
 
+    /**
+     * 公开招标转投标单
+     *
+     * @param id
+     * @return
+     */
+    @RequestMapping(value = "/addItems/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public PurchaseTender addTenderItemById(@PathVariable("id") Long id) {
+        return purchaseTenderService.addTenderItemById(id);
+    }
+
+
+
 
 //    /**
 //     * 采购方查看投标单
@@ -684,4 +698,17 @@ public class PurchaseTenderController {
         logger.log("商品批次", "[" + SystemSession.getUser().getUserName() + "]通过excel导入了招标产品明细,数量为" + map.size());
         return map;
     }
+
+
+    /**
+     * 根据输入获取联想词(产品型号)
+     *
+     * @param code
+     * @return
+     */
+    @RequestMapping(value = "/similarKeywords", method = RequestMethod.GET)
+    @ResponseBody
+    public List<String> getSimilarKeywords(String code) {
+        return searchService.getSimilarCodes(code);
+    }
 }

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

@@ -80,7 +80,7 @@ public class PurchaseTenderProd implements Serializable {
     /**
      * 投标明细
      */
-    @OneToMany(mappedBy = "tenderProd", cascade = {CascadeType.REFRESH, CascadeType.MERGE}, fetch = FetchType.EAGER)
+    @OneToMany(mappedBy = "tenderProd", cascade = CascadeType.REFRESH, fetch = FetchType.EAGER)
     @OrderBy("id")
     private Set<SaleTenderItem> saleTenderItems;
 

+ 8 - 8
src/main/java/com/uas/platform/b2b/model/SaleTenderItem.java

@@ -110,14 +110,6 @@ public class SaleTenderItem implements Serializable{
         this.cycle = cycle;
     }
 
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
     public Short getApplyStatus() {
         return applyStatus;
     }
@@ -126,6 +118,14 @@ public class SaleTenderItem implements Serializable{
         this.applyStatus = applyStatus;
     }
 
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
     @JsonIgnore
     @JSONField(serialize = false)
     public PurchaseTenderProd getTenderProd() {

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

@@ -132,4 +132,6 @@ public interface PurchaseTenderService {
 	public Long getTenderDoingCount();
 
     ModelMap releaseByWorkbook(Workbook workbook);
+
+    PurchaseTender addTenderItemById(Long id);
 }

+ 9 - 10
src/main/java/com/uas/platform/b2b/service/impl/PurchaseTenderServiceImpl.java

@@ -282,13 +282,12 @@ public class PurchaseTenderServiceImpl implements PurchaseTenderService {
 
     @Override
     public PurchaseTender findById(Long id) {
+        return purchaseTenderDao.findOne(id);
+    }
+
+    @Override
+    public PurchaseTender addTenderItemById(Long id) {
         PurchaseTender tender = purchaseTenderDao.findOne(id);
-        if (tender.getIfOpen() == Constant.NO){ // 如果是指定供应商投标,直接返回查找结果
-            return tender;
-        }
-        if (tender.getEnUU() == SystemSession.getUser().getEnterprise().getUu()) { // 如果是当前企业查看自己的公开招标单,直接返回结果
-            return tender;
-        }
         // 转投标单方法
         for (PurchaseTenderProd tenderProd : tender.getPurchaseTenderProds()) {
             Long vendUU = SystemSession.getUser().getEnterprise().getUu();
@@ -304,10 +303,10 @@ public class PurchaseTenderServiceImpl implements PurchaseTenderService {
                 saleTender = new SaleTender(tender);
                 saleTender.setVendUU(enBaseInfo.getUu()); // 投标单主表构造完毕
                 saleTenderDao.save(saleTender);
-                tenderItem.setSaleTender(saleTender);
-                tenderItem.setTenderProd(tenderProd);
-                saleTenderItemDao.saveAndFlush(tenderItem);
             }
+            tenderItem.setSaleTender(saleTender);
+            tenderItem.setTenderProd(tenderProd);
+            saleTenderItemDao.saveAndFlush(tenderItem);
         }
         return tender;
     }
@@ -419,9 +418,9 @@ public class PurchaseTenderServiceImpl implements PurchaseTenderService {
     @Override
     public void decide(PurchaseTender purchaseTender) {
         purchaseTender.setStatus("已结标");
-        purchaseTenderDao.save(purchaseTender);
         for (PurchaseTenderProd tenderProd : purchaseTender.getPurchaseTenderProds()) {
             tenderProd.setTender(purchaseTender);
+            purchaseTenderProdDao.save(tenderProd);
             for (SaleTenderItem tenderItem : tenderProd.getSaleTenderItems()) {
                 tenderItem.setTenderProd(tenderProd);
                 saleTenderItemDao.save(tenderItem);

+ 268 - 67
src/main/webapp/resources/js/index/app.js

@@ -185,7 +185,7 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
         }).state('sale.opentender', {
             url : "/opentender/:id",
             templateUrl : "static/tpl/index/sale/tender.html",
-            controller : 'SaleTenderDetailCtrl'
+            controller : 'OpenSaleTenderDetailCtrl'
             /* 投标 */
         }).state('sale.tender', {
             url : "/tender/:id",
@@ -10187,6 +10187,13 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
             }
         };
 
+        // $scope.validateNumber = function (value) { // 采购数量 正整数
+        //     var regex = /^\+?[1-9][0-9]*$/;
+        //     if (!regex.test(value) || value === 0 || value === null) {
+        //         toaster.pop('warning', '警告', '采购数量不合法,请重新填写');
+        //     }
+        // };
+
 
         // 查找供应商
         $scope.dbfindVendor = function(){
@@ -10266,7 +10273,6 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
                 // }
             }).success(function (attach) {
                 $scope.attaches.push(attach);
-                console.log($scope.attaches);
             });
         };
 
@@ -10283,60 +10289,73 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
 
         // 保存和发布招标单
         $scope.save = function(isPublish){
-            $scope.loading = true;
-            // --组装证照要求
-            var myCertificate = [];
-            angular.forEach($scope.certificates, function(certificate) {
-                if (certificate.checked) {
-                    myCertificate.push(certificate.name);
-                }
-            });
-            $scope.tender.certificate = myCertificate.join(',');
+            if (!$scope.tender.ifOpen && !$scope.tenderProd.enterpriseBaseInfo) { // 指定供应商招标,而为选择供应商时
+                toaster.pop('info','提示','请先指定供应商');
+            } else {
+                $scope.loading = true;
+                // --组装证照要求
+                var myCertificate = [];
+                angular.forEach($scope.certificates, function(certificate) {
+                    if (certificate.checked) {
+                        myCertificate.push(certificate.name);
+                    }
+                });
+                $scope.tender.certificate = myCertificate.join(',');
 
-            if(!$scope.tender.code) { //新增,设单号
-                $scope.tender.code = 'ZB' + $filter('date')(new Date(), 'yyMMddHHmmss');
-            }
-            if($scope.tender.date instanceof Date) {
-                $scope.tender.date = $scope.tender.date.getTime();
-            }
-            if($scope.tender.endDate instanceof Date) {
-                $scope.tender.endDate = $scope.tender.endDate.getTime();
-            }
-            if($scope.tender.publishDate instanceof Date) {
-                $scope.tender.publishDate = $scope.tender.publishDate.getTime();
-            }
+                if(!$scope.tender.code) { //新增,设单号
+                    $scope.tender.code = 'ZB' + $filter('date')(new Date(), 'yyMMddHHmmss');
+                }
+                if($scope.tender.date instanceof Date) {
+                    $scope.tender.date = $scope.tender.date.getTime();
+                }
+                if($scope.tender.endDate instanceof Date) {
+                    $scope.tender.endDate = $scope.tender.endDate.getTime();
+                }
+                if($scope.tender.publishDate instanceof Date) {
+                    $scope.tender.publishDate = $scope.tender.publishDate.getTime();
+                }
 
-            $scope.tender.purchaseTenderProds = $scope.tenderProd;
-            for (var i = 0; i < $scope.tender.purchaseTenderProds.length; i++) {
-                $scope.tender.purchaseTenderProds[i].index = i + 1;
-            }
-            console.log($scope.tender.purchaseTenderProds);
-            $scope.tender.tenderAttaches = $scope.attaches;
-            if ($scope.tender.shipAddress.address !== null && $scope.tender.shipAddress.addressdet !== null) {
-                $scope.tender.shipAddress = $scope.tender.shipAddress.address + $scope.tender.shipAddress.addressdet + ' ' + $scope.tender.shipAddress.receiver + ' ' + $scope.tender.shipAddress.usertel;
-            }
-            if (isPublish) { // 发布
-                toaster.pop('info', '提示', '正在发布,请稍候');
-                PurcTender.publish({tender: $scope.tender, enterpriseBaseInfo: $scope.tenderProd.enterpriseBaseInfo}, {},  function(data){
-                    sleep(1500); //当前方法暂停1.5秒
-                    $scope.loading = false;
-                    toaster.pop('success', '成功', '发布成功');
-                    window.location.hash = '#/purc/tender';
-                }, function(response){
-                    $scope.loading = false;
-                    toaster.pop('error', '发布失败', response.data);
-                });
-            } else { // 保存
-                toaster.pop('info', '提示', '正在保存,请稍候');
-                PurcTender.save({tender: $scope.tender, enterpriseBaseInfo: $scope.tenderProd.enterpriseBaseInfo}, {},  function(data) {
-                    $scope.loading = false;
-                    sleep(1500); //当前方法暂停1.5秒  给更新索引留点时间
-                    toaster.pop('success', '成功', '保存成功');
-                    window.location.hash = '#/purc/tender';
-                }, function(response){
-                    $scope.loading = false;
-                    toaster.pop('error', '保存失败', response.data);
-                });
+                $scope.tender.purchaseTenderProds = $scope.tenderProd;
+                for (var i = 0; i < $scope.tender.purchaseTenderProds.length; i++) {
+                    $scope.tender.purchaseTenderProds[i].index = i + 1;
+                }
+                console.log($scope.tender.purchaseTenderProds);
+                $scope.tender.tenderAttaches = $scope.attaches;
+                if ($scope.tender.shipAddress.address !== null) {
+                    if (!$scope.tender.shipAddress.addressdet) {
+                        $scope.tender.shipAddress.addressdet = '';
+                    }
+                    if (!$scope.tender.shipAddress.receriver) {
+                        $scope.tender.shipAddress.receriver = '';
+                    }
+                    if (!$scope.tender.shipAddress.usertel) {
+                        $scope.tender.shipAddress.usertel = '';
+                    }
+                    $scope.tender.shipAddress = $scope.tender.shipAddress.address + $scope.tender.shipAddress.addressdet + ' ' + $scope.tender.shipAddress.receiver + ' ' + $scope.tender.shipAddress.usertel;
+                }
+                if (isPublish) { // 发布
+                    toaster.pop('info', '提示', '正在发布,请稍候');
+                    PurcTender.publish({tender: $scope.tender, enterpriseBaseInfo: $scope.tenderProd.enterpriseBaseInfo}, {},  function(data){
+                        sleep(1500); //当前方法暂停1.5秒
+                        $scope.loading = false;
+                        toaster.pop('success', '成功', '发布成功');
+                        window.location.hash = '#/purc/tender';
+                    }, function(response){
+                        $scope.loading = false;
+                        toaster.pop('error', '发布失败', response.data);
+                    });
+                } else { // 保存
+                    toaster.pop('info', '提示', '正在保存,请稍候');
+                    PurcTender.save({tender: $scope.tender, enterpriseBaseInfo: $scope.tenderProd.enterpriseBaseInfo}, {},  function(data) {
+                        $scope.loading = false;
+                        sleep(1500); //当前方法暂停1.5秒  给更新索引留点时间
+                        toaster.pop('success', '成功', '保存成功');
+                        window.location.hash = '#/purc/tender';
+                    }, function(response){
+                        $scope.loading = false;
+                        toaster.pop('error', '保存失败', response.data);
+                    });
+                }
             }
         };
 
@@ -10400,7 +10419,7 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
                 $scope.total = $scope.result.total;
                 $scope.alters = $scope.result.alters;
             }).error(function(response) {
-                toaster.pop('error', response.data || response);
+                toaster.pop('error', '提示', '上传失败,请检查填写格式');
             });
         };
 
@@ -10722,7 +10741,7 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
     }]);
 
     /**
-     * 投标
+     * 查看投标单详情
      */
     app.controller('SaleTenderDetailCtrl', ['$scope', '$filter', 'PurcTender', 'ngTableParams', 'toaster', 'BaseService', '$stateParams', '$modal', '$rootScope', '$upload', 'AccountEnterprise', function($scope, $filter, PurcTender, ngTableParams, toaster, BaseService, $stateParams, $modal, $rootScope, $upload, AccountEnterprise) {
     	BaseService.scrollBackToTop();
@@ -10748,19 +10767,194 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
 
         AccountEnterprise.get({}, function(data){
             $scope.currentEn = data;
-            console.log($scope.currentEn);
         });
 
         PurcTender.getOne({id: $stateParams.id}, function(data){
             $scope.bid = data;
-            console.log(data);
             angular.forEach(data.purchaseTenderProds, function(tenderProd) {
                 angular.forEach(tenderProd.saleTenderItems, function(saleTenderItem) {
+                    if (!$scope.currentEn) {
+                        AccountEnterprise.get({}, function(data){
+                            $scope.currentEn = data;
+                        });
+                    }
+                    if (saleTenderItem.saleTender.vendUU === $scope.currentEn.uu) {
+                        tenderProd.currentItem = saleTenderItem;
+                        $scope.saleTender = saleTenderItem.saleTender;
+                        $scope.attaches = saleTenderItem.saleTender.bidAttaches;
+                        $scope.currentEnBaseInfo = saleTenderItem.saleTender.enterpriseBaseInfo;
+                    }
+                });
+            });
+        }, function(response){
+            toaster.pop('error', '数据加载失败', response.data);
+        });
+
+        $scope.upload = function(myFile) {  // 上传附件
+            var file = $scope.myFile, file = file && file.length > 0 ? file : null;
+            $upload.upload({
+                url: 'tender/addTenderItemAttach',
+                file: file,
+                method: 'POST'
+            }).success(function (attach) {
+                $scope.attaches.push(attach);
+            });
+        };
+
+        $scope.removeAttach = function(id, index) {
+            $scope.attaches.splice(index, 1);
+            PurcTender.removeAttach({attachId:id}, function() {
+
+            });
+        };
+
+        var taxrateYes = false;
+        var cycleYes = false;
+        var priceYes = false;
+        $scope.canSave = false;
+        $scope.validateThis = function(value, type) {
+            switch(type) {
+                case 'taxrate':
+                    var regex = /^\+?[0-9][0-9]{0,1}$/;
+                    if (regex.test(value)) {
+                        taxrateYes = true;
+                    } else {
+                        if (value) {
+                            toaster.pop('warning', '警告', '税率不合法,请重新填写');
+                        }
+                    }
+                    break;
+                case 'cycle':
+                    regex = /^\+?[1-9][0-9]*$/;
+                    if (regex.test(value)) {
+                        cycleYes = true;
+                    } else {
+                        if (value) {
+                            toaster.pop('warning', '警告', '周期不合法,请重新填写');
+                        }
+                    }
+                    break;
+                case 'price':
+                    regex = /^(0|[0-9][0-9]{0,9})(\.[0-9]{1,6})?$/;
+                    if (regex.test(value) && value !== 0) {
+                        priceYes = true;
+                    } else {
+                        if (!(value instanceof Number) || value) {
+                            toaster.pop('warning', '警告', '单价不合法,请重新填写');
+                        }
+                    }
+                    break;
+            }
+        };
+
+        $scope.emNumYes = true;
+
+        $scope.validEmNum = function (value) {
+            var regex = /^\+?[1-9][0-9]*$/;
+            if (!regex.test(value) || value === 0 || value !== null) {
+                $scope.emNumYes = false;
+                toaster.pop('warning', '警告', '人数不合法,请重新填写');
+            }
+        };
+
+        $scope.validateProds = function(tenderProd) {
+            // angular.forEach(tenderProds, function (tenderProd) {
+            var cycleRegex = /^\+?[1-9][0-9]*$/;
+            var taxrateRegex = /^\+?[0-9][0-9]{0,1}$/;
+            var priceRegex = /^(([0-9]+\.[0-9]{1,6})|([0-9]*[1-9][0-9]*\.[0-9]{1,6})|([0-9]*[1-9][0-9]*))$/; // 非零最多六位小数正实数
+            // /^(0|[0-9][0-9]{0,9})(\.[0-9]{1,6})?$/;
+            // 判断填写过的有为0或不符合正则式的,设置不能保存
+            console.log(tenderProd.currentItem.cycle);
+            if (tenderProd.currentItem.cycle !== null && (!cycleRegex.test(tenderProd.currentItem.cycle)) || (tenderProd.currentItem.taxrate !== null && !taxrateRegex.test(tenderProd.currentItem.taxrate)) || (tenderProd.currentItem.price !== null && (!priceRegex.test(tenderProd.currentItem.price) && tenderProd.currentItem.price !== 0))) {
+                $scope.canSave = false;
+            } else {
+                $scope.canSave = true;
+            }
+            // });
+        };
+
+        // 投标
+        $scope.bidIt = function(tender, currentEnBaseInfo){
+            $scope.loading = true;
+            if(currentEnBaseInfo.enEstablishDate instanceof Date) {
+                currentEnBaseInfo.enEstablishDate = currentEnBaseInfo.enEstablishDate.getTime();
+            }
+            var saleTenderItems = [];
+            if (tender.ifOpen !== 1) { // 指定投标不把投标单主表设空会报header超长
+                angular.forEach(tender.purchaseTenderProds, function(tenderProd) {
+                    if (tenderProd.currentItem) {
+                        tenderProd.currentItem.saleTender = {};
+                        saleTenderItems.push(tenderProd.currentItem);
+                    }
+                });
+            } else {
+                console.log(tender);
+                angular.forEach(tender.purchaseTenderProds, function(tenderProd) {
+                    if (tenderProd.currentItem) {
+                        saleTenderItems.push(tenderProd.currentItem);
+                    }
+                });
+            }
+            console.log(saleTenderItems);
+            PurcTender.reply({tenderItems: saleTenderItems, enBaseInfo: currentEnBaseInfo, attaches:$scope.attaches}, {}, function(data){
+                $scope.loading = false;
+                toaster.pop('info', '成功', '投标成功');
+                // $window.location.reload();
+                if (tender.ifOpen) { // 根据是否公开,选择跳转
+                    window.location.hash = '#/sale/opentender';
+                } else {
+                    window.location.hash = '#/sale/tender';
+                }
+            }, function(response){
+                $scope.loading = false;
+                toaster.pop('error', '投标失败', '出现异常,投标失败');
+            });
+
+        };
+
+        $scope.condition = {
+            $fromOpened:false
+        };
+
+        $scope.getMaxDate = function() {
+            return $filter('date')(new Date(), 'yyyy-MM-dd');
+        };
+
+        $scope.openDatePicker = function($event, item, openParam) {
+            $event.preventDefault();
+            $event.stopPropagation();
+            item[openParam] = !item[openParam];
+        };
+    }]);
+
+    /**
+     * 公开招标转投标单
+     */
+    app.controller('OpenSaleTenderDetailCtrl', ['$scope', '$filter', 'PurcTender', 'ngTableParams', 'toaster', 'BaseService', '$stateParams', '$modal', '$rootScope', '$upload', 'AccountEnterprise', function($scope, $filter, PurcTender, ngTableParams, toaster, BaseService, $stateParams, $modal, $rootScope, $upload, AccountEnterprise) {
+        BaseService.scrollBackToTop();
+        $scope.attaches = []; // 存放上传了的附件
+
+        var sleep = function (d){
+            for(var t = Date.now();Date.now() - t <= d;);
+        }
+
+        AccountEnterprise.get({}, function(data){
+            $scope.currentEn = data;
+        });
+
+        PurcTender.addItems({id: $stateParams.id}, function(data){
+            $scope.bid = data;
+            angular.forEach(data.purchaseTenderProds, function(tenderProd) {
+                angular.forEach(tenderProd.saleTenderItems, function(saleTenderItem) {
+                    if (!$scope.currentEn) {
+                        AccountEnterprise.get({}, function(data){
+                            $scope.currentEn = data;
+                        });
+                    }
                     if (saleTenderItem.saleTender.vendUU === $scope.currentEn.uu) {
                         tenderProd.currentItem = saleTenderItem;
                         $scope.saleTender = saleTenderItem.saleTender;
                         $scope.attaches = saleTenderItem.saleTender.bidAttaches;
-                        console.log($scope.attaches);
                         $scope.currentEnBaseInfo = saleTenderItem.saleTender.enterpriseBaseInfo;
                     }
                 });
@@ -10790,7 +10984,6 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
         var taxrateYes = false;
         var cycleYes = false;
         var priceYes = false;
-        var emNumYes = false;
         $scope.canSave = false;
         $scope.validateThis = function(value, type) {
             switch(type) {
@@ -10841,8 +11034,7 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
             // /^(0|[0-9][0-9]{0,9})(\.[0-9]{1,6})?$/;
             // 判断填写过的有为0或不符合正则式的,设置不能保存
             console.log(tenderProd.currentItem.cycle);
-            if ((!cycleRegex.test(tenderProd.currentItem.cycle) && tenderProd.currentItem.cycle !== null) || (!taxrateRegex.test(tenderProd.currentItem.taxrate) && tenderProd.currentItem.taxrate !== null) || ((!priceRegex.test(tenderProd.currentItem.price) && tenderProd.currentItem.price !== 0) && tenderProd.currentItem.price !== null)) {
-                console.log("不能保存啦!!!");
+            if (tenderProd.currentItem.cycle !== null && (!cycleRegex.test(tenderProd.currentItem.cycle)) || (tenderProd.currentItem.taxrate !== null && !taxrateRegex.test(tenderProd.currentItem.taxrate)) || (tenderProd.currentItem.price !== null && (!priceRegex.test(tenderProd.currentItem.price) && tenderProd.currentItem.price !== 0))) {
                 $scope.canSave = false;
             } else {
                 $scope.canSave = true;
@@ -10857,11 +11049,20 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
                 currentEnBaseInfo.enEstablishDate = currentEnBaseInfo.enEstablishDate.getTime();
             }
             var saleTenderItems = [];
-            angular.forEach(tender.purchaseTenderProds, function(tenderProd) {
-                tenderProd.currentItem.saleTender = {};
-                saleTenderItems.push(tenderProd.currentItem);
-            });
-            console.log(saleTenderItems);
+            if (tender.ifOpen !== 1) { // 指定投标不把投标单主表设空会报header超长
+                angular.forEach(tender.purchaseTenderProds, function(tenderProd) {
+                    if (tenderProd.currentItem) {
+                        tenderProd.currentItem.saleTender = {};
+                        saleTenderItems.push(tenderProd.currentItem);
+                    }
+                });
+            } else {
+                angular.forEach(tender.purchaseTenderProds, function(tenderProd) {
+                    if (tenderProd.currentItem) {
+                        saleTenderItems.push(tenderProd.currentItem);
+                    }
+                });
+            }
             PurcTender.reply({tenderItems: saleTenderItems, enBaseInfo: currentEnBaseInfo, attaches:$scope.attaches}, {}, function(data){
                 $scope.loading = false;
                 toaster.pop('info', '成功', '投标成功');

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

@@ -235,13 +235,13 @@ define([ 'ngResource'], function() {
     				id: 'id'
 				}
 			},
-            // getItem: {
-            //     url: 'tender/item/:id',
-            //     method: 'GET',
-            //     params: {
-            //         id: 'id'
-            //     }
-            // },
+            addItems: {
+                url: 'tender/addItems/:id',
+                method: 'GET',
+                params: {
+                    id: 'id'
+                }
+            },
             getVendorTenderItem: {
                 url: 'tender/vendorTenderDetail/:vendUU/:id',
                 method: 'GET',

+ 241 - 69
src/main/webapp/resources/tpl/index/purc/saved_tender.html

@@ -1,4 +1,5 @@
-<!--  招标单  -->
+
+<link rel="stylesheet" href="static/css/add.css "/>
 <style>
 
     /* 标题 */
@@ -50,6 +51,7 @@
     .tender-desc {
         width: 100px;
         float: left;
+        padding-top: 4px;
     }
     /* 输入框 */
     .tender-input {
@@ -88,13 +90,21 @@
 
     /* 下拉选项 */
     .select-menu {
-        margin: 4px;
+        margin: 4px 0;
         width: 100px;
         padding: 0 5%;
         height: 30px;
     }
+    select.select-address {
+        width: 568px !important;
+        height: 34px;
+        border: #ccc 1px solid;
+        font-size: 14px;
+        position: relative;
+        margin: 3px auto 0 auto;
+    }
 
-    select {
+    select.select-menu {
         /*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/
         border: solid 1px #5078cb;
 
@@ -113,7 +123,7 @@
 
 
     /*清除ie的默认选择框样式清除,隐藏下拉箭头*/
-    select::-ms-expand { display: none; }
+    select.select-menu::-ms-expand { display: none; }
 
     /* 日期选择器 */
     .purc-tender .date-picker {
@@ -289,6 +299,7 @@
     .tender-list02 dl dt span{height: 50px;line-height: 50px;display: inline-block;color: #999;}
     .tender-list02 dl dd{width: 100%;margin:0 auto;height: 50px;border-bottom: #ccc 1px dotted;overflow: hidden; position: relative;}
     .tender-list02 dl dd:hover{border: #d32526 1px solid;}
+    .tender-list02 dl dd:hover span a{ display: inline-block;}
     .tender-list02 dl dd span{height: 50px;line-height: 50px;display: inline-block;}
     .tender-list02 dl span{width:11%;font-size: 14px;float: left;text-align: center;}
     .tender-list02 dl span.wid01{ width:22%;}
@@ -303,6 +314,56 @@
     .scroll-y{width: 100%;margin: 0 auto;max-height: 500px;}
     .scroll-y.active{overflow-y: scroll;  overflow-x: hidden;  }
 
+    /* 弹框 */
+    .bomb-box{width: 100%;height: 100%;position: fixed;z-index: 11111;background: rgba(0, 0, 0, 0.2);top: 0;left: 0;}
+    .bomb-box .box{position: absolute;left: 0;right: 0;top: 0;bottom: 0;margin: auto;box-shadow:0 0 3px #888 ;}
+    .bomb-box .box01{width:580px;height: 406px;border-radius: 5px;background: #fff;}
+    .bomb-box .box i.off{width:20px;height:20px;display:inline-block;position:absolute;right:8px;top:8px;text-align:center; cursor: pointer;}
+    .bomb-box .box p{height: 40px;line-height: 40px;font-size: 14px;width:100%;margin: 0 auto;border-bottom: #e8e8e8 1px solid;padding-left: 20px;}
+    .per-data{width:90%;margin: 0 auto;}
+    .per-data ul,.per-data ul li{width:100%;margin: 0 auto;}
+    .per-data ul li{height: 34px;line-height: 34px;margin-top: 15px;}
+    .per-data ul li em{width: 60px;font-size: 14px;float: left;}
+    .per-data ul li input,.per-data ul li select{width: 236px;height: 34px;border: #e8e8e8 1px solid;font-size: 14px;padding-left: 10px;}
+    .per-data ul li select{background: url("../images/select.png") no-repeat right;-webkit-appearance: none;appearance: none;-o-appearance: none;-moz-appearance: none;-ms-appearance: none;}
+    .per-data ul li select option{line-height: 30px;}
+    .per-data ul li span{color: #959595;line-height: 18px;float: right;width: 215px;display: inline-block;}
+    .per-data ul li.per-btn{margin-top: 30px;}
+    .per-data ul li a{width: 94px;height: 36px;display: inline-block;font-size: 14px;color: #fff;text-align: center;line-height: 34px;float: left;}
+    .per-data ul li a.save{margin-left: 60px;background: #327ebe;}
+    .per-data ul li a.mod-psd{background: #8dc7f9;margin-left: 30px;}
+    .per-data ul li a:hover{background: #3578ba;}
+
+    .add-address {
+        color: #327ebe;
+        font-size: 14px;
+        padding-left: 30px;
+    }
+
+    .add-address:hover {
+        color: #8dc7f9;
+    }
+
+
+    a.change-address {
+        color: #327ebe;
+        font-size: 14px;
+        padding-left: 50px;
+    }
+
+    a.change-address:hover {
+        color: #8dc7f9;
+    }
+
+    .cancel-address {
+        color: #FF2E2F;
+        padding-left: 20px;
+    }
+
+    .cancel-address:hover {
+        color: #D32526;
+    }
+
 </style>
 
 <div class="ng-scope">
@@ -323,45 +384,110 @@
                 <div class="row base-info">
                     <div class = "col-xs-4">
                         <div class="tender-desc">招标标题:</div>
-                        <div ng-bind="tender.title"></div>
+                        <input class="tender-input" type="text" name="title" ng-model="tender.title" required/>
                     </div>
                     <div class = "col-xs-4">
                         <div class="tender-desc">联系人:</div>
-                        <div ng-bind="tender.user"></div>
+                        <input class="tender-input" type="text" name="user" ng-model="tender.user" required/>
                     </div>
                     <div class = "col-xs-4">
                         <div class="tender-desc">联系电话:</div>
-                        <div ng-bind="tender.userTel"></div>
+                        <input class="tender-input" type="text" name="userTel" ng-model="tender.userTel" required/>
                     </div>
                     <div class = "col-xs-4">
                         <div class="tender-desc">交易币别:</div>
-                        <div ng-bind="tender.currency"></div>
+                        <select class="select-menu" data-style="btn-primary">
+                            <option name="currency" ng-model="tender.currency" value ="RMB">RMB</option>
+                            <option name="currency" ng-model="tender.currency" value ="USD">USD</option>
+                            <option name="currency" ng-model="tender.currency" value ="HKD">HKD</option>
+                            <option name="currency" ng-model="ttender.currency" value = "EUR">EUR</option>
+                        </select>
                     </div>
                     <div class = "col-xs-4">
                         <div class="tender-desc">是否含税:</div>
-                        <div ng-bind="tender.ifTax == 1 ? '是' : '否'"></div>
+                        <select class="select-menu">
+                            <option ng-model="tender.ifTax" value ="yes">是</option>
+                            <option ng-model="tender.ifTax" value ="no">否</option>
+                        </select>
                     </div>
                     <div class="col-xs-12">
                         <div class="tender-desc">收货地址:</div>
-                        <div ng-bind="tender.shipAddress"></div>
+                        <div ng-show = "!changeShipAddress" style="padding-top: 6px;">
+                            {{tender.shipAddress}}
+                            <a class="change-address" ng-click="changeAddress()">
+                                修改
+                            </a>
+                        </div>
+                        <span ng-show = "changeShipAddress">
+                             <select class="select select-address fl" style="width: 70%; height: 30px;" ng-model="tender.shipAddress"
+                                     ng-options="(ship.address + ship.addressdet + ' ' + ship.receiver + ' ' + ship.usertel) for ship in ships">
+								<option value="">请选择收货地址</option>
+							</select>
+                            <a class="cancel-address" ng-click="changeAddress()">
+                                取消
+                            </a>
+                            <a href="javascript:void(0);" class="add-address">+新增收货信息</a>
+                        </span>
+                        <!--<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="tender.shipAddress" placeholder="填写总部所在详细地址" required/>-->
+                        <!--</div>-->
                         </span>
                     </div>
                     <div class="col-xs-4">
-                        <span class="tender-desc">投标截止时间:</span>
-                        <div ng-bind="tender.endDate | date:'yyyy-MM-dd'"></div>
+                        <span class="tender-desc f14" style="padding-top: 15px;">投标截止时间:</span>
+                        <div class="input-group input-trigger date-picker">
+                            <input type="text" ng-model="tender.endDate" required
+                                   class="form-control" placeholder="点击选择截止日期" readonly="readonly"
+                                   datepicker-popup="yyyy-MM-dd" is-open="condition.$fromOpened"
+                                   ng-required="true" max-date="tender.publishDate" current-text="今天" min-date = "currentDay()"
+                                   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">公布结果时间:</span>
-                        <div ng-bind="tender.publishDate | date:'yyyy-MM-dd'"></div>
+                        <span class="tender-desc f14" style="padding-top: 15px;">公布结果时间:</span>
+                        <div class="input-group input-trigger date-picker">
+                            <input type="text" ng-model="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 ng-if="tender.tenderAttaches.length" class="col-xs-8">
-                            <a class="file" ng-repeat="attach in tender.tenderAttaches" href="file/{{attach.id}}">{{::attach.name}}</a>
+                        <div class="tender-desc">上传招标文件:</div>
+                        <div class="fileInputContainer">
+                            <input class="fileInput" type="file" ng-file-select name="file" ng-model="myFile" ng-change="upload(myFile)" />
+                            <!-- href="file/{{attach.id}}" -->
+                            <div class="attach-file" ng-repeat="attach in attaches">{{attach.name}}&nbsp;&nbsp;<a ng-click="removeAttach(attach.id, $index)" title="删除"><i class="fa fa-trash-o"></i></a></div>
                         </div>
-                        <div ng-if="tender.tenderAttaches.length == 0">无</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>
 
@@ -369,34 +495,38 @@
                     <div class="content">
                         <div class="tender-list02">
                             <!--产品信息-->
-                            <div class="com_title01"><span>产品明细</span></div>
+                            <div class="com_title01"><span>产品明细</span><a ng-click="uplodaByBatch()">批量导入</a></div>
                             <dl>
                                 <dt>
                                     <span>序号</span>
-                                    <span class="wid01">产品名称</span>
                                     <span class="wid01">型号</span>
+                                    <span class="wid01">产品名称</span>
                                     <span class="wid02">品牌</span>
                                     <span>单位</span>
                                     <span>采购数量</span>
+                                    <span class="wid03">&nbsp;</span>
                                 </dt>
                                 <div class="scroll-y">
-                                    <dd ng-repeat="prod in tender.purchaseTenderProds | orderBy : 'index'">
+                                    <dd ng-repeat="prod in tender.purchaseTenderProds">
                                         <span>{{$index + 1}}</span>
-                                        <span class="wid01" ng-bind="prod.prodTitle"></span>
-                                        <span class="wid01" ng-bind="prod.prodCode"></span>
-                                        <span class="wid02" ng-bind="prod.brand"></span>
-                                        <span ng-bind="prod.unit"></span>
-                                        <span ng-bind="prod.qty"></span>
+                                        <span class="wid01"><input type="text"  ng-model="prod.prodCode" placeholder="点击填入型号" required/></span>
+                                        <span class="wid01"><input type="text" ng-model="prod.prodTitle" placeholder="点击填入产品名称" required/></span>
+                                        <span class="wid02"><input type="text" ng-model="prod.brand" placeholder="点击填入品牌" required/></span>
+                                        <span><input type="text" ng-model="prod.unit" placeholder="点击填入单位" required/></span>
+                                        <span><input type="text" ng-model="prod.qty" placeholder="点击填入数量" required/></span>
+                                        <span class="wid03"><a ng-click="del($index)"><i class="fa fa-close"></i></a></span>
                                     </dd>
                                 </div>
                             </dl>
                         </div>
                     </div>
                 </div>
+                <div class="com_title01" style="border-bottom: 1px solid #969595;"><a ng-click="add()" style="margin-left: 20px;"><i class="fa fa-plus"></i>新增产品明细</a></div>
+
                 <div  class="title-div" style="border-bottom: 1px dashed #327ebe;">
                     <span>供应商信息</span>
                 </div>
-                <!--<div class="row vend-info">
+                <div class="row vend-info">
                     <div class="col-xs-12">
                         <div class="tender-desc">是否开放报名:</div>
                         <div class="input-select col-xs-4">
@@ -457,53 +587,15 @@
                             <input type="checkbox" name="certificate" ng-model="certificate.checked" value="certificate">
                             <span ng-bind="certificate.name"></span>
                         </div>
-                    </div>-->
-
-
-                    <div class="row vend-info">
-                        <div class="col-xs-12">
-                            <div class="tender-desc">是否开放报名:</div>
-                            <div>{{tender.ifOpen == 1 ? '允许优软平台的供应商参与' : '只允许我邀请的供应商参与'}}</div>
-                        </div>
-                        <div class="col-xs-12" ng-repeat="item in firstProd.saleTenderItems">
-                            <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">
-                                <div>{{item.saleTender.enterpriseBaseInfo.uu}}</div>
-                            </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">
-                                <div>{{item.saleTender.enterpriseBaseInfo.enName}}</div>
-                            </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>
-                            <div>{{tender.payment}}</div>
-                        </div>
-                        <div class="col-xs-2"></div>
-                        <div class="col-xs-12">
-                            <div class="tender-desc">发票要求:</div>
-                            <div ng-if="tender.invoiceType == 3">增值税专用发票</div>
-                            <div ng-if="tender.invoiceType == 2">增值税普通发票</div>
-                            <div ng-if="tender.invoiceType == 1">不需要发票</div>
-                        </div>
-                        <div class="col-xs-12">
-                            <div class="tender-desc">证照要求:
-                            </div>
-                            <div>
-                                {{tender.certificate}}
-                            </div>
-                        </div>
+                    </div>
                 </div>
                 <div class="col-xs-12" style="padding: 30px;">
                     <div class="col-xs-2 pull-right btn-publish">
                         <button class="btn" ng-click="publishSaved(tender)">发布</button>
                     </div>
+                    <div class="col-xs-2 pull-right btn-publish">
+                        <button class="btn" ng-click="updateSaved(tender)">更新</button>
+                    </div>
                     <div class="col-xs-2 pull-right btn-delete">
                         <button class="btn btn-danger" ng-click="deleteThis(tender.id)">删除</button>
                     </div>
@@ -512,3 +604,83 @@
         </div>
     </form>
 </div>
+<!--设置-企业设置-收货地址编辑-->
+<div class="bomb-box" style="display: none">
+    <form class="box04 box" name="shipAddress" id="shipAddress">
+        <i class="off"><img src="resources/img/purc/close.png" alt="" /></i>
+        <p>个人资料</p>
+        <ul>
+            <li class="line01">
+                <div class="fl">
+                    <span class="fl">收货人<em>*</em>:</span>
+                    <span class="fr"><input type="text" placeholder="填写收货人" ng-model="ship.receiver" required="true"/></span>
+                </div>
+                <div class="fr">
+                    <span class="fl">手机<em>*</em>:</span>
+                    <span class="fr"><input type="text" ng-model="ship.usertel" required="true" ng-pattern="/^1(3|4|5|7|8)\d{9}$/"/></span>
+                </div>
+            </li>
+            <li class="line01">
+                <div class="fl">
+                    <span class="fl">固定电话<em></em>:</span>
+                    <span class="fr"><input type="text" ng-model="ship.phone"/></span>
+                </div>
+                <div class="fr">
+                    <span class="fl">邮箱:</span>
+                    <span class="fr emaill"><input type="text" ng-model="ship.email" ng-pattern="/^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/"/><i>用于接收订单提醒邮件,便于您及时了解订单状态</i></span>
+                </div>
+            </li>
+            <li class="line02 margin-top40">
+                <div class="fl">所在地址<em>*</em>:</div>
+                <!--<div class="select fr"><input type="text" placeholder="请选择" ng-model="ship.address" required="true"/><i class="fa fa-angle-down"></i></div>-->
+                <div class="select fr">
+                    <select required="" class="area-select" ng-model="ship.province" ng-options="key as key for (key,value) in provinces"
+                            ng-change="ship.city='';ship.district='';" required="true">
+                        <option value="">省</option>
+                    </select>
+                    <select class="area-select" ng-model="ship.city" ng-options="key as key for (key,value) in provinces[ship.province]"
+                            ng-change="ship.district='';" required="true">
+                        <option value="">市</option>
+                    </select>
+                    <select class="area-select" ng-model="ship.district" ng-options="value as value for value in provinces[ship.province][ship.city]" required="true">
+                        <option value="">区</option>
+                    </select>
+                </div>
+            </li>
+            <li class="line02">
+                <div class="fl">详细地址<em>*</em>:</div>
+                <div class="fr"><input type="text" ng-model="ship.addressdet" required="true"/></div>
+            </li>
+            <li class="line02">
+                <div class="fl">地址别名:</div>
+                <div class="fr address"><input type="text" ng-model="ship.addalias"/><i>建议填写常用名称:家里/父母家/公司</i></div>
+            </li>
+        </ul>
+        <div class="many-file-btn">
+            <button class="btn01" ng-click="saveShipAddress(ship)" ng-disabled="shipAddress.$invalid">保存</button><a href="#" class="btn02">取消</a>
+        </div>
+    </form>
+</div>
+<script src="static/lib/jquery/jquery.min.js"></script>
+<script>
+    $(function(){
+        var size10= $(".tender-list02 dl dd").size();
+        if(size10 > 10){
+            $(".scroll-y").addClass("active");
+        }else{
+            $(".scroll-y").removeClass("active");
+        }
+
+        //新增收货地址
+        $(".tender-content .base-info .add-address").click(function(){
+            document.getElementById('shipAddress').reset();
+            $(".bomb-box").show();
+        });
+        $(".bomb-box .box04 .off,.box04 .many-file-btn .btn02").click(function(){
+            $(".bomb-box").hide();
+        })
+        $(".bomb-box .box04 .off,.box04 .many-file-btn .btn01").click(function(){
+            $(".bomb-box").hide();
+        })
+    })
+</script>

+ 41 - 8
src/main/webapp/resources/tpl/index/purc/tender.html

@@ -90,13 +90,13 @@
 
     /* 下拉选项 */
     .select-menu {
-        margin: 4px;
+        margin: 4px 0;
         width: 100px;
         padding: 0 5%;
         height: 30px;
     }
 
-    select {
+    select.select-menu {
         /*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/
         border: solid 1px #5078cb;
 
@@ -115,7 +115,7 @@
 
 
     /*清除ie的默认选择框样式清除,隐藏下拉箭头*/
-    select::-ms-expand { display: none; }
+    select.select-menu::-ms-expand { display: none; }
 
     /* 日期选择器 */
     .purc-tender .date-picker {
@@ -176,7 +176,8 @@
         margin-top: 20px;
     }
     .fileInput{
-        height:100px;
+        height: 100px;
+        width: 100px;
         font-size: 100px;
         position:absolute;
         margin-left: 100px;
@@ -328,12 +329,39 @@
 
     .add-address {
         color: #327ebe;
+        font-size: 14px;
+        padding-left: 30px;
     }
 
     .add-address:hover {
         color: #8dc7f9;
     }
 
+    .tender-content  ul.association {
+        position: absolute;
+        left: 0;
+        top: 100%;
+        right: 61px;
+        list-style: none;
+        -webkit-padding-start: 0;
+        background: #ffffff;
+        border: 1px solid #dddddd;
+        z-index: 21;
+    }
+    .tender-content  ul.association li {
+        padding: 0 15px;
+        line-height: 30px;
+        text-align: left;
+    }
+
+    .tender-content  ul.association li.active, .tender-content  ul.association li.active:hover {
+        background: #dddddd;
+    }
+    .tender-content  ul.association li:hover {
+        background: #EEEEEE;
+        cursor: pointer;
+    }
+
 </style>
 
 <div class="ng-scope">
@@ -383,7 +411,7 @@
                     <div class="col-xs-12">
                         <div class="tender-desc">收货地址:</div>
                         <span>
-                             <select class="select select-menu fl" style="width: 70%; height: 30px;" ng-model="tender.shipAddress"
+                             <select class="select fl" style="width: 70%; height: 30px;" ng-model="tender.shipAddress"
                                      ng-options="(ship.address + ship.addressdet + ' ' + ship.receiver + ' ' + ship.usertel) for ship in ships">
 								<option value="">请选择收货地址</option>
 							</select>
@@ -470,11 +498,16 @@
                                 <div class="scroll-y">
                                     <dd ng-repeat="prod in tenderProd">
                                         <span>{{$index + 1}}</span>
-                                        <span class="wid01"><input type="text"  ng-model="prod.prodCode" placeholder="点击填入型号" required/></span>
+                                        <span class="wid01"><input type="text"  ng-model="prod.prodCode" placeholder="填入型号" ng-change="onChange(prod.prodCode)" ng-search="search(prod.prodCode)" ng-focus="onFocus(prod.prodCode)" ng-blur="onBlur(prod.prodCode)" ng-keyup="onKeyup(prod.prodCode)" required /></span>
+                                        <ul class="association" ng-show="associate || associateEnter" ng-mouseenter="onAssociateEnter()"
+                                            ng-mouseleave="onAssociateLeave()">
+                                            <li ng-repeat="as in associates" ng-bind="as" ng-class="{'active': $index==selectIndex}"
+                                                ng-click="onAssociateClick(as)"></li>
+                                        </ul>
                                         <span class="wid01"><input type="text" ng-model="prod.prodTitle" placeholder="点击填入产品名称" required/></span>
                                         <span class="wid02"><input type="text" ng-model="prod.brand" placeholder="点击填入品牌" required/></span>
                                         <span><input type="text" ng-model="prod.unit" placeholder="点击填入单位" required/></span>
-                                        <span><input type="text" ng-model="prod.qty" placeholder="点击填入数量" required/></span>
+                                        <span><input type="text" ng-model="prod.qty" ng-pattern="/^\+?[1-9][0-9]*$/" placeholder="点击填入数量" required/></span>
                                         <span class="wid03"><a ng-click="del($index)"><i class="fa fa-close"></i></a></span>
                                     </dd>
                                 </div>
@@ -636,7 +669,7 @@
         });
         $(".bomb-box .box04 .off,.box04 .many-file-btn .btn02").click(function(){
             $(".bomb-box").hide();
-        })
+        });
         $(".bomb-box .box04 .off,.box04 .many-file-btn .btn01").click(function(){
             $(".bomb-box").hide();
         })

+ 12 - 8
src/main/webapp/resources/tpl/index/purc/tender_evaluation.html

@@ -316,7 +316,7 @@
                 </form>-->
                 <div class="tender-list02">
                     <!--投标信息-->
-                    <div class="com_title01"><span>投标信息</span></div>
+                    <div class="com_title01"><span>投标信息</span><span style="color: #969595; font-size: 12px; padding-left: 10px;"><i class="fa fa-info-circle"></i>投标截止才可查看投标内容</span></div>
                     <div class="comment-oder" ng-repeat="tenderProd in tender.purchaseTenderProds | orderBy : 'index'">
                         <div class="comment-oder-text">
                             <ul>
@@ -337,9 +337,9 @@
                                 <dt>
                                     <span class="wid01">投标供应商</span>
                                     <span>税率(% )</span>
-                                    <span><a class="change01" ng-click="changeOrder('price')" style="margin-top: 8px;">单价s<i class="fa fa-angle-down fa-lg" title="按最低单价排序"></i></a></span>
+                                    <span><a class="change01" ng-click="changeOrder('price')">单价<i class="fa fa-angle-down fa-lg" title="按最低单价排序"></i></a></span>
                                     <span>含税金额</span>
-                                    <span><a class="change01" ng-click="changeOrder('cycle')" style="margin-top: 8px;" title="按最短周期排序">采购周期<i class="fa fa-angle-down fa-lg"></i></a></span>
+                                    <span><a class="change01" ng-click="changeOrder('cycle')" title="按最短周期排序">采购周期<i class="fa fa-angle-down fa-lg"></i></a></span>
                                     <span class="wid02">说明</span>
                                     <span>定标</span>
                                     <span>不定标</span>
@@ -351,13 +351,17 @@
                                 </dd>
                                 <dd ng-repeat="saleTenderItem in tenderProd.saleTenderItems | orderBy: orderType">
                                     <span class="wid01">{{saleTenderItem.saleTender.enterpriseBaseInfo.enName}}
-                                        <a ng-disabled="tender.overdue != 1" ui-sref="sale.vendortender({vendUU:item.enterpriseBaseInfo.uu, id:tender.id})" target="_self" title="查看投标单" >查看投标单
+                                        <a ng-disabled="tender.overdue != 1" ui-sref="sale.vendortender({vendUU:saleTenderItem.saleTender.enterpriseBaseInfo.uu, id:tender.id})" target="_self" title="查看投标单" >查看投标单
                                         </a>
                                     </span>
-                                    <span>{{saleTenderItem.taxrate || 0}}</span>
-                                    <span>{{saleTenderItem.price || 0}}</span>
-                                    <span>{{saleTenderItem.price * tenderProd.qty || 0}}</span>
-                                    <span>{{saleTenderItem.cycle || 0}}</span>
+                                    <span ng-show="tender.overdue == 1">{{saleTenderItem.taxrate || 0}}</span>
+                                    <span ng-show="tender.overdue == 1">{{saleTenderItem.price || 0}}</span>
+                                    <span ng-show="tender.overdue == 1">{{saleTenderItem.price * tenderProd.qty | number: 2}}</span>
+                                    <span ng-show="tender.overdue == 1">{{saleTenderItem.cycle || 0}}</span>
+                                    <span class="bid-desc" ng-show="tender.overdue != 1">*</span>
+                                    <span class="bid-desc" ng-show="tender.overdue != 1">*</span>
+                                    <span class="bid-desc" ng-show="tender.overdue != 1">*</span>
+                                    <span class="bid-desc" ng-show="tender.overdue != 1">*</span>
                                     <span class="wid02"><input type="text" ng-model="saleTenderItem.description" class="explain" placeholder="请输入说明文字"/></span>
                                     <span><input type="radio" ng-model="saleTenderItem.applyStatus" value="1"/></span>
                                     <span><input type="radio" ng-model="saleTenderItem.applyStatus" value="0"/></span>

+ 11 - 10
src/main/webapp/resources/tpl/index/sale/tender.html

@@ -251,10 +251,6 @@
                         <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.currency}}</div>
@@ -277,12 +273,17 @@
                         <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-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 ng-if="bid.tenderAttaches.length" class="col-xs-12" style="height: 50px;">
+                        <span class="bid-desc">招标附件:</span>
+                        <a class="col-xs-3" ng-repeat="attach in bid.tenderAttaches" href="file/{{attach.id}}">{{::attach.name}}</a>
                     </div>
                 </div>
                 <div class="wrap">
@@ -305,7 +306,7 @@
                                     <span>{{$index + 1}}</span>
                                     <span class="wid01">
                                         <p>产品编号:{{prod.prodCode}}</p>
-                                        <p>产品名称:{{prod.prodTitle}}</p>
+                                        <p>产品类型:{{prod.prodTitle}}</p>
                                         <!--<p>产品规格:<span ng-bind="prod.prodSpec"></span></p>-->
                                     </span>
                                     <span ng-bind="prod.unit"></span>
@@ -313,9 +314,9 @@
                                     <!--<span><input type="text" class="editAble" ng-model="prod.currentItem.cycle" ng-pattern="/^\+?[1-9][0-9]*$/" ng-change="validateThis(prod.currentItem.cycle, 'cycle')" placeholder="点击填写周期"/></span>
                                     <span><input type="text" class="editAble" ng-model="prod.currentItem.taxrate" ng-pattern="/^\+?[0-9][0-9]{0,1}$/" ng-change="validateThis(prod.currentItem.taxrate, 'taxrate')" placeholder="点击填写税率"/></span>
                                     <span><input type="text" class="editAble" ng-model="prod.currentItem.price" ng-pattern="/^(0|[0-9][0-9]{0,9})(\.[0-9]{1,6})?$/" ng-change="validateThis(prod.currentItem.price, 'price')" ng-focus="validPrice(prod.currentItem.price)" ng-blur="validPrice(prod.currentItem.price)" placeholder="点击填写单价"/></span>-->
-                                    <span><input type="text" class="editAble" ng-model="prod.currentItem.cycle" ng-pattern="/^\+?[1-9][0-9]*$/" ng-change="validateProds(bid.purchaseTenderProds);validateThis(prod.currentItem.cycle, 'cycle')" placeholder="点击填写周期"/></span>
-                                    <span><input type="text" class="editAble" ng-model="prod.currentItem.taxrate" ng-pattern="/^\+?[0-9][0-9]{0,1}$/" ng-change="validateProds(bid.purchaseTenderProds);validateThis(prod.currentItem.taxrate, 'taxrate')" placeholder="点击填写税率"/></span>
-                                    <span><input type="text" class="editAble" ng-model="prod.currentItem.price" ng-pattern="/^(0|[0-9][0-9]{0,9})(\.[0-9]{1,6})?$/" ng-change="validateProds(bid.purchaseTenderProds);" ng-blur="validateThis(prod.currentItem.price, 'price')" placeholder="点击填写单价"/></span>
+                                    <span><input type="text" class="editAble" ng-model="prod.currentItem.cycle" ng-pattern="/^\+?[1-9][0-9]*$/" ng-change="validateProds(prod);validateThis(prod.currentItem.cycle, 'cycle')" placeholder="点击填写周期"/></span>
+                                    <span><input type="text" class="editAble" ng-model="prod.currentItem.taxrate" ng-pattern="/^\+?[0-9][0-9]{0,1}$/" ng-change="validateProds(prod);validateThis(prod.currentItem.taxrate, 'taxrate')" placeholder="点击填写税率"/></span>
+                                    <span><input type="text" class="editAble" ng-model="prod.currentItem.price" ng-pattern="/^(0|[0-9][0-9]{0,9})(\.[0-9]{1,6})?$/" ng-change="validateProds(prod);" ng-blur="validateThis(prod.currentItem.price, 'price')" placeholder="点击填写单价"/></span>
                                     <span ng-bind="prod.currentItem.price * prod.qty || ''"></span>
                                 </dd>
                             </dl>