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

uniapp.3

1.手机号登录

获取登录code

let code = '' onLoad(async () => { const res = await wx.login() code = res.code })

获取手机号

const onGetphonenumber: UniHelper.ButtonOnGetphonenumber = async (ev) => { const encryptedData = ev.detail.encryptedData! const iv = ev.detail.iv! const res = await postLoginWxMinAPI({ code, encryptedData, iv }) loginSuccess(res.result) }

小程序快捷登录

类型声明

export type LoginResult = { id: number avatar: string account: string nickname?: string mobile: string token: string }

2.个人信息

渲染头像和昵称

import { useMemberStore } from '@/stores' const memberStore = useMemberStore()
<!-- 已登录 --> <view class="overview" v-if="memberStore.profile"> <image class="avatar" :src="memberStore.profile.avatar" mode="aspectFill"></image> <view class="nickname"> {{ memberStore.profile.nickname || memberStore.profile.account }} </view> </view> <!-- 未登录 --> <view class="overview" v-else> <navigator url="/pages/login/login">未登录,点击登录</navigator> </view>

获取用户信息

const profile = ref<ProfileDetail>() const getMemberProfileData = async () => { const res = await getMemberProfileAPI() profile.value = res.result } onLoad(() => { getMemberProfileData() })

更新头像

const onAvatarChange = () => { uni.chooseMedia({ count: 1, mediaType: ['image'], success: (res) => { const { tempFilePath } = res.tempFiles[0] // 小程序端文件上传用 uni.uploadFile,不用 axios uni.uploadFile({ url: '/member/profile/avatar', name: 'file', filePath: tempFilePath, success: (res) => { if (res.statusCode === 200) { const { avatar } = JSON.parse(res.data).result profile.value!.avatar = avatar // 更新当前页面头像 memberStore.profile!.avatar = avatar // 同步更新 Store 头像 uni.showToast({ icon: 'success', title: '更新成功' }) } }, }) }, }) }

更新个人信息

const onSubmit = async () => { const { nickname, gender, birthday, profession } = profile.value const res = await putMemberProfileAPI({ nickname, gender, birthday, profession, provinceCode: fullLocationCode[0], cityCode: fullLocationCode[1], countyCode: fullLocationCode[2], }) memberStore.profile!.nickname = res.result.nickname // 同步更新 Store 昵称 uni.showToast({ icon: 'success', title: '保存成功' }) setTimeout(() => { uni.navigateBack() }, 400)

3.地址模块

表单数据结构

const form = ref({ receiver: '', // 收货人 contact: '', // 联系方式 fullLocation: '', // 省市区(前端展示用) provinceCode: '', // 省份编码(后端参数) cityCode: '', // 城市编码(后端参数) countyCode: '', // 区/县编码(后端参数) address: '', // 详细地址 isDefault: 0, // 默认地址:1是 0否 })

收集地区数据

const onRegionChange: UniHelper.RegionPickerOnChange = (ev) => { // 省市区(前端展示) form.value.fullLocation = ev.detail.value.join(' ') // 省市区(后端参数) const [provinceCode, cityCode, countyCode] = ev.detail.code! // 合并数据 Object.assign(form.value, { provinceCode, cityCode, countyCode }) }

是否是默认收货地址

const onSwitchChange: UniHelper.SwitchOnChange = (ev) => { form.value.isDefault = ev.detail.value ? 1 : 0 }

表单校验

const rules: UniHelper.UniFormsRules = { receiver: { rules: [{ required: true, errorMessage: '请输入收货人姓名' }], }, contact: { rules: [ { required: true, errorMessage: '请输入联系方式' }, { pattern: /^1[3-9]\d{9}$/, errorMessage: '手机号格式不正确' }, ], }, fullLocation: { rules: [{ required: true, errorMessage: '请选择所在地区' }], }, address: { rules: [{ required: true, errorMessage: '请选择详细地址' }], }, } const formRef = ref<UniHelper.UniFormsInstance>()
<uni-forms :rules="rules" :model="form" ref="formRef"> <uni-forms-item name="receiver" class="form-item"> <input v-model="form.receiver" placeholder="请填写收货人姓名" /> </uni-forms-item> </uni-forms>
http://www.jsqmd.com/news/1228114/

相关文章:

  • 【Coze插件开发黄金7步法】:20年低代码平台专家亲授,从零到上线仅需90分钟
  • JavaScript核心语法与ES6+特性详解
  • Android Root隐藏终极指南:Zygisk Assistant深度配置与实战解析
  • 致南京表主的一封公开信:一枚腕表的价值,由亨得利的硬核守护来托底 - 亨得利官方维修中心
  • 【AI编程团队协作黄金法则】:20年实战总结的7个不可忽视的协同陷阱与破局方案
  • PingFangSC字体完整指南:5分钟掌握苹果平方字体的专业应用
  • AI搜索行业研究避坑指南,深度复盘11个高危误区与对应审计清单(附可立即执行的Checklist)
  • 青甘大环线纯玩团品牌排行:硬核品质大比拼 - 互联网科技品牌测评
  • 天津积家回收价格查询及各大回收平台实测排行(2026年7月最新数据) - 天价名表回收平台
  • 2026年7月最新!雅典官方苏州网点地址与客服电话,售后服务热线公布 - 亨得利官方服务中心
  • WeChatMsg:重新定义你的聊天数据主权
  • 超声图像甲状腺结节检测数据集甲状腺结节超声数据集、甲状腺良恶性结节标注数据集PyQt5图像检测界面源码、医疗AI检测代码、甲状腺结节识别模型、YOLOv11训练源码医学影像目标检测数据集、
  • AReaL v1.0框架:全异步强化学习训练与智能体开发实践
  • 鸿蒙 ArkTS 实战:Leftover Recipe Remix 从剩菜食谱改造到厨房生活工具完整解析
  • 欧米茄官方保养价格查询|全部地址与24小时客服电话权威信息公告(2026年7月最新) - 欧米茄官方服务中心
  • 2026年AI协同底座深度评测:让Codex/Cursor真正跑通企业项目协作全链路
  • 如何3分钟快速获取国家中小学智慧教育平台电子课本:智能下载工具完全指南
  • 亲身探访北京亨得利官方名表服务中心|最新网点地址与24小时热线(2026年7月更新) - 亨得利官方
  • 终极视频流畅度解决方案:Flowframes让每一秒都丝滑如镜
  • 2026年7月最新雷达沈阳铁西万达广场维修保养服务电话 - 亨得利钟表维修中心
  • 2026年7月最新伯爵广州萝岗万达广场维修保养服务电话 - 亨得利钟表维修中心
  • 西安万国回收价格查询和各大平台实测排行(2026年7月最新数据) - 诚收名表回收平台
  • Citra模拟器终极探索:在PC上解锁完整3DS游戏体验的完整旅程
  • 三步搞定国家中小学智慧教育平台电子教材下载:免费PDF获取终极指南
  • Electron应用接入Microsoft Store商业化的技术实现
  • 如何高效使用智能电子课本下载工具:提升教学效率的完整指南
  • 亨得利官方钟表服务中心|网点地址及热线权威信息通知(2026年7月最新) - 亨得利官方
  • Streamlit应用Heroku部署实战:从本地到公网的全流程解析
  • VC++图像处理实践指南:从环境搭建到OpenCV算法实现
  • UI-TARS桌面应用:视觉语言模型驱动的智能GUI代理配置指南