|
|
@@ -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', '成功', '投标成功');
|