| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 | 
							- <template>
 
- 	<view>
 
- 		<!--标题栏-->
 
- 		<bar-title bgColor="bg-white" isBack :title="id?'编辑地址': '新增地址'">
 
- 			<block slot="content">{{id?'编辑地址': '新增地址'}}</block>
 
- 		</bar-title>
 
- 		
 
- 		<!--表单-->
 
- 		<view class="cu-form-group margin-top">
 
- 			<view class="title">收货人名</view>
 
- 			<input v-model="name" placeholder="您的姓名"/>
 
- 		</view>
 
- 		<view class="cu-form-group">
 
- 			<view class="title">手机号码</view>
 
- 			<input v-model="phone" placeholder="卖家和快递员联系您的方式"/>
 
- 		</view>
 
- 		<view class="cu-form-group">
 
- 			<view class="title">所在地区</view>
 
- 			<picker mode="multiSelector" @columnchange="bindMultiPickerColumnChange" :value="areasIndex" range-key="name" :range="areas" @change="multChange">
 
- 				<view class="picker">
 
- 					<block v-for="(item,index) in areas" :key="index" v-if="index < 3">
 
- 						{{areas[index] && areas[index][areasIndex[index]] && areas[index][areasIndex[index]].name}}
 
- 						<block v-if="index < areas.length - 1">,</block>
 
- 					</block>
 
- 				</view>
 
- 			  </picker>
 
- 		</view>
 
- 		<view class="cu-form-group">
 
- 			<view class="title">详细地址</view>
 
- 			<input v-model="address" placeholder="请输入详细的地址信息"/>
 
- 		</view>
 
- 		
 
- 		<view class="bg-white wecanui-footer-fixed foot-pb">
 
- 			<view class="flex flex-direction">
 
- 				<button class="cu-btn bg-red" @click="submit">提交保存</button>
 
- 			</view>
 
- 		</view>
 
- 		
 
- 	</view>
 
- </template>
 
- <script>
 
- 	import barTitle from '@/components/zaiui-common/basics/bar-title';
 
- 	import _tool from '@/static/zaiui/util/tools.js';	//工具函数
 
- 	export default {
 
- 		components: {
 
- 			barTitle,
 
- 		},
 
- 		data() {
 
- 			return {
 
- 				name: '',
 
- 				phone: '',
 
- 				id: '',
 
- 				address: '',
 
- 				addressShow: false,
 
- 				areas: [[{name: '省份选择', value: '-1'}],[{name: '城市选择', value: '-1'}],[{name: '县区选择', value: '-1'}]],
 
- 				areasIndex: [0,0,0],
 
- 				roleDeep: 4,
 
- 				type: 2
 
- 			}
 
- 		},
 
- 		onLoad(options) {
 
- 			this.id = options.id || '';
 
- 			if(!this.id) {
 
- 				this.loadAreas(0, 1);
 
- 				return;
 
- 			}
 
- 			
 
- 			this.reqByuser({
 
- 				url: '?l=address.getInfo',
 
- 				data: {
 
- 					id: this.id
 
- 				},
 
- 				success: res => {
 
- 					if(res.data.status == 1) {
 
- 						let data = res.data.data;
 
- 						
 
- 						this.phone = data.phone;
 
- 						this.address = data.address;
 
- 						this.city = data.city;
 
- 						this.type = data.type;
 
- 						this.name = data.name;
 
- 						this.initAreasIndex([data.province_id, data.city_id, data.county_id])
 
- 					}
 
- 				}
 
- 			})
 
- 		},
 
- 		onReady() {
 
- 			_tool.setBarColor(true);
 
- 			uni.pageScrollTo({
 
- 			    scrollTop: 0,
 
- 			    duration: 0
 
- 			});
 
- 		},
 
- 		methods: {
 
- 			initAreasIndex(areas) {
 
- 				let _areas = [].concat(areas);
 
- 				let loop = (id, level) => {
 
- 					this.loadAreas(id, level, 0, res => {
 
- 						let index = res.findIndex(item => areas[level-1] == item.id);
 
- 						if(level == 1) {
 
- 							index++;
 
- 						}
 
- 						this.areasIndex[level-1] = Math.max(0, index);
 
- 						let nextId = _areas.shift();
 
- 						if(nextId && level<3) {
 
- 							loop(nextId, level+1)
 
- 						} else {}
 
- 					}, 1);
 
- 				}
 
- 				loop(0,1)
 
- 			},
 
- 			loadAreas(parent, level, next, callback) {
 
- 				if(level > 4) return;
 
- 				this.req({
 
- 					url: 'http://center.yuandaibao.com/package/area/?l=data.get',
 
- 					data: {
 
- 						level,
 
- 						parent,
 
- 					},
 
- 					success: res => {
 
- 						if(res.data.status == 1) {
 
- 							let data = res.data.data;
 
- 							if(level-1 < 3) {
 
- 								let list = data.list;
 
- 								if(parent == 0) {
 
- 									list = [{name: '省份选择', value: '-1'}, ...list]
 
- 								}
 
- 								this.areas.splice(level-1,1,list)
 
- 							}
 
- 							typeof callback == 'function' && callback(data.list)
 
- 							if(next && level < this.roleDeep - 1) {
 
- 								// let firstNode = data.list[0].value == -1 ? data.list[1] : data.list[0];
 
- 								let firstNode = data.list[0];
 
- 								if(firstNode.id !== -1) {
 
- 									this.loadAreas(firstNode.id, level + 1);
 
- 								}
 
- 							}
 
- 						}
 
- 					}
 
- 				});
 
- 			},
 
- 			multChange(e) {
 
- 				let area = this.areas.map((item, index) => {
 
- 					return item[e.detail.value[index]] && item[e.detail.value[index]].value
 
- 				}).join(',');
 
- 				area += ',' + this.streetAreas[this.streetIndex].value;
 
- 				if (this.areas.length == this.roleDeep && area.indexOf('-1') == -1) {
 
- 					const role = this.roles[this.roleIndex];
 
- 				}
 
- 			},
 
- 			bindMultiPickerColumnChange(e) {
 
- 				// 矫正下游select index
 
- 				let areasIndex = this.areasIndex.map((item, index) => {
 
- 					if(index == e.detail.column) {
 
- 						return e.detail.value
 
- 					}
 
- 					if(index < e.detail.column) {
 
- 						return item;
 
- 					}
 
- 					return 0;
 
- 				});
 
- 				this.$set(this, 'areasIndex', areasIndex);
 
- 				
 
- 				if(e.detail.column < this.roleDeep -1) {
 
- 					let value = this.areas[e.detail.column][e.detail.value].id;
 
- 					if(e.detail.column == 0) {
 
- 						this.areas.splice(2,1, [{name: '县区选择', value: '-1'}])
 
- 					}
 
- 					this.streetAreas = [{name: '街道选择', value: '-1'}];
 
- 					this.streetIndex = 0;
 
- 					if(value == -1) {
 
- 						let arr = [].concat(this.areas);
 
- 						arr.splice(e.detail.column+1, 5)
 
- 						this.areas = arr;
 
- 						return;
 
- 					}
 
- 					this.loadAreas(this.areas[e.detail.column][e.detail.value].id, e.detail.column+2, 1);
 
- 				}
 
- 			},
 
- 			// 打开窗口
 
- 			selectAddress(){
 
- 				this.$refs.addressEl.show();
 
- 			},
 
- 			// 确认选中
 
- 			confirmChange(address){
 
- 				console.log(address)
 
- 				this.address = address.province + '/' + address.city + '/' + address.area;
 
- 			},
 
- 			submit() {
 
- 				let { name, phone, type, id, address } = this;
 
- 				let area = this.areas.map((item, index) => item[this.areasIndex[index]].id).join(',');
 
- 				// let _address = this.areas.map((item, index) => item[this.areasIndex[index]].name).join('')
 
- 				
 
- 				// _address += address;
 
- 					
 
- 				if(!name) {
 
- 					uni.showToast({
 
- 						icon:'error',
 
- 						title:'请填写昵称'
 
- 					})
 
- 					return;
 
- 				}
 
- 				if(!phone) {
 
- 					uni.showToast({
 
- 						icon:'error',
 
- 						title:'请填写手机号'
 
- 					})
 
- 					return;
 
- 				}
 
- 				if(!/1\d{10}/.test(phone)) {
 
- 					uni.showToast({
 
- 						icon:'error',
 
- 						title:'手机号格式错误'
 
- 					})
 
- 					return;
 
- 				}
 
- 				if(!area || area.indexOf('-1') > -1) {
 
- 					uni.showToast({
 
- 						icon:'error',
 
- 						title:'请填写地址'
 
- 					})
 
- 					return;
 
- 				}
 
- 				if(!address) {
 
- 					uni.showToast({
 
- 						icon:'error',
 
- 						title:'请填写详细地址'
 
- 					})
 
- 					return;
 
- 				}
 
- 				
 
- 				let data = {
 
- 						name,  
 
- 						province: this.areas[0][this.areasIndex[0]].id,
 
- 						city: this.areas[1][this.areasIndex[1]].id, 
 
- 						county: this.areas[2][this.areasIndex[2]].id, 
 
- 						address,
 
- 						phone, type, id
 
- 					};
 
- 					
 
- 				this.reqByuser({
 
- 					url: '?l=address.up',
 
- 					data,
 
- 					success: res => {
 
- 						if(res.data.status == 1) {
 
- 							uni.showToast({
 
- 								icon: 'success',
 
- 								title: '提交成功'
 
- 							})
 
- 							uni.navigateBack({})
 
- 						}
 
- 					}
 
- 				})
 
- 			},
 
- 			
 
- 		}
 
- 	}
 
- </script>
 
- <style lang="scss">
 
- 	/* #ifdef APP-PLUS */
 
- 		@import "../../static/colorui/main.css";
 
- 		@import "../../static/colorui/icon.css";
 
- 		@import "../../static/zaiui/style/app.scss";
 
- 	/* #endif */
 
- 	.wecanui-footer-fixed .flex-direction {
 
- 		padding: 18.18upx;
 
- 	}
 
- </style>
 
 
  |