UNIAPP实战项目笔记43 购物车页面修改收货地址和修改默认地址
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
- index
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
- uni-number-box
- index
common 公共文件:全局css文件 || 全局js文件
- api
- request.js
- common.css
- uni.css
- api
store vuex状态机文件
- modules
- cart.js
path.js
- index.js
- modules
UNIAPP实战项目笔记43 购物车页面修改收货地址和修改默认地址相关推荐
- UNIAPP实战项目笔记45 订单页面布局完成和数据渲染
UNIAPP实战项目笔记45 订单页面布局完成和数据渲染 实际案例图片 订单页面 具体内容图片自己替换哈,随便找了个图片的做示例 具体位置见目录结构 通过 模拟数据list 来实现数据渲染 完善布局页 ...
- UNIAPP实战项目笔记28 商品分享功能点分享按钮分享到微信好友
UNIAPP实战项目笔记28 商品分享功能点分享按钮分享到微信好友 detail.vue 加生命周期 // 点击分享onNavigationBarButtonTap(e) {if(e.type===' ...
- UNIAPP实战项目笔记57 发送手机验证码 接入短信SDK
UNIAPP实战项目笔记57 发送手机验证码 接入短信SDK 注册时候需要发送验证 通过验阿里云或腾讯云等短信sdk供应商 实际案例图片 后端接口文件 index.js var express = r ...
- Vue3电商项目实战-结算支付 3【05-结算-收货地址-添加、06-结算-收货地址-修改、07-结算-提交订单】
文章目录 05-结算-收货地址-添加 06-结算-收货地址-修改 07-结算-提交订单 05-结算-收货地址-添加 目的:实现收货地址的添加. 大致步骤: 独立组件,准备一个对话框 完成表单布局 完成 ...
- 39 Flutter仿京东商城项目 收货地址列表、增加 修改收货地址布局、弹出省市区选择器...
加群452892873 下载对应39课文件,运行方法,建好项目,直接替换lib目录 pubspec.yaml city_pickers: ^0.1.22 AddressAdd.dart import ...
- 采购订单收货后不能修改价格的增强
采购订单收货后不能修改价格的增强 增强名:MM06E005 出口:EXIT_SAPMM06E_012 IF SY-TCODE <> 'ME22N' AND SY-TCODE <&g ...
- SAP项目采购申请与预留,收货入库,项目领用or项目发货,及报表查看操作
在项目执行过程中,项目经理会在挂接项目物资采购申请后,会很关注项目采购.入库.领用到项目的情况,那么接下来就通过一系列操作与报表来简单说明下,项目物资管理过程: 1.CJ20N项目物资采购挂接,提报需 ...
- uniapp实战项目 (仿知识星球App) - - 自定义顶部导航栏和登录弹窗组件
实战项目名称:仿知识星球App 技术栈:前端 => uni-app ( 后端:Node.js + Mysql + Apollo + Graphql ) 已实现功能:微信登录,创建星球,内容管理, ...
- uniapp实战项目 (仿知识星球App) - - tabBar配置
实战项目名称:仿知识星球App 技术栈:前端 => uni-app ( 后端:Node.js + Mysql + Apollo + Graphql ) 已实现功能:微信登录,创建星球,内容管理, ...
最新文章
- 暑假想打比赛,小白怎么从0入门?
- ElasticStack系列之十六 ElasticSearch5.x index/create 和 update 源码分析
- 2.3.5 mysql角色管理
- Redis源代码分析之sds, 动态数组
- struts2 自带的 token防止表单重复提交拦截器
- this_scope_call_apply_bind_柯里化 详细分析
- ubuntu安装 opencv-3.4.3
- djangobook的旧版本代码,关于数据库
- JVM-Cpu飙升排查及解决
- DFI(Deep/DynamicFlow Inspection,深度/动态流检测)
- Kafka概述(二)进阶知识
- c++:dll缺少依赖文件的解决方法
- Easyrecovery13 for mac 易恢复软件 官方中文版下载
- #include指令引号与尖括号的区别
- [20181015][模拟赛]
- python:打乱文本中每一行的顺序,如train.txt
- C#实战027:socket实现大文件传输
- arduino+四位数码管从0到9999爬升
- 上海服务器机房防雷接地系统,一种机房防雷接地系统
- linux能ping通ssh连不上,能ping通Linux但是ssh连不上问题解决方法
热门文章
- HTML5期末大作业:美妆网页主题网站设计——清新的手工肥皂网站展示(4页)HTML+CSS+JavaScript
- 计算机视觉动画视频插帧难点、流程及改进
- 倍福PLC部署Jenkins入门使用笔记
- (shell版)批量自动重命名文件中文转英文
- 数据挖掘如何在互联网金融风险控制中发挥作用
- 【白嫖系列】教育邮箱申请最新专业绘图软件OriginPro(官方渠道)
- 石墨笔记,幕布和 Effie 哪个更适合公众号主?
- 如何把图片转换成PDF?4种简单快捷的方法,一键将图片转PDF
- 微信小程序播放视频 禁止快进
- PTA-L1-007 念数字 (C语言)