首页 > 编程语言 >Taro 小程序扫二维码跳转到指定页面

Taro 小程序扫二维码跳转到指定页面

时间:2023-07-20 11:28:30浏览次数:43  
标签:Taro url optionsq 二维码 let 跳转 链接 页面

小程序扫码登录,需要在微信小程序开发管理->开发设置->扫普通链接二维码打开小程序 去添加对应的链接,然后根据链接动态动态生成二维码,然后使用微信扫码的即可跳转到小程序指定页面,具体添加链接方式,请自行百度

这里主要介绍两个东西
1.Taro小程序下根据链接动态生成二维码
2.扫码跳转到小程序后参数处理和页面跳转的逻辑

1.在页面中生存二维码

  • 先添加taro-code库
npm install --save taro-code
or
yarn add taro-code
  • 引入taro-code中的二维码组件,在需要得地方和位子去渲染页面,qrUrl为二维码信息
import { QRCode } from 'taro-code'
<QRCode
  style={{ marginTop: '10px' }}
  text={qrUrl}
  size={150}
  showMenuByLongpress
/>

2.扫码跳转到小程序
我这里是配置的外部链接是直接链接到首页,到了首页后根据传的参数去判断跳转到指定页面

  • 首页加载出来后拿到option.q里包含的信息,其实这个就是我们前面传入的链接url
  componentDidMount() {
    // this.setState({
    //   optionsq: 'www.baidu.com/saasqrcode/?type=employeeaudit&target_id=694803'
    // })
    const options = getCurrentInstance().router?.params || {}
    if (options.q && options.q != "undefined") {
      this.setState({
        optionsq: options.q
      })
    }
  }
  • 在页面出现的时候去处理链接
componentDidShow() {
  this.handleOtherLink()
}

handleOtherLink = async () => {
  let { optionsq } = this.state
  if (optionsq) {
    // 判断登录
    const token = getGlobalData('token')
    if (!token) {
      /// 第一次跳登录,第二次则不再跳登录 忽略信息
      if (this.state.loaded) {
        this.setState({
          optionsq: ''
        })
        return
      }
      /// 去登录页 并且可以返回
      this.setState({ loaded: true })
      Taro.navigateTo({
        url: '/pages/loginByPhoneNo/index?back=1'
      })
      return
    }
    console.log("扫码链接:" + optionsq)

    //获取到二维码原始链接内容
    const qrUrl = decodeURIComponent(optionsq)
    console.log(qrUrl)
    //此处就是我们要获取的参数 json,通过方法解析
    let jsonUrl = getUrlParams(qrUrl)
    let type = jsonUrl?.type || ''
    let depot_id = jsonUrl?.target_id || ''

    if (type === 'employeeaudit') {
      let res = await qrcodeSwitchDepot({ depot_id }).catch(err => {
        this.setState({
          optionsq: ''
        })
        Taro.showToast({
          title: err.data.message,
          icon: 'none',
          mask: true
        })
      })
      let data = res?.data?.data
      if (data) {
        let { is_manage, manager_name, manager_mobile } = data
        ///1.是管理员跳转到管理员页面
        if (is_manage === 1) {
          let userInfo = await getStorageUserInfo(false)

          if (!userInfo) {
            userInfo = await getStorageUserInfo(true).catch(err => null)
          }
          let name = userInfo?.station_info?.contact_name || ''
          Taro.navigateTo({
            url: `/pages/minePackage/staffManager/index?name=${name}`
          })
        } else {
          // 2.没权限 去没有权限页面
          Taro.navigateTo({
            url: `/pages/minePackage/staffCheckNoPermission/index?name=${manager_name}&mobile=${manager_mobile}`
          })
        }
      }
      this.setState({
        optionsq: ''
      })
    }
  }
}

export const getUrlParams = (url) => {
  let params:any = {}
  if (url.indexOf("#") != -1) {
      const str = url.split("#")[1]
      const strs = str.split("&")
      for (let i = 0; i < strs.length; i++) {
          params[strs[i].split("=")[0]] = decodeURI(strs[i].split("=")[1])
      }
  } else if (url.indexOf("?") != -1) {
      const str = url.split("?")[1]
      const strs = str.split("&")
      for (let i = 0; i < strs.length; i++) {
          params[strs[i].split("=")[0]] = decodeURI(strs[i].split("=")[1])
      }
  }
  return params
}

这里解释一下为什么不把处理链接的逻辑放在页面加载componentDidMount中,主要原因是这里考虑第一次扫码进入如果没有登录,那么如果这个时候去跳转登录页,登录完成回来后首页也不会重新刷新,那么处理链接的逻辑只会调用一次,这样扫码传过来的数据就丢失了,我这里放在页面每次出来的时候去处理链接,如果链接处理好了,就直接清空存储的optionq的数据,那么切换页面在进来,就不会再出来扫码信息了

标签:Taro,url,optionsq,二维码,let,跳转,链接,页面
From: https://www.cnblogs.com/qqcc1388/p/17567787.html

相关文章

  • Taro 小程序自定义热门城市选择页
    先上一下大致效果由于业务需要一个单独全国城市筛选页面,然后就网上找了一波,发现没有特别合适的,于是就手动撸一个,需要当前页面具备以下功能:1.定位当前所在城市2.展示热门城市信息3.清空当前城市选择4.支持本地快捷搜索5.列表数据支持分页展示(主要是城市数据量太大,页面渲染......
  • taro框架使用经验
    就是京东那个taro框架1. taro3.x的Picker(2023-7-20)默认会报错 TypeError:Cannotreadpropertiesofundefined(reading'split')<Pickermode='date'onChange={this.onDateChange}><ViewclassName='picker'>当前选择:{this.......
  • 前端Vue自定义开屏启动广告组件,点击广告图跳转广告详情
    随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单独开发,单独维护,而且他们之间可以随意的进行组合。大大提升开发效率......
  • element-ui pagination分页组件 点击一次页面跳转触发两次current-change请求
    在项目中使用element编写前端页面时,发现在使用pagination分页组件的时候,出现一个坑。情况是每一次点击页面切换,都会重复触发两次页面切换current-change事件。无论是点击后面的页码或者是下一页或者是跳转到某个页面都会触发两次。第一次正常触发,第二次触发后会返回首页。经过多......
  • IOS开发-OC页面跳转传递参数
    使用OC进行IOS开发页面跳转传递参数的思路:1.在AppDelegate.h中定义一个可变词典2.在AppDelegate.m中初始化该可变词典3.向字典中添加要传递的参数4.在目标页面拿到参数 1.在AppDelegate.h中定义一个可变词典#import<UIKit/UIKit.h>@interfaceAppDelegate:UIRespo......
  • 若依登录超时默认跳转登录页
    问题若依登录超时,跳转/index页,但本项目中该页为空白页。解决因此,需要修改跳转为登录页。参考链接JavaScript---location.href的用法登录超时,返回到登录页面vue总结在js文件中跳转,除了引入router并使用router.push()之外,还可以直接location.href=url。方式一:......
  • 遇到了一个需要java生成二维码,支持扫码枪扫描的需求
    1,需求是生产二维码,加入到正文和表单中2,首先能生成二维码,其次就是把二维码插入到表单和正文了,插入到表单设计到一些前端知识暂不分享3,把二维码插入正文,正文是用的word文档,后续分享如何操作 生成二维码的样式应该是pdf417这种码,而不是qrcode普通的二维码#需要引入依赖jar包......
  • 小程序二维码配置+前端生成带参二维码+数据加密解密+地址逆解析
    这是一个关于用户回访调查的小程序,技术栈vue3+uniapp。遇到的知识点如下:1.微信公众平台认证的小程序账号只对应一个小程序,一个邮箱只能绑定一个小程序,如果企业之前有认证过微信公众号的,可以复用微信公众号的资料认证小程序,这样就不需要另外收认证费。(复用公众号资料认证小程序流......
  • Nginx双层域名时 iframe嵌入/跳转页面的处理过程
    Nginx双层域名时iframe嵌入/跳转页面的处理过程背景两年前在上一家公司内遇到一个Nginx的问题当时的场景是双层nginx代理时(一层域名侧,一层拆分微服务的网关层)程序里面会打开一个嵌套的iframe,便于进行缩放.但是此时因为只能就近获取第二层反向代理的upstream的域......
  • Angular 应用里产品列表行项目点击后跳转到产品明细页面的实现
    需求如标题所示,下面是详细步骤介绍。首先,你需要确保你的环境中已经安装了AngularCLI。如果没有,可以通过以下命令安装:npminstall-g@angular/cli然后你可以创建一个新的Angular项目:ngnewproduct-appcdproduct-app创建一个名为product的组件来显示产品列表:nggenerat......