【微信小程序-原生开发】TDesign 实战模板——个人信息编辑页

简介: 【微信小程序-原生开发】TDesign 实战模板——个人信息编辑页

效果预览

技术要点

TDesign 表单组件的使用,详见官方文档

https://tdesign.tencent.com/miniprogram/components/input


地点的搜索,详见

https://sunshinehu.blog.csdn.net/article/details/129250827


地图导航,详见

https://blog.csdn.net/weixin_41192489/article/details/129255263

完整代码实现

<t-cell bindtap="editInfo" title="{{userInfo.nickname}}" description="{{userInfo.slogan || '诚挚缘分,成就梦想'}}" arrow>
  <view class="avatar" slot="left-icon">
    <t-avatar image="{{userInfo.avatarUrl}}" icon="user" />
  </view>
</t-cell>
  editInfo: function () {
    wx.navigateTo({
      url: '/pages/me/infoForm/index'
    })
  },

个人信息编辑页

pages\me\infoForm\index.wxml

<t-input bindclear="inputChange" bindchange="inputChange" data-prop='nickname' clearable value="{{userInfo.nickname}}" label="昵称:" placeholder="请输入" />

<radio-group class="radioBox" bindchange="inputChange" data-prop='gender'>
  <radio color='#027CBE' checked="{{userInfo.gender === '1'}}" value='1'>男</radio>
  <radio color='pink' checked="{{userInfo.gender === '2'}}" value='2'>女</radio>
</radio-group>

<t-input bindclear="inputChange" bindchange="inputChange" data-prop='status' clearable value="{{userInfo.status}}" label="近况:" placeholder="请输入当前状态/正在忙的事情" />

<t-input bindclear="inputChange" bindchange="inputChange" data-prop='phone' clearable value="{{userInfo.phone}}" label="手机:" placeholder="请输入手机号" />

<t-input bindclear="inputChange" bindchange="inputChange" data-prop='wechatNo' clearable value="{{userInfo.wechatNo}}" label="微信:" placeholder="请输入微信号" />

<t-input bindclear="inputChange" bindchange="inputChange" data-prop='email' clearable value="{{userInfo.email}}" label="邮箱:" placeholder="请输入电子邮箱" />

<t-input bindclear="inputChange" bindchange="inputChange" data-prop='slogan' clearable value="{{userInfo.slogan}}" label="格言:" placeholder="请输入" />

<t-input bindclear="inputChange" bindchange="inputChange" data-prop='dream' clearable value="{{userInfo.dream}}" label="梦想:" placeholder="请输入" />

<t-input bindclear="inputChange" bindchange="inputChange" data-prop='hobby' clearable value="{{userInfo.hobby}}" label="爱好:" placeholder="请输入" />

<t-input bindclear="inputChange" bindchange="inputChange" data-prop='skill' clearable value="{{userInfo.skill}}" label="擅长:" placeholder="请输入" />

<t-input disabled bindtap="searchPlace" value="{{placeInfo.title}}" label="住址:" placeholder="请选择">
  <t-icon capture-catch:tap="getLocation" slot="suffix" size='26' name="location" />
</t-input>

<t-textarea bindchange="inputChange" data-prop='brief' value="{{userInfo.brief}}" label="个人简介:" placeholder="请输入" maxlength="200" disableDefaultPadding="{{true}}" indicator t-class="textareaClass" />

<t-button bindtap="save" theme="primary" size="large" block t-class="fixedBottomBtn">保存</t-button>

pages\me\infoForm\index.json

{
  "navigationBarTitleText": "修改个人信息",
  "usingComponents": {
    "t-input": "tdesign-miniprogram/input/input",
    "t-button": "tdesign-miniprogram/button/button",
    "t-icon": "tdesign-miniprogram/icon/icon",
    "t-textarea": "tdesign-miniprogram/textarea/textarea"
  }
}

pages\me\infoForm\index.js

Page({
  data: {
    userInfo: {}, // 用户信息
    placeInfo: null // 地址信息
  },
  // 生命周期-页面加载时,获取当前用户信息
  onLoad() {
    let userInfo = wx.getStorageSync('userInfo')
    this.setData({
      userInfo: userInfo,
      placeInfo: userInfo.placeInfo
    })
  },
  // 表单信息发生改变时,同步更新变量 userInfo
  inputChange: function (e) {
    let prop = e.currentTarget.dataset.prop
    let value = e.detail.value
    this.data.userInfo[prop] = value
    this.setData({
      userInfo: this.data.userInfo
    })
  },
  // 跳转到公用的地点搜索页,搜索地址(以便获取含经纬度的地址信息)
  searchPlace() {
    wx.navigateTo({
      url: '/pages/common/searchPlace/index'
    })
  },
  // 地图导航(地址信息中必须有经纬度)
  getLocation() {
    let placeInfo = this.data.placeInfo
    if (!placeInfo) {
      this.searchPlace()
      return
    }
    wx.openLocation({
      address: placeInfo.title,
      name: placeInfo.title,
      longitude: +placeInfo.longitude,
      latitude: +placeInfo.latitude,
      scale: 18
    })
  },
  // 保存更新用户信息
  save: function () {
    let nickname = this.data.userInfo.nickname
    if (!nickname) {
      wx.showToast({
        icon: 'none',
        title: "昵称不能为空",
      })
      return
    }

    let id = this.data.userInfo._id
    let placeInfo = this.data.placeInfo
    if (placeInfo) {
      this.setData({
        // 给对象的指定属性赋值
        'userInfo.placeInfo': placeInfo
      })
    }

    // 对象深拷贝
    let newData = JSON.parse(JSON.stringify(this.data.userInfo))

    // 删除多余的表单字段
    delete newData._openid
    delete newData._id
    wx.cloud.database().collection('user').doc(id).update({
      data: {
        ...newData,
        updateTime: new Date()
      }
    }).then(
      res => {
        // 更新全局的用户信息
        wx.setStorageSync('userInfo', this.data.userInfo)
        wx.showToast({
          icon: "success",
          title: `保存成功`,
        })
        // 等待一会后跳转页面,否则无法看到保存成功的提示
        setTimeout(() => {
          wx.navigateBack()
        }, 1000)
      }
    )
  },
})

pages\me\infoForm\index.wxss

.fixedBottomBtn {
  background-color: #027CBE !important;
  border-radius: 0 !important;
  position: fixed !important;
  bottom: 0rpx;
  z-index: 999;
}

.radioBox {
  padding: 30rpx;
  display: flex;
  justify-content: space-around;
}

.textareaClass {
  height: 324rpx;
}

.t-textarea__label {
  font-size: 30rpx !important;
  padding-bottom: 30rpx !important;
}

/* 被禁用输入框,强制黑色 */
.t-input__control--disabled {
  color: black !important;
}
目录
相关文章
预约按摩小程序开发,为什么很多上门按摩平台根本招聘不到优秀技师?
上门按摩平台面临招不到优秀技师的问题,主要原因是平台众多,技师选择多样。为解决此问题,平台可引入技师等级制度,根据订单数量和好评率划分高、低等级技师。高等级技师可享受70%-90%的高提成及首页推荐,这不仅能激励技师的积极性,还能帮助平台筛选出优质技师,提升服务质量和口碑,形成良性循环。
|
12天前
|
人工智能 小程序
【一步步开发AI运动小程序】十五、AI运动识别中,如何判断人体站位的远近?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,无需后台支持,具有快速、体验好、易集成等特点。本文介绍如何利用插件判断人体与摄像头的远近,确保人体图像在帧内的比例适中,以优化识别效果。通过`whole`检测规则,分别实现人体过近和过远的判断,并给出相应示例代码。
|
6天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十七、如何识别用户上传视频中的人体、运动、动作、姿态?
【云智AI运动识别小程序插件】提供人体、运动、姿态检测的AI能力,支持本地原生识别,无需后台服务,具有速度快、体验好、易集成等优点。本文介绍如何使用该插件实现用户上传视频的运动识别,包括视频解码抽帧和人体识别的实现方法。
|
11天前
|
人工智能 小程序 UED
【一步步开发AI运动小程序】十六、AI运动识别中,如何判断人体站位?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,本地引擎无需后台支持,具备快速、体验好、易集成等优势。本文介绍如何利用插件的`camera-view`功能,通过检测人体站位视角(前、后、左、右),确保运动时的最佳识别率和用户体验。代码示例展示了如何实现视角检查,确保用户正或背对摄像头,为后续运动检测打下基础。
|
25天前
|
人工智能 小程序 IDE
【一步步开发AI运动小程序】九、姿态辅助调试桌面工具的使用
随着AI技术的发展,各大厂商推出的AI运动APP如“乐动力”、“天天跳绳”等,使云上运动会、线上健身等概念大热。本文将指导你如何利用“云智AI运动识别小程序插件”,在微信小程序中实现类似功能,包括工具搭建、服务启动及数据回传等步骤,助力开发者高效开发AI运动小程序。
【一步步开发AI运动小程序】九、姿态辅助调试桌面工具的使用
|
17天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十三、自定义一个运动分析器,实现计时计数02
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,详细解析了俯卧撑动作的检测规则构建与执行流程,涵盖卧撑和撑卧两个姿态的识别规则,以及如何通过继承`sports.SportBase`类实现运动分析器,适用于小程序开发者。
|
17天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十二、自定义一个运动分析器,实现计时计数01
随着AI技术的发展,AI运动APP如雨后春笋般涌现,如“乐动力”、“天天跳绳”等,推动了云上运动会、线上健身等热潮。本文将指导你从零开始开发一个AI运动小程序,利用“云智AI运动识别小程序插件”,介绍运动识别原理、计量方式及运动分析器基类的使用,帮助你在小程序中实现运动计时和计数功能。下篇将继续探讨运动姿态检测规则的编写。
|
11天前
|
移动开发 小程序 PHP
校园圈子论坛系统采取的PHP语音和uni账号开发的小程序APP公众号H5是否只需要4800元?是的,就是只需要4800元
关于校园圈子论坛系统采用PHP语言和uni-app开发的小程序、APP、公众号和H5是否仅需4800元这个问题,实际上很难给出一个确定的答案。这个价格可能受到多种因素的影响
47 8
|
28天前
|
人工智能 JSON 小程序
【一步步开发AI运动小程序】八、利用body-calc进行姿态识别
随着AI技术的发展,各大厂商推出的如“乐动力”、“天天跳绳”等AI运动APP,使得云上运动会、线上健身等概念风靡一时。本文将引导读者从零开始开发一个AI运动小程序,使用“云智AI运动识别小程序插件”,介绍人体姿态检测规则、规则编写语法、执行检测规则运算及姿态检测实战等内容,助力开发者轻松实现AI运动小程序的开发。
【一步步开发AI运动小程序】八、利用body-calc进行姿态识别
|
7天前
|
人工智能 小程序 数据处理
uni-app开发AI康复锻炼小程序,帮助肢体受伤患者康复!
近期,多家康复机构咨询AI运动识别插件是否适用于肢力运动受限患者的康复锻炼。本文介绍该插件在康复锻炼中的应用场景,包括康复运动指导、运动记录、恢复程度记录及过程监测。插件集成了人体检测、姿态识别等功能,支持微信小程序平台,使用便捷,安全可靠,帮助康复治疗更加高效精准。