UNIAPP实战项目笔记43 购物车页面修改收货地址和修改默认地址

实际案例图片

修改收货地址和修改默认地址页面布局和功能

具体内容图片自己替换哈,随便找了个图片的做示例
用到了vuex的状态机,具体位置见目录结构

代码 my-add-path.vue 页面部分

my-add-path.vue 设置页面布局

用到了vuex的状态机

<template><view class="my-add-path"><view class="path-item"><view class="">收件人</view><input type="text" value="" placeholder="收件人姓名" v-model="pathObj.name"/></view><view class="path-item"><view class="">手机号</view><input type="text" value="" placeholder="11位手机号" v-model="pathObj.tel"/></view><view class="path-item"><view class="">所在地址</view><view class="" @tap="showCityPicker">{{pathObj.city}} </view><mpvue-city-picker ref="mpvueCityPicker" :pickerValueDefault="pickerValueDefault" @onConfirm="onConfirm"/></view><view class="path-item"><view class="">详细地址</view><input type="text" value="" placeholder="5到60个字符" v-model="pathObj.details"/></view><view class="path-item"><view class="">设为默认地址</view><radio-group name="" @change="radioChange"><label class="radio"><radio :checked="pathObj.isDefault" color="#FF3333" /><text></text></label></radio-group></view></view>
</template><script>import mpvueCityPicker from '../../components/uni/mpvue-citypicker/mpvueCityPicker.vue'import {mapActions} from 'vuex'export default {data() {return {pickerValueDefault:[0,0,1],//默认城市pathObj:{name:"",tel:"",city:"请选择 >",details:"",isDefault:false},i:-1,// 是否修改的状态isStatus:false};},onLoad(e) {if(e.data){uni.setNavigationBarTitle({title:"修改地址"})let result = JSON.parse(e.data);this.pathObj = result.item;this.i = result.index;this.isStatus = true;}},components:{mpvueCityPicker},// 页面生命周期onNavigationBarButtonTap() {if( this.isStatus ){// 修改this.updatePathFn({index:this.i,item:this.pathObj})// 后退一页uni.navigateBack({delta:1})}else{// 新增this.createPathFn( this.pathObj ); //提交数据对象到state.list// 后退一页uni.navigateBack({delta:1})}},methods:{...mapActions(['createPathFn','updatePathFn']), // 引入// 城市选择showCityPicker(){this.$refs.mpvueCityPicker.show()},onConfirm(e){this.pathObj.city = e.label;console.log(e);},radioChange(){this.pathObj.isDefault = !this.pathObj.isDefault;}}}
</script><style lang="scss">
.my-add-path{padding-left: 20rpx;
}
.path-item{display: flex;justify-content: space-between;align-items: center;padding: 16rpx 0;width: 100%;border-bottom: 2rpx solid #ccc ;
}
.path-item input{flex: 1;text-align: left;padding: 0 10rpx;
}
</style>

代码 my-add-list.vue 页面部分

my-add-list.vue 设置页面布局

渲染状态机数据到页面

<template><view class="my-path-list"><view class="path-list"><view class="path-item" v-for="(item,index) in list" :key="index"@tap="toAddPath(index)"><view class="item-main"><view class="item-name">{{item.name}}</view><view class="">{{item.tel}}</view></view><view class="item-main"><view class="active" v-show="item.isDefault">默认</view><view class="">{{item.city}} {{item.details}}</view></view></view></view><view class="add-path"><view class="add-path-btn" @tap="goAddPath">新增地址</view></view></view>
</template><script>import {mapState} from 'vuex'export default {data() {return {};},computed:{...mapState({list:state=>state.path.list})},methods:{// 修改toAddPath(index){let pathObj = JSON.stringify({index:index,item:this.list[index]});uni.navigateTo({url:'../my-add-path/my-add-path?data='+pathObj})},// 新增goAddPath(){uni.navigateTo({url:'../my-add-path/my-add-path'})}}}
</script><style lang="scss">
.add-path{padding: 20rpx 0;width: 100%;display: flex;justify-content: center;
}
.add-path-btn{border: 2rpx solid #49bdfb;color: #49bdfb;border-radius: 30rpx;padding: 6rpx 60rpx;
}
.path-list{padding: 0 20rpx;
}
.path-item{padding: 10rpx;border-bottom: 2rpx solid #ccc;
}
.item-main{padding: 8rpx 0;display: flex;align-items: center;
}
.item-name{padding-right: 10rpx;
}
.active{padding: 6rpx;background-color: #49bdfb;columns: #fff;border-radius: 20rpx;font-size: 24rpx;text-align: center;
}
</style>

代码 path.js 状态机对象部分

定义 path 对象

export default{state:{list:[{name:"张果老",tel:"18010101919",city:"北京市朝阳区建国路",details:"四惠东199号",isDefault:false},{name:"吕洞宾",tel:"18010102929",city:"北京市石景山区鲁谷",details:"中心西街199号",isDefault:true}]},getters:{},mutations:{createPath( state, obj ){state.list.unshift( obj );},updatePath( state, {index,item} ){for(let key in item){state.list[index][key] = item[key];}},// 把之前选中默认的改完未选中removePath(state){state.list.forEach(v=>{if(v.isDefault){v.isDefault = false;}})}},actions:{createPathFn({commit}, obj){if(obj.isDefault){commit('removePath')}commit('createPath', obj);},updatePathFn({commit}, obj){if(obj.item.isDefault){commit('removePath')}commit('updatePath', obj);}}
}

index.js 代码

地址管理 path 状态机引入

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex);// 购物车
import cart from './modules/cart.js'
// 地址管理
import path from './modules/path.js'export default new Vuex.Store({modules:{cart,path}
})

目录结构

前端目录结构

  • manifest.json 配置文件: appid、logo…

  • pages.json 配置文件: 导航、 tabbar、 路由

  • main.js vue初始化入口文件

  • App.vue 全局配置:样式、全局监视

  • static 静态资源:图片、字体图标

  • page 页面

    • index

      • index.vue
    • list
      • list.vue
    • my
      • my.vue
    • my-config
      • my-config.vue
    • my-config
      • my-config.vue
    • my-add-path
      • my-add-path.vue
    • my-path-list
      • my-path-list.vue
    • search
      • search.vue
    • search-list
      • search-list.vue
    • shopcart
      • shopcart.vue
    • details
      • details.vue
  • components 组件

    • index

      • Banner.vue
      • Hot.vue
      • Icons.vue
      • indexSwiper.vue
      • Recommend.vue
      • Shop.vue
    • common
      • Card.vue
      • Commondity.vue
      • CommondityList.vue
      • Line.vue
      • ShopList.vue
    • uni
      • uni-number-box

        • uni-number-box.vue
      • uni-icons
        • uni-icons.vue
      • uni-nav-bar
        • uni-nav-bar.vue
      • mpvue-citypicker
        • mpvueCityPicker.vue
  • common 公共文件:全局css文件 || 全局js文件

    • api

      • request.js
    • common.css
    • uni.css
  • store vuex状态机文件

    • modules

      • cart.js
      • path.js
    • index.js

UNIAPP实战项目笔记43 购物车页面修改收货地址和修改默认地址相关推荐

  1. UNIAPP实战项目笔记45 订单页面布局完成和数据渲染

    UNIAPP实战项目笔记45 订单页面布局完成和数据渲染 实际案例图片 订单页面 具体内容图片自己替换哈,随便找了个图片的做示例 具体位置见目录结构 通过 模拟数据list 来实现数据渲染 完善布局页 ...

  2. UNIAPP实战项目笔记28 商品分享功能点分享按钮分享到微信好友

    UNIAPP实战项目笔记28 商品分享功能点分享按钮分享到微信好友 detail.vue 加生命周期 // 点击分享onNavigationBarButtonTap(e) {if(e.type===' ...

  3. UNIAPP实战项目笔记57 发送手机验证码 接入短信SDK

    UNIAPP实战项目笔记57 发送手机验证码 接入短信SDK 注册时候需要发送验证 通过验阿里云或腾讯云等短信sdk供应商 实际案例图片 后端接口文件 index.js var express = r ...

  4. Vue3电商项目实战-结算支付 3【05-结算-收货地址-添加、06-结算-收货地址-修改、07-结算-提交订单】

    文章目录 05-结算-收货地址-添加 06-结算-收货地址-修改 07-结算-提交订单 05-结算-收货地址-添加 目的:实现收货地址的添加. 大致步骤: 独立组件,准备一个对话框 完成表单布局 完成 ...

  5. 39 Flutter仿京东商城项目 收货地址列表、增加 修改收货地址布局、弹出省市区选择器...

    加群452892873 下载对应39课文件,运行方法,建好项目,直接替换lib目录 pubspec.yaml city_pickers: ^0.1.22 AddressAdd.dart import ...

  6. 采购订单收货后不能修改价格的增强

    采购订单收货后不能修改价格的增强 增强名:MM06E005 出口:EXIT_SAPMM06E_012 IF SY-TCODE <> 'ME22N' AND SY-TCODE  <&g ...

  7. SAP项目采购申请与预留,收货入库,项目领用or项目发货,及报表查看操作

    在项目执行过程中,项目经理会在挂接项目物资采购申请后,会很关注项目采购.入库.领用到项目的情况,那么接下来就通过一系列操作与报表来简单说明下,项目物资管理过程: 1.CJ20N项目物资采购挂接,提报需 ...

  8. uniapp实战项目 (仿知识星球App) - - 自定义顶部导航栏和登录弹窗组件

    实战项目名称:仿知识星球App 技术栈:前端 => uni-app ( 后端:Node.js + Mysql + Apollo + Graphql ) 已实现功能:微信登录,创建星球,内容管理, ...

  9. uniapp实战项目 (仿知识星球App) - - tabBar配置

    实战项目名称:仿知识星球App 技术栈:前端 => uni-app ( 后端:Node.js + Mysql + Apollo + Graphql ) 已实现功能:微信登录,创建星球,内容管理, ...

最新文章

  1. 暑假想打比赛,小白怎么从0入门?
  2. ElasticStack系列之十六 ElasticSearch5.x index/create 和 update 源码分析
  3. 2.3.5 mysql角色管理
  4. Redis源代码分析之sds, 动态数组
  5. struts2 自带的 token防止表单重复提交拦截器
  6. this_scope_call_apply_bind_柯里化 详细分析
  7. ubuntu安装 opencv-3.4.3
  8. djangobook的旧版本代码,关于数据库
  9. JVM-Cpu飙升排查及解决
  10. DFI(Deep/DynamicFlow Inspection,深度/动态流检测)
  11. Kafka概述(二)进阶知识
  12. c++:dll缺少依赖文件的解决方法
  13. Easyrecovery13 for mac 易恢复软件 官方中文版下载
  14. #include指令引号与尖括号的区别
  15. [20181015][模拟赛]
  16. python:打乱文本中每一行的顺序,如train.txt
  17. C#实战027:socket实现大文件传输
  18. arduino+四位数码管从0到9999爬升
  19. 上海服务器机房防雷接地系统,一种机房防雷接地系统
  20. linux能ping通ssh连不上,能ping通Linux但是ssh连不上问题解决方法

热门文章

  1. HTML5期末大作业:美妆网页主题网站设计——清新的手工肥皂网站展示(4页)HTML+CSS+JavaScript
  2. 计算机视觉动画视频插帧难点、流程及改进
  3. 倍福PLC部署Jenkins入门使用笔记
  4. (shell版)批量自动重命名文件中文转英文
  5. 数据挖掘如何在互联网金融风险控制中发挥作用
  6. 【白嫖系列】教育邮箱申请最新专业绘图软件OriginPro(官方渠道)
  7. 石墨笔记,幕布和 Effie 哪个更适合公众号主?
  8. 如何把图片转换成PDF?4种简单快捷的方法,一键将图片转PDF
  9. 微信小程序播放视频 禁止快进
  10. PTA-L1-007 念数字 (C语言)