当前位置:   article > 正文

uniapp vite 路由跳转、登录模块封装(非无感登录)_uniapp vite router

uniapp vite router

需求

  1. 将uniapp的路由跳转promise化
  2. navigateTo接受后端返回的url,需要自动解析跳转模式
  3. 所有的路由跳转都要先检测用户是否已登录
    1)、如果未登录,打开登录弹框,用户授权登录,登录成功后要自动完成用户的上一次操作,无需用户再次点击跳转
    2)、如果已登录,跳转对应的页面

在这里插入图片描述

实现

  1. 封装路由相关函数
import { useStore } from '@/store'
import { InjectionKey } from 'vue'
export type SetLoginCallback = (params: {
  loginCallbackMethod: Function
  loginCallbackParams: any[]
}) => void
export const SetLoginCallbackKey: InjectionKey<SetLoginCallback> = Symbol('setLoginCallback')
type routerLink = 'navigateTo' | 'redirectTo' | 'reLaunch' | 'switchTab'

export default function () {
  const _this = (getCurrentInstance() as any).ctx
  const store = useStore()
  const setLoginCallback = inject(SetLoginCallbackKey)

  const navigateTo = (url: string, events?: any): any => {
    return new Promise((resolve, reject) => {
      if (!url) {
        return reject(new Error('路由为空'))
      } else if (/^wx/.test(url)) {
        return navigateToMiniProgram({
          appId: url,
        })
      } else if (/^http/.test(url)) {
        url = `/pages/web-view/index?url=${url}`
      }
      uni.navigateTo({
        url,
        events,
        success: (res) => {
          resolve(res.eventChannel)
        },
        fail: () => {
          /*尝试跳转到tab页面*/
          return switchTab(url)
        },
      })
    })
  }

  /*跳转tab*/
  const switchTab = (url: string): any => {
    return new Promise((resolve, reject) => {
      uni.switchTab({
        url,
        success: (res) => resolve(res),
        fail: (err) => reject(err),
      })
    })
  }

  /*关闭当前跳转其他*/
  const redirectTo = (url: string): any => {
    return new Promise((resolve, reject) => {
      uni.redirectTo({
        url,
        success: (res) => resolve(res),
        fail: (err) => reject(err),
      })
    })
  }

  /*关闭所有跳转其他*/
  const reLaunch = (url: string): any => {
    return new Promise((resolve, reject) => {
      uni.reLaunch({
        url,
        success: (res) => resolve(res),
        fail: (err) => reject(err),
      })
    })
  }

  /*跳转到其他小程序*/
  const navigateToMiniProgram = (options: UniApp.NavigateToMiniProgramOptions): any => {
    return new Promise((resolve, reject) => {
      uni.navigateToMiniProgram({
        ...options,
        success: (res) => resolve(res),
        fail: (err) => reject(err),
      })
    })
  }

  /*检测登录 并跳转页面*/
  const linkTo = (url: string, type: routerLink = 'navigateTo') => {
    if (!!store.token) {
      switch (type) {
        case 'navigateTo':
          navigateTo(url)
          break
        case 'redirectTo':
          redirectTo(url)
          break
        case 'reLaunch':
          reLaunch(url)
          break
        case 'switchTab':
          switchTab(url)
          break
      }
    } else {
      openLoginPopup({
        loginCallbackMethod: linkTo,
        loginCallbackParams: [url, type],
      })
    }
  }
  /*检测登录 登录成功后回调*/
  const checkLogin = (callback: any) => {
    if (!!store.token) {
      callback()
    } else {
      openLoginPopup({
        loginCallbackMethod: callback,
        loginCallbackParams: [],
      })
    }
  }

  const openLoginPopup: SetLoginCallback = (params) => {
    if (setLoginCallback) {
      setLoginCallback(params)
    } else {
    // 对于页面来说,登录框组件是页面的一个组件,所以登录框组件中的provide无法被页面获取到
    // 所以这里直接通过页面实例,调用登录框组件的方法
    // 切记将登录框组件作为整个页面的最顶级组件,使用方式下面有示例
      if (!_this.parent && _this.$children.length > 0) {
        _this.$children[0].openPopup && _this.$children[0].openPopup(params)
      }
    }
  }

  return {
    navigateTo,
    switchTab,
    redirectTo,
    navigateToMiniProgram,
    linkTo,
    checkLogin,
  }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  1. 封装登录弹框
<template>
  <slot></slot>
  <uni-popup ref="popupRef" type="center" :is-mask-click="false">
    <view class="sww-login-box">
      <view class="clb-popup-box clb-popup-info">
        <view class="clb-popup-content">
          <view class="clb-info-avatar">
            <view class="clb-info-icon" />
          </view>
          <view class="clb-info-title">您还未登录</view>
          <view class="clb-info-desc">请先登录再进行此操作</view>
          <view class="clb-btn-list">
            <button :loading="loading" class="clb-btn-item" @click="getUserInfo">立即登录</button>
            <button :disabled="loading" class="clb-btn-item" @click="closePopup">暂不登录</button>
          </view>
        </view>
      </view>
    </view>
  </uni-popup>
</template>

<script lang="ts" setup>
  import { SetLoginCallback, SetLoginCallbackKey } from '@/hooks/routerLink'
  import { useStore } from '@/store'

  defineOptions({
    name: 'DslLogin',
  })

  /**
   * @desc: Types
   */

  /**
   * @desc: Ref
   */
  const popupRef = ref<any>()
  /**
   * @desc: Hooks
   */
  const store = useStore()
  /**
   * @desc: Data
   */
  const loginCallbackMethod = ref<any>(null)
  const loginCallbackParams = ref<any[]>([])
  const loading = ref(false)
  /**
   * @desc: Computed
   */
  provide(SetLoginCallbackKey, (params) => {
    openPopup(params)
  })
  /**
   * @desc: 方法
   */

  const closePopup = () => {
    loginCallbackMethod.value = null
    loginCallbackParams.value = []
    popupRef.value?.close()
  }

  const openPopup: SetLoginCallback = (params) => {
    loginCallbackMethod.value = params.loginCallbackMethod
    loginCallbackParams.value = params.loginCallbackParams
    popupRef.value?.open()
  }

  const getUserInfo = () => {
    loading.value = true
    store
      .login()
      .then(() => {
        loading.value = false
        try {
          loginCallbackMethod.value(...loginCallbackParams.value)
        } catch (e) {
          console.log(e)
        }
        closePopup()
      })
      .catch((err) => {
        console.log(err)
        loading.value = false
      })
  }

  /**
   * @desc: 生命周期
   */
  defineExpose({
    openPopup,
  })
</script>

<style scoped lang="scss">
  .sww-login-box {
    display: flex;
    width: 100%;
    height: 100%;
    align-items: center;
    justify-content: center;
  }

  .clb-popup-box {
    position: relative;
    width: 626rpx;
  }

  .clb-popup-content {
    display: flex;
    width: 100%;
    padding: 0 47rpx;
    background-color: #fff;
    border-radius: 16rpx;
    flex-direction: column;
    align-items: center;
  }

  .clb-popup-title {
    padding-top: 40rpx;
    font-size: 28rpx;
  }

  .clb-popup-avatar {
    width: 90rpx;
    height: 90rpx;
    margin: 40rpx 0;
    overflow: hidden;
    background-size: 100%;
    border-radius: 50%;
  }

  .clb-popup-desc {
    font-size: 24rpx;
    font-weight: 400;
    color: #666;
  }

  .clb-phone-btn {
    display: flex;
    width: 100%;
    height: 82rpx;
    margin: 50rpx 0 30rpx;
    font-size: 30rpx;
    font-weight: 500;
    line-height: 1;
    color: #fff;
    background-color: #6cadff;
    border-radius: 41rpx;
    align-items: center;
    justify-content: center;
  }

  /* 用户登录 */
  .clb-popup-info {
    padding-top: 120rpx;
  }

  .clb-popup-info .clb-popup-content {
    padding-top: 210rpx;
  }

  .clb-info-avatar {
    position: absolute;
    top: 0;
    left: 50%;
    padding: 20rpx;
    background-color: #fff;
    border-radius: 50%;
    transform: translate(-50%, 0);
  }

  .clb-info-icon {
    width: 287rpx;
    height: 287rpx;
    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAR8AAAEfCAMAAABPiTJ/AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABWNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wUmlnaHRzOldlYlN0YXRlbWVudD0iNjk5cGljLmNvbSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjNhNjI1MDA0LTk2MjQtMmU0MC05YmNkLWFhZTYwNzcwNzY0MSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjk3M0Q3RUVCMzIxMUVBQTVFMEU2NENBRDA4NDYzMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCRjk3M0Q3REVCMzIxMUVBQTVFMEU2NENBRDA4NDYzMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoV2luZG93cykiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpiNjhhM2RhOC1lNTQzLTk4NGUtYjcxNC1kOTAwNTBkZDQxMWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo1MGUyMjcxNC01NWZiLWUxNDAtYmNiZS00YjM2MTg0ZjBkYzEiLz4gPGRjOnJpZ2h0cz4gPHJkZjpBbHQ+IDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+5pGE5Zu+572R5piv5q2j54mI5ZWG5Lia5Zu+5bqT572R56uZ77yM5omA5pyJ5Y6f5Yib5L2c5ZOB77yI5ZCr6aKE6KeI5Zu+77yJ5Z2H5Y+X6JGX5L2c5p2D5rOV5L+d5oqk44CC6JGX5L2c5p2D5Y+K55u45YWz5p2D5Yip5b2S5pys572R56uZ5omA5pyJ77yM55uX5Zu+5b+F56m244CCPC9yZGY6bGk+IDwvcmRmOkFsdD4gPC9kYzpyaWdodHM+IDxkYzp0aXRsZT4gPHJkZjpBbHQ+IDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+5pGE5Zu+5Y6f5Yib5L2c5ZOBPC9yZGY6bGk+IDwvcmRmOkFsdD4gPC9kYzp0aXRsZT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6vOzJgAAADAFBMVEVJSXL/5wD5zcb7W+I4y/yq1v4he+w20/v7r7j9X3/L6f7/zQCZlJw/uf9Jov98xf9Erf81pv9IpP/4kw1BtP9Atv+xYO0mgO1Vev9Xt/5Hp//9/v9Ywf9HqP9DsP9pqI3/1QCdXpU8tf//z75zkPpluP0lg//zZ4RPrP9Wqv49PV2OtutCrP+vy2zUKl3LrcQqpv9Cs/9nxf9KmP79dW5Duv8Kbu6y4f+d2v/8SJH+TRI3mv2Gx/4ZGib2lk3l8//6zjRFq/9Erv9iYoZotMpSVX1NtP/XxtNprUD/+wByu/4qsf/T1TxGbqurrdDIxUqdumzvFjmRwJP+/criQOyZyv6K0v/A3P1Thf9astFJiM//7k0whu9Wdf+LffeSlM5Lv/8uxP9Hsf/97TIysP81jvW+wdlHer+ySoZvjL9Gqf/y+f8tZI8sb+H3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');
    background-size: 100%;
  }

  .clb-info-title {
    margin-bottom: 10rpx;
    font-size: 32rpx;
    font-weight: bold;
    color: #000;
  }

  .clb-info-desc {
    font-size: 28rpx;
    font-weight: 400;
    color: #999;
  }

  .clb-btn-list {
    width: 100%;
    padding: 50rpx 0 30rpx;
  }

  .clb-btn-item {
    display: flex;
    width: 100%;
    height: 82rpx;
    padding: 0;
    margin: 0;
    font-size: 30rpx;
    font-weight: 500;
    line-height: 1;
    color: #fff;
    background-color: #6cadff;
    border-radius: 41rpx;
    align-items: center;
    justify-content: center;
  }

  .clb-btn-item::after {
    border: none;
  }

  .clb-btn-item:last-child {
    color: #6caeff;
    background-color: inherit;
  }
</style>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  1. 页面中使用
<template>
	<dsl-login>
		<button @click="router.linkTo('/package/index/address/index')">跳转页面</button >
	</dsl-login>
</template>
<script setup lang="ts">
  import { useRouter } from '@/hooks'

  /**
   * @desc: Types
   */

  /**
   * @desc: Ref
   */

  /**
   * @desc: Hooks
   */
  const router = useRouter()
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/392243
推荐阅读
相关标签
  

闽ICP备14008679号