当前位置: 首页 > news >正文

小程序-收货地址管理模块实现

页面结构代码:

address-form.vue   --->新建地址和修改地址页面

<template><view class="content"><form><!-- 表单内容 --><view class="form-item"><text class="label">收货人</text><input class="input" placeholder="请填写收货人姓名" v-model="form.receiver" /></view><view class="form-item"><text class="label">手机号码</text><input class="input" placeholder="请填写收货人手机号码" v-model="form.contact" /></view><view class="form-item"><text class="label">所在地区</text><picker@change="onRegionChange"class="picker"mode="region":value="form.fullLocation.split(' ')"><view v-if="form.fullLocation">{{ form.fullLocation }}</view><view v-else class="placeholder">请选择省/市/区(县)</view></picker></view><view class="form-item"><text class="label">详细地址</text><input class="input" placeholder="街道、楼牌号等信息" v-model="form.address" /></view><view class="form-item"><label class="label">设为默认地址</label><switch@change="onSwitchChange"class="switch"color="#27ba9b":checked="form.isDefault === 1"/></view></form></view><!-- 提交按钮 --><button class="button" @tap="onSubmit">保存并使用</button>
</template>

address.vue   --->  地址列表页面

<template><view class="viewport"><!-- 地址列表 --><scroll-view class="scroll-view" scroll-y><view v-if="true" class="address"><view class="address-list"><!-- 收货地址项 --><view class="item" v-for="item in addressList" :key="item.id"><view class="item-content"><view class="user">{{ item.receiver }}<text class="contact">{{ item.contact }}</text><text v-if="item.isDefault" class="badge">默认</text></view><view class="locate">{{ item.fullLocation }} {{ item.address }}</view><navigatorclass="edit"hover-class="none":url="`/pagesMember/address-form/address-form?id=${item.id}`">修改</navigator></view></view></view></view><view v-else class="blank">暂无收货地址</view></scroll-view><!-- 添加按钮 --><view class="add-btn"><navigator hover-class="none" url="/pagesMember/address-form/address-form">新建地址</navigator></view></view>
</template>

form表单:  address-form.vue

// 表单数据

const form = ref({

  receiver: '', // 收货人

  contact: '', // 联系方式

  fullLocation: '', // 省市区(前端展示)

  provinceCode: '', // 省份编码(后端参数)

  cityCode: '', // 城市编码(后端参数)

  countyCode: '', // 区/县编码(后端参数)

  address: '', // 详细地址

  isDefault: 0, // 默认地址,1为是,0为否

})

1、添加地址

实现思路:封装 API 接口  --> 定义参数类型  -->  点击保存调用接口  -->  成功提示  --> 返回上一页

封装接口:address.ts

/**

 * 添加收货地址

 * @param data 请求参数

 * @returns

 */

export const postMemberAddressAPI = (data: AddressParams) => {

  return http({

    method: 'POST',

    url: '/member/address',

    data,

  })

}

定义参数类型 :address.d.ts

/** 添加收货地址: 请求参数 */

export type AddressParams = {

  /** 收货人姓名 */

  receiver: string

  /** 联系方式 */

  contact: string

  /** 省份编码 */

  provinceCode: string

  /** 城市编码 */

  cityCode: string

  /** 区/县编码 */

  countyCode: string

  /** 详细地址 */

  address: string

  /** 默认地址,1为是,0为否 */

  isDefault: number

}

点击保存按钮调用接口  -->  成功提示  --> 返回上一页: address-form.vue

// 保存并使用按钮

const onSubmit = async () => {

    // 新建地址请求

    await postMemberAddressAPI(form.value)

  // 返回上一页

  uni.navigateBack()

  // 成功提示

  uni.showToast({ icon: 'success', title: '添加成功' })

}

2、地址列表

实现思路:封装 API 接口  --> 初始化调用    --> 渲染列表

封装 API 接口:address.ts

/**

 * 获取收货地址列表

 * @returns

 */

export const getMemberAddressAPI = () => {

  return http<AddressItem[]>({

    method: 'GET',

    url: '/member/address',

  })

}

初始化调用:address.vue

<script setup lang="ts">

import { getMemberAddressAPI } from '@/services/address'

import type { AddressItem } from '@/types/address'

import { onShow } from '@dcloudio/uni-app'

import { ref } from 'vue'

// 获取收货地址列表数据

const addressList = ref<AddressItem>()

const getMemberAddressData = async () => {

  const res = await getMemberAddressAPI()

  console.log(res)

  addressList.value = res.result

}

// 页面展示  --  初始化调用

onShow(() => {

  getMemberAddressData()

})

</script>

渲染列表:

3、修改地址

封装 API 接口  --> 是否有地址 id ?   (有) --->初始化调用  --> 表单数据回显

封装 API 接口:address.ts

/**

 * 获取收货地址详情     用于回显修改表单上用户地址详情的数据

 * @param id 地址id(路径参数)

 * @returns

 */

export const getMemberAddressByIdAPI = (id: string) => {

  return http<AddressItem>({

    method: 'GET',

    url: `/member/address/${id}`,

  })

}

/**

 * 修改收货地址

 * @param id 地址id(路径)

 * @param data 表单数据(请求体参数)

 * @returns

 */

export const putMemberAddressByAPI = (id: string, data: AddressParams) => {

  return http({

    method: 'PUT',

    url: `/member/address/${id}`,

    data,

  })

}

address-form.vue:      是否有地址 id ?        有id - 修改地址      没用id  - 新建地址

如果是修改地址的话,回显表单数据到页面

// 获取页面参数

const query = defineProps<{

  id?: string

}>()

// 获取收货地址详情数据    并回显表单数据到修改地址页面

const getMemberAddressByIdData = async () => {

  if (query.id) {

    const res = await getMemberAddressByIdAPI(query.id)

    // 把数据合并到表单中    即回显表单数据

    Object.assign(form.value, res.result)

  }

}

// 保存并使用按钮      修改或者新建地址按钮

const onSubmit = async () => {

  if (query.id) {

    // 修改地址请求

    await putMemberAddressByAPI(query.id, form.value)

  } else {

    // 新建地址请求

    await postMemberAddressAPI(form.value)

  }

  // 返回上一页

  uni.navigateBack()

  // 成功提示

  uni.showToast({ icon: 'success', title: query.id ? '修改成功' : '添加成功' })

}

初始化调用:

// 页面加载      回显调用函数  -  回显数据

onLoad(() => {

  getMemberAddressByIdData()

})

修改成功

4、删除地址

实现思路:使用 uni-swipe-action  侧滑组件  --> 绑定删除事件  --> 二次确认删除  -->  调用删除地址API

<uni-swipe-action class="address-list">

          <!-- 收货地址项 -->

          <uni-swipe-action-item class="item" v-for="item in addressList" :key="item.id">

            <view class="item-content">

              <view class="user">

                {{ item.receiver }}

                <text class="contact">{{ item.contact }}</text>

                <text v-if="item.isDefault" class="badge">默认</text>

              </view>

              <view class="locate">{{ item.fullLocation }} {{ item.address }}</view>

              <navigator

                class="edit"

                hover-class="none"

                :url="`/pagesMember/address-form/address-form?id=${item.id}`"

              >

                修改

              </navigator>

            </view>

            <!-- 右侧插槽 -->

            <template #right>

              <button class="delete-button" @tap="onDeleteAddress(item.id)">删除</button>

            </template>

          </uni-swipe-action-item>

        </uni-swipe-action>

封装删除接口 API     --> address.ts

/**

 * 删除收货地址

 * @param id 地址id(路径参数)

 * @returns

 */

export const deleteMemberAddressByIdAPI = (id: string) => {

  return http({

    method: 'DELETE',

    url: `/member/address/${id}`

  })

}

绑定删除事件  --> 二次确认删除  -->  调用删除地址API              address.vue

删除成功

相关文章:

小程序-收货地址管理模块实现

页面结构代码&#xff1a; address-form.vue --->新建地址和修改地址页面 <template><view class"content"><form><!-- 表单内容 --><view class"form-item"><text class"label">收货人</text>…...

【星海随笔】微信小程序(三)

网络数据请求 1.小程序中网络数据请求的限制 出于安全性方面的考虑,小程序官方对 数据接口的请求 做出了如下 两个限制: ① 只能请求 HTTPS 类型的接口 ② 必须将 接口的域名 添加到 信任列表 中 微信小程序只能请求 https 类型的接口 且需要请求的域名必须提前进行设置后,才可…...

pip(包管理器) for Python

pip是什么 pip是Python的包安装程序&#xff0c;即python包管理器。您可以使用 pip 从Python包索引和其他索引安装包。 1. pip 安装 python 包 pip install 包名 例如&#xff1a;pip install pymssql &#xff1a; 使用pip安装数据库驱动包 pymssql 2.pip 卸载 python 包 pi…...

Ubuntu上安装Maven

在Ubuntu上安装Maven的步骤如下&#xff1a; 更新包索引&#xff1a; sudo apt update 安装Maven&#xff1a; sudo apt install maven 验证安装是否成功&#xff1a; mvn -version 以上步骤将会安装Maven并添加到系统路径中&#xff0c;你可以通过运行mvn -version来验…...

java中使用svnkit实现文件的版本管理

java中使用svnkit实现文件的版本管理 一、引入svnKit依赖二、初始化仓库工厂类二、使用svnkit创建本地存储仓库三、svn基本原子操作四、通过原子方法实现简单svn相应操作 一、引入svnKit依赖 <dependency><groupId>org.tmatesoft.svnkit</groupId><artifa…...

了解 Linux 网络卡绑定:提高网络性能与冗余性

在现代 IT 基础设施中&#xff0c;网络性能和可靠性至关重要。对于许多企业和个人用户来说&#xff0c;确保网络的高可用性和冗余性是首要任务之一。Linux 提供了一个强大的解决方案——网络卡绑定&#xff08;Network Interface Card Bonding&#xff0c;简称 NIC Bonding&…...

2024年618购物狂欢节即将来袭!精选五款超值入手数码好物!

618购物狂欢盛宴即将落幕&#xff0c;是时候展现我们的购物智慧了&#xff01;在追求价格优惠的同时&#xff0c;我们更应看重商品的品质与实用性。面对琳琅满目的选择&#xff0c;如何筛选出真正值得拥有的好物呢&#xff1f;为了让大家的购物之旅更加轻松愉快&#xff0c;以下…...

中国AI独角兽资本大冒险

成立不过一年多时间&#xff0c;月之暗面已然成为中国大模型赛道上&#xff0c;最炙手可热的明星公司。 5月21日&#xff0c;华尔街见闻获悉&#xff0c;月之暗面将按照投前估值30亿美元&#xff08;合217.3亿人民币&#xff09;进行融资&#xff0c;完成后依然会是当前中国估…...

项目十二:简单的python基础爬虫训练

许久未见&#xff0c;甚是想念&#xff0c;今日好运&#xff0c;为你带好运。ok&#xff0c;废话不多说&#xff0c;希望这门案例能带你直接快速了解并运用。&#x1f381;&#x1f496; 基础流程 第一步&#xff1a;安装需要用到的requests库&#xff0c;命令如下 pip inst…...

OpenGL学习入门及开发环境搭建

最近学习OpenGL开发&#xff0c;被各种openGL库搞得晕头转向&#xff0c;什么glut, glew glfw glad等等。 可以参考这边博客:OpenGL 下面的 glut freeglut glfw 都是个啥_glx wgl的中文-CSDN博客 glfw是glut的升级版&#xff0c;跨平台的主要处理窗口 事件相关。 glad是glew…...

three.js能实现啥效果?看过来,这里都是它的菜(08)

在Three.js中实现旋转动画的原理是通过修改对象的旋转属性来实现的&#xff0c;通常使用渲染循环&#xff08;render loop&#xff09;来更新对象的旋转状态&#xff0c;从而实现动画效果。 具体的原理包括以下几个步骤&#xff1a; 创建对象&#xff1a;首先创建一个需要旋转…...

SpringBoot(九)之整合mybatis

SpringBoot&#xff08;九&#xff09;之整合mybatis 文章目录 SpringBoot&#xff08;九&#xff09;之整合mybatisSpring整合mybatis回顾1. 引入依赖2. mybatis-config.xml SpringBoot整合mybatis1.引入依赖2. 配置数据源和 MyBatis 属性3. 配置 Mapper 接口4. 配置mapper.xm…...

【实战教程】使用Spring AOP和自定义注解监控接口调用

一、背景 随着项目的长期运行和迭代&#xff0c;积累的功能日益繁多&#xff0c;但并非所有功能都能得到用户的频繁使用或实际上根本无人问津。 为了提高系统性能和代码质量&#xff0c;我们往往需要对那些不常用的功能进行下线处理。 那么&#xff0c;该下线哪些功能呢&…...

算法学习之:Raft-分布式一致性/共识算法

基础介绍 Raft是什么&#xff1f; Raft is a consensus algorithm that is designed to be easy to understand. Its equivalent to Paxos in fault-tolerance and performance. The difference is that its decomposed into relatively independent subproblems, and it clea…...

彩色进度条(C语言版本)

.h文件 #include<stdio.h> #include<windows.h>#define NUM 101 #define LOAD_UP 50 #define LOAD_DOWN 60 #define SLEEP_SLOW 300 #define SLEEP_FAST 70 版本1&#xff1a;&#xff08;初始版&#xff09; //v1 #include "progress.h" int main() …...

C#和C++有什么区别?

C#和C都是广泛使用的编程语言&#xff0c;但它们在设计理念、应用场景和语法上有许多显著的区别。以下是一些关键区别的详细介绍&#xff1a; 1. 设计理念和目的 C&#xff1a; 设计目的&#xff1a;C是一种面向系统编程和应用程序开发的语言&#xff0c;具有高效性和灵活性…...

微信小程序报错:notifyBLECharacteristicValueChange:fail:nodescriptor的解决办法

文章目录 一、发现问题二、分析问题二、解决问题 一、发现问题 微信小程序报错&#xff1a;notifyBLECharacteristicValueChange:fail:nodescriptor 二、分析问题 这个提示有点问题&#xff0c;应该是该Characteristic的Descriptor有问题&#xff0c;而不能说nodescriptor。 …...

富格林:可信攻略阻止遭遇欺诈

富格林悉知&#xff0c;在投资市场中&#xff0c;如何阻止遭遇欺诈情况应该是每位投资者都想要了解的一个知识点。事实上&#xff0c;现货黄金市场相对来说会其他市场复杂多变&#xff0c;因此要想盈利出金还是得要先学会阻止遭遇欺诈情况。据富格林所知&#xff0c;目前市面上…...

搭建淘宝扭蛋机小程序:技术选型与最佳实践

随着移动互联网的快速发展&#xff0c;小程序作为一种轻量级应用&#xff0c;以其无需安装、即用即走的特点&#xff0c;受到了广大用户的喜爱。在电商领域&#xff0c;淘宝作为国内最大的电商平台之一&#xff0c;也积极拥抱小程序技术&#xff0c;为用户提供更加便捷、个性化…...

【线性回归】梯度下降

文章目录 [toc]数据数据集实际值估计值 梯度下降算法估计误差代价函数学习率参数更新 Python实现导包数据预处理迭代过程结果可视化完整代码 结果可视化线性拟合结果代价变化 数据 数据集 ( x ( i ) , y ( i ) ) , i 1 , 2 , ⋯ , m \left(x^{(i)} , y^{(i)}\right) , i 1 ,…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...