【微信小程序-原生开发】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;
}
目录
相关文章
ly~
|
6天前
|
存储 供应链 小程序
除了微信小程序,PHP 还可以用于开发哪些类型的小程序?
除了微信小程序,PHP 还可用于开发多种类型的小程序,包括支付宝小程序、百度智能小程序、抖音小程序、企业内部小程序及行业特定小程序。在电商、生活服务、资讯、工具、娱乐、营销等领域,PHP 能有效管理商品信息、订单处理、支付接口、内容抓取、复杂计算、游戏数据、活动规则等多种业务。同时,在企业内部,PHP 可提升工作效率,实现审批流程、文件共享、生产计划等功能;在医疗和教育等行业,PHP 能管理患者信息、在线问诊、课程资源、成绩查询等重要数据。
ly~
38 6
|
6天前
|
JSON 小程序 前端开发
创建一个属于自己的小程序(注册开发账号)
介绍如何创建微信小程序账号,包括注册流程、下载安装微信开发者工具、创建项目以及项目结构介绍。
创建一个属于自己的小程序(注册开发账号)
ly~
|
6天前
|
开发框架 小程序 前端开发
抖音小程序的开发难度大吗?
抖音小程序的开发难度因人而异,主要取决于开发者经验、技能及功能需求。技术上需掌握前端技术及抖音开发框架,了解平台生态与规则;设计上需符合用户审美和习惯,具备创新性和实用性。此外,严格的审核标准和激烈的市场竞争增加了开发难度,开发者需制定有效推广策略并持续优化小程序以保持竞争力。
ly~
37 4
|
6天前
|
小程序 JavaScript API
微信小程序开发学习之页面导航(声明式导航和编程式导航)
这篇文章介绍了微信小程序中页面导航的两种方式:声明式导航和编程式导航,包括如何导航到tabBar页面、非tabBar页面、后退导航,以及如何在导航过程中传递参数和获取传递的参数。
微信小程序开发学习之页面导航(声明式导航和编程式导航)
|
2月前
|
小程序 JavaScript
Taro@3.x+Vue@3.x+TS开发微信小程序,使用轮播图
本文介绍了使用 Taro 和 Vue 创建轮播组件的两种方法:一是通过 `&lt;swiper&gt;` 实现,二是利用 Nut UI 的 `&lt;nut-swiper&gt;` 组件实现。
Taro@3.x+Vue@3.x+TS开发微信小程序,使用轮播图
|
26天前
|
移动开发 小程序 JavaScript
uni-app开发微信小程序
本文详细介绍如何使用 uni-app 开发微信小程序,涵盖需求分析、架构思路及实施方案。主要功能包括用户登录、商品列表展示、商品详情、购物车及订单管理。技术栈采用 uni-app、uView UI 和 RESTful API。文章通过具体示例代码展示了从初始化项目、配置全局样式到实现各页面组件及 API 接口的全过程,并提供了完整的文件结构和配置文件示例。此外,还介绍了微信授权登录及后端接口模拟方法,确保项目的稳定性和安全性。通过本教程,读者可快速掌握使用 uni-app 开发微信小程序的方法。
57 3
|
2月前
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,设置转发分享
本文介绍了Taro中`useShareAppMessage`的使用方法,需在页面配置`enableShareAppMessage: true`并重新编译。
Taro@3.x+Vue@3.x+TS开发微信小程序,设置转发分享
|
2月前
|
小程序 数据安全/隐私保护
Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装
在 `src/http` 目录下创建 `request.ts` 文件,并配置 Taro 的网络请求方法 `Taro.request`,支持多种 HTTP 方法并处理数据加密。
Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装
|
2月前
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,上传文件
本文介绍如何在Taro项目中使用Nut UI的`&lt;nut-uploader/&gt;`组件实现图片上传功能,并通过示例代码展示了自定义上传逻辑的方法。
Taro@3.x+Vue@3.x+TS开发微信小程序,上传文件
|
2月前
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,根据系统主题展示不同样式(darkMode)
本文介绍如何在Taro项目中配置深色模式。通过在`src/app.config.ts`设置`darkmode`选项和在`theme.json`中定义主题变量,可以实现跟随系统主题的界面风格切换。
Taro@3.x+Vue@3.x+TS开发微信小程序,根据系统主题展示不同样式(darkMode)

热门文章

最新文章

下一篇
无影云桌面