Browse Source

配送规则功能的调整

hulh 8 years ago
parent
commit
e465e94ef4

+ 2 - 0
src/main/java/com/uas/platform/b2c/logistics/model/DistributionRule.java

@@ -231,6 +231,8 @@ public class DistributionRule {
 		this.fares = fares;
 	}
 
+	@JSONField(serialize = false)
+	@JsonIgnore
 	public String getQtyArea() {
 		return qtyArea;
 	}

+ 7 - 0
src/main/java/com/uas/platform/b2c/logistics/service/impl/DistributionRuleServiceImpl.java

@@ -123,6 +123,13 @@ public class DistributionRuleServiceImpl implements DistributionRuleService{
 	@Override
 	public void deleteOne(Long id) {
 		distributionRuleDao.deleteOneById(id);
+		Long enuu = SystemSession.getUser().getEnterprise().getUu();
+		List<DistributionRule> ruleList = distributionRuleDao.findAllByEnuu(enuu);
+		int num = 1;
+		for (DistributionRule rule : ruleList){
+			rule.setNum(num++);
+		}
+		distributionRuleDao.save(ruleList);
 	}
 
 	@Override

+ 156 - 18
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_deliveryRule_add_ctrl.js

@@ -29,6 +29,22 @@ define([ 'app/app' ], function(app) {
                         }
                     })
                 }
+                if ($scope.rule.areas){
+                    var data = angular.fromJson($scope.rule.areas);
+                    $scope.mapArray = data;
+                    $scope.qtyAreaArray = [];
+                    angular.forEach(data, function (item) {
+                        if (item.province){
+                            $scope.qtyAreaArray.push(item.province);
+                        }
+                        if (item.city){
+                            $scope.qtyAreaArray.push(item.city);
+                        }
+                        if (item.area){
+                            $scope.qtyAreaArray.push(item.area);
+                        }
+                    });
+                }
             }else {
                 $scope.isModify = false;
                 $scope.rule = {};
@@ -74,17 +90,38 @@ define([ 'app/app' ], function(app) {
 
         $scope.loadCityData = function () {
             $http.get('static/js/prod/data/city.json').success(function (data) {
-                var time1 = new Date().getTime();
-                $scope.cityData = convert(data);
-                var time2 = new Date().getTime();
-                console.log(time1+"=="+time2);
-                console.log(time2-time1);
+                $scope.cityJson = data;
+                $scope.cityData = convert($scope.cityJson);
+                // $scope.tree = new TreeData($scope.cityData);
             }).error(function (res) {
                 console.log(res);
             });
+
+            DistributionRule.findAllRuleName({},{},function (data) {
+                $scope.nameArray = data;
+            })
         };
         $scope.loadCityData();
 
+        $scope.repeatError = false;
+        $scope.checkRuleName = function () {
+            var k = 1;
+            angular.forEach($scope.nameArray, function (item) {
+                if (item == $scope.rule.ruleName){
+                    k = 0;
+                    return;
+                }
+            });
+            if (k == 1){
+                $scope.repeatError = false;
+            }else {
+                $scope.repeatError = true;
+            }
+
+        };
+
+
+
         $scope.addQtyFare = function (data) {
             var fare = {
                 start : data.end,
@@ -120,6 +157,27 @@ define([ 'app/app' ], function(app) {
             data.fare = Number(data.fare);
         };
 
+        $scope.inputUniform = function () {
+            if(!$scope.rule.uniformPrice) {
+                $scope.rule.uniformPrice = 0;
+                return false;
+            }
+            if(isNaN($scope.rule.uniformPrice)){
+                $scope.rule.uniformPrice = 0;
+                toaster.pop('warning', '提示', '运费必须是整数');
+                return false;
+            }
+            if(Number($scope.rule.uniformPrice) < 0 || Number($scope.rule.uniformPrice) % 1 != 0) {
+                data.fare = 0;
+                toaster.pop('warning', '提示', '运费必须是整数');
+                return false;
+            }
+            if(Number($scope.rule.uniformPrice) > 100000){
+                $scope.rule.uniformPrice = 100000;
+            }
+            data.fare = Number($scope.rule.uniformPrice);
+        };
+
         $scope.inputQtyFare = function (data, index) {
             if(!data.start && !data.end) {
                 data.start = 0;
@@ -159,6 +217,8 @@ define([ 'app/app' ], function(app) {
 
         $scope.saveDistributionRule = function (isAdd) {
             console.log(angular.toJson($scope.fareArray));
+            console.log(angular.toJson($scope.mapArray));
+            $scope.checkRuleName();
             if (!$scope.rule.shippingMethod){
                 toaster.pop('error', "请选择配送方式");
                 return;
@@ -167,6 +227,10 @@ define([ 'app/app' ], function(app) {
                 toaster.pop('error', "请填写规则名称");
                 return;
             }
+            if($scope.repeatError){
+                toaster.pop('error', "该规则名称已存在,请修改");
+                return;
+            }
             if(!$scope.orderType.normal && !$scope.orderType.preSale && !$scope.orderType.bill){
                 toaster.pop('error', "请选择适用类型");
                 return;
@@ -175,10 +239,6 @@ define([ 'app/app' ], function(app) {
                 toaster.pop('error', "请选择适用类型");
                 return;
             }
-            if($scope.repeatError){
-                toaster.pop('error', "该规则名称已存在,请修改");
-                return;
-            }
 
             //拼接适用类型
             var typeArray = [];
@@ -193,9 +253,15 @@ define([ 'app/app' ], function(app) {
             }
             $scope.rule.orderType = typeArray.join("-");
             $scope.rule.qtyFare = angular.toJson($scope.fareArray);
+            $scope.rule.qtyArea = angular.toJson($scope.mapArray);
             DistributionRule.saveRule({isAdd:isAdd, isActive:$scope.isActive}, $scope.rule , function (data) {
                 if (data){
                     // $scope.loadDeliveryRule();
+                    if (isAdd){
+                        toaster.pop('info', "保存成功");
+                    }else{
+                        toaster.pop('info', "新增规则成功");
+                    }
                 }
             },function (error) {
                 toaster.pop('error', "保存配送规则失败");
@@ -213,8 +279,38 @@ define([ 'app/app' ], function(app) {
 
         $scope.chooseBox = false;
         $scope.cancel = function () {
+            $scope.cityData = convert($scope.cityJson);
+            // $scope.tree = new TreeData($scope.cityData);
             $scope.chooseBox = false;
         };
+        $scope.showSelectedData = function () {
+            $scope.mapArray = [];
+            $scope.mapArray = $scope.tree.getChecked();
+            if ($scope.mapArray.length == 0){
+                toaster.pop("info", "您还没有选择任何地区");
+                return;
+            }
+            $scope.chooseBox = false;
+        };
+
+        $scope.deleteMapItem = function (index) {
+            $scope.mapArray.splice(index, 1);
+        };
+
+        $scope.containsArea = function (value) {
+            var k = 1;
+            angular.forEach($scope.qtyAreaArray, function (item) {
+                if (value == item){
+                    k = 0;
+                }
+            });
+            if (k == 1){
+                return false;
+            }else {
+                return true;
+            }
+        };
+
         /**
          * 将本地地址数据转化为可用的结构
          * @param item
@@ -225,7 +321,8 @@ define([ 'app/app' ], function(app) {
             if(angular.isArray(item)) {
                 angular.forEach(item, function (v) {
                     arr.push({
-                        label: v
+                        label: v,
+                        checked: $scope.containsArea(v)
                     })
                 })
             } else {
@@ -233,7 +330,9 @@ define([ 'app/app' ], function(app) {
                     arr.push({
                         label: k,
                         items: convert(v),
-                        folded: true
+                        selectedNum : 0,
+                        folded: true,
+                        checked: $scope.containsArea(k)
                     })
                 })
             }
@@ -243,11 +342,8 @@ define([ 'app/app' ], function(app) {
         $scope.chooseAddress = function () {
             $scope.chooseBox = true;
             function getData() {
-                var time1 = new Date().getTime();
                 $scope.tree = new TreeData($scope.cityData);
-                var time2 = new Date().getTime();
-                console.log(time1+"=="+time2);
-                console.log(time2-time1);
+                // $scope.tree._updateParentsCheck($scope.tree.$data);
                 // $http.get('static/js/prod/data/city.json').success(function (data) {
                 //     // console.log(convert(data));
                 //     $scope.tree = new TreeData(convert(data));
@@ -259,7 +355,7 @@ define([ 'app/app' ], function(app) {
         }
     }]);
     // 地区选择
-    app.register.factory('TreeData', function () {
+    app.register.factory('TreeData', function(){
         return function (tree) {
             var me = this;
             me.$data = tree;
@@ -296,6 +392,7 @@ define([ 'app/app' ], function(app) {
             me.check = function (item) {
                 me._updateChildrenCheck(item);
                 me._updateParentsCheck(me.$data);
+                // me.getChecked();
             }
 
             /**
@@ -305,6 +402,8 @@ define([ 'app/app' ], function(app) {
              */
             me._updateChildrenCheck = function (item) {
                 if(item.items) {
+                    // console.log(item.items.length);
+                    item.selectedNum = item.checked ? item.items.length : 0;
                     angular.forEach(item.items, function (v) {
                         v.checked = item.checked;
                         me._updateChildrenCheck(v);
@@ -327,6 +426,7 @@ define([ 'app/app' ], function(app) {
                 })
             }
 
+
             /**
              * 判断是否有选中的子树
              * @param item
@@ -335,12 +435,17 @@ define([ 'app/app' ], function(app) {
              */
             me._hasCheckedChildren = function (item) {
                 var result = false;
+                var count = 0;
                 angular.forEach(item.items, function (v) {
                     result = result || v.checked;
+                    if (v.checked){
+                        count++;
+                    }
                     if(v.items && !result) {
                         result = result || me._hasCheckedChildren(v);
                     }
                 })
+                item.selectedNum = count;
                 return result;
             }
 
@@ -374,9 +479,42 @@ define([ 'app/app' ], function(app) {
              * 获取所有选中的数据
              */
             me.getChecked = function () {
-
+                var addressArray = [];
+                angular.forEach(me.$data, function (v) {
+                    if(v.checked) {
+                        if(!v.semiChecked) {
+                            var first = {
+                                province : v.label
+                            };
+                            addressArray.push(first);
+                        } else {
+                            angular.forEach(v.items, function (data) {
+                                if (data.checked){
+                                    if(!data.semiChecked) {
+                                        var second = {
+                                            province : v.label,
+                                            city : data.label
+                                        };
+                                        addressArray.push(second);
+                                    }else {
+                                        angular.forEach(data.items, function (item) {
+                                            if (item.checked){
+                                                var third = {
+                                                    province : v.label,
+                                                    city : data.label,
+                                                    area : item.label
+                                                };
+                                                addressArray.push(third);
+                                            }
+                                        })
+                                    }
+                                }
+                            });
+                        }
+                    }
+                });
+                return addressArray;
             }
-
         }
     })
 });

+ 22 - 20
src/main/webapp/resources/view/vendor/forstore/vendor_delivery_add_rule.html

@@ -281,7 +281,7 @@
 		float: left;
 		margin-right: 30px;
 	}
-	.rule-main .rule-content .area-content a{
+	.rule-main .rule-content .area-content span{
 		font-size: 12px;
 		color: #666;
 		display: inline-block;
@@ -292,8 +292,9 @@
 		margin-right: 3px;
 		height: 22px;
 		background: #e6eefe;
+		width: auto;
 	}
-	.rule-main .rule-content .area-content a em{
+	.rule-main .rule-content .area-content span em{
 		display: inline-block;
 		max-width: 150px;
 		overflow: hidden;
@@ -302,7 +303,7 @@
 		line-height: 22px;
 		float: left;
 	}
-	.rule-main .rule-content .area-content a i{
+	.rule-main .rule-content .area-content span i{
 		color: #cddcfb;
 		margin-left: 3px;
 		font-size: 16px;
@@ -311,17 +312,18 @@
 		position: relative;
 		border-radius: 100%;
 	}
-	.rule-main .rule-content .area-content a i:before{
+	.rule-main .rule-content .area-content span i:before{
 		position: relative;
 		top: -1px;
 	}
-	.rule-main .rule-content .area-content a:hover{
+	.rule-main .rule-content .area-content span:hover{
 		background: #8eb0f5;
+		cursor: pointer;
 	}
-	.rule-main .rule-content .area-content a:hover em{
+	.rule-main .rule-content .area-content span:hover em{
 		color: #fff;
 	}
-	.rule-main .rule-content .area-content a:hover i{
+	.rule-main .rule-content .area-content span:hover i{
 		color: #ef4646;
 	}
 	.rule-main .rule-content .common-style.style-price .row{
@@ -496,7 +498,7 @@
 					<span style="width: 70px;">优先级排序</span>
 					<input type="text" class="form-control sort" ng-model="rule.num">
 					<span><strong>*</strong>规则名称</span>
-					<input type="text" class="form-control rule" style="text-align: left;" ng-model="rule.ruleName">
+					<input type="text" class="form-control rule" style="text-align: left;" ng-blur="checkRuleName()" ng-model="rule.ruleName">
 				</div>
 				<div class="row radio-1">
 					<span>是否生效</span>
@@ -542,14 +544,14 @@
 				<div class="row" style="position: relative;">
 					<span>适用地区</span>
 					<div class="area-content">
-						<a href="#"><em>广东省 / 东莞市</em><i class="fa fa-minus-circle"></i></a>
-						<a href="#"><em>广东省 / 深圳市 / 南山区</em><i class="fa fa-minus-circle"></i></a>
-						<a href="#"><em>四川省 / 成都市</em><i class="fa fa-minus-circle"></i></a>
-						<a href="#"><em>广东省 / 东莞市</em><i class="fa fa-minus-circle"></i></a>
-						<a href="#"><em>广东省 / 深圳市 / 南山区</em><i class="fa fa-minus-circle"></i></a>
-						<a href="#"><em>广东省 / 东莞市</em><i class="fa fa-minus-circle"></i></a>
-						<a href="#"><em>广东省 / 东莞市</em><i class="fa fa-minus-circle"></i></a>
-						<a href="#"><em>广东省 / 东莞市</em><i class="fa fa-minus-circle"></i></a>
+						<!--<span ng-repeat="data in tree.getChecked()">{{data.province}}{{data.city}}{{data.area}}</span>-->
+						<!--<span ng-repeat="data in tree.addressArray">{{data.province}}{{data.city}}{{data.area}}</span>-->
+						<span ng-repeat="data in mapArray" ng-click="deleteMapItem($index)">
+							<em ng-if="data.province">{{data.province}}</em>
+							<em ng-if="data.city">/{{data.city}}</em>
+							<em ng-if="data.area">/{{data.area}}</em>
+							<i class="fa fa-minus-circle"></i>
+						</span>
 					</div>
 					<button ng-click="chooseAddress()">选择地区</button>
 					<!--选择地区 begin-->
@@ -560,7 +562,7 @@
 									<li ng-repeat="address in tree.$data">
 										<div>
 											<i class="fa fa-fw" ng-class="address.folded?'fa-caret-right':'fa-caret-down'" ng-click="tree.toggleFold(address)"></i>
-											<span ng-bind="::address.label"></span><em>(1)</em>
+											<span ng-bind="::address.label" ng-click="tree.toggleFold(address)"></span><em ng-if="address.selectedNum!=0 && address.selectedNum!=address.items.length">({{address.selectedNum}})</em>
 											<div class="check-1">
 												<label class="check-act" ng-class="{'intermediate': tree.isSemiChecked(address)}">
 													<input type="checkbox" ng-model="address.checked" ng-change="tree.check(address)"  id="{{address.label}}">
@@ -572,7 +574,7 @@
 											<li ng-repeat="city in address.items">
 												<div>
 													<i ng-if="city.items" class="fa fa-fw" ng-class="city.folded?'fa-caret-right':'fa-caret-down'" ng-click="tree.toggleFold(city)"></i>
-													<span ng-bind="::city.label"></span><em>(1)</em>
+													<span ng-bind="::city.label" ng-click="tree.toggleFold(city)"></span><em ng-if="city.selectedNum!=0 && city.selectedNum!=city.items.length">({{city.selectedNum}})</em>
 													<div class="check-1">
 														<label class="check-act" ng-class="{'intermediate': tree.isSemiChecked(city)}" >
 															<input type="checkbox" ng-model="city.checked" ng-change="tree.check(city)" id="{{city.label}}">
@@ -600,7 +602,7 @@
 							</div>
 							<div class="deal-btn">
 								<a ng-click="cancel()" class="off">取消</a>
-								<a ng-click="" class="ok">确认</a>
+								<a ng-click="showSelectedData()" class="ok">确认</a>
 							</div>
 						</div>
 					</div>
@@ -630,7 +632,7 @@
 						<div class="price-input">
 							<i class="currency" ng-if="rule.currencyName=='RMB'">¥</i>
 							<i class="currency" ng-if="rule.currencyName=='USD'">$</i>
-							<input type="text" class="form-control" placeholder="请输入金额" ng-model="rule.uniformPrice" />
+							<input type="text" class="form-control" placeholder="请输入金额" ng-blur="inputUniform()" ng-model="rule.uniformPrice" />
 						</div>
 					</div>
 					<div class="row" style="background: none; padding: 0;">

+ 6 - 0
src/main/webapp/resources/view/vendor/forstore/vendor_delivery_rule.html

@@ -2,6 +2,7 @@
 	.delivery-list{
 		width: 1026px;
 		background: #fff;
+		display: inline-block;
 	}
 	.delivery-list .content-header{
 		padding-top: 30px;
@@ -26,10 +27,12 @@
 		width: 1000px;
 		margin: 0 auto;
 		text-align: center;
+		display: inline-block;
 	}
 	.delivery-list .content-body table{
 		box-sizing: border-box;
 		margin-top: 15px;
+		margin-bottom: 0;
 	}
 	.delivery-list .content-body thead{
 		height: 40px;
@@ -203,6 +206,9 @@
 	.table>tbody+tbody.no-record-list tr td{
 		border: none;
 	}
+	.ng-table-pager{
+		margin-right: 0 !important;
+	}
 </style>
 <!--右侧主体部分-->
 <div class="count user_right fr">