微信小程序云开发——常用功能1:使用云函数获取用户openid,并使用1.setData加载到视图层 和2.setStorage缓存到本地

微信小程序云开发——常用功能1:使用云函数获取用户openid,并使用1.setData加载到视图层 和2.setStorage缓存到本地

——今天我们先说一下如何使用微信小程序云开发获取用户openid,目的是利用获取用户openid这个重要的功能,使用我们的第一个云函数。

先不上讲解,避免大家乱套,先直接上一套代码

html:

<!--pages/index/index.wxml-->
<text>看,我要在这里显示openid"{{openid}}"</text>

js:

// pages/index/index.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    openid: "待会这里变成openid"
  },

  
  onLoad(){
    var that = this
    wx.cloud.callFunction({
      // 云函数名称
      name: 'getOpenid',
      // 云函数获取结果
      success: function(res) {
        console.log("云函数调用成功!",res)
        
        //抓取数据
        that.setData({
          openid: res.result.openid
        })
        //将数据缓存到本地
        wx.setStorage({
          data: that.data.openid,
          key: 'openid',
        })
        //
        let opid = wx.getStorageSync('openid')
        console.log(opid)
      },
      fail: function(error) {
        console.log("云函数调用失败!",error)
      },
    })
  }

})

云函数index.js:

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

  return {
    event,
    openid: wxContext.OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
  }
}
下面我们开始讲解

微信小程序云开发是什么:
————
· 开发者可以使用云开发开发微信小程序、小游戏,无需搭建服务器,即可使用云端能力。
· 云开发为开发者提供完整的原生云端支持和微信服务支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即可实现快速上线和迭代,同时这一能力,同开发者已经使用的云服务相互兼容,并不互斥。
· 微信小程序团队在其中给我们提供了几大基础能力支持:云函数、云数据库、云储存、云调用和微信支付。
· 大家可以到微信开放文档了解详细内容,大家今后需要多多关注官方文档。

微信小程序中openid是什么:
————
用户openid是小程序针对每一位用户,在访问小程序时所生成的一个身份识别的id。类似生活中我们的身份证号,每个openid只对应一位用户。

openid的作用:
————
用户openid的特性是精准且唯一,在数据整合等场景可以使用openid将多种数据分发给每一位用户。例如我们常见的“我的”页面中,呈现的都是我们自己相关的数据。
同时,类似小程序支付功能设置时候,小程序官方会将openid设置为必传项,防止交易过程发生指向性错误。
————小程序-“我的”界面

基本了解后我们开始创建本次项目!

打开微信开发者工具,新建项目选择“小程序·云开发”。
根据开发者工具要求创建目录,输入AppID(去微信公众平台小程序号的设置中查找),也可使用测试号。
微信开发者工具-新建项目界面
进入开发界面
微信开发者工具开发界面
到app.json新建页面
在“pages”里输入“page/文件夹名称/文件名称”点击编译(Ctrl+S)就可以自动在pages文件夹中生成页面文件夹,如果没有生成,大家就手动新建一下。
在这里插入图片描述

上代码:

wxml:

<!--pages/index/index.wxml-->
<text>看,我要在这里显示openid"{{openid}}"</text>

其中{{}}作用是获取js中data视图层数据,使其显示在视图页面,效果
在这里插入图片描述
js:

Page({

  /**
   * 页面的初始数据
   */
  data: {
    openid: "待会这里变成openid"
  }

})

我设置了一个初始数据,让新手朋友们了解视图层数据在哪里。这时,我们到调试器中AppData中查找数据,此时数据已生成。
调试器中AppData
同时页面也已经显示。
在这里插入图片描述

现在我们开始获取openid
创建云函数

在刚在指向的云函数文件夹中创建云函数,右键文件夹,新建node.js云函数,我给它命名为getOpenid在这里插入图片描述
这时候设置index.js就可以了,但是强大的微信团队已经给我们自动生成了一些信息,仔细看,里边就有我们需要的openid。
云函数index.js:

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

  return {
    event,
    openid: wxContext.OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
  }
}

而且这就是我们云函数的基本格式,包括云函数入口文件和云函数入口函数,缺一不可,特别给大家去掉内容看一下基本格式。

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()

// 云函数入口函数
exports.main = async (event, context) => {
 
}

注意:在我们要使用云函数或者每次编辑完云函数之后,都需要右键这个云函数(这里是getOpenid文件夹),选择第三项,上传并部署(云端安装依赖),进行云函数的上传并部署。直到出现部署成功提示,如下图,才可正常使用云函数。
————
在这里插入图片描述

调用云函数,获取用户的openid

回到page页面中的js,开始调用云函数。
onLoud()函数,生命周期函数–监听页面加载 ,就是在页面加载完成后,开始运行其中的逻辑函数。

// pages/index/index.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    openid: "待会这里变成openid"
  },

  
  onLoad(){
    wx.cloud.callFunction({
      // 云函数名称
      name: 'getOpenid',
      // 云函数获取结果
      success: function(res) {
        console.log("云函数调用成功!",res)
      },
      fail: function(error) {
        console.log("云函数调用失败!",error)
      },
    })
  }

})

编译,此时查看调试器。显示云函数调用成功,点开发现openid在result下面。
在这里插入图片描述

使用this.setdata()函数

此时我们抓取openid,同时把它放到本地data逻辑层中。使用this.setdata()函数,setdata函数的作用是将逻辑层数据发送到视图层。

// pages/index/index.js
let openid = '';
Page({

  /**
   * 页面的初始数据
   */
  data: {
    openid: "待会这里变成openid"
  },

  
  onLoad(){
  	//由于this指向的是相对于wx:request()的当前对象,在request全局使用,
  	//所以我们必须设置一个相对于当前对象的变量that,将this的值赋给that,
  	//才可以在onloud()页面加载(当前对象)中正常运作函数
    var that = this
    
    wx.cloud.callFunction({
      // 云函数名称
      name: 'getOpenid',
      // 云函数获取结果
      success: function(res) {
        console.log("云函数调用成功!",res)
        
        //利用相对于当前对象的that抓取数据
        that.setData({
          openid: res.result.openid
        })
      },
      fail: function(error) {
        console.log("云函数调用失败!",error)
      },
    })
  }

})

此时编译后,视图层数据openid值发生了变化:
在这里插入图片描述
同时,页面也发生了变化:
在这里插入图片描述

使用wx.setStorage()函数

为了方便我们的使用,我们可以使用wx.setStorage(Object object)函数,将数据存储在本地缓存中指定的 key 中,方便日后我们直接查找该用户的openid。

wx.setStorage({
          data: 'data',
          key: 'key',
        })
// pages/index/index.js
let openid = '';
Page({

  /**
   * 页面的初始数据
   */
  data: {
    openid: "待会这里变成openid"
  },

  
  onLoad(){
    var that = this
    wx.cloud.callFunction({
      // 云函数名称
      name: 'getOpenid',
      // 云函数获取结果
      success: function(res) {
        console.log("云函数调用成功!",res)
        
        //抓取数据
        that.setData({
          openid: res.result.openid
        })
        //将数据缓存到本地
        wx.setStorage({
          data: that.data.openid,
          key: 'openid',
        })
        //从本地缓存拉取数据
        let opid = wx.getStorageSync('openid')
        console.log(opid)
      },
      fail: function(error) {
        console.log("云函数调用失败!",error)
      },
    })
  }

})

在这里插入图片描述
日后我们需要获取当前用户openid时,即可在所有页面调用wx.getStorageSync(‘key’)函数

	let opid = wx.getStorageSync('openid')
    console.log(opid)

我不是专业程序工作者,在这里是把我的小程序设计经验分享给大家。
如果其中有用词不当的地方,请大家留言指正,我们共同学习。
更多设计、功能的学习经验,大家也可以去我的公众号查看!
————
在这里插入图片描述

<think>好的,用户让我介绍一下装修管理系统微信小程序的代码,我需要先理解这个系统的核心功能。装修管理通常涉及项目进度、材料管理、工人调度、客户沟通等模块,所以小程序可能需要包含这些部分。 接下来,我需要考虑微信小程序的基本结构,比如使用的技术栈,前端可能用WXMLWXSS,后端可能搭配云开发或者自己的服务器。数据库方面,微信云开发用的比较多,或者MySQL等。然后,用户可能想知道代码结构,比如页面组成、API调用、数据交互方式。 还要考虑权限管理,比如客户、设计师、施工队不同的访问权限。可能需要使用微信openid来做用户区分。另外,支付功能可能涉及在线签约或材料购买,需要集成微信支付接口。 用户可能对具体的代码示例感兴趣,比如如何创建一个项目,如何更新进度,或者如何实现消息通知。需要举一些关键模块的代码片段,比如使用云函数处理数据,或者前端页面的数据绑定。 同时,要提到可能用到的第三方库或框架,比如Vant Weapp组件库来加快开发。安全方面,需要注意数据加密用户认证,防止信息泄露。 最后,总结一下开发这样的系统需要注意的地方,比如性能优化、用户体验、测试等,确保小程序运行流畅,满足不同用户的需求。可能还需要提到扩展性,方便未来添加新功能。</think>以下为装修管理系统微信小程序代码的详细介绍: ▌一、系统核心功能模块 1. 用户功能: - 项目进度跟踪(甘特图展示) - 材料选购清单(带价格对比) - 工地实时播报(图片/视频上传) - 在线沟通平台(集成IM即时通讯) - 验收报告生成(PDF导出) 2. 施工方功能: - 任务派发系统 ```javascript // 任务分配云函数 exports.main = async (event, context) => { const db = cloud.database() await db.collection('tasks').add({ data: { projectId: event.projectId, workerId: event.workerId, taskContent: event.content, deadline: new Date(event.deadline), status: 0 // 0-待接受 1-进行中 2-已完成 } }) return { code: 200, msg: "任务创建成功" } } ``` ▌二、技术架构 1. 前端架构: - 视图层:WXML + WXSS + JavaScript - 组件库:Vant Weapp + ECharts for Weixin - 状态管理:Westore 或 MobX 2. 后端架构: - 微信云开发(推荐方案): ```bash ├── cloudfunctions # 云函数目录 │ ├── payment # 支付相关 │ ├── sms # 消息通知 │ └── statistics # 数据统计 ├── database # JSON数据库设计 ├── storage # 文件存储规则 ``` ▌三、关键代码示例 1. 项目进度甘特图(WXML): ```html <ec-canvas id="mychart-dom-gantt" canvas-id="ganttChart"></ec-canvas> ``` 2. 材料比价功能JS逻辑): ```javascript Page({ data: { materials: [] }, onLoad() { wx.cloud.callFunction({ name: 'materialCompare', success: res => { this.setData({ materials: res.result.data }) } }) } }) ``` ▌四、数据库设计要点 1. 项目集合设计: ```json { "_id": "项目ID", "name": "项目名称", "owner": "openid", "timeline": [ { "stage": "水电改造", "startDate": "2023-08-01", "endDate": "2023-08-05", "progress": 75 } ], "budget": 150000 } ``` ▌五、安全防护措施 1. 接口权限校验: ```javascript // 云函数入口校验 const app = require('tcb-admin-node') app.init({ env: '您的环境ID' }) exports.main = async (event, context) => { const { openId } = app.auth().getUserInfo() if (!openId) return { code: 403, msg: "未授权访问" } // 后续业务逻辑... } ``` ▌六、部署注意事项 1. 性能优化方案: - 使用CDN加速建材图片加载 - 实施分页加载策略(每页不超过20条数据) - 启用云数据库索引优化查询 2. 典型项目结构: ```bash ├── pages │ ├── index # 首页 │ ├── project # 项目管理 │ └── material # 材料市场 ├── components # 公共组件 │ ├── progress-bar # 进度条组件 │ └── image-upload # 图片上传组件 └── utils # 工具库 ├── api.js # 接口封装 └── auth.js # 权限验证 ``` 建议开发时使用微信开发者工具的云开发功能,可快速实现: 1. 自动伸缩的Serverless架构 2. 内置的用户登录体系(openid自动获取) 3. 免费的初期资源配额(适合中小型项目) 实际开发中需特别注意《微信小程序运营规范》,在材料比价等功能中需避免直接价格对比,可采用「参考价区间」等方式合规实现。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最强的森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值