微信小程序地址管理

  开发小程序时,往往会用到地址管理这个功能。通常包括“地址选择”和“添加地址”两个功能。

1、在“地址选择”界面,我使用了一个数组,只需要把数组内的内容输出即可,在退出该界面时,将数据存到缓存中,确保下次进入该界面时能显示已经有的地址。并且还可以进行“删除”和“勾选”两个功能。

2、在“添加地址”界面,有“姓名”、“电话”、“收货地址”、“省市区三级联动”、“详细地址”以及“保存”功能。

话不多说,先来看效果图

56d9893be0454175ae395bb123f1dd86.jpg

00075e69637d414aa34f432de1184cd2.jpg 

 在进行两个界面的实现时,查阅了一些资料,同时也看了CSDN上很多大神设计的,并且像他们借鉴了一下。现在来看看我最后完成的代码。

 

location.wxss:

page{  

    display: flex;  

    flex-direction: column;  

    height: 100%; 

  }   

  .product-name-wrap{

    margin: 0px 10px; 

    font-size: 14px; 

    color: #404040;

  }  

  .ui-list-item-info{

    margin: 5px 0px; 

  }  

  .ui-list-item-address{

    color: #585c64; 

  }  

  .ui-list-item-time{ 

    margin: 5px 0px;  

  }  

  .ui-list-item-del{ 

    position: absolute;

    right: 10px;  

    color: #585c64;  

  }  

  /* 分割线 */  

  .separate {

    margin: 5px 0px; 

    height: 2rpx; 

    background-color: #f2f2f2;  

  }  

  .add-address{  

    margin: 0 auto;  

    margin-top: 30px;  

    width: 150px;  

    height: 35px; 

    border: 1px #000 solid;  

    line-height: 35px;  

    text-align: center; 

    color: #000;  

    border-radius: 5rpx;

          display: block;  

  }  

  .add-img{  

    margin-right: 15rpx;  

    width: 15px;  

    height: 15px;  

  }

  .b{

      display: flex;

      margin-left: 30rpx;

      font-size: 30rpx;

      margin-bottom: 30rpx;

  }

  .bb{

      display: flex;

      flex: 1;

      width: 33%;

      justify-content: space-between;

  }

location.js:

Page({

 

  

 

    /**

  

     * 页面的初始数据

  

     */

  

    data: {

      nickName:'',

      addressList:[],

      aa:''

    },

  

    /**

  

     * 生命周期函数--监听页面加载

  

     */

  

    onLoad: function (options) {

        var currentPages=getCurrentPages();

        var prePages=currentPages[currentPages.length-2];

      var arr = wx.getStorageSync('addressList') || [];

      // 更新数据  

      this.setData({

        addressList: arr,

        nickName:prePages.data.nickName

      });

    },

    /**

  

     * 生命周期函数--监听页面显示

  

     */

    onPullDownRefresh: function () {

        this.onRefresh();

    },

 

    onRefresh:function(){

        //导航条加载动画

        wx.showNavigationBarLoading();

        setTimeout(function () {

          wx.hideNavigationBarLoading();

          //停止下拉刷新

          wx.stopPullDownRefresh();

        }, 2000);

      },

    onShow: function () {

  

      this.onLoad();

  

    },

    onUnload: function () {

        var arr = this.data.addressList;

        wx.setStorageSync('addressList', arr);

    },

    change:function(e){

        var items = this.data.addressList;

        for (var i = 0; i < items.length; i++){

          if (items[i].mobile == this.data.aa){

            for (var j = 0; j < items.length; j++) {

              if (items[j].checked && j != i) {

                  items[j].checked = false;

                }

            }

            items[i].checked = !(items[i].checked);

          }

        }

        this.setData({

          addressList: items

        });

    },

    addAddress:function(){

        if(this.data.nickName=='点击授权登录'){

            wx.showToast({

              title: '请登录',

              image:'/icon/interjective.png'

            })

            return

        }

      wx.navigateTo({ url: '/pages/addLocation/addLocation' });

    },

    radioChange: function (e) {

          this.data.aa = e.detail.value;

        },

    /* 删除item */

    delAddress: function (e) {

        var id = e.currentTarget.dataset.id//数组下标

      this.data.addressList.splice(id, 1);

      // 更新data数据对象  

  

      if (this.data.addressList.length > 0) {

  

        this.setData({

  

          addressList: this.data.addressList

  

        })

  

        wx.setStorageSync('addressList', this.data.addressList);

  

      } else {

  

        this.setData({

  

          addressList: this.data.addressList

  

        })

  

        wx.setStorageSync('addressList', []);

  

      }

  

    }

  

  })

location.wxml:

<scroll-view class="scroll" scroll-y="true">

 

<view wx:for="{{addressList}}" wx:key="key">

  <view class="product-name-wrap">

    <view class="ui-list-item-info">{{item.consignee}}

      <text decode="{{true}}" space="{{true}}">&nbsp;&nbsp;</text> {{item.mobile}}

    </view>

    <view class="ui-list-item-address">

     <p>省城区: {{item.myregion[0]+item.myregion[1]+item.myregion[2]}}</p>

     <p class="ui-list-item-del">

    <radio-group bindchange="radioChange" class="b">

    <radio wx:for-item="item" wx:key="mobile" value="{{item.mobile}}" bindtap="change" checked="{{item.checked}}" class="bb"></radio>

    </radio-group>

    </p>

    </view>

    <view class="ui-list-item-address">

       详细地址:{{item.detailAddress}}

</view>

    <view class="ui-list-item-time">

      <p> 收货时间:{{item.transportDay}}</p>

      <p class="ui-list-item-del" data-id="{{index}}" bindtap="delAddress">删除</p>

    </view>

    <view class="separate"></view>

  </view>

</view>

</scroll-view>

<view class="add-address" bindtap="addAddress">

<image class="add-img" src="/icon/add1.png"></image>新增地址

</view>

addLocation.wxss

@import '../../utils/weui.wxss';

 

 

.weui-cells:before{

 

  top:0;

 

  border-top:1rpx solid white;

 

  }

 

.weui-cell{

 

  line-height: 3.5rem;

 

}

 

.weui-cells:after{

 

  bottom:0;border-bottom:1rpx solid white

 

}

.weui-btn{

 

  width: 80%;

 

}

addLocation.js:

var value = [0, 0, 0]; //数据位置下标

var addressList = null;


Page({

  data: {
    myregion: ["北京市", "市辖区", "东城区"],
    
    transportValues: ["收货时间不限", "周六日/节假日收货", "周一至周五收货"],

    transportIndex: 0,

    checked:false
  },
  /**

   * 生命周期函数--监听页面加载

   */
  onPullDownRefresh: function () {
    this.onRefresh();
},

onRefresh:function(){
    //导航条加载动画
    wx.showNavigationBarLoading();
    setTimeout(function () {
      wx.hideNavigationBarLoading();
      //停止下拉刷新
      wx.stopPullDownRefresh();
    }, 2000);
  },
  onLoad: function(options) {},
  
  /**

   * 生命周期函数--监听页面显示

   */
  onShow: function() {},

  bindTransportDayChange: function(e) {
    console.log('picker country 发生选择改变,携带值为', e.detail.value);
    this.setData({
      transportIndex: e.detail.value
    })
  },
  bindRegionChange:function(e){
    console.log(e)    //查看事件返回值
    this.setData({
        myregion:e.detail.value
    })    //重新复制给myregion
  },
 
  saveAddress: function(e) {

    var consignee = e.detail.value.consignee;

    var mobile = e.detail.value.mobile;

    var transportDay = e.detail.value.transportDay;

    var detailAddress = e.detail.value.detailAddress;
    if(consignee==''){
        wx.showToast({
          title: '请输入姓名',
          image:'/icon/error.png'
        })
        return
    }
    else if(mobile==''){
        wx.showToast({
          title: '请输入手机号',
          image:'/icon/error.png'
        })
        return
    }
    else if(detailAddress==''){
        wx.showToast({
          title: '请输入详细地址',
          image:'/icon/error.png'
        })
        return
    }
    else if(mobile.length!=11){
        wx.showToast({
            title: '手机号格式错误',
            image:'/icon/error.png'
          })
          return
    }
    var arr = wx.getStorageSync('addressList') || [];
    console.log("arr,{}", arr);
    addressList = {
      consignee: consignee,
      mobile: mobile,
      myregion: this.data.myregion,
      detailAddress:detailAddress,
      transportDay: transportDay,
      checked:this.data.checked
    }
      arr.push(addressList);
    wx.setStorageSync('addressList', arr);
    wx.navigateBack({
    })

  }

})

addLocation.wxml:

<form bindsubmit="saveAddress">

<view class="weui-cells weui-cells_after-title">

<!--收货人-->

  <view class="weui-cell weui-cell_input">

    <view class="weui-cell__hd">

      <view class="weui-label">收货人</view>

    </view>

    <view class="weui-cell__bd">

      <input class="weui-input" name="consignee" placeholder="请输入收货人真实姓名" />

    </view>

  </view>

<!--手机号-->

  <view class="weui-cell weui-cell_input">

    <view class="weui-cell__hd">

      <view class="weui-label">手机号</view>

    </view>

    <view class="weui-cell__bd">

      <input class="weui-input" name="mobile" placeholder="请输入收货人手机号" />

    </view>

  </view>

<!--收货时间-->

  <view class="weui-cell weui-cell_select">

    <view class="weui-cell__hd weui-cell__hd_in-select-after">

      <view class="weui-label">收货时间</view>

    </view>

    <view class="weui-cell__bd">

      <picker bindchange="bindTransportDayChange" value="{{transportIndex}}" range="{{transportValues}}">

        <view class="weui-select weui-select_in-select-after">{{transportValues[transportIndex]}}</view>

        <input name="transportDay" hidden="true" value="{{transportValues[transportIndex]}}" />

      </picker>

    </view>

  </view>

<!-- 省市县 -->

<view class="weui-cell weui-cell_select">

    <view class="weui-cell__hd weui-cell__hd_in-select-after">

    <view class="weui-label">我的地址</view>

    </view>

    <view class="weui-cell__bd">

    <picker mode="region" bindchange="bindRegionChange">{{myregion[0]+myregion[1]+myregion[2]}}

</picker>

    </view>

</view>

<!--详细地址-->

<view class="weui-cell weui-cell_input">

<view class="weui-cell__hd">

  <view class="weui-label">详细地址</view>

</view>

<view class="weui-cell__bd">

  <input class="weui-input" name="detailAddress" placeholder="详细地址" />

</view>

</view>

</view>

<button class="weui-btn" type="primary" form-type="submit">保存</button>

</form>

总结:我在做小程序时,地址管理前面还有一个登录的页面,所以用到了像nickName这样的数据,如果程序报错了,大家可以去掉这些数据。另外,location.wxss中用到了weui.wxss这个组件,大家可以在网上搜索查找这个的源码,然后新建文件夹导入就行啦

  • 12
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
微信小程序中,你可以通过后台管理用户的收货地址。具体的方法包括获取所有的收货地址和添加收货地址。\[1\]在添加收货地址的方法中,你需要提供收货人姓名、手机号码、运输时间、省份、城市、区县和详细地址等信息。这些信息将被保存在本地存储中,并可以在后续使用中进行管理和编辑。\[2\]另外,还可以通过获取城市信息的方法来获取省份、城市和区县的列表,以便用户选择正确的地址信息。\[3\]通过这些方法,你可以实现微信小程序的收货地址管理功能。 #### 引用[.reference_title] - *1* [使用 apifm-wxapi 开发微信小程序之快递/收货地址管理](https://blog.csdn.net/abccba9978/article/details/100024234)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [微信小程序商城开发之实现用户收货地址管理页面的代码](https://blog.csdn.net/wxb8826206/article/details/87279826)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值