Ver Fonte

Merge branch 'developerB' of git.caimei365.com:chao/caimei-caimei365-www into developerB

Administrator há 4 anos atrás
pai
commit
5b0b2e9863

+ 7 - 2
src/main/resources/static/css/shopping/shopping.css

@@ -94,7 +94,12 @@ li{list-style:none}
     .summaryWrap .summary .back{color:#f55c5c}
     .summaryWrap .summary .back .icon:before{width:20px;height:20px;background-position:-345px 0;margin-right:15px}
     /* 收货地址 */
-    .addressWrap{padding:16px;position:relative}
+    .addressWrap{padding:16px;position:relative;    box-sizing: border-box;
+    text-align: center;
+    width: 100%;
+    background: #FFF;
+    margin-bottom: 8px;
+    box-shadow: 0px 3px 6px rgba(0,0,0,0.07);}
     .addressWrap .info{position:relative;width:810px;text-align:left}
     .addressWrap .info>p{height:30px;line-height:30px;font-size:14px;color:#22272e}
     .addressWrap .info>p .label{color:#627386;margin-right:5px;display:inline-block;min-width:60px;height:30px;text-align:justify;vertical-align:top}
@@ -249,7 +254,7 @@ li{list-style:none}
     .addressWrap .info .btnBox .default span,.model-address-content .content .list-defalut span{display:inline-block;height:6vw;line-height:6vw;font-size:3.1vw;color:#FFFFFF;background-color:#f94b4b;border-radius:3vw;padding:0 3vw;vertical-align:middle}
     .addressWrap .info .btnBox .default a,.model-address-content .content .list-defalut a{display:inline-block;height:6vw;line-height:6vw;margin-left:2vw;color:#1890f9;vertical-align:middle}
     .model-address-content .content .list-defalut a{padding:0;margin:0;font-size: 3.1vw;}
-    .addressWrap .formWrap,.model-address-content{position:fixed;bottom:0;left:0;width:100%;height:100%;margin:0 auto;background-color:rgba(74,79,88,.7);z-index:999}
+    .addressWrap .formWrap,.model-address-content{position:fixed;bottom:0;left:0;width:100%;height:100%;margin:0 auto;background-color:rgba(74,79,88,.7);z-index:999999;}
     .addressWrap .formWrap .form,.model-content{width:100%;box-sizing:border-box;position:absolute;bottom:0;left:0;background:#FFF;border-radius:2vw 2vw 0 0;padding:3.3vw}
     .addressWrap .formWrap .form .group{text-align:center}
     .addressWrap .btnBox .group p:first-child{margin-bottom:5vw}

+ 63 - 58
src/main/resources/static/css/user-center/address/list.css

@@ -4,21 +4,6 @@ li{list-style:none}
  * PC端
  */
 @media screen and (min-width:768px){
-    .navLayout {min-height: 410px;}
-    .crumbs{padding-left: 220px;padding-right: 20px;}
-    .crumbs .link{display: block;float: right;font-size: 14px;color: #E15616;text-decoration: underline;}
-    .navLayout .left{float:left;width:200px;line-height:50px;white-space:nowrap;text-indent:16px;font-size:16px;background:#FFF}
-    .navLayout .left .title{color:#22272e;font-weight:bold;border-bottom:1px solid #f5f5f5}
-    .navLayout .navList .tab{display:block;color:#22272e;position:relative;cursor: pointer;}
-    .navLayout .navList .tab:before{content:'\276F';font-weight:normal;position:absolute;right:10px;top:0;transform:rotate(90deg);width:32px;height:32px;line-height:32px;text-align:center;color:#bec2c9}
-    .navLayout .navList .con{position:relative;}
-    .navLayout .navList .con:before,.navLayout .navList .con:after{content:'';position:absolute;width:168px;border-top:1px solid #f5f5f5;left:16px}
-    .navLayout .navList .con:before{top:0}
-    .navLayout .navList .con:after{bottom:0}
-    .navLayout .navList .con a{display:block;font-size:14px;color:#627386;text-indent:32px}
-    .navLayout .navList.on .tab:before{top:18px;transform:rotate(270deg);color:#e15616}
-    .navLayout .navList.on .tab{color:#e15616}
-    .navLayout .navList .con a.on{color:#e15616;background-color:#ffe6dc}
     /*个人中心右侧*/
     .navLayout .right{float:right;width:968px}
     .order-header{width: 100%;height: 78px;box-sizing: border-box;padding: 20px;background-color: #FFF;box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.07);}
@@ -30,7 +15,31 @@ li{list-style:none}
     .container{width: 100%;height: auto;box-sizing: border-box;margin-top: 15px;position: relative;}
     .container .empty{background-color:#FFF;}
     .container .section.address-none{height: 318px;position: absolute;left: 0;top:0;background-color: #FFF;box-shadow: 0px 4px 6px 0px rgba(0, 0, 0, 0.4);z-index: 999;padding: 16px 0;box-sizing: border-box;}
-    .container .section.address-none .address-main{width: 590px; float: left;height: 100%;}
+    .addressWrap{padding:16px;position:relative}
+    .addressWrap .formLine{padding-bottom:16px;font-size:14px;position:relative;padding-left:90px;text-align:left;width:450px}
+    .addressWrap .formLine .label{position:absolute;left:0;top:0;width:90px;text-align:right;line-height:36px;font-size:14px}
+    .addressWrap .formLine .checked{top:8px}
+    .addressWrap .formLine .errTips{display:none}
+    .addressWrap .formLine.error .errTips{display:block}
+    .addressWrap .formLine input{width:420px;height:36px}
+    .addressWrap .formLine textarea{width:420px;min-height:114px;padding:10px 16px;line-height:20px;resize:none}
+    .addressWrap .formLine select{width:136px;height:36px}
+    .addressWrap .btnBox{position:absolute;left:610px;top:100px}
+    .addressWrap .btnBox .group{text-align:center;width:380px;height:92px;padding-top:5px;box-sizing:border-box;border-left:1px dashed #b8bfca}
+    .addressWrap .btnBox .group p:first-child{line-height:32px}
+    .addressWrap .btnBox .group .btn{display:inline-block;width:128px;height:34px;line-height:34px;margin:0 auto;text-align:center;font-size:14px;color:#1890f9;border:1px solid #FFFFFF}
+    .addressWrap .btnBox .group .btn.con{background-color:#FFE6DC;color:#E15616;border-color:#E15616}
+    .addressWrap .btnBox .group .btn.save{background-color:#E15616;color:#FFF;border-color:#E15616;margin-right:15px}
+    .addressWrap .btnBox .group .check{display:inline-block;height:18px;line-height:18px;color:#1890f9}
+    .addressWrap .btnBox .group .check input{vertical-align:top;margin-right:10px}
+
+
+
+
+
+
+
+   /* .container .section.address-none .address-main{width: 590px; float: left;height: 100%;}
     .container .section.address-none .formLine{padding-bottom:16px;font-size:14px;position:relative;width: 100%;height: auto;float: left;}
     .container .section.address-none .formLine input{box-sizing:border-box;width:100%;height:36px;line-height:34px;text-indent:1.2em;background-color:#FFF;border:1px solid #b8bfca;border-radius:2px}
     .container .section.address-none .formLine select{cursor: pointer; box-sizing:border-box;width:162px;height:36px;line-height:34px;text-indent:1.2em;background-color:#FFF;border:1px solid #b8bfca;border-radius:2px}
@@ -51,7 +60,7 @@ li{list-style:none}
     .container .section.address-none .address-sub .btn{width: 128px;height: 34px;float: left;line-height: 34px;text-align: center;font-size: 14px;display: block;border: 1px solid #E15616;}
     .container .section.address-none .address-sub .btn-confirm{background-color: #E15616;color: #ffffff;margin-right: 15px;}
     .container .section.address-none .address-sub .btn-cancel{background-color: #FFE6DC;color: #E15616;}
-
+*/
     .container .section{width: 100%;height: auto;}
     .container .section .list{width: 100%;height: 123px;box-sizing: border-box;padding:6px 16px;float: left;background-color: #FFF;box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.07);margin-bottom: 10px;}
     .container .section .list-left{width: 660px;height: 100%;float: left;}
@@ -72,51 +81,47 @@ li{list-style:none}
     .container .section .list .list-defalut .icon{height: 24px;width: 24px;display: block;float: left;margin-right: 5px;}
     .container .section .list .list-defalut .icon:before{height: 24px;width: 24px;background-position: -255px -330px;}
     .container .section .list .list-defalut .span-s{display: inline-block;height: 24px;line-height:24px;padding: 0 15px;background-color: #f94b4b;font-size: 12px;color: #FFFFFF;border-radius: 12px;text-align: center;cursor: pointer;}
-    .container .section.address-none .label p{color: #627386}
-    input::placeholder,textarea::placeholder{color: #9aa5b5}
+
 }
 
 /**
 * 移动端
 */
 @media screen and (max-width:768px){
-.navLayout .left{width:29.3vw;border-right:1px solid #F5F5F5;line-height:11.8vw;white-space:nowrap;text-indent:3.3vw;font-size:3.4vw;}
-.navLayout .left .title{color:#22272e;font-weight:bold;border-bottom:1px solid #f5f5f5;font-size: 3.7vw;}
-.navLayout .navList .tab{display:block;color:#22272e;position:relative}
-.navLayout .navList .tab:before{content:'\276F';font-weight:normal;position:absolute;right:1.4vw;top:1vw;transform:rotate(90deg);width:6.4vw;height:6.4vw;line-height:6.4vw;text-align:center;color:#bec2c9}
-.navLayout .navList .con a{display:block;color:#9aa5b5;}
-.navLayout .navList.on .tab:before{top:4vw;transform:rotate(270deg);color:#e15616}
-.navLayout .navList.on .tab{color:#e15616}
-.navLayout .navList .con a.on{color:#e15616;background-color:#ffe6dc}
-.header-bt{height: 10.7vw;line-height: 10.7vw;background: #ffe6dc;color: #f94b4b;padding:0 3.3vw}
-.section .list{background: #fff;padding: 3.3vw;margin-bottom: 2.7vw;}
-.list-left p{display: inline-block;width: 49%;margin-bottom: 2.7vw; color: #22272e;}
-.list-left p:last-child{width: 100%}
-.list-left p .label{color: #627386}
-.list-right >div{display: inline-block}
-.list-defalut .span-s{height: 6.3vw;background: #f94b4b;color: #fff;border-radius: 2.7vw;font-size: 3.1vw;display: inline-block;text-align: center;line-height: 6.3vw;padding: 0 2.7vw;}
-.mIcon.icon-address:before{background-position: -93.6vw -37.6vw;width: 8vw;height: 8vw;}
-.icon-address{position: relative;top: 2.7vw;}
-.list-button{float: right}
-.list-button a{width: 22.4vw;height: 9.6vw;line-height: 9.6vw;text-align: center;display: inline-block;border-radius: 6.4vw;color: #1890f9;background: #e0f1ff;border: .27vw solid #1890f9;margin-left: 2.7vw;}
-.list-button a.del{color: #f94b4b;border: .27vw solid #f94b4b;background:#ffd8d8;}
-.list-right{margin: 2.7vw 0; overflow: hidden;}
-.header-button{padding: 3.3vw;}
-.header-button .btn-server{background: #e15616;color: #fff;height: 11.2vw;line-height: 11.2vw;text-align: center;display: block;}
-.address-none{padding: 3.3vw;}
-.container .section.address-none .label p em {font-style: normal;color: #f94b4b;margin: 0 1.3vw;}
-.container .section.address-none .label{color: #627386;line-height: 10vw}
-.container .section.address-none .formLine select{width: 100%;height: 9.6vw;line-height: 9.6vw;border: .27vw solid rgba(184,191,202,.5);display: block;margin-bottom: 2.7vw}
-.container .section.address-none .formLine input{width:-webkit-fill-available;height: 9.6vw;line-height: 9.6vw;border: .27vw solid rgba(184,191,202,.5);padding-left: 2.7vw;}
-input::placeholder,textarea::placeholder{color: #9aa5b5}
-.form-input textarea{height: 24vw;width: -webkit-fill-available;border: .27vw solid rgba(184,191,202,.5);padding: 2.7vw;outline: none;resize: none;}
-.address-sub .button a{width:100%;height: 11.2vw;line-height: 11.2vw;text-align: center;border: .27vw solid #e15616;color: #fff;background: #e15616;display: block;margin-bottom: 2.7vw;}
-.address-sub .button .btn-cancel{border: .27vw solid #e15616;background: #ffe6dc;color: #e15616;}
-.address-sub .button{margin: 2.7vw auto}
-.address-none {position: fixed;background: rgba(34,39,46, 0.3);top: 0;left: 0;width: 100%;height: 100%;z-index: 1000;}
-.address-main{position: absolute;left: 0;top: 0;right: 0;bottom: 0;margin: auto;width: 71vw;height: 97vw;overflow: auto;background-color: #ffffff;border-radius: 2.1vw;padding: 3.3vw;}
-.address-sub .checked{color: #1890f9;text-align: center;margin: 2.7vw 0;}
-.container .section.address-none .address-sub .checked .icon-weigouxuan:before{width:4.3vw;height: 4.3vw;background-position: -26.1vw -53.6vw;}
-.container .section.address-none .address-sub .checked .icon-gouxuan:before{width:4.3vw;height: 4.3vw;background-position: -17.9vw -53.6vw;}
-}
+    .order-header{line-height:7.4vw;background:#FFF;padding:3.3vw;margin:1.5vw auto;font-size:3.1vw;position:relative}
+    .order-header p span{color:#E15616;margin:0 1vw}
+    .header-button .btn-server{position:absolute;right:3.3vw;top:3vw}
+    .container{box-sizing:border-box;width:100%;position:relative}
+    .container .list{line-height:7.4vw;background:#FFF;padding:3.3vw}
+    .container .list{margin-bottom:1vw;border-bottom:1px dashed #eee;position:relative}
+    .container .list p{display:inline-block;min-width:49%;line-height:5vw;font-size:3.4vw;color:#22272e}
+    .container .list p .label{color:#627386;margin-right:2vw}
+    .container .list-right{padding-top:2vw}
+    .container .list-btn,.header-button .btn-server{display:inline-block;height:8vw;line-height:8vw;font-size:3.4vw;color:#1890f9;padding:0 3vw;border-radius:4.5vw;background-color:#e0f1ff;border:solid 1px #1890f9}
+    .container .list-btn.ico{background-color:#ffd8d8;color:#f94b4b;border-color:#f94b4b;margin-left:2vw}
+    .header-button .btn-server{background-color:#E15616;color:#FFF;border-color:#E15616;}
+    .container .list-btn i{font-style:normal;}
+    .container .list-defalut{height:8vw;line-height:8vw}
+    .container .list-defalut .mIcon{display:inline-block;vertical-align:middle}
+    .container .list-defalut .mIcon:before{height:8vw;width:8vw;background-position:-94.1vw -36.7vw}
+    .container .list-defalut span{display:inline-block;height:6vw;line-height:6vw;font-size:3.1vw;color:#FFFFFF;background-color:#f94b4b;border-radius:3vw;padding:0 3vw;vertical-align:middle}
+    .container .list-defalut a{display:inline-block;height:6vw;line-height:6vw;margin-left:2vw;color:#1890f9;vertical-align:middle}
+    .container .list-defalut a{padding:0;margin:0;font-size: 3.1vw;}
+    .container .list .seclet{width:6vw;height:6vw;position:absolute;bottom:0;right:0;opacity:0}
+    .container .list .seclet .mIcon{width:6vw;height:6vw;display:block}
+    .container .list .seclet .mIcon:before{width:6vw;height:6vw;background-position:-75.1vw -7.8vw}
+    .container .list.checked{border:1px solid #E15616}
+    .container .list.checked .seclet{opacity:1}
+    .address-none{}
+    .addressWrap{position:fixed;bottom:0;left:0;width:100%;height:100%;margin:0 auto;background-color:rgba(74,79,88,.7);z-index:999999;box-sizing:border-box;}
+    .addressWrap .form{width:100%;box-sizing:border-box;position:absolute;bottom:0;left:0;background:#FFF;border-radius:2vw 2vw 0 0;padding:3.3vw}
+    .addressWrap .btnBox .group{text-align:center}
+    .addressWrap .btnBox .group p:first-child{margin-bottom:5vw}
+    .addressWrap .btnBox .group .check{display:inline-block;color:#1890f9}
+    .addressWrap .btnBox .group .check input{vertical-align:top;margin-right:2vw}
+    .addressWrap .btnBox .group .btn{display:inline-block;width:40vw;height:11vw;line-height:11vw;text-align:center;font-size:3.4vw;color:#e15616;border:1px solid #e15616;background:#FFE6DC}
+    .addressWrap .btnBox .group .btn.save{background-color:#E15616;color:#FFF;border-color:#E15616}
 
+
+
+}

+ 138 - 162
src/main/resources/static/js/user-center/address/list.js

@@ -5,41 +5,32 @@ var orderPage = new Vue({
         isRequset:true,
         isShwoAddModel:false,
         isDefaultFlag:false,
-        isDefaultChecked:false,
         userId: 0,
-        addressList:[],
-        ProvinceList:[],
-        cityArray:[],
-        townArray:[],
-        addressFrom: {
-            name:'',
-            province: '',
-            city: '',
-            town: ''
-        },
-        isAddType:'add',
         addressList:[],//收货地址
-        addressData:{},//初始化地址信息
-        hanldAddressData:{},//选择确定的地址信息
-        addAddressData:{//初始化地址信息
-            addressID:'',
-            allAddress:'',
-            userID: '',			//用户id ,只在新增收货地址时传
-            shouHuoRen: '',		//收货人
-            mobile:'',			//收货人手机
-            townID:'',			//区ID
-            address: '',	//地址
-            defaultFlag:0		//是否默认收货地址(0 不是默认,1 默认)
+        provinceOptions:[],
+        cityOptions:[],
+        townOptions:[],
+        addressForm: {
+            id: '',
+            name: '',
+            mobile: '',
+            townId: '',
+            cityId: '',
+            provinceId: '',
+            desc: '',
+            default: ''
         },
-        addressLength:0
-    },
-    filters: {
-
+        rule:{
+            name: '^[a-zA-Z\\u4e00-\\u9fa5]{2,}$',
+            mobile: '^\\d{6,12}$'
+        }
     },
-    computed: {
 
-    },
     methods: {
+        blurHandle: function(event) {
+            var el = event.currentTarget;
+            verifyHandle(el);
+        },
         GetQueryListData:function(){//查询d地址列表
             var _self = this;
             OrderApi.GetAddressList({userID:_self.userId,pageNum:1,pageSize:20},function (response) {
@@ -59,6 +50,61 @@ var orderPage = new Vue({
                 }
             })
         },
+        // 获取全部省份
+        getProvinceOptions: function(){
+            var _self = this;
+            PublicApi.GetProvince({},function(r){
+                if(r.code === 0 && r.data){
+                    _self.provinceOptions =r.data;
+                }else{
+                    CAIMEI.Alert(r.msg,'确定',false);
+                }
+            });
+        },
+        getCityOptions: function(provinceId,callback){
+            var _self = this;
+            if(provinceId && provinceId>0){
+                _self.cityOptions = [];
+                _self.townOptions = [];
+                _self.addressForm.cityId = '';
+                _self.addressForm.townId = '';
+                PublicApi.GetCity({ provinceId: provinceId },function(r){
+                    if(r.code === 0 && r.data){
+                        _self.cityOptions = r.data;
+                        if(callback){callback();}
+                    }else{
+                        CAIMEI.Alert(r.msg,'确定',false);
+                    }
+                });
+            }
+        },
+        getTownOptions: function(cityId, callback){
+            var _self = this;
+            if(cityId && cityId>0){
+                _self.townOptions = [];
+                _self.addressForm.townId = '';
+                PublicApi.GetTown({cityId: cityId},function(r){
+                    if(r.code === 0 && r.data){
+                        _self.townOptions = r.data;
+                        if(callback){callback();}
+                    }else{
+                        CAIMEI.Alert(r.msg,'确定',false);
+                    }
+                })
+            }
+        },
+        // 列表直接设为默认地址
+        setDefaultAddress: function(addressId){
+            var _self = this;
+            OrderApi.DefaultAddress({addressId:addressId,userId:_self.userId},function (r) {
+                if(r.code === 0 ){
+                    // 重新获取地址列表
+                    _self.GetQueryListData();
+                }else{
+                    CAIMEI.Alert(r.msg,'确定',false);
+                }
+            });
+        },
         deleteAddress :function(addressID){//列表删除单个地址
             var _self = this;
             CAIMEI.Modal('确定要删除该地址?','取消','确定',function () {
@@ -73,158 +119,88 @@ var orderPage = new Vue({
                 })
             });
         },
+        createAddress: function(){
+            this.isShwoAddModel = true;
+            this.addressForm.id = 0;
+            this.addressForm.name = '';
+            this.addressForm.mobile = '';
+            this.addressForm.default = false;
+            this.addressForm.desc = '';
+            this.addressForm.provinceId = '';
+            this.addressForm.cityId = '';
+            this.addressForm.townId = '';
+            if(!isPC){fixedBody();}
+        },
         editAddress :function(item) {//编辑地址
+            this.isShwoAddModel = true;
+            this.addressForm.id = item.addressID;
+            this.addressForm.name = item.shouHuoRen;
+            this.addressForm.mobile = item.mobile;
+            this.addressForm.default = (item.defaultFlag*1===1);
+            this.addressForm.desc = item.address;
+            this.addressForm.provinceId = item.provinceID;
             var _self = this;
-            if (item.defaultFlag == '1') {
-                _self.isDefaultFlag = true;
-            } else {
-                _self.isDefaultFlag = false;
-            }
-            _self.isAddType = 'edit';
-            _self.isShwoAddModel = true;
-            _self.addAddressData = item;
-            _self.addAddressData.allAddress = item.province + '' + item.city + '' + item.town;
-            _self.addressFrom.province = item.provinceID;
-            _self.addressFrom.city = item.cityID;
-            _self.addressFrom.town = item.townID;
-            _self.GetProvinceFn();
-            _self.ChangeGetcity();
-            _self.ChangeGetcTown();
+            this.getCityOptions(item.provinceID, function(){
+                _self.addressForm.cityId = item.cityID;
+                _self.getTownOptions(item.cityID,function(){
+                    _self.addressForm.townId = item.townID;
+                });
+            });
+            if(!isPC){fixedBody();}
+        },
+        hideAddressForm: function(){
+            this.isShwoAddModel = false;
+            if(!isPC){looseBody();}
         },
-        ConfirmAddressFn :function(){//保存地址
+        saveAddressForm: function(){
             var _self = this;
-            if(_self.addAddressData.townID == ""){
-                CAIMEI.dialog('请选择所在地区');
-                return;
-            };
-            if(_self.addAddressData.address == ""){
-                CAIMEI.dialog('请填写详细地址');
-                return;
-            };
-            if(_self.addAddressData.shouHuoRen == ""){
-                CAIMEI.dialog('请输入收货人姓名');
-                return;
-            };
-            if(_self.addAddressData.mobile == ""){
-                CAIMEI.dialog('请输入收货人手机号');
-                return;
-            };
-            if( _self.isAddType == 'add'){
-                var params = {
-                    userID:_self.userId  ,		//用户id ,只在新增收货地址时传
-                    shouHuoRen:_self.addAddressData.shouHuoRen ,//收货人
-                    townID:_self.addAddressData.townID,			//区ID
-                    address:_self.addAddressData.address,//地址
-                    mobile:_self.addAddressData.mobile,			//手机
-                    defaultFlag:_self.addAddressData.defaultFlag//是否默认收货地址(0 不是默认,1 默认)
+            var pass = verifyForm();
+            if (_self.isConDisabled) { return false; }
+            this.$nextTick(function() {
+                if (!pass) {return false;}
+                if(!_self.addressForm.townId){
+                    CAIMEI.dialog('请选择所在地区');
+                    return false;
                 };
-            }else{
+                _self.isConDisabled = true;
                 var params = {
-                    addressID:_self.addAddressData.addressID,//编辑保存地址ID
-                    userID:_self.userId  ,		//用户id ,只在新增收货地址时传
-                    shouHuoRen:_self.addAddressData.shouHuoRen ,//收货人
-                    townID:_self.addAddressData.townID,			//区ID
-                    address:_self.addAddressData.address,//地址
-                    mobile:_self.addAddressData.mobile,			//手机
-                    defaultFlag:_self.addAddressData.defaultFlag//是否默认收货地址(0 不是默认,1 默认)
+                    userID:_self.userId, //用户id ,只在新增收货地址时传
+                    shouHuoRen:_self.addressForm.name, //收货人
+                    mobile:_self.addressForm.mobile,   //手机
+                    townID:_self.addressForm.townId,   //区ID
+                    address:_self.addressForm.desc, //地址
+                    defaultFlag:_self.addressForm.default?1:0 //是否默认收货地址(0 不是默认,1 默认)
                 };
-            }
-            _self.isConDisabled = true;
-            OrderApi.AddSaveAddress(params,function(response){
-                if(response.code == 0){
-                    CAIMEI.dialog('保存成功',true,function () {
-                        _self.GetQueryListData();
-                        _self.isShwoAddModel = false;
-                        _self.isConDisabled = false;
-                    });
-                }else{
-                    CAIMEI.Alert(response.msg,'确定',false);
+                if(_self.addressForm.id){
+                    // 编辑
+                    params.addressID = _self.addressForm.id;//编辑保存地址ID
                 }
+                _self.saveAddress(params);
             });
         },
-        GetProvinceFn: function(){//获取全部省份
-            var _self = this;
-            PublicApi.GetProvince({},function(response){
-                if(response.code == 0){
-                    _self.ProvinceList =response.data;
-                }else{
-                    CAIMEI.Alert(response.msg,'确定',false);
-                }
-            })
-        },
-        ChangeProvince:function () {//选择省份
-            var _self = this;
-            _self.addressFrom.province = event.target.value;
-            if(_self.addressFrom.province==''){//省为请选择时市区初始化
-                _self.cityArray=[];
-                _self.townArray=[];
-                _self.addAddressData.townID=''
-            }else {
-                _self.ChangeGetcity();
-            }
-        },
-        ChangeGetcity:function(event){//加载市
+        saveAddress: function(params){
             var _self = this;
-            PublicApi.GetCity({ provinceId: _self.addressFrom.province },function(response){
-                if(response.code == 0 ){
-                    _self.cityArray = response.data;
-                    _self.addressFrom.city = event.target.value;
-                    if(_self.addressFrom.city==''){
-                        _self.townArray=[];
-                    }else {
-                        _self.ChangeGetcTown();
-                    }
+            OrderApi.AddSaveAddress(params,function(r){
+                if(r.code === 0){
+                    CAIMEI.dialog('保存成功');
+                    _self.isShwoAddModel = false;
+                    _self.isConDisabled = false;
+                    // 重新获取地址列表
+                    _self.GetQueryListData();
                 }else{
-                    CAIMEI.Alert(response.msg,'确定',false);
+                    CAIMEI.Alert(r.msg,'确定',false);
                 }
-            })
-        },
-        ChangeGetcTown:function(event){//选择地区
-            var _self = this;
-            PublicApi.GetTown({ cityId: _self.addressFrom.city },function(response){
-                if(response.code == 0 ){
-                    _self.townArray = response.data;
-                    _self.addAddressData.townID = event.target.value;
-                }else{
-                    CAIMEI.Alert(response.msg,'确定',false);
-                }
-            })
-        },
-        settingDefaultFlag :function(){//添加&&编辑 保存 设置默认地址按钮
-            var _self = this;
-            _self.isDefaultFlag=! _self.isDefaultFlag;
-            if(_self.isDefaultFlag){
-                _self.addAddressData.defaultFlag = '1';
-            }else{
-                _self.addAddressData.defaultFlag = '0';
-            }
-        },
-        ShowAddAddressFn :function(){//显示新增地址
-            var _self = this;
-            _self.isAddType = 'add';
-            _self.isShwoAddModel = true;
-            _self.addressData = {//初始化地址信息
-                    addressID:'',
-                    allAddress:'',
-                    userID: '',			//用户id ,只在新增收货地址时传
-                    shouHuoRen: '',		//收货人
-                    mobile:'',			//收货人手机
-                    townID:'',			//区ID
-                    address: '',	    //地址
-                    defaultFlag:0		//是否默认收货地址(0 不是默认,1 默认)
-            };
-            _self.GetProvinceFn();
-        },
-        CancelAddressFn:function(){
-            var _self = this;
-            _self.isShwoAddModel = false;
+            });
         }
     },
-    mounted: function () {
+    created: function() {
+        this.getProvinceOptions();
         if(globalUserData){
             this.userId = globalUserData.userId;
             this.GetQueryListData();
         }
+    },
+    mounted: function () {
         $('.navLayout').find('.navList').removeClass("on").find('.con').hide().find('a').removeClass("on");
         $('.navLayout').find('.navList').eq(0).addClass("on").find('.con').show().find('a').eq(2).addClass("on");
 

+ 51 - 65
src/main/resources/templates/user-center/address/list.html

@@ -5,6 +5,7 @@
     <title>采美365网-中国美业全方位线上交易服务互动平台,做美业,上采美</title>
     <template th:replace="components/head-link"></template>
     <link th:href="@{/css/base/center.css(v=${version})}" rel="stylesheet" type="text/css">
+    <link th:href="@{/css/base/form.css(v=${version})}" rel="stylesheet" type="text/css">
     <link th:href="@{/css/user-center/address/list.css(v=${version})}" rel="stylesheet" type="text/css">
 </head>
 <body>
@@ -24,10 +25,10 @@
             <div class="right">
                 <div class="order-header">
                     <div class="header-bt">
-                        <p>已保存<span>{{addressLength}}</span>条地址,还能保存 <span>{{20-addressLength}}</span>条地址</p>
+                        <p>已保存<span>{{addressList.length}}</span>条地址,还能保存 <span>{{20-(addressList.length)}}</span>条地址</p>
                     </div>
-                    <div class="header-button" v-if="isPC">
-                        <a class="btn-server" href="javascript: void(0);" @click="ShowAddAddressFn">新增地址</a>
+                    <div class="header-button">
+                        <a class="btn-server" href="javascript: void(0);" @click="createAddress()">新增地址</a>
                     </div>
                 </div>
                 <!--loading-->
@@ -35,86 +36,74 @@
                     <img src="/img/base/loading.gif">
                 </div>
                 <div class="container clear" v-else>
-                    <div class="section address-none" v-if="isShwoAddModel">
-                        <div class="address-main clear">
-                            <div class="formLine">
-                                <div class="label"><p><em>*</em>联系地址:</p></div>
-                                <div class="form-input">
-                                    <select name="provinceID" id="cProvince" @change="ChangeProvince" v-model="addressFrom.province">
+                    <div class="section address-none" v-show="isShwoAddModel">
+                        <div class="addressWrap">
+                            <div class="form">
+                                <div class="formLine">
+                                    <p class="label"><em>*</em>收货人:</p>
+                                    <input type="text" v-model.trim="addressForm.name" placeholder="请输入收货人姓名" :rule="rule.name" maxlength="10" @blur="blurHandle($event)" needverify>
+                                    <i class="checked icon mIcon"></i>
+                                    <span class="errTips icon mIcon" tips="请输入正确的联系人姓名"></span>
+                                </div>
+                                <div class="formLine">
+                                    <p class="label"><em>*</em>联系方式:</p>
+                                    <input type="text" v-model.trim="addressForm.mobile" placeholder="请输入您的常用手机号" :rule="rule.mobile" maxlength="11" @blur="blurHandle($event)" needverify>
+                                    <i class="checked icon mIcon"></i>
+                                    <span class="errTips icon mIcon" tips="请输入有效电话号码"></span>
+                                </div>
+                                <div class="formLine">
+                                    <p class="label"><em>*</em>联系地址:</p>
+                                    <select name="province" v-model="addressForm.provinceId" @change="getCityOptions(addressForm.provinceId)">
                                         <option value="" >请选择</option>
-                                        <option v-for="(item ,index) in ProvinceList" :key="index" :value='item.provinceID'>{{item.name}}</option>
+                                        <option v-for="(item ,index) in provinceOptions" :key="index" :value='item.provinceID'>{{item.name}}</option>
                                     </select>
-                                    <select name="cityID" id="cCity" @change="ChangeGetcity($event)" v-model="addressFrom.city">
+                                    <select name="city" v-model="addressForm.cityId" @change="getTownOptions(addressForm.cityId)">
                                         <option value="" >请选择</option>
-                                        <option v-for="(item ,index) in cityArray" :key="index" :value="item.cityID">{{item.name}}</option>
+                                        <option v-for="(item ,index) in cityOptions" :key="index" :value="item.cityID">{{item.name}}</option>
                                     </select>
-                                    <select name="townID" id="cTown" @change="ChangeGetcTown($event)" v-model="addressFrom.town">
+                                    <select name="town" v-model="addressForm.townId">
                                         <option value="" >请选择</option>
-                                        <option v-for="(item ,index) in townArray" :key="index" :value="item.townID">{{item.name}}</option>
+                                        <option v-for="(item ,index) in townOptions" :key="index" :value="item.townID">{{item.name}}</option>
                                     </select>
+                                    <textarea v-model.trim="addressForm.desc" placeholder="建议您如实填写详细地址,例如:街道名称,门牌号码,楼层和房间号等信息"  @blur="blurHandle($event)" needverify></textarea>
+                                    <span class="errTips icon mIcon" tips="请输入正确的联系地址"></span>
                                 </div>
-                            </div>
-                            <div class="formLine">
-                                <div class="label tex"></div>
-                                <div class="form-input">
-                                    <textarea placeholder="建议您如实填写详细地址,例如:街道名称,门牌号码,楼层和房间号等信息"  v-model="addAddressData.address"></textarea>
-                                </div>
-                            </div>
-                            <div class="formLine">
-                                <div class="label"><p><em>*</em>收货人:</p></div>
-                                <div class="form-input">
-                                    <input type="text" v-model.trim="addAddressData.shouHuoRen" placeholder="请输入收货人姓名" maxlength="10" >
-                                </div>
-                            </div>
-                            <div class="formLine">
-                                <div class="label"><p><em>*</em>联系方式:</p></div>
-                                <div class="form-input">
-                                    <input type="text" v-model.trim="addAddressData.mobile" placeholder="请输入联系方式" maxlength="11" >
+                                <div class="btnBox">
+                                    <div class="group">
+                                        <p>
+                                            <label class="check"><input v-model="addressForm.default" name="default" type="checkbox">设为默认地址</label>
+                                        </p>
+                                        <p>
+                                            <a class="btn save"  href="javascript:void(0)" @click="saveAddressForm()">保存</a>
+                                            <a class="btn con"  href="javascript:void(0)" @click="hideAddressForm()">取消</a>
+                                        </p>
+                                    </div>
                                 </div>
                             </div>
-                            <div class="address-sub" v-if="!isPC">
-                            <div class="checked" @click="settingDefaultFlag">
-                                <i class="icon mIcon" :class="isDefaultFlag?'icon-gouxuan':'icon-weigouxuan'"></i>
-                                <span>设为默认地址</span>
-                            </div>
-                            <div class="button">
-                                <a href="javascript:void(0);" class="btn btn-confirm" @click="ConfirmAddressFn">保存</a>
-                                <a href="javascript:void(0);" class="btn btn-cancel" @click="CancelAddressFn">取消</a>
-                            </div>
-                        </div>
-                        </div>
-                        <div class="address-sub" v-if="isPC">
-                            <div class="checked" @click="settingDefaultFlag">
-                                <i class="icon mIcon" :class="isDefaultFlag?'icon-gouxuan':'icon-weigouxuan'"></i>
-                                <span>设为默认地址</span>
-                            </div>
-                            <div class="button">
-                                <a href="javascript:void(0);" class="btn btn-confirm" @click="ConfirmAddressFn">保存</a>
-                                <a href="javascript:void(0);" class="btn btn-cancel" @click="CancelAddressFn">取消</a>
-                            </div>
                         </div>
                     </div>
+
                     <div class="section" v-if="addressList.length > 0">
                         <div class="list" v-for="(item, index) in addressList" :key="index">
                             <div class="list-left">
-                                <p><span class="label">收货人</span>{{item.shouHuoRen}}</p>
-                                <p><span class="label">联系方式</span>{{item.mobile}}</p>
-                                <p><span class="label">收货地址</span><span class="prov">{{item.province}}</span>{{item.city}}{{item.town}}{{item.address}}</p>
+                                <p><span class="label">收货人:</span>{{item.shouHuoRen}}</p>
+                                <p><span class="label">联系方式:</span>{{item.mobile}}</p>
+                                <p><span class="label">收货地址:</span><span class="prov">{{item.province}}</span>{{item.city}}{{item.town}}{{item.address}}</p>
                             </div>
-                            <div class="list-right">
-                                <div class="list-defalut" v-if="item.defaultFlag == 1">
-                                    <i class="icon mIcon icon-address"></i>
-                                    <span class="span-s">默认地址</span>
+                            <div class="list-right  mfbt">
+                                <div class="list-defalut">
+                                    <template v-if="item.defaultFlag == 1">
+                                        <i class="icon mIcon"></i>
+                                        <span class="span-s">默认地址</span>
+                                    </template>
+                                    <a v-else @click="setDefaultAddress(item.addressID)" href="javascript:void(0)">设为默认地址</a>
                                 </div>
                                 <div class="list-button">
-                                    <a class="list-btn ico" v-if="isPC" href="javascript:void(0)" @click.stop="deleteAddress(item.addressID)">
+                                    <a class="list-btn ico" href="javascript:void(0)" @click.stop="deleteAddress(item.addressID)">
                                         <i class="icon mIcon">
                                             <span>删除</span>
                                         </i>
                                     </a>
-                                    <a class="list-btn del" v-if="!isPC" href="javascript:void(0)" @click.stop="deleteAddress(item.addressID)">
-                                            删除
-                                    </a>
                                     <a class="list-btn" href="javascript:void(0)" @click.stop="editAddress(item)">修改</a>
                                 </div>
                             </div>
@@ -126,9 +115,6 @@
                         <div class="msg"><p>暂无数据</p></div>
                     </div>
                 </div>
-                 <div class="header-button" v-if="!isPC">
-                        <a class="btn-server" href="javascript: void(0);" @click="ShowAddAddressFn">新增地址</a>
-                    </div>
             </div>
         </div>
     </div>