wangguoyu преди 23 часа
родител
ревизия
583f639908
променени са 2 файла, в които са добавени 253 реда и са изтрити 199 реда
  1. 253 6
      pages/Login/clientIndex.vue
  2. 0 193
      pages/Login/components/clientloginBox.vue

+ 253 - 6
pages/Login/clientIndex.vue

@@ -1,6 +1,253 @@
-<template>
-	<ClientLoginBox></ClientLoginBox>
-</template>
-<script setup>
-	import ClientLoginBox  from './components/clientloginBox.vue'
-</script>
+<template>
+	<view class="phone-login-page">
+		<view class="login-wrap-box">
+			<view class="bjcx-head-box">
+				<icon class="bjcx-logo-box"></icon>
+				<view class="bjcx-logo-title">家政学</view>
+			</view>
+			
+			<!-- 新增:APP分享过来的微信授权 -->
+			<view v-if="fromAppShare && !showNormalLogin" class="wechat-auth-box">
+				<view class="auth-tips">欢迎使用小程序</view>
+				<button 
+					class="wechat-auth-btn" 
+					open-type="getUserInfo" 
+					@getuserinfo="onWechatAuth"
+				>
+					微信一键登录
+				</button>
+				<view class="switch-login" @click="showNormalLogin = true">使用账号登录</view>
+			</view>
+			
+			<!-- 原有登录表单 -->
+			<view v-else>
+				<view class="login-input-box">
+					<icon class="user-icon"></icon>
+					<input class="login-input" type="text" v-model="userName" placeholder="请输入手机号" @input="userInputChange">
+					<view class="close-btn" v-if="clearTelIcon" @click="clearTel"></view>
+				</view>
+				<view class="login-input-box">
+					<icon class="tel-icon"></icon>
+					<input class="login-input" placeholder="请输入证件号后六位" v-model="password" :password="showPassword" 
+					 @input="passwordInputChange"/>
+					<text class="login-eye" :class="[!showPassword ? 'uni-eye-active' : '']"
+						@click="changePassword"></text>
+					<view class="close-btn" v-if="clearPwIcon" @click="clearPw"></view>
+				</view>
+				
+				<!-- 协议勾选框和按钮 -->
+				<view class="agreement-checkbox-box">
+					<checkbox-group @change="handleChange">
+						<checkbox class="agreement-checkbox-input" color="#3fd2a1" value="agree"
+							:checked="isAgreed" style="transform:scale(0.7)" />
+					</checkbox-group>
+					<view class="agreement-text-box">
+						在使用当前小程序服务之前,请仔细阅读<view class="agreement-text" @click="agreeBtn('yhxy')">《诚祥学用户协议》</view>和<view
+							@click="agreeBtn('ystk')" class="agreement-text">《诚祥学隐私政策》</view>,如您同意,请勾选后开始使用
+					</view>
+				</view>
+				
+				<button type="default" @click="handleLogin" :disabled="!isAgreed" class="phone-green-btn login-btn">登录</button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script setup>
+	import cacheManager from '@/utils/cacheManager.js'
+	import * as httpApi from "@/api/login.js"
+	import {ref} from "vue"
+	import {toast} from "@/utils/common";
+	import {useIsCanBack} from "@/store/isCanBack.js"
+    import { onLoad } from "@dcloudio/uni-app";
+	
+	// 原有变量
+	const userName = ref('')
+	const password = ref('')
+	const showPassword= ref(true)
+	const clearTelIcon= ref(false)
+	const clearPwIcon= ref(false)
+	const isAgreed = ref(false)
+	
+	// 新增变量
+	const fromAppShare = ref(false) // 是否来自APP分享
+	const showNormalLogin = ref(false) // 是否显示普通登录
+	
+	const store = useIsCanBack();
+
+    onLoad((options) => {
+        // 判断是否来自APP分享
+        if (options.from === 'appcx') {
+            fromAppShare.value = true
+        }
+        getAllImg();
+    })
+    
+    // 微信授权登录
+    async function onWechatAuth(e) {
+        if (e.detail.errMsg.includes('fail')) {
+            toast('授权失败')
+            return
+        }
+        
+        uni.showLoading({ title: '登录中' })
+        
+        try {
+            // 获取微信code
+            const loginRes = await uni.login()
+            
+            // 调用后端微信登录接口
+            const result = await httpApi.wechatLogin({
+                code: loginRes.code,
+                userInfo: e.detail.userInfo
+            })
+            
+            if (result.data.success) {
+                // 保存用户信息
+                cacheManager.set('auth', result.data)
+                
+                // 检查手机号绑定状态
+                const bindResult = await httpApi.checkPhoneBind()
+                
+                if (bindResult.data.hasPhone) {
+                    // 已绑定手机号,进入首页
+                    store.setIsCanBack(false)
+                    gotoPage()
+                } else {
+                    // 未绑定手机号,跳转绑定页面
+                    uni.navigateTo({
+                        url: '/pages/bind-phone/bind-phone'
+                    })
+                }
+            }
+        } catch (error) {
+            toast('微信登录失败')
+        } finally {
+            uni.hideLoading()
+        }
+    }
+
+    // 你原有的所有方法都不变
+    function handleChange() {
+        isAgreed.value = !isAgreed.value
+    }
+    
+    function agreeBtn(code) {
+        if (code === 'yhxy') { 
+            uni.navigateTo({
+                url:"/pages/client/my/xieyi"
+            })
+        } else {
+            uni.navigateTo({
+                url:"/pages/client/my/zhengce"
+            })
+        }
+    }
+
+    function userInputChange(event){
+        if (event.detail.value.length > 0) {
+            clearTelIcon.value = true;
+        } else {
+            clearTelIcon.value = false;
+        }
+    }
+    
+    function passwordInputChange(event){
+        if (event.detail.value.length > 0) {
+            clearPwIcon.value = true;
+        } else {
+            clearPwIcon.value = false;
+        }
+    }
+    
+    function clearTel(){
+        userName.value = '';
+        clearTelIcon.value = false;
+    }
+    
+    function clearPw(){
+        password.value = '';
+        clearPwIcon.value = false;
+    }
+
+    function changePassword() {
+        showPassword.value = !showPassword.value;
+    }
+    
+    function handleLogin() {
+        if(userName.value.length ===0){
+            toast('请输入手机号!')
+            return
+        }
+        
+        if(password.value.length ===0){
+            toast('请输入密码!')
+            return
+        }
+        
+        const trimmedUserName = userName.value;
+        const trimmedPassword = password.value;
+        
+        uni.showLoading({
+            title: '登录中'
+        })
+        
+        httpApi.loginTemp({
+            type:2,
+            userName: trimmedUserName,
+            password:trimmedPassword,
+        }).then(res => {
+            if(res.data.type ===4){
+                cacheManager.set('auth', res.data)
+                store.setIsCanBack(false)
+                gotoPage();
+            }else{
+                toast('登录失败,您的身份有误,请联系管理员。')
+            }
+        }).catch(err => {
+            store.setIsCanBack(true)
+        }).finally(err => {
+            uni.hideLoading()
+        })
+    }
+    
+    function gotoPage(){
+        uni.navigateTo({
+            url: `/pages/client/ShouYe/shouye`
+        })
+    }
+
+    function getAllImg() {
+        httpApi.getAllImgList({}).then(res => {
+            cacheManager.set('projectImg', res.data)
+        });
+    }
+</script>
+
+<style scoped>
+/* 新增样式 */
+.wechat-auth-box {
+    text-align: center;
+    padding: 40rpx 0;
+}
+
+.auth-tips {
+    font-size: 32rpx;
+    color: #333;
+    margin-bottom: 60rpx;
+}
+
+.wechat-auth-btn {
+    background-color: #07C160;
+    color: white;
+    border-radius: 50rpx;
+    margin-bottom: 30rpx;
+}
+
+.switch-login {
+    color: #007AFF;
+    font-size: 28rpx;
+}
+
+/* 你原有的所有样式都保持不变 */
+</style>

+ 0 - 193
pages/Login/components/clientloginBox.vue

@@ -1,193 +0,0 @@
-<template>
-	<view class="phone-login-page">
-		<view class="login-wrap-box">
-			<view class="bjcx-head-box">
-				<icon class="bjcx-logo-box"></icon>
-				<view class="bjcx-logo-title">家政学</view>
-			</view>
-			
-			<view class="login-input-box">
-				<icon class="user-icon"></icon>
-				<input class="login-input" type="text" v-model="userName" placeholder="请输入手机号" @input="userInputChange">
-				<view class="close-btn" v-if="clearTelIcon" @click="clearTel"></view>
-			</view>
-			<view class="login-input-box">
-				<icon class="tel-icon"></icon>
-				<input class="login-input" placeholder="请输入证件号后六位" v-model="password" :password="showPassword" 
-				 @input="passwordInputChange"/>
-				<text class="login-eye" :class="[!showPassword ? 'uni-eye-active' : '']"
-					@click="changePassword"></text>
-				<view class="close-btn" v-if="clearPwIcon" @click="clearPw"></view>
-			</view>
-			
-			<!-- 协议勾选框和按钮 -->
-			<view class="agreement-checkbox-box">
-				<checkbox-group @change="handleChange">
-					<checkbox class="agreement-checkbox-input" color="#3fd2a1" value="agree"
-						:checked="isAgreed" style="transform:scale(0.7)" />
-				</checkbox-group>
-				<view class="agreement-text-box">
-					在使用当前小程序服务之前,请仔细阅读<view class="agreement-text" @click="agreeBtn('yhxy')">《诚祥学用户协议》</view>和<view
-						@click="agreeBtn('ystk')" class="agreement-text">《诚祥学隐私政策》</view>,如您同意,请勾选后开始使用
-				</view>
-			</view>
-			
-			
-			
-			<button type="default" @click="handleLogin" :disabled="!isAgreed" class="phone-green-btn login-btn">登录</button>
-		<!-- 已加密的:{{lliPassword}} -->
-		</view>
-	<!-- 	<passwordLli ref="passLLiRef" :password="password" @lli-password="onLliPassword" /> -->
-	</view>
-</template>
-
-<script setup>
-	import cacheManager from '@/utils/cacheManager.js'
-	import * as httpApi from "@/api/login.js"
-	// import passwordLli from "@/components/password-lli/password-lli.vue";
-	import {ref} from "vue"
-	import {toast} from "@/utils/common";
-	import {useIsCanBack} from "@/store/isCanBack.js"
-  import {
-    onLoad
-  } from "@dcloudio/uni-app";
-	
-	
-	const userName = ref('') // 用户名
-	const password = ref('') // 密码
-	const lliPassword = ref('') // 加密后的密码
-	const passLLiRef = ref(null)
-	const showPassword= ref(true)
-	const clearTelIcon= ref(false)
-	const clearPwIcon= ref(false)
-	const isAgreed = ref(false)
-	
-	const store = useIsCanBack();
-
-  onLoad(() => {
-    getAllImg();
-  })
-  
-  function handleChange() {
-	  isAgreed.value = !isAgreed.value
-  }
-  function agreeBtn(code) {
-	  if (code === 'yhxy') { 
-		  uni.navigateTo({
-		  	url:"/pages/client/my/xieyi"
-		  })
-	  } else {
-		  uni.navigateTo({
-		  	url:"/pages/client/my/zhengce"
-		  })
-	  }
-  }
-
-	// 加密
-	function handleUpdateLLiPassword() {
-		console.log('handleUpdateLLiPassword')
-		passLLiRef.value.lliPassword();
-	}
-	function onLliPassword(password) {
-		console.log('onLliPassword',password)
-		lliPassword.value = password;
-	}
-	
-	// 手机号校验
-	function userInputChange(event){
-		if (event.detail.value.length > 0) {
-			clearTelIcon.value = true;
-		} else {
-			clearTelIcon.value = false;
-		}
-	}
-	
-	// 密码校验
-	function passwordInputChange(event){
-		if (event.detail.value.length > 0) {
-			clearPwIcon.value = true;
-		} else {
-			clearPwIcon.value = false;
-		}
-	}
-	
-	// 清除手机号
-	function clearTel(){
-		userName.value = '';
-		clearTelIcon.value = false;
-	}
-	
-	// 清除密码
-	function clearPw(){
-		password.value = '';
-		clearPwIcon.value = false;
-	}
-
-	// 密码显隐
-	function changePassword() {
-      showPassword.value = !showPassword.value;
-    }
-	
-	// 登录
-	function handleLogin() {
-		if(userName.value.length ===0){
-			toast('请输入手机号!')
-			return
-		}
-		
-		if(password.value.length ===0){
-			toast('请输入密码!')
-			return
-		}
-		
-		// 去除 userName 两端的空格
-		const trimmedUserName = userName.value;
-		const trimmedPassword = password.value;
-		
-		uni.showLoading({
-			title: '登录中'
-		})
-		
-		httpApi.loginTemp({
-			// type 1app 2为H5
-			type:2,
-			userName: trimmedUserName,
-			password:trimmedPassword,
-			
-		}).then(res => {
-			// 4为家政人员
-			if(res.data.type ===4){
-				cacheManager.set('auth', res.data)
-				store.setIsCanBack(false)
-				// 页面跳转
-				gotoPage();
-			}else{
-				toast('登录失败,您的身份有误,请联系管理员。')
-			}
-		}).catch(err => {
-			store.setIsCanBack(true)
-		}).finally(err => {
-			uni.hideLoading()
-		})
-	}
-	
-	// 跳转
-	function gotoPage(){
-        uni.navigateTo({
-          url: `/pages/client/ShouYe/shouye`
-        })
-	}
-
-  function getAllImg() {
-    httpApi.getAllImgList({}).then(res => {
-      cacheManager.set('projectImg', res.data)
-
-
-      // defultKsImg.value = cacheManager.get('projectImg').index_ks_default
-    });
-  }
-</script>
-
-<style>
-
-</style>