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>
|