From cf7e71c6d0fb64eeb6b5deac540da843b4bb465c Mon Sep 17 00:00:00 2001 From: QYF-GitLab1 <1940665526@qq.com> Date: 星期二, 26 八月 2025 10:41:52 +0800 Subject: [PATCH] 关于我们-理念与品牌文化 --- src/layout/components/login.vue | 492 ++++++++++++++++++++++-------------------------------- 1 files changed, 201 insertions(+), 291 deletions(-) diff --git a/src/layout/components/login.vue b/src/layout/components/login.vue index 173eb42..ab585b7 100644 --- a/src/layout/components/login.vue +++ b/src/layout/components/login.vue @@ -1,222 +1,146 @@ <template> - <el-dialog - align-center - append-to-body - v-model="dialogFormVisible" - @close="closeDialog" - @open="openDialog" - class="fansdialog" - > - <div style="display: flex; justify-content: space-around"> - <el-image :src="dialogLeftImg" class="leftImg" /> - + <el-dialog append-to-body v-model="dialogFormVisible" @close="closeDialog" @open="openDialog" width="804px" + class="fansdialog" style="padding: 0; padding-bottom: 0px"> + <div class="changeDialog"> + <div class="leftImg"></div> <div class="logIn"> <div class="signUpTitle" v-if="flag == 'logIn'"> <ul> - <li - @click="signUpWay = 'authSignUp'" - :style="{ - color: signUpWay == 'authSignUp' ? '#144941' : '#545C63', - }" - > + <li @click="signUpWay = 'authSignUp'" :style="{ + color: signUpWay == 'authSignUp' ? '#019E58' : '#545C63', + }" style="font-weight: 700"> 鎵嬫満鍙风櫥褰� </li> <li>|</li> - <li - @click="wechatLoginOpen" - :style="{ color: signUpWay == 'wechat' ? '#144941' : '#545C63' }" - > + <li @click="wechatLoginOpen" :style="{ color: signUpWay == 'wechat' ? '#019E58' : '#545C63' }" + style="font-weight: 700"> 寰俊鐧诲綍 </li> </ul> </div> <div v-else style="text-align: center; color: #144941">娉ㄥ唽</div> - <div - class="singUpPhone" - v-if="signUpWay === 'phone' || 'authSignUp'" - :style="{ height: signUpWay == 'findPassword' ? '450px' : '400px' }" - > - <el-form - :model="passFormData" - v-if="signUpWay === 'phone' || 'authSignUp'" - ref="passFormRef" - @keyup.enter="signInSystem(passFormRef)" - > - <el-form-item - v-if="signUpWay !== 'findPassword'" - :rules="[ - { min: 11, max: 11, message: '璇疯緭鍏�11浣嶇數璇濆彿鐮�' }, - { - validator: (_, value, callback) => { - if ( - !/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/.test( - value - ) - ) { - callback('璇疯緭鍏�11浣嶇數璇濆彿鐮�'); - } else { - callback(); - } - }, + <div class="singUpPhone" v-if="signUpWay === 'phone' || 'authSignUp'" + :style="{ height: signUpWay == 'findPassword' ? '450px' : '400px' }"> + <el-form :model="passFormData" v-if="signUpWay === 'phone' || 'authSignUp'" ref="passFormRef" + @keyup.enter="signInSystem(passFormRef)"> + <el-form-item v-if="signUpWay !== 'findPassword'" :rules="[ + { min: 11, max: 11, message: '璇疯緭鍏�11浣嶇數璇濆彿鐮�' }, + { + validator: (_, value, callback) => { + if ( + !/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/.test( + value, + ) + ) { + callback('璇疯緭鍏�11浣嶇數璇濆彿鐮�') + } else { + callback() + } }, - ]" - prop="telNumber" - > - <el-input - v-model="passFormData.telNumber" - placeholder="璇疯緭鍏ユ墜鏈哄彿" - size="large" - > + }, + ]" prop="telNumber"> + <el-input v-model="passFormData.telNumber" placeholder="璇疯緭鍏ユ墜鏈哄彿" size="large"> <template #prepend> - <el-select - v-model="select" - placeholder="Select" - style="width: 110px" - class="selectPhone" - > + <el-select v-model="select" placeholder="Select" style="width: 110px" class="selectPhone"> <el-option label="涓浗+86" value="86" /> </el-select> </template> </el-input> </el-form-item> <el-form-item> - <el-button class="yanzhengBtn" @click="sliderImgDialogVisable = true" - >楠岃瘉</el-button - > + <el-button class="yanzhengBtn" @click="sliderImgDialogVisable = true">楠岃瘉</el-button> </el-form-item> - <el-form-item - v-if="signUpWay === 'authSignUp'" - class="codeWay" - :rules="[ - { required: true, message: '璇疯緭鍏ラ獙璇佺爜' }, - { min: 4, max: 6, message: '璇疯緭鍏ユ湁鏁堥獙璇佺爜' }, - ]" - prop="telCode" - > - <el-input - v-model="passFormData.telCode" - placeholder="璇疯緭鍏ラ獙璇佺爜" - size="large" - /> - <el-button - type="primary" - class="codeBtn" - :disabled="countDown != 0" - @click="getCode(passFormRef)" - >{{ - countDown == 0 ? "鑾峰彇楠岃瘉鐮�" : "楠岃瘉鐮�(" + countDown + "s)" - }}</el-button - > + <el-form-item v-if="signUpWay === 'authSignUp'" class="codeWay" :rules="[ + { required: true, message: '璇疯緭鍏ラ獙璇佺爜' }, + { min: 4, max: 6, message: '璇疯緭鍏ユ湁鏁堥獙璇佺爜' }, + ]" prop="telCode"> + <el-input v-model="passFormData.telCode" placeholder="璇疯緭鍏ラ獙璇佺爜" size="large" /> + <el-button type="primary" class="codeBtn" :disabled="countDown != 0" @click="getCode(passFormRef)">{{ + countDown == 0 ? + '鑾峰彇楠岃瘉鐮�' : '楠岃瘉鐮�(' + countDown + 's)' }}</el-button> </el-form-item> - <el-form-item - v-if="flag === 'signUp'" - :rules="[ - { required: true, message: '璇疯緭鍏ュ瘑鐮�' }, - { min: 8, max: 16, message: '瀵嗙爜鍦�8鍒�16浣嶄箣闂�' }, - { - validator: (rule, value, callback) => { - if (!/\d/.test(value) || /^\d+$/.test(value)) { - callback('瀵嗙爜涓嶈兘涓虹函鏁板瓧鎴栧瓧姣�'); - } else { - callback(); - } - }, + <el-form-item v-if="flag === 'signUp'" :rules="[ + { required: true, message: '璇疯緭鍏ュ瘑鐮�' }, + { min: 8, max: 16, message: '瀵嗙爜鍦�8鍒�16浣嶄箣闂�' }, + { + validator: (rule, value, callback) => { + if (!/\d/.test(value) || /^\d+$/.test(value)) { + callback('瀵嗙爜涓嶈兘涓虹函鏁板瓧鎴栧瓧姣�') + } else { + callback() + } }, - ]" - prop="password" - class="passwordInput" - > - <el-input - type="password" - show-password - v-model="passFormData.password" - placeholder="璇疯緭鍏ュ瘑鐮�" - size="large" - style="width: 304px" - > + }, + ]" prop="password" class="passwordInput"> + <el-input type="password" show-password v-model="passFormData.password" placeholder="璇疯緭鍏ュ瘑鐮�" size="large" + style="width: 304px"> </el-input> </el-form-item> - <el-form-item - v-if="flag === 'signUp'" - :rules="[ - { required: true, message: '璇疯緭鍏ョ‘璁ゅ瘑鐮�' }, - { validator: validateLogInPassword }, - ]" - prop="confirmPassword" - class="passwordInput" - > - <el-input - type="password" - show-password - v-model="passFormData.confirmPassword" - placeholder="纭瀵嗙爜" - size="large" - style="width: 304px" - /> + <el-form-item v-if="flag === 'signUp'" :rules="[ + { required: true, message: '璇疯緭鍏ョ‘璁ゅ瘑鐮�' }, + { validator: validateLogInPassword }, + ]" prop="confirmPassword" class="passwordInput"> + <el-input type="password" show-password v-model="passFormData.confirmPassword" placeholder="纭瀵嗙爜" + size="large" style="width: 304px" /> </el-form-item> </el-form> - <el-button class="loginBtn" @click="loginBtn">鐧诲綍</el-button> + <el-button class="loginBtn" @click="loginBtn">鐧诲綍 / 娉ㄥ唽</el-button> </div> </div> </div> - <el-dialog - v-model="sliderImgDialogVisable" - align-center - destroy-on-close="true" - width="420" - class="sliderImgDialog" - > + <el-dialog v-model="sliderImgDialogVisable" align-center destroy-on-close="true" width="420" + class="sliderImgDialog"> <verify :MG="MG" @loginImgVerify="loginImgVerify"></verify> </el-dialog> </el-dialog> </template> <script setup> -import { ref, inject, watchEffect, reactive, nextTick } from "vue"; -import dialogLeftImg from "@/assets/images/header/dialogLeftImg.png"; -import verify from "@/components/sliderImg/component/verify.vue"; -import "@/components/sliderImg/sliderImg.js"; -import "@/components/sliderImg/sliderImg.css"; -import { ElMessage } from "element-plus"; -import { useUserStore } from "@/store"; -import { useRouter } from "vue-router"; -const router = useRouter(); +import { ref, inject, watchEffect, reactive, nextTick } from 'vue' +import dialogLeftImg from '@/assets/images/header/dialogLeftImg.png' +import verify from '@/components/sliderImg/component/verify.vue' +import '@/components/sliderImg/sliderImg.js' +import '@/components/sliderImg/sliderImg.css' +import { ElMessage } from 'element-plus' +import { useUserStore } from '@/store' +import { useRouter } from 'vue-router' +const router = useRouter() -const userStore = useUserStore(); +const userStore = useUserStore() -const MG = inject("MG"); -const config = inject("config"); -const dialogFormVisible = ref(false); -const sliderImgDialogVisable = ref(false); -const flag = ref("logIn"); // 鐧诲綍鎴栨敞鍐� +const MG = inject('MG') +const config = inject('config') +const dialogFormVisible = ref(false) +const sliderImgDialogVisable = ref(false) +const flag = ref('logIn') // 鐧诲綍鎴栨敞鍐� -const signUpWay = ref("authSignUp"); // 鐧诲綍鏂瑰紡 -const select = ref("涓浗+86"); -const countDown = ref(0); // 鍊掕鏃舵椂闂� -let timer = null; // 鍊掕鏃跺疄渚� -const passFormRef = ref(); +const signUpWay = ref('authSignUp') // 鐧诲綍鏂瑰紡 +const select = ref('涓浗+86') +const countDown = ref(0) // 鍊掕鏃舵椂闂� +let timer = null // 鍊掕鏃跺疄渚� +const passFormRef = ref() const passFormData = ref({ - telNumber: "", - password: "", - telCode: "", - password: "", - confirmPassword: "", -}); + telNumber: '', + password: '', + telCode: '', + password: '', + confirmPassword: '', +}) const closeDialog = () => { - countDown.value = 0; - clearInterval(timer); + countDown.value = 0 + clearInterval(timer) if (passFormRef.value) { - passFormRef.value.resetFields(); + passFormRef.value.resetFields() } - dialogFormVisible.value = false; -}; + dialogFormVisible.value = false +} // 寮圭獥鎵撳紑浜嬩欢 -const openDialog = () => {}; +const openDialog = () => { } const loginImgVerify = (code) => { - sliderImgDialogVisable.value = false; + sliderImgDialogVisable.value = false MG.identity .getPhoneCode({ phoneNumber: passFormData.value.telNumber, @@ -224,19 +148,14 @@ appRefCode: config.appRefCode, }) .then((res) => { - if (res == "楠岃瘉鐮佸彂閫佹垚鍔�") { - getSecond(60); - ElMessage.success(res); + if (res == '楠岃瘉鐮佸彂閫佹垚鍔�') { + getSecond(60) + ElMessage.success(res) } else { - ElMessage.error(res); + ElMessage.error(res) } - }); -}; - -watchEffect(() => { - if (dialogFormVisible.value) { - } -}); + }) +} //鐧诲綍 @@ -245,39 +164,38 @@ phoneNumber: passFormData.value.telNumber, phoneCaptcha: passFormData.value.telCode, appRefCode: config.appRefCode, - platform: "string", - }; + platform: 'string', + } MG.identity.loginByMobilePhone(query).then((res) => { - console.log("res", res); - userStore.setToken(res.data.accessToken); + console.log('res', res) + userStore.setToken(res.data.accessToken) - getUserInfo(); - }); -}; + getUserInfo() + }) +} const getUserInfo = () => { MG.identity.getCurrentAppUser().then((res) => { - console.log("res", res); + console.log('res', res) if (res) { - let userInfo = res.infoList.find((item) => item.type == "userInfo"); - let userTypeObj = res.infoList.find((item) => item.type == "userType"); + let userInfo = res.infoList.find((item) => item.type == 'userInfo') + let userTypeObj = res.infoList.find((item) => item.type == 'userType') const userData = { - userName: userInfo && userInfo.data ? JSON.parse(userInfo.data).name : "", - school: userInfo && userInfo.data ? JSON.parse(userInfo.data).school : "", - city: userInfo && userInfo.data ? JSON.parse(userInfo.data).city : "", - cityCode: userInfo && userInfo.data ? JSON.parse(userInfo.data).cityCode : "", - address: userInfo && userInfo.data ? JSON.parse(userInfo.data).address : "", - userType: - userTypeObj && userTypeObj.data ? JSON.parse(userTypeObj.data).userType : "", - }; - localStorage.setItem("xiehe-isUserInfo", userData?.userType == "" ? "-1" : "1"); - let teacherRole = res.roleLinks.find((item) => item.role.refCode == "teacher"); - let teacherInfos = res.infoList.find((item) => item.type == "teacherInfo"); - let wechatInfo = res.infoList.find((item) => item.type == "WeChat"); - let studentInfo = res.infoList.find((item) => item.type == "Default"); - let phoneInfo = res.secretList.find((item) => item.type == "MobilePhone"); + userName: userInfo && userInfo.data ? JSON.parse(userInfo.data).name : '', + school: userInfo && userInfo.data ? JSON.parse(userInfo.data).school : '', + city: userInfo && userInfo.data ? JSON.parse(userInfo.data).city : '', + cityCode: userInfo && userInfo.data ? JSON.parse(userInfo.data).cityCode : '', + address: userInfo && userInfo.data ? JSON.parse(userInfo.data).address : '', + userType: userTypeObj && userTypeObj.data ? JSON.parse(userTypeObj.data).userType : '', + } + localStorage.setItem('xiehe-isUserInfo', userData?.userType == '' ? '-1' : '1') + let teacherRole = res.roleLinks.find((item) => item.role.refCode == 'teacher') + let teacherInfos = res.infoList.find((item) => item.type == 'teacherInfo') + let wechatInfo = res.infoList.find((item) => item.type == 'WeChat') + let studentInfo = res.infoList.find((item) => item.type == 'Default') + let phoneInfo = res.secretList.find((item) => item.type == 'MobilePhone') // let nameAndPassword = res.secretList.find((item) => item.type == 'LoginNameAndPassword') - let emailInfo = res.secretList.find((item) => item.type == "EMail"); + let emailInfo = res.secretList.find((item) => item.type == 'EMail') if (teacherRole && teacherInfos) { userStore.setUserInfo({ ...userData, @@ -285,19 +203,19 @@ phoneNumber: phoneInfo?.credential, Email: emailInfo ? emailInfo.credential : JSON.parse(teacherInfos.data).email, icon: wechatInfo?.icon, - role: "Teacher", + role: 'Teacher', roleId: teacherRole.role.id, userId: res.userId, - }); + }) } else if (wechatInfo) { userStore.setUserInfo({ ...userData, ...wechatInfo, phoneNumber: phoneInfo?.credential, Email: emailInfo?.credential, - role: "Student", + role: 'Student', userId: res.userId, - }); + }) } else if (studentInfo) { userStore.setUserInfo({ ...userData, @@ -305,9 +223,9 @@ icon: wechatInfo?.icon, phoneNumber: phoneInfo?.credential, Email: emailInfo?.credential, - role: "Student", + role: 'Student', userId: res.userId, - }); + }) } else if (phoneInfo) { userStore.setUserInfo({ ...userData, @@ -315,32 +233,39 @@ name: phoneInfo?.credential, icon: phoneInfo?.icon, phoneNumber: phoneInfo?.credential, - role: "Student", + role: 'Student', userId: res.userId, - }); + }) } } - router.go(0); - }); -}; + if (localStorage.getItem('loginBack')) { + console.log(localStorage.getItem('loginBack')) + debugger + window.location.href = localStorage.getItem('loginBack') + localStorage.removeItem('loginBack') + } else { + router.go(0) + } + }) +} // 鍊掕鏃� const getSecond = (time) => { if (!timer) { - countDown.value = time; + countDown.value = time timer = setInterval(() => { - countDown.value--; + countDown.value-- if (countDown.value == 0) { - clearInterval(timer); - timer = null; + clearInterval(timer) + timer = null } - }, 1000); + }, 1000) } -}; +} // 鐧诲綍鍜岄噸缃瘑鐮佹寜閽寜閽� const signInSystem = async (formEl) => { - if (!formEl) return; + if (!formEl) return formEl.validate((valid) => { if (valid) { // if (signUpWay.value === 'phone') { @@ -354,27 +279,27 @@ // changePassword() // } } - }); -}; + }) +} const logIn = () => { - dialogFormVisible.value = true; - flag.value = "logIn"; -}; + dialogFormVisible.value = true + flag.value = 'logIn' +} // 鎵撳紑娉ㄥ唽寮圭獥 const signUp = () => { - dialogFormVisible.value = true; - flag.value = "signUp"; -}; + dialogFormVisible.value = true + flag.value = 'signUp' +} const wechatLoginOpen = () => { - signUpWay.value = "wechat"; -}; + signUpWay.value = 'wechat' +} defineExpose({ logIn, signUp, -}); +}) </script> <style lang="less" scoped> @@ -384,45 +309,29 @@ width: 80%; line-height: 24px; color: #000; + span { display: inline-block; } } } + .fansdialog { - width: 806px; + + .changeDialog { + display: flex; + } .leftImg { + background-image: url('@/assets/images/header/dialogLeftImg.png'); + background-size: 100% 100%; + background-position: center; + background-repeat: no-repeat; box-sizing: border-box; - width: 403px; + width: 402px; + height: 481px; } - .el-dialog__header { - padding: 0; - } - - .el-dialog__body { - width: 806px; - height: 575px; - display: flex; - padding: 0 !important; - } - - .leftImg { - .el-image__inner { - width: 403px; - } - } - - .el-dialog__header { - padding: 0; - } - - .el-dialog__body { - width: 806px; - display: flex; - padding: 0 !important; - } } .agreementDialog { @@ -431,11 +340,6 @@ p span { line-height: 24px; - } - - .el-dialog__header { - font-size: 18px; - color: #333; } .el-dialog__body { @@ -465,6 +369,7 @@ } } } + .sliderImgDialog { .el-dialog__body { min-height: 320px; @@ -475,34 +380,45 @@ <style lang="less"> /** 鐧诲綍娉ㄥ唽寮圭獥 */ .logIn { - width: 403px; - height: 100%; - padding-top: 48px; + width: 402px; + height: 481px; display: flex; flex-direction: column; - justify-content: space-around; + justify-content: center; + padding-top: 30px; + box-sizing: border-box; .signUpTitle { width: 100%; + ul { display: flex; justify-content: center; width: 100%; + li { height: 20px; display: flex; align-items: center; + font-family: Microsoft YaHei UI, Microsoft YaHei UI; + font-weight: bold; + font-size: 16px; + color: #019E58; + .el-image { margin-right: 5px; width: 20px; } } + li:nth-child(2n + 1) { cursor: pointer; margin: 0 10px; } + li:first-child { margin-left: 0; + .el-image { width: 10px; } @@ -587,12 +503,14 @@ background-color: #019e58; // opacity: 0.55; } + .yanzhengBtn { width: 100%; height: 41px; background-color: #019e58; color: #fff; } + .loginBtn { width: 76%; height: 41px; @@ -639,6 +557,7 @@ margin-left: 10px; cursor: pointer; position: relative; + span { position: absolute; top: 35px; @@ -660,10 +579,12 @@ line-height: 26px; } } + .policy { cursor: pointer; - color: #ff6c00; + color: #019e58; } + /** 娉ㄥ唽琛ㄥ崟 */ .signUp { width: 403px; @@ -685,7 +606,7 @@ h4 { font-size: 16px; - color: #ff6c00; + color: #019e58; } .logInBox { @@ -706,6 +627,7 @@ font-size: 14px; } } + .agreement { height: 40px; display: flex; @@ -753,6 +675,7 @@ margin-left: 10px; cursor: pointer; position: relative; + span { position: absolute; top: 35px; @@ -783,15 +706,18 @@ flex-direction: column; justify-content: space-between; align-items: center; + .el-form-item { &:last-child { margin-bottom: 0; } + .el-button { height: 40px; margin-left: 10px; } } + h2 { font-size: 20px; margin-top: 70px; @@ -826,20 +752,4 @@ .selectPhone { background: #fff; } - -// .el-select { -// width: 100px; -// height: 30px; -// color: red; -// border: none !important; - -// /deep/ .select-trigger { -// height: 100%; - -// .el-input--suffix { -// height: 100%; -// background-color: #fff; -// } -// } -// } </style> -- Gitblit v1.9.1