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

小程序 获取用户头像、昵称、手机号的组件封装(最新版)

在父组件引入该组件

<!-- 授权信息 --><auth-mes showModal="{{showModal}}" id='autnMes' bind:onConfirm="onConfirm"></auth-mes>

 子组件详细代码为:

authMes.wxml

<!-- components/authMes/authMes.wxml -->
<van-popup show="{{ showModal }}" round bind:close="closeHandle" custom-class="auth-box" custom-style="width: 84%;z-index:10002;" overlay-style="z-index:10001;"><view class="auth-wrap"><view><view class="tips-tit">提示</view><view class="tips-txt">为提供更好的服务,我们邀请您填写昵称,头像等公开信息</view></view><view class="auth-cont"><view class="auth-itm"><view class="itm-tit">头像</view><view class="avatar-cont"><button class="avatar-btn" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar"><image class="avatar" src="{{avatarMes.avatarUrl}}" wx:if="{{avatarMes.avatarUrl}}"></image><image class="avatar" src="../../images/common/auth_default.png" wx:if="{{!avatarMes.avatarUrl}}"></image><image class="icon-r" src="../../images/common/icon_arrow_black.png" /></button></view></view><view class="auth-itm"><view class="itm-tit">昵称</view><input class="nick-name" placeholder="点击输入" type="nickname" value="{{avatarMes.nickName}}" bindblur="bindblur" placeholder-class="input-holder"></input></view><view class="auth-itm"><view class="itm-tit">手机号</view><view><button slot="button" plain size="mini" type="" open-type="getPhoneNumber" bindgetphonenumber="getPhone" class="phone-btn"><text wx:if="{{!avatarMes.mobile}}">获取手机号</text><text wx:if="{{avatarMes.mobile}}" style="color:#302e2d;">{{avatarMes.mobile}}</text></button></view></view></view><view class="auth-btn"><view class="btn" catchtap="cancel">取消</view><view class="btn com-btn" catchtap="confirm">确认</view></view></view>
</van-popup>

 authMes.js

// components/authMes/authMes.js
// 获取应用实例
const app = getApp();
const { enums } = require("../../common/config/enums");
Component({/*** 组件的属性列表*/properties: {// 小程序弹窗showModal: {type: Boolean,value: false,},},/*** 组件的初始数据*/data: {avatarMes: {avatarUrl: "",nickName: "",mobile: "",},},/*** 组件的方法列表*/methods: {/** 获取昵称信息 */bindblur(res) {const value = res.detail.value;this.data.avatarMes.nickName = value;},// 拿到头像信息的临时路径onChooseAvatar(e) {const { avatarUrl } = e.detail;console.log('ddd', avatarUrl);this.uploadAva(e.detail.avatarUrl);},uploadAva(tempFilePaths) {var that = this;wx.uploadFile({url: app.siteinfo.apiUrl + '图片上传接口', //需要用HTTPS,同时在微信公众平台后台添加服务器地址filePath: tempFilePaths, //上传的文件本地地址name: "Image", //服务器定义的Key值header: {'content-type': 'multipart/form-data','cookie': wx.getStorageSync('cookie')},formData: {//接口所需的其他上传字段uploadDir: enums.UploadDir.Personal.Value,fileType: enums.FileType.Image.Value,},// 附近数据,这里为路径success: function (res) {wx.hideLoading();if (res.statusCode == 200) {var result = JSON.parse(res.data);if (result.status) {// var imgUrl = [{ name: 'headImgUrl', url: result.data.fileurl }];that.setData({'avatarMes.avatarUrl': result.data.fileurl})} else {app.alert.show(res.errmsg);}} else {app.alert.show(res);}},fail: function (err) {console.log(err);}});},// 输入onChange(e) {let field = 'avatarMes.' + e.currentTarget.dataset.field;this.setData({[field]: e.detail});},// 手机号授权getPhone(mobile) {console.log('mobile.detail', mobile.detail)if (mobile.detail && mobile.detail.code) {let code = mobile.detail.code;app.apis('手机号解码接口', { code: code }).then(res => {if (res.status) {this.setData({'avatarMes.mobile': res.data.Mobile});} else {app.alert.show('获取手机号码失败,请重试!' + res.errmsg);}})} else {app.toast.show(mobile.detail.errMsg);}},//点击遮罩层关闭closeHandle() {this.setData({showModal: false})},// 取消cancel() {this.setData({showModal: false})},// 确认confirm() {this.triggerEvent('onConfirm', { avatar: this.data.avatarMes });},},
})

  authMes.less

.auth-wrap {border-radius: 40rpx;box-sizing: border-box;padding: 24rpx;opacity: 1;background-color: #ffffff;z-index: 100002;.tips-tit {font-family: PingFangSC-Medium;font-size: 32rpx;color: #302e2d;text-align: center;font-weight: 500;}.tips-txt {padding: 40rpx 10rpx;font-size: 28rpx;color: #282b34;letter-spacing: 0;text-align: center;font-weight: 400;}.auth-cont {.auth-itm {background-color: #f6f6f6;border-radius: 20rpx;padding: 0 24rpx;height: 96rpx;margin-bottom: 24rpx;display: flex;align-items: center;justify-content: space-between;.itm-tit {width: 100rpx;font-family: PingFangSC-Regular;font-size: 28rpx;color: #302e2d;}.avatar-cont {width: 18%;.avatar-btn {width: 100%;height: 96rpx;padding: 0!important;box-sizing: content-box !important;background-color: transparent;display: flex;align-items: center;justify-content: space-between;.avatar {width: 56rpx;height: 56rpx;display: inline-block;}&::after {border: none;}}.icon-r {width: 24rpx;height: 24rpx;margin-left: 8rpx;}}.nick-name {text-align: right;font-family: PingFangSC-Regular;font-size: 28rpx;color: #302e2d;}}}.aggre-v {display: flex;align-items: center;font-family: PingFangSC-Regular;font-size: 26rpx;color: #302e2d;font-weight: 400;image {width: 24rpx;height: 24rpx;margin-right: 16rpx;}}.auth-btn {width: 100%;display: grid;grid-template-columns: 1fr 1fr;grid-column-gap: 24rpx;margin: 30rpx 0 20rpx;.btn {font-family: PingFangSC-Medium;font-size: 32rpx;color: #99302f;background-color: #ffffff;border-radius: 20rpx;border: 2rpx solid #99302f;height: 88rpx;line-height: 88rpx;text-align: center;}.com-btn {background-color: #ebd6d7;border-color: #ebd6d7;}}.phone-btn {border: 0;text-align: right;padding: 0;line-height: 1;font-family: PingFangSC-Regular;font-size: 28rpx;color: #99302f;}.fie-lable {font-family: PingFangSC-Regular;font-size: 28rpx;color: #302e2d;}.input-holder {font-family: PingFangSC-Regular;font-size: 28rpx;color: #88868b;}
}

 authMes.json

{"component": true,"usingComponents": {"van-field": "@vant/weapp/field/index","van-popup": "@vant/weapp/popup/index"}
}

app.apis是封装的微信小程序请求接口的方法详细见这篇文章

相关文章:

小程序 获取用户头像、昵称、手机号的组件封装(最新版)

在父组件引入该组件 <!-- 授权信息 --><auth-mes showModal"{{showModal}}" idautnMes bind:onConfirm"onConfirm"></auth-mes> 子组件详细代码为: authMes.wxml <!-- components/authMes/authMes.wxml --> <van-popup show…...

【Linux】简易shell外壳的制作

#include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h>#define NUM 1024 #define SIZE 32 #define SEP " "// 保存完整的命令行字符串 char cmd_line…...

TenserRT(四)在 PYTORCH 中支持更多 ONNX 算子

第四章&#xff1a;在 PyTorch 中支持更多 ONNX 算子 — mmdeploy 0.12.0 文档 PyTorch扩充。 PyTorch转换成ONNX&#xff1a; PyTorch有实现。PyTorch可以转化成一个或者多个ONNX算子。ONNX有相应算子。 如果即没有PyTorch实现&#xff0c;且缺少PyTorch与ONNX的映射关系&…...

前端高级面试题-浏览器

1 事件机制 事件触发三阶段 document 往事件触发处传播&#xff0c;遇到注册的捕获事件会触发 传播到事件触发处时触发注册的事件 从事件触发处往 document 传播&#xff0c;遇到注册的冒泡事件会触发 事件触发⼀般来说会按照上⾯的顺序进⾏&#xff0c;但是也有特例&#x…...

Mongodb 多文档聚合操作处理方法三(聚合管道)

聚合 聚合操作处理多个文档并返回计算结果。您可以使用聚合操作来&#xff1a; 将多个文档中的值分组在一起。 对分组数据执行操作以返回单个结果。 分析数据随时间的变化。 要执行聚合操作&#xff0c;您可以使用&#xff1a; 聚合管道 单一目的聚合方法 Map-reduce 函…...

Zabbix分布式监控配置和使用

目录 1 Zabbix监控的配置流程2 添加主机组3 添加模板4 添加主机5 配置图形6 配置大屏7 新建监控项7.1 简介7.2 添加监控项7.3 查看数据7.4 图表 8 新建触发器8.1 概述8.2 添加触发器8.3 显示触发器状态 1 Zabbix监控的配置流程 在Zabbix-Web管理界面中添加一个主机&#xff0c;…...

XCTF_very_easy_sql

简单的进行sql注入测试后发现不简单尝试一下按照提示 结合这句提示应该是内部访问&#xff0c;所以采用的手段应该是ssrf顺便看看包 唯一值得关注的是set-cookie说回ssrf唯一能使用的方式应该是Gopher协议找到了一个POST的python脚本 import urllib.parsepayload ""…...

[React]useMemoizedFn和useCallback对比

useMemoizedFn文档地址&#xff1a;https://ahooks.js.org/zh-CN/hooks/use-memoized-fn hooks组件内什么时候会更新自定义函数 在 React 中&#xff0c;自定义的 Hooks 内部的函数在以下常见的几种情况下会被重新赋值&#xff0c;导致更新引用&#xff1a; 组件重新渲染&…...

计算机毕设 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

文章目录 0 前言1.前言2.实现效果3.相关技术原理3.1卷积神经网络3.1YOLOV5简介3.2 YOLOv5s 模型算法流程和原理4.数据集处理3.1 数据标注简介3.2 数据保存 5.模型训练 6 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题…...

完全背包

动态规划解题步骤 : 动态规划问题一般从三个步骤进行考虑。 步骤一:集合和集合的状态 所谓的集合&#xff0c;就是一些方案的集合。 用 g[i][j] 表示从前 i 种物品中进行选择&#xff0c;且总体积不大于 j 的各个选法获得的价值的集合。注意&#xff1a;g[i][j] 不是一个数…...

【软件测试】webdriver常用API演示(Java+IDEA+chrome浏览器)

1.元素定位方法 对象的定位应该是自动化测试的核心&#xff0c;要想操作一个对象&#xff0c;首先应该识别这个对象。一个对象就是一个人一样&#xff0c;他会有各种的特征&#xff08;属性&#xff09;&#xff0c;如比我们可以通过一个人的身份证号&#xff0c;姓名&#xf…...

Linux安装MySQL 8.1.0

MySQL是一个流行的开源关系型数据库管理系统&#xff0c;本教程将向您展示如何在Linux系统上安装MySQL 8.1.0版本。请按照以下步骤进行操作&#xff1a; 1. 下载MySQL安装包 首先&#xff0c;从MySQL官方网站或镜像站点下载MySQL 8.1.0的压缩包mysql-8.1.0-linux-glibc2.28-x…...

多线程面试相关的一些问题

面试题 1. 常见的锁策略相关的面试题 2. CAS相关的面试题 3. Synchronized 原理相关的面试题 4. Callable 接口相关的面试题 1. 常见的锁策略 乐观锁 vs 悲观锁 悲观锁: 总是假设最坏的情况&#xff0c;每次去拿数据的时候都认为别人会修改&#xff0c;所以每次在拿数据的时候都…...

【使用维纳滤波进行信号分离】基于维纳-霍普夫方程的信号分离或去噪维纳滤波器估计(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Vue+axios如何解决跨域

1、为什么会产生跨域&#xff1f; 出于浏览器的同源策略限制。 同源策略&#xff08;Sameoriginpolicy&#xff09;是一种约定&#xff0c;是浏览器的一种安全机…...

网络安全系统中的守护者:如何借助威胁情报 (TI) 提高安全性

在这篇哈巴尔网站上的推文中&#xff0c;我们将解释 TI 缩写背后的含义、为什么需要它、Positive Technologies 收集哪些网络威胁数据以及如何帮助企业预防网络威胁。我们将以四种情况为例&#xff0c;说明公司如何使用 PT Threat Intelligence Feeds 来发现恶意活动并预防攻击…...

并发编程 - CompletableFuture

文章目录 Pre概述FutureFuture的缺陷类继承关系功能概述API提交任务的相关API结果转换的相关APIthenApplyhandlethenRunthenAcceptthenAcceptBoththenCombinethenCompose 回调方法的相关API异常处理的相关API获取结果的相关API DEMO实战注意事项 Pre 每日一博 - Java 异步编程…...

IPIDEA参展ChinaJoy!探索未来创新科技的峰会之旅

中国最大的国际数码互动娱乐展会ChinaJoy即将于7月28日在上海举行&#xff0c;届时将聚集全球来自22个国家和地区的领先科技公司、创业者和技术专家&#xff0c;为参观者呈现一系列引人入胜的展览和活动。而IPIDEA作为参展商之一&#xff0c;将为参观者带来一场关于数字科技的奇…...

2023最新ChatGPT商业运营版网站源码+支持ChatGPT4.0+GPT联网+支持ai绘画(Midjourney)+支持Mind思维导图生成

本系统使用Nestjs和Vue3框架技术&#xff0c;持续集成AI能力到本系统&#xff01; 支持GPT3模型、GPT4模型Midjourney专业绘画&#xff08;全自定义调参&#xff09;、Midjourney以图生图、Dall-E2绘画Mind思维导图生成应用工作台&#xff08;Prompt&#xff09;AI绘画广场自定…...

轮趣科技教育版ros小车键盘控制运动

我之前买的ros小车是单独买的底板&#xff0c;以为随便一个树莓派就可以&#xff0c;因为我以前有一个树莓派3B&#xff0c;后来买了单独的小车之后&#xff0c;发现只能使用树莓派4B&#xff0c;然后又单独买了一个树莓派4B&#xff0c;给装上镜像&#xff0c;安装ros-melodic…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...