Browse Source

refactor(auth): 优化登录逻辑和用户信息验证

- 移除不再使用的登录页面路径
- 修复用户信息验证中的手机号提示错误
- 重构登录逻辑,支持分享路径和参数传递
- 调整全局分享路径为登录页面
- 优化用户角色显示逻辑
master
前端-胡立永 3 weeks ago
parent
commit
3003552ffd
8 changed files with 76 additions and 27 deletions
  1. +0
    -1
      api/model/login.js
  2. +15
    -1
      mixins/configList.js
  3. +0
    -3
      pages.json
  4. +7
    -15
      pages/index/center.vue
  5. +11
    -2
      pages_order/auth/wxLogin.vue
  6. +1
    -1
      pages_order/auth/wxUserInfo.vue
  7. +17
    -3
      store/store.js
  8. +25
    -1
      utils/utils.js

+ 0
- 1
api/model/login.js View File

@ -8,7 +8,6 @@ const api = {
url: '/login_common/appletLogin',
method: 'GET',
limit : 500,
showLoading : true,
},
// 获取绑定手机号码
bindPhone: {


+ 15
- 1
mixins/configList.js View File

@ -7,13 +7,27 @@ export default {
// 默认的全局分享内容
Gshare: {
// title: '三只青蛙',
path: '/pages/index/index', // 全局分享的路径,比如 首页
path: '/pages_order/auth/wxLogin', // 全局分享的路径,比如 首页
// imageUrl: '/static/image/login/logo.png', // 全局分享的图片(可本地可网络)
}
}
},
computed: {
...mapState(['configList', 'userInfo', 'riceInfo']),
currentPagePath() {
const pages = getCurrentPages();
const currentPage = pages[pages.length - 1];
let path = `/${currentPage.route}`;
// 获取当前页面的参数
const options = currentPage.options;
if (options && Object.keys(options).length > 0) {
const params = this.$utils.objectToUrlParams(options);
path += `?${params}`;
}
return path;
},
},
// 定义全局分享
// 1.发送给朋友


+ 0
- 3
pages.json View File

@ -75,9 +75,6 @@
{
"path": "auth/wxUserInfo"
},
{
"path": "auth/loginAndRegisterAndForgetPassword"
},
{
"path": "mine/help"
},


+ 7
- 15
pages/index/center.vue View File

@ -17,20 +17,13 @@
<view class="user-base-top">
<view class="user-name">{{ userInfo.nickName}}</view>
<view class="member-level">
<!-- <image v-if="userInfo.role == 0" :src="configList.vip_user" mode="aspectFill" class="level">
<image v-if="userInfo.role == 1" :src="configList.vip_user" mode="aspectFill" class="level">
</image>
<image v-if="userInfo.role == 2" src="@/static/image/center/gold-min.png" mode="aspectFill"
class="level">
</image>
<image v-if="userInfo.role == 3" src="@/static/image/center/sliver-min.png"
mode="aspectFill" class="level">
</image> -->
<image
v-if="userInfo.role != 0"
:src="configList[vipImage[userInfo.role]]"
mode="aspectFill"
class="level">
</image>
</view>
<view class="user-tag">
@ -55,8 +48,9 @@
<!-- 会员卡片 -->
<view @click="$utils.navigateTo({url : '/pages_order/mine/memberCenter' })"
v-if="userInfo.role != 0"
class="earnings">
<view v-if="index == userInfo.role" v-for="(item,index) in vipList" :key="item.id" class="member-item">
<view v-if="index + 1 == userInfo.role" v-for="(item,index) in vipList" :key="item.id" class="member-item">
<image :src="item.headImage" mode="aspectFill" class="member-image"></image>
<view class="member-info">
@ -74,8 +68,7 @@
<!-- 佣金数据 -->
<view @click="$utils.navigateTo('/pages_order/mine/withdraw')" class="brokerage-data"
>
<!-- :class="{'brokerage-data-mt' : userInfo.role == 0}" -->
:class="{'brokerage-data-mt' : !userInfo.role}">
<view class="brokerage">
<image :src="configList.money_image" mode="aspectFill" class="brokerage-img"></image>
@ -205,11 +198,10 @@
data() {
return {
vipType: ['普通会员', '黄金会员', '渠道商'],
vipImage: ['', 'vip_vip', 'vip_user', 'vip_shop'],
vipImage: ['vip_vip', 'vip_user', 'vip_shop'],
vipList: [],
showAdvertising: true,
userRole: ['用户', '会员', '渠道'],
// userRole: ['', '', ''],
userRole: ['会员', '用户', '渠道'],
indicatorDots: true,
duration: 500
}
@ -354,7 +346,7 @@
.earnings {
padding: 0rpx 20rpx;
box-sizing: border-box;
margin-top: -80rpx;
margin-top: -18%;
.member-item {
position: relative;


+ 11
- 2
pages_order/auth/wxLogin.vue View File

@ -55,7 +55,16 @@
name : 'Login',
data() {
return {
checkboxValue : []
checkboxValue : [],
config : {},
}
},
onLoad(query) {
if (query.shareId) {
uni.setStorageSync('shareId', query.shareId)
}
if(query.path){
this.config = query
}
},
methods: {
@ -70,7 +79,7 @@
icon:'none'
})
}
this.$store.commit('login', phoneCode)
this.$store.commit('login', this.config)
},
//


+ 1
- 1
pages_order/auth/wxUserInfo.vue View File

@ -120,7 +120,7 @@
if (self.$utils.verificationAll(self.userInfoForm, {
headImage: '请选择头像',
nickName: '请填写昵称',
phone: '请填写昵称',
phone: '请填写手机号',
})) {
return
}


+ 17
- 3
store/store.js View File

@ -1,5 +1,6 @@
import Vue from 'vue'
import Vuex from 'vuex'
import utils from '../utils/utils.js'
Vue.use(Vuex); //vue的插件机制
@ -42,12 +43,12 @@ const store = new Vuex.Store({
// })
// })
},
login(state, config) {
login(state, config = {}) {
uni.showLoading({
title: '登录中...'
})
uni.login({
success(res) {
success : res => {
if (res.errMsg != "login:ok") {
return
}
@ -70,6 +71,19 @@ const store = new Vuex.Store({
state.userInfo = res.result.userInfo
uni.setStorageSync('token', res.result.token)
if(config.path){
let path = config.path
delete config.path
delete config.shareId
let para = utils.objectToUrlParams(config)
uni.reLaunch({
url: `${path}?${para}`,
})
return
}
if (!state.userInfo.nickName ||
!state.userInfo.headImage ||
@ -79,7 +93,7 @@ const store = new Vuex.Store({
url: '/pages_order/auth/wxUserInfo'
})
} else {
uni.navigateBack(-1)
utils.navigateBack(-1)
}
})
}


+ 25
- 1
utils/utils.js View File

@ -198,6 +198,12 @@ export function navigateTo(...args){
* @param {number} num - 返回的页面数默认为-1
*/
export function navigateBack(num = -1){
if(getCurrentPages().length == 1){
uni.reLaunch({
url: '/pages/index/index'
})
return
}
uni.navigateBack(num)
}
@ -226,6 +232,23 @@ export const toLogin = function(){
}
}()
// 将对象转换为URL参数
function objectToUrlParams(obj) {
if (!obj || typeof obj !== 'object') {
return '';
}
return Object.keys(obj)
.filter(key => obj[key] !== undefined && obj[key] !== null)
.map(key => {
const value = typeof obj[key] === 'object'
? JSON.stringify(obj[key])
: obj[key];
return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
})
.join('&');
}
export default {
toArray,
generateUUID,
@ -240,5 +263,6 @@ export default {
redirectTo,
copyText,
stringFormatHtml,
toLogin
toLogin,
objectToUrlParams,
}

Loading…
Cancel
Save