Эх сурвалжийг харах

feat(auth): 优化微信登录流程并新增关于我们页面

- 移除验证码登录相关接口实现
- 简化微信登录逻辑,不再依赖用户主动提供昵称和头像
- 微信登录时根据手机号自动生成默认昵称
- 设置默认用户头像URL
- 新增"关于我们"页面,包含应用信息和协议链接
- 调整登录弹窗UI,移除昵称和头像输入项
- 重新排列个人中心菜单项顺序
- 隐藏设置页部分未实现的功能入口
李思佳 1 сар өмнө
parent
commit
2025e6e142

+ 17 - 58
LiangZhiYUMao/components/butlogin.vue

@@ -4,23 +4,12 @@
 		<view class="zheshow" >
 			<view class="cen_ter">
 				<view class="box_At">
-					<view class="box_At_text">获取您的昵称、头像、手机号</view>
-					<view class="box_At_co">获取用户头像、昵称、手机号信息,主要用于完善个人资料,向用户提供更好使用体验</view>
-					<view class="box_B" style="border-top:1px solid #f3f3f3 ;">
-						<view class="acvter">头像</view>
-						<button v-if="!active" class="acvter_all"  open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
-							<view class="mast">请选择头像</view>
-						</button>
-						<view v-if="active" class="img"><image :src="active" ></image></view>
-					</view>
-					<view class="box_B">
-						<view class="acvter">昵称</view>
-						<input class="acvter_all"  type="nickname" :value="nickname" @blur="bindblur" placeholder="请输入昵称" />
-					</view>
+					<view class="box_At_text">获取您的手机号</view>
+					<view class="box_At_co">获取手机号信息,主要用于完善个人资料,向用户提供更好使用体验</view>
 					<view class="Brn_S">
-						<view class="btn_btns" @click="colse">取消</view>
+						<button class="btn_btns" @click="colse">取消</button>
 						<button  class="btn" open-type="getPhoneNumber" @getphonenumber="btns" >
-							<view class="btn">保存</view>
+							登录
 						</button>
 					</view>
 				</view>
@@ -36,9 +25,7 @@
 		data() {
 			return {
 				on_zheshows:false,
-				zheshow1:false,
-				active:'',
-				nickname:''
+				zheshow1:false
 			}
 		},
 		watch:{
@@ -46,23 +33,8 @@
 				this.$refs.popup.open('bottom')
 			},
 		},
-		methods: {	
-			colse(){
-				this.$refs.popup.close()
-			},
-			onChooseAvatar(e) {
-				let that = this
-				uni.getFileSystemManager().readFile({
-					filePath: e.detail.avatarUrl, //选择图片返回的相对路径
-					encoding: "base64", 
-					success: (res) => {
-						let base64s = "data:image/jpeg;base64," + res.data
-						that.active = base64s
-					},
-					fail: (res) => reject(res.errMsg),	                
-				});
-			},
-			bindblur(e){this.nickname = e.detail.value},
+		methods: { 	
+			colse(){this.$refs.popup.close()},
 			btns(e){
 				console.log(e,'e.detail.code换取手机号')
 				console.log('微信返回详情:', e.detail)
@@ -93,15 +65,6 @@
 					return
 				}
 				
-				if(this.active==''){
-					uni.showToast({title:'请选择上传头像',icon:'none'})
-					return
-				}
-				if(this.nickname==''){
-					uni.showToast({title:'请填写昵称',icon:'none'})
-					return
-				}
-				
 				// 成功获取到code,继续登录
 				this.proceedLogin(e.detail.code)
 			},
@@ -110,8 +73,6 @@
 			proceedLogin(code) {
 				// 将微信返回的手机号 code 一并传递给父组件
 				this.$parent.loset({
-					nickname: this.nickname,
-					active: this.active,
 					code: code || 'mock_dev_code' // 如果没有code,使用mock
 				})
 			}
@@ -124,25 +85,23 @@
 		 width: 100%;height: 100%;background-color: rgba(0,0,0,0.3);position: fixed;top: 0;left: 0;
 		 display: flex;align-items: center;align-items: flex-end;
 		.mast{margin-top: 6rpx;}
-		.Brn_S{width: 70%;height: 100rpx;display: flex;align-items: center;justify-content: space-between;margin: 10rpx auto;}
-		.btn_btns{width: 300rpx;height: 80rpx;background: antiquewhite; display: flex;align-items: center;
-		 justify-content: center; border-radius: 10rpx; margin-right: 70rpx;background-color:  #fafafa;color: #39B54A;}
+		.Brn_S{width: 100%;height: 100rpx;display: flex;align-items: center;justify-content: space-around;margin: 20rpx 0;}
+		.btn_btns, .btn{width: 45%;max-width: 300rpx;height: 80rpx;display: flex;align-items: center;
+		 justify-content: center; border-radius: 10rpx;font-size: 30rpx;margin: 0 !important;box-sizing: border-box;}
+		.btn_btns{background-color:  #fafafa;color: #39B54A;}
+		.btn{background-color: #39B54A;color: #FFFFFF;}
 		.imgs{position: absolute;right: 6%;width: 32rpx;height: 32rpx;}
 		.img{width: 90rpx;height: 90rpx;border-radius: 50%;margin-left: 80rpx;image{width: 100%;height: 100%;border-radius: 50%;}}
 		.cen_ter{
-			width: 100%;height: 600rpx;border-top-left-radius: 30rpx;border-top-right-radius: 30rpx;background-color: #FFFFFF;
+			width: 100%;min-height: 300rpx;border-top-left-radius: 30rpx;border-top-right-radius: 30rpx;background-color: #FFFFFF;
 			display: flex;align-items: center;justify-content: center;
-			.box_At{width: 90%;height: 92%;margin-top: 20rpx;display: flex;flex-direction: column;.box_At_text{font-weight: bold;font-size: 30rpx}
+			.box_At{width: 90%;padding: 40rpx 0;display: flex;flex-direction: column;.box_At_text{font-weight: bold;font-size: 30rpx}
 			.box_At_co{font-size: 28rpx;color: #ababab;margin-top: 24rpx;}
-			.box_B{width: 100%;height: 120rpx;border-bottom: 1px solid #f3f3f3;display: flex;align-items: center;
-			 margin-top: 12rpx;.acvter_all{font-size: 28rpx;color: #ababab;margin-left: 80rpx;}}
-			.btn{width:300rpx;margin: 35rpx auto;height: 80rpx;display: flex;align-items: center;justify-content: center;
-			 background-color: #39B54A;color: #FFFFFF;border-radius: 10rpx;font-size: 30rpx;}
-		}}
+			}}
 	}
 	button {
-		border-radius: 30rpx;height: 80rpx !important;padding-left: 0!important ;
-		padding-right: 0!important ; background-color: rgba(0,0,0,0) !important;color: #ababab !important;font-family: PingFang SC !important;
+		border-radius: 10rpx;height: 80rpx !important;padding-left: 0!important ;
+		padding-right: 0!important ;font-family: PingFang SC !important;
 	}
 	button:after {
 	    top: 0;left: 0; border: 1px solid rgba(0,0,0,0) !important; -webkit-transform: scale(.5);

+ 7 - 0
LiangZhiYUMao/pages.json

@@ -299,6 +299,13 @@
 				"navigationBarTitleText": "绑定手机号",
 				"navigationStyle": "custom"
 			}
+		},
+		{
+			"path": "pages/settings/about",
+			"style": {
+				"navigationBarTitleText": "关于我们",
+				"navigationStyle": "default"
+			}
 		}
 	],
 	"globalStyle": {

+ 20 - 24
LiangZhiYUMao/pages/mine/index.vue

@@ -58,10 +58,7 @@
 			<view class="vip-button">立即开通</view>
 		</view>
 
-	<!-- 专属红娘(仅登录后显示) -->
-	<view class="matchmaker-card" v-if="currentUserId">
-		<text class="matchmaker-text">您的专属红娘:{{ matchmaker.code || '暂无' }} {{ matchmaker.phone || '' }}</text>
-	</view>
+	
 
 		<!-- 快捷入口 -->
 		<view class="quick-actions">
@@ -69,14 +66,14 @@
 				<view class="action-icon calendar-icon">📅</view>
 				<text class="action-label">签到</text>
 			</view>
+			<view class="action-item" @click="goToPage('myDynamics')">
+				<view class="action-icon heart-icon">📝</view>
+				<text class="action-label">我的动态</text>
+			</view>
 			<view class="action-item" @click="goToPage('customize')">
 				<view class="action-icon phone-icon">📞</view>
 				<text class="action-label">私人定制</text>
 			</view>
-			<view class="action-item" @click="goToPage('part-time-matchmaker')">
-				<view class="action-icon heart-icon">💕</view>
-				<text class="action-label">加入红娘</text>
-			</view>
 		</view>
 
 		<!-- 签到弹窗 -->
@@ -158,13 +155,15 @@
 
 		<!-- 功能菜单列表 -->
 		<view class="menu-list">
-			<view class="menu-item" @click="goToPage('myDynamics')">
+			
+			<view class="menu-item" @click="goToPage('myActivity')">
 				<view class="menu-left">
-					<text class="menu-icon">📝</text>
-					<text class="menu-text">我的动</text>
+					<text class="menu-icon">📷</text>
+					<text class="menu-text">我的动</text>
 				</view>
 				<text class="menu-arrow">›</text>
 			</view>
+			
 			<view class="menu-item" @click="goToPage('basicInfo')">
 				<view class="menu-left">
 					<text class="menu-icon">🆔</text>
@@ -172,6 +171,7 @@
 				</view>
 				<text class="menu-arrow">›</text>
 			</view>
+			
 			<view class="menu-item" @click="goToPage('partnerRequirement')">
 				<view class="menu-left">
 					<text class="menu-icon">💜</text>
@@ -179,27 +179,23 @@
 				</view>
 				<text class="menu-arrow">›</text>
 			</view>
-			<view class="menu-item" @click="goToPage('blacklist')">
-				<view class="menu-left">
-					<text class="menu-icon">📋</text>
-					<text class="menu-text">黑名单</text>
-				</view>
-				<text class="menu-arrow">›</text>
-			</view>
-			<view class="menu-item" @click="goToPage('myActivity')">
+			
+			<view class="menu-item" @click="goToPage('partTimeMatchmaker')">
 				<view class="menu-left">
-					<text class="menu-icon">📷</text>
-					<text class="menu-text">我的活动</text>
+					<text class="menu-icon">💎</text>
+					<text class="menu-text">兼职红娘</text>
 				</view>
 				<text class="menu-arrow">›</text>
 			</view>
-			<view class="menu-item" @click="goToPage('partTimeMatchmaker')">
+			
+			<view class="menu-item" @click="goToPage('blacklist')">
 				<view class="menu-left">
-					<text class="menu-icon">💎</text>
-					<text class="menu-text">兼职红娘</text>
+					<text class="menu-icon">📋</text>
+					<text class="menu-text">黑名单</text>
 				</view>
 				<text class="menu-arrow">›</text>
 			</view>
+			
 			<view class="menu-item" @click="goToPage('settings')">
 				<view class="menu-left">
 					<text class="menu-icon">⚙️</text>

+ 19 - 118
LiangZhiYUMao/pages/page3/page3.vue

@@ -59,39 +59,29 @@ export default {
     },
     loset(Logon_Credentials) {
       console.log('=== 开始微信登录流程 ===')
-      console.log('用户输入信息:', Logon_Credentials)
+      console.log('用户登录信息:', Logon_Credentials)
 
       // 获取微信登录code
       uni.login({
         provider: 'weixin',
         success: async (loginRes) => {
+          // ✅ 获取手机号code
+          const phoneCode = (Logon_Credentials && Logon_Credentials.code && String(Logon_Credentials.code).trim())
+              ? String(Logon_Credentials.code).trim()
+              : null;
+
+          console.log('微信登录code:', loginRes.code)
+          console.log('手机号code:', phoneCode || '未提供')
+
+          // ✅ 一次性调用微信登录接口,无需用户提供头像和昵称
           const loginParams = {
-            code: loginRes.code.trim(), // 必需:微信登录code
-            nickname: Logon_Credentials.nickname?.trim() || '', // 可选:用户昵称(从Logon_Credentials获取)
-            avatarUrl: Logon_Credentials.active?.trim() || '',  // 可选:用户头像(注意:后端字段是avatarUrl,前端若存的是active,需对应)
-            phoneCode: Logon_Credentials.code?.trim() || ''     // 可选:手机号授权code(从Logon_Credentials获取)
+            code: loginRes.code,
+            phoneCode: phoneCode
           };
+          
           uni.showLoading({title: '登录中...'})
           try {
-            // 1. 微信授权登录
-            // const wechatLoginResult = await api.auth.wechatLogin(loginParams)
-            // ✅ 获取手机号code
-            const phoneCode = (Logon_Credentials && Logon_Credentials.code && String(Logon_Credentials.code).trim())
-                ? String(Logon_Credentials.code).trim()
-                : null;
-
-            console.log('微信登录code:', loginRes.code)
-            console.log('用户昵称:', Logon_Credentials.nickname)
-            console.log('用户头像:', Logon_Credentials.active ? '已提供' : '未提供')
-            console.log('手机号code:', phoneCode || '未提供')
-
-            // ✅ 一次性调用微信登录接口,传入所有信息
-            const wechatLoginResult = await api.auth.wechatLogin({
-              code: loginRes.code,
-              nickname: Logon_Credentials.nickname || '微信用户',
-              avatarUrl: Logon_Credentials.active || null,
-              phoneCode: phoneCode
-            });
+            const wechatLoginResult = await api.auth.wechatLogin(loginParams);
 
             const token = wechatLoginResult?.token || wechatLoginResult?.data?.token
             const user = wechatLoginResult?.user || wechatLoginResult?.data?.user
@@ -101,16 +91,13 @@ export default {
             }
 
             console.log('✅ 微信登录成功,用户ID:', user.userId)
-            uni.setStorageSync("userId", user.userId);
-
-            // 2. 获取手机号
-            // const phoneCode = (Logon_Credentials && Logon_Credentials.code && String(Logon_Credentials.code).trim()) ? String(Logon_Credentials.code).trim() : 'mock_dev_code'
-            console.log('📱 使用phoneCode:', phoneCode)
             console.log('✅ 微信登录成功')
             console.log('用户ID:', user.userId)
             console.log('昵称:', user.nickname)
             console.log('头像:', user.avatarUrl ? '已设置' : '未设置')
             console.log('手机号:', user.phone || '未设置')
+            
+            uni.setStorageSync("userId", user.userId);
 
             // ✅ 保存登录信息(后端已返回完整信息,直接保存)
             userAuth.saveLoginInfo(token, user)
@@ -133,95 +120,9 @@ export default {
             })
           }
         },
-        loset(Logon_Credentials) {
-          console.log(Logon_Credentials, '登录信息')
-          // 获取微信登录code
-          uni.login({
-            provider: 'weixin',
-            success: async (loginRes) => {
-              uni.showLoading({title: '登录中...'})
-              try {
-                // 1. 微信授权登录
-                const wechatLoginResult = await api.auth.wechatLogin(loginRes.code)
-                const token = wechatLoginResult?.token || wechatLoginResult?.data?.token
-                const user = wechatLoginResult?.user || wechatLoginResult?.data?.user
-
-                if (!token || !user) {
-                  throw new Error('微信登录返回数据异常')
-                }
-
-                console.log('✅ 微信登录成功,用户ID:', user.userId)
-
-                // 2. 获取手机号
-                const phoneCode = (Logon_Credentials && Logon_Credentials.code && String(Logon_Credentials.code).trim()) ? String(Logon_Credentials.code).trim() : 'mock_dev_code'
-                console.log('📱 使用phoneCode:', phoneCode)
-
-                try {
-                  const phoneResult = await api.auth.wechatPhone(phoneCode)
-                  const phone = phoneResult?.phone || phoneResult?.data?.phone
-
-                  if (phone) {
-                    console.log('✅ 成功获取手机号')
-                    user.phone = phone
-                  } else {
-                    console.warn('⚠️ 手机号为空,使用默认值(开发环境)')
-                    // 开发环境:如果后端返回了mock手机号,也可能在user对象中
-                    user.phone = user.phone || '13800138000'
-                  }
-                } catch (phoneError) {
-                  console.error('❌ 获取手机号接口失败:', phoneError)
-                  // 开发环境容错:继续登录,使用默认手机号
-                  user.phone = user.phone || '13800138000'
-                  console.warn('⚠️ 使用默认手机号继续登录(开发环境)')
-                }
-
-                // 3. 更新用户信息(昵称和头像)
-                user.nickname = Logon_Credentials.nickname || user.nickname
-                user.avatar = Logon_Credentials.active || user.avatar
-
-                console.log('💾 保存用户信息:', {userId: user.userId, phone: user.phone, nickname: user.nickname})
-
-                // 4. 如果用户输入了昵称或头像,更新到后端
-                if (Logon_Credentials.nickname || Logon_Credentials.active) {
-                  try {
-                    await api.user.updateInfo({
-                      userId: user.userId,
-                      nickname: user.nickname,
-                      avatarUrl: user.avatar
-                    })
-                    console.log('✅ 用户信息已更新到后端')
-                  } catch (updateError) {
-                    console.warn('⚠️ 更新用户信息失败:', updateError)
-                    // 不影响登录流程,继续
-                  }
-                }
-
-                // 5. 保存登录信息
-                userAuth.saveLoginInfo(token, user)
-
-                uni.hideLoading()
-                uni.showToast({title: '登录成功', icon: 'success'})
-
-                // 5. 跳转首页
-                setTimeout(() => {
-                  const target = this.redirectUrl || '/pages/index/index'
-                  uni.reLaunch({url: target})
-                }, 500)
-              } catch (error) {
-                console.error('❌ 微信登录失败:', error)
-                uni.hideLoading()
-                uni.showToast({
-                  title: error?.message || '登录失败,请重试',
-                  icon: 'none',
-                  duration: 2000
-                })
-              }
-            },
-            fail: (err) => {
-              console.error('获取微信code失败:', err)
-              uni.showToast({title: '微信登录失败', icon: 'none'})
-            }
-          })
+        fail: (err) => {
+          console.error('获取微信code失败:', err)
+          uni.showToast({title: '微信登录失败', icon: 'none'})
         }
       })
     }

+ 180 - 0
LiangZhiYUMao/pages/settings/about.vue

@@ -0,0 +1,180 @@
+<template>
+  <view class="container">
+    <view class="app-info">
+      <view class="app-logo">
+        <image class="logo-image" src="/static/icon.png" mode="aspectFit"></image>
+      </view>
+      <view class="app-name">青鸾之恋</view>
+      <view class="app-version">v1.0.0</view>
+    </view>
+    
+    <view class="agreements">
+      <view class="agreement-item" @click="navigateToAgreement('user')">
+        <text class="agreement-text">用户协议</text>
+        <text class="arrow-icon">›</text>
+      </view>
+      <view class="agreement-item" @click="navigateToAgreement('privacy')">
+        <text class="agreement-text">隐私政策</text>
+        <text class="arrow-icon">›</text>
+      </view>
+      <view class="agreement-item" @click="navigateToAgreement('privacy-summary')">
+        <text class="agreement-text">隐私政策摘要</text>
+        <text class="arrow-icon">›</text>
+      </view>
+      <view class="agreement-item" @click="navigateToAgreement('platform')">
+        <text class="agreement-text">平台信息管理规范</text>
+        <text class="arrow-icon">›</text>
+      </view>
+    </view>
+    
+    <view class="record-info">
+      <view class="record-item">
+        <text class="record-text">ICP 备案号</text>
+      </view>
+      <view class="record-item">
+        <text class="record-text">互联网信息服务算法备案号</text>
+      </view>
+    </view>
+    
+<!--    <view class="withdraw-agreement" @click="showWithdrawConfirm">-->
+<!--      <text class="withdraw-text">撤回同意协议</text>-->
+<!--    </view>-->
+  </view>
+</template>
+
+<script>
+export default {
+  methods: {
+    navigateToAgreement(type) {
+      console.log(`跳转到${type}协议页面`)
+    },
+    showWithdrawConfirm() {
+      uni.showModal({
+        title: '确认撤回',
+        content: '您确定要撤回同意协议吗?',
+        success: (res) => {
+          if (res.confirm) {
+            console.log('用户确认撤回同意协议')
+          }
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style>
+.container {
+  padding: 40rpx;
+  background-color: #f5f5f5;
+  min-height: 100vh;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+
+.content {
+  width: 100%;
+  background-color: #ffffff;
+  border-radius: 12rpx;
+  padding: 40rpx;
+  box-sizing: border-box;
+  margin-top: 20rpx;
+}
+
+.app-info {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  margin-bottom: 40rpx;
+}
+
+.app-logo {
+  width: 160rpx;
+  height: 160rpx;
+  background-color: transparent;
+  border-radius: 32rpx;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  margin-bottom: 30rpx;
+}
+
+.logo-image {
+  width: 160rpx;
+  height: 160rpx;
+  border-radius: 32rpx;
+}
+
+.app-name {
+  font-size: 40rpx;
+  font-weight: bold;
+  color: #333333;
+  margin-bottom: 10rpx;
+}
+
+.app-version {
+  font-size: 28rpx;
+  color: #999999;
+}
+
+.agreements {
+  width: 100%;
+}
+
+.agreement-item {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  padding: 35rpx 30rpx;
+  border-bottom: 1rpx solid #f0f0f0;
+  background-color: #ffffff;
+}
+
+.agreement-item:last-child {
+  border-bottom: none;
+}
+
+.agreement-text {
+  font-size: 32rpx;
+  color: #333333;
+}
+
+.arrow-icon {
+  font-size: 40rpx;
+  color: #cccccc;
+  font-weight: 300;
+}
+
+.record-info {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  margin: 40rpx 0;
+  width: 100%;
+}
+
+.record-item {
+  margin-bottom: 15rpx;
+  width: 100%;
+  text-align: center;
+}
+
+.record-text {
+  font-size: 24rpx;
+  color: #999999;
+}
+
+.withdraw-agreement {
+  display: flex;
+  justify-content: center;
+  margin: 20rpx 0 40rpx;
+  padding: 10rpx;
+}
+
+.withdraw-text {
+  font-size: 24rpx;
+  color: #999999;
+  text-decoration: underline;
+}
+</style>

+ 34 - 28
LiangZhiYUMao/pages/settings/index.vue

@@ -19,7 +19,7 @@
 				</view>
 				<view class="item-right">
 					<text class="item-value">{{ phoneNumber }}</text>
-					<text class="item-arrow">›</text>
+					<!-- <text class="item-arrow">›</text> -->
 				</view>
 			</view>
 
@@ -45,24 +45,24 @@
 				</view>
 			</view>
 
-			<view class="setting-item" @click="goToPage('accountSecurity')">
-					<view class="item-left">
-						<text class="item-icon">🛡️</text>
-						<text class="item-text">账号与安全</text>
-					</view>
-					<view class="item-right">
-						<text class="item-value">已保护</text>
-						<text class="item-arrow">›</text>
-					</view>
-				</view>
+<!--			<view class="setting-item" @click="goToPage('accountSecurity')">-->
+<!--					<view class="item-left">-->
+<!--						<text class="item-icon">🛡️</text>-->
+<!--						<text class="item-text">账号与安全</text>-->
+<!--					</view>-->
+<!--					<view class="item-right">-->
+<!--						<text class="item-value">已保护</text>-->
+<!--						<text class="item-arrow">›</text>-->
+<!--					</view>-->
+<!--				</view>-->
 
-				<view class="setting-item" @click="goToPage('privacy')">
-					<view class="item-left">
-						<text class="item-icon">🔒</text>
-						<text class="item-text">隐私设置</text>
-					</view>
-					<text class="item-arrow">›</text>
-				</view>
+<!--				<view class="setting-item" @click="goToPage('privacy')">-->
+<!--					<view class="item-left">-->
+<!--						<text class="item-icon">🔒</text>-->
+<!--						<text class="item-text">隐私设置</text>-->
+<!--					</view>-->
+<!--					<text class="item-arrow">›</text>-->
+<!--				</view>-->
 
 				<view class="setting-item" @click="goToPage('about')">
 					<view class="item-left">
@@ -145,18 +145,24 @@
 				uni.navigateTo({
 					url: '/pages/settings/id-verification'
 				})
-			} else if (page === 'bindPhone') {
-				// 跳转到手机号绑定页面
-				uni.showToast({
-					title: '功能开发中',
-					icon: 'none'
+			} 
+			// else if (page === 'bindPhone') {
+			// 	// 跳转到手机号绑定页面
+			// 	uni.navigateTo({
+			// 		url: '/pages/settings/phone-binding'
+			// 	})
+			// } 
+			else if (page === 'about') {
+				// 跳转到关于我们页面
+				uni.navigateTo({
+					url: '/pages/settings/about'
 				})
 			} else {
-				// 其他功能
-				uni.showToast({
-					title: '功能开发中',
-					icon: 'none'
-				})
+				// // 其他功能
+				// uni.showToast({
+				// 	title: '功能开发中',
+				// 	icon: 'none'
+				// })
 			}
 		},
 			

+ 1 - 1
LiangZhiYUMao/pages/settings/phone-binding.vue

@@ -315,7 +315,7 @@ export default {
 }
 
 .form-input {
-	width: 100%;
+	width: 92%;
 	height: 80rpx;
 	padding: 0 24rpx;
 	background: #F5F5F5;

BIN
LiangZhiYUMao/static/icon.png


+ 118 - 92
service/login/src/main/java/com/zhentao/controller/AuthCodeController.java

@@ -28,8 +28,8 @@ import java.util.Map;
 @ConditionalOnProperty(prefix = "redis", name = "enabled", havingValue = "true", matchIfMissing = true)
 public class AuthCodeController {
 
-    @Autowired
-    private SmsService smsService;
+//    @Autowired
+//    private SmsService smsService;
 
     @Autowired
     private JwtUtil jwtUtil;
@@ -45,86 +45,86 @@ public class AuthCodeController {
     
     private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
 
-    /**
-     * 发送登录验证码(不依赖数据库)
-     */
-    @PostMapping("/send-code")
-    public Result<Void> sendCode(@RequestBody SmsSendRequest req) {
-        if (req == null || req.getPhone() == null || req.getPhone().trim().isEmpty()) {
-            return Result.error(400, "手机号不能为空");
-        }
-        boolean ok = smsService.sendLoginCode(req.getPhone().trim());
-        if (!ok) {
-            return Result.error(500, "验证码发送失败");
-        }
-        return Result.success();
-    }
-
-    /**
-     * 验证码登录:校验通过后查询或创建用户,签发JWT
-     */
-    @PostMapping("/sms-login")
-    public Result<LoginResponse> smsLogin(@RequestBody SmsLoginRequest req) {
-        System.out.println("=== 验证码登录请求 ===");
-        if (req == null || req.getPhone() == null || req.getCode() == null) {
-            return Result.error(400, "手机号或验证码不能为空");
-        }
-
-        System.out.println("手机号: " + req.getPhone());
-        boolean passed = smsService.verifyLoginCode(req.getPhone().trim(), req.getCode().trim());
-        if (!passed) {
-            System.out.println("❌ 验证码验证失败");
-            return Result.error(401, "验证码错误或已过期");
-        }
-        
-        System.out.println("✅ 验证码验证成功");
-
-        // 查询数据库中的用户
-        Users user = usersService.getOne(new LambdaQueryWrapper<Users>()
-                .eq(Users::getPhone, req.getPhone().trim())
-                .eq(Users::getStatus, 1), false);
-        
-        // 如果用户不存在,创建新用户
-        if (user == null) {
-            System.out.println("⚠️ 用户不存在,创建新用户");
-            user = new Users();
-            user.setPhone(req.getPhone().trim());
-            user.setNickname("用户" + req.getPhone().substring(Math.max(0, req.getPhone().length() - 4)));
-            user.setStatus(1);
-            user.setPassword(null);
-            user.setCreatedAt(new Date());
-            user.setUpdatedAt(new Date());
-            user.setSourceChannel("sms");
-            
-            // 保存到数据库,自动生成userId
-            usersService.save(user);
-            System.out.println("✅ 创建新用户成功,ID: " + user.getUserId());
-        } else {
-            System.out.println("✅ 找到现有用户,ID: " + user.getUserId());
-            // 更新最后登录时间
-            user.setLastLoginAt(new Date());
-            usersService.updateById(user);
-        }
-
-        // 生成JWT令牌
-        Map<String, Object> claims = new HashMap<>();
-        claims.put("userId", user.getUserId());
-        claims.put("nickname", user.getNickname());
-        claims.put("phone", user.getPhone());
-        String token = jwtUtil.generateToken(claims);
-        
-        System.out.println("✅ JWT token生成成功");
-
-        // 构造响应,避免泄露密码
-        user.setPassword(null);
-        LoginResponse resp = new LoginResponse();
-        resp.setToken(token);
-        resp.setUser(user);
-        
-        System.out.println("✅ 验证码登录成功,返回用户信息");
-        System.out.println("返回的用户ID: " + user.getUserId() + " (类型: " + user.getUserId().getClass().getSimpleName() + ")");
-        return Result.success(resp);
-    }
+//    /**
+//     * 发送登录验证码(不依赖数据库)
+//     */
+//    @PostMapping("/send-code")
+//    public Result<Void> sendCode(@RequestBody SmsSendRequest req) {
+//        if (req == null || req.getPhone() == null || req.getPhone().trim().isEmpty()) {
+//            return Result.error(400, "手机号不能为空");
+//        }
+//        boolean ok = smsService.sendLoginCode(req.getPhone().trim());
+//        if (!ok) {
+//            return Result.error(500, "验证码发送失败");
+//        }
+//        return Result.success();
+//    }
+//
+//    /**
+//     * 验证码登录:校验通过后查询或创建用户,签发JWT
+//     */
+//    @PostMapping("/sms-login")
+//    public Result<LoginResponse> smsLogin(@RequestBody SmsLoginRequest req) {
+//        System.out.println("=== 验证码登录请求 ===");
+//        if (req == null || req.getPhone() == null || req.getCode() == null) {
+//            return Result.error(400, "手机号或验证码不能为空");
+//        }
+//
+//        System.out.println("手机号: " + req.getPhone());
+//        boolean passed = smsService.verifyLoginCode(req.getPhone().trim(), req.getCode().trim());
+//        if (!passed) {
+//            System.out.println("❌ 验证码验证失败");
+//            return Result.error(401, "验证码错误或已过期");
+//        }
+//
+//        System.out.println("✅ 验证码验证成功");
+//
+//        // 查询数据库中的用户
+//        Users user = usersService.getOne(new LambdaQueryWrapper<Users>()
+//                .eq(Users::getPhone, req.getPhone().trim())
+//                .eq(Users::getStatus, 1), false);
+//
+//        // 如果用户不存在,创建新用户
+//        if (user == null) {
+//            System.out.println("⚠️ 用户不存在,创建新用户");
+//            user = new Users();
+//            user.setPhone(req.getPhone().trim());
+//            user.setNickname("用户" + req.getPhone().substring(Math.max(0, req.getPhone().length() - 4)));
+//            user.setStatus(1);
+//            user.setPassword(null);
+//            user.setCreatedAt(new Date());
+//            user.setUpdatedAt(new Date());
+//            user.setSourceChannel("sms");
+//
+//            // 保存到数据库,自动生成userId
+//            usersService.save(user);
+//            System.out.println("✅ 创建新用户成功,ID: " + user.getUserId());
+//        } else {
+//            System.out.println("✅ 找到现有用户,ID: " + user.getUserId());
+//            // 更新最后登录时间
+//            user.setLastLoginAt(new Date());
+//            usersService.updateById(user);
+//        }
+//
+//        // 生成JWT令牌
+//        Map<String, Object> claims = new HashMap<>();
+//        claims.put("userId", user.getUserId());
+//        claims.put("nickname", user.getNickname());
+//        claims.put("phone", user.getPhone());
+//        String token = jwtUtil.generateToken(claims);
+//
+//        System.out.println("✅ JWT token生成成功");
+//
+//        // 构造响应,避免泄露密码
+//        user.setPassword(null);
+//        LoginResponse resp = new LoginResponse();
+//        resp.setToken(token);
+//        resp.setUser(user);
+//
+//        System.out.println("✅ 验证码登录成功,返回用户信息");
+//        System.out.println("返回的用户ID: " + user.getUserId() + " (类型: " + user.getUserId().getClass().getSimpleName() + ")");
+//        return Result.success(resp);
+//    }
 
     /**
      * 微信授权登录:传入 wx.login 的临时 code,后端调用 jscode2session,查询或创建用户并返回 JWT
@@ -135,7 +135,7 @@ public class AuthCodeController {
         if (req == null || req.getCode() == null || req.getCode().trim().isEmpty()) {
             return Result.error(400, "code 不能为空");
         }
-        
+
         Map<String, Object> wx = weChatService.code2Session(req.getCode().trim());
         if (wx == null || (wx.containsKey("errcode") && ((Number) wx.get("errcode")).intValue() != 0)) {
             String msg = wx != null && wx.get("errmsg") != null ? String.valueOf(wx.get("errmsg")) : "微信接口错误";
@@ -157,10 +157,21 @@ public class AuthCodeController {
             System.out.println("⚠️ 微信用户不存在,创建新用户");
             user = new Users();
             
-            // ✅ 使用前端传来的昵称
-            user.setNickname(req.getNickname() != null && !req.getNickname().trim().isEmpty()
-                ? req.getNickname().trim()
-                : "微信用户");
+            // ✅ 生成默认昵称
+            String defaultNickname = "微信用户";
+            if (req.getNickname() != null && !req.getNickname().trim().isEmpty()) {
+                user.setNickname(req.getNickname().trim());
+            } else if (user.getPhone() != null && !user.getPhone().trim().isEmpty()) {
+                // 如果有手机号,使用"用户+手机号后四位"
+                String phone = user.getPhone().trim();
+                defaultNickname = "用户" + phone.substring(Math.max(0, phone.length() - 4));
+                user.setNickname(defaultNickname);
+            } else {
+                // 随机生成4位数字作为后缀
+                int randomNum = (int) (Math.random() * 9000) + 1000;
+                defaultNickname = "微信用户" + randomNum;
+                user.setNickname(defaultNickname);
+            }
             
             System.out.println("设置用户昵称: " + user.getNickname());
             
@@ -174,15 +185,18 @@ public class AuthCodeController {
                         System.out.println("✅ 头像上传成功: " + avatarUrl);
                     } else {
                         System.out.println("⚠️ 头像上传失败,使用默认头像");
-                        user.setAvatarUrl(null);
+                        // 这里可以设置一个默认头像URL
+                        user.setAvatarUrl("https://via.placeholder.com/150");
                     }
                 } catch (Exception e) {
                     System.err.println("⚠️ 头像上传异常: " + e.getMessage());
-                    user.setAvatarUrl(null);
+                    // 这里可以设置一个默认头像URL
+                    user.setAvatarUrl("https://via.placeholder.com/150");
                 }
             } else {
-                System.out.println("⚠️ 未提供头像");
-                user.setAvatarUrl(null);
+                System.out.println("⚠️ 未提供头像,使用默认头像");
+                // 这里可以设置一个默认头像URL
+                user.setAvatarUrl("https://via.placeholder.com/150");
             }
             
             user.setStatus(1);
@@ -197,7 +211,7 @@ public class AuthCodeController {
             user.setCreatedAt(new Date());
             user.setUpdatedAt(new Date());
             
-            // ✅ 如果提供了手机号code,尝试获取手机号
+            // ✅ 如果提供了手机号code,尝试获取手机号(先获取手机号,以便生成昵称)
             if (req.getPhoneCode() != null && !req.getPhoneCode().trim().isEmpty()) {
                 try {
                     System.out.println("尝试获取手机号,code: " + req.getPhoneCode());
@@ -215,6 +229,18 @@ public class AuthCodeController {
                 System.out.println("⚠️ 未提供手机号code");
             }
             
+            // ✅ 重新生成昵称(确保使用最新的手机号信息)
+            if (req.getNickname() == null || req.getNickname().trim().isEmpty()) {
+//                String defaultNickname = "微信用户";
+                if (user.getPhone() != null && !user.getPhone().trim().isEmpty()) {
+                    // 如果有手机号,使用"用户+手机号后四位"
+                    String phone = user.getPhone().trim();
+                    defaultNickname = "用户" + phone.substring(Math.max(0, phone.length() - 4));
+                    user.setNickname(defaultNickname);
+                    System.out.println("更新昵称使用手机号后四位: " + defaultNickname);
+                }
+            }
+            
             // 保存到数据库,自动生成userId
             usersService.save(user);
             System.out.println("✅ 创建微信新用户成功,ID: " + user.getUserId() + ", 昵称: " + user.getNickname());