登录页面设计

This commit is contained in:
minimaxagent1 2025-08-12 15:58:06 +08:00
parent 15b551e01b
commit bea633cea7
4 changed files with 26 additions and 350 deletions

View File

@ -27,8 +27,6 @@
<text class="agreement-link" @click="showPrivacyPolicy">隐私政策</text> <text class="agreement-link" @click="showPrivacyPolicy">隐私政策</text>
</view> </view>
<!-- 服务条款弹窗 --> <!-- 服务条款弹窗 -->
<view v-if="showServiceTermsPopup" class="popup-overlay" @click="closeServiceTermsPopup"> <view v-if="showServiceTermsPopup" class="popup-overlay" @click="closeServiceTermsPopup">
<view class="popup-content" @click.stop> <view class="popup-content" @click.stop>
@ -79,7 +77,6 @@ import { commonEnum } from "../../enum/commonEnum";
export default { export default {
data() { data() {
return { return {
currentTime: '',
loginLoading: false, loginLoading: false,
hasAgreed: false, hasAgreed: false,
hasReadServiceTerms: false, hasReadServiceTerms: false,
@ -89,45 +86,23 @@ export default {
serviceTermsContent: '', serviceTermsContent: '',
privacyPolicyContent: '', privacyPolicyContent: '',
scrollTop: 0, scrollTop: 0,
statusBarHeight: 0,
} }
}, },
computed: { computed: {
CommonEnum() { CommonEnum() {
return commonEnum return commonEnum
},
canLogin() {
return this.hasAgreed;
} }
}, },
onLoad() { onLoad() {
//
const systemInfo = uni.getSystemInfoSync();
this.statusBarHeight = systemInfo.statusBarHeight || 0;
// loading
this.pageLoading = new AutoLoadingManager(); this.pageLoading = new AutoLoadingManager();
//
this.updateTime();
setInterval(this.updateTime, 1000);
}, },
onUnload() { onUnload() {
// loading
forceHideLoading(); forceHideLoading();
if (this.pageLoading) { if (this.pageLoading) {
this.pageLoading.destroy() this.pageLoading.destroy()
} }
}, },
methods: { methods: {
updateTime() {
const now = new Date();
const hours = now.getHours().toString().padStart(2, '0');
const minutes = now.getMinutes().toString().padStart(2, '0');
this.currentTime = `${hours}:${minutes}`;
},
//
toggleAgreement() { toggleAgreement() {
if (this.hasReadServiceTerms && this.hasReadPrivacyPolicy) { if (this.hasReadServiceTerms && this.hasReadPrivacyPolicy) {
this.hasAgreed = !this.hasAgreed; this.hasAgreed = !this.hasAgreed;
@ -139,7 +114,6 @@ export default {
} }
}, },
//
async showServiceTerms() { async showServiceTerms() {
try { try {
const res = await getServiceTerms(); const res = await getServiceTerms();
@ -165,7 +139,6 @@ export default {
} }
}, },
//
async showPrivacyPolicy() { async showPrivacyPolicy() {
try { try {
const res = await getPrivacyPolicy(); const res = await getPrivacyPolicy();
@ -191,17 +164,14 @@ export default {
} }
}, },
//
closeServiceTermsPopup() { closeServiceTermsPopup() {
this.showServiceTermsPopup = false; this.showServiceTermsPopup = false;
}, },
//
closePrivacyPolicyPopup() { closePrivacyPolicyPopup() {
this.showPrivacyPolicyPopup = false; this.showPrivacyPolicyPopup = false;
}, },
//
async agreeServiceTerms() { async agreeServiceTerms() {
this.hasReadServiceTerms = true; this.hasReadServiceTerms = true;
this.closeServiceTermsPopup(); this.closeServiceTermsPopup();
@ -214,7 +184,6 @@ export default {
} }
}, },
//
async agreePrivacyPolicy() { async agreePrivacyPolicy() {
this.hasReadPrivacyPolicy = true; this.hasReadPrivacyPolicy = true;
this.closePrivacyPolicyPopup(); this.closePrivacyPolicyPopup();
@ -227,14 +196,12 @@ export default {
} }
}, },
//
checkAgreementStatus() { checkAgreementStatus() {
if (this.hasReadServiceTerms && this.hasReadPrivacyPolicy) { if (this.hasReadServiceTerms && this.hasReadPrivacyPolicy) {
this.hasAgreed = true; this.hasAgreed = true;
} }
}, },
//
async showUnreadTerms() { async showUnreadTerms() {
if (!this.hasReadServiceTerms) { if (!this.hasReadServiceTerms) {
await this.showServiceTerms(); await this.showServiceTerms();
@ -339,58 +306,9 @@ page {
.login-container { .login-container {
padding-bottom: 40rpx; padding-bottom: 40rpx;
max-width: 750rpx; max-width: 750rpx;
background: #ffffff; background: #ffffff;
} }
.status-icons {
display: flex;
gap: 8rpx;
}
.status-icon {
font-size: 20rpx;
}
/* 头部区域 */
.header-section {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 30rpx;
margin-bottom: 40rpx;
}
.header-title {
font-size: 32rpx;
font-weight: 600;
color: #333;
}
.header-actions {
display: flex;
gap: 20rpx;
}
.action-btn {
font-size: 32rpx;
padding: 10rpx;
color: #666;
}
/* 主要内容区域 */
.main-content {
padding: 0 30rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 40vh;
}
/* Logo区域 */
.logo-section { .logo-section {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -399,125 +317,36 @@ page {
margin-bottom: 80rpx; margin-bottom: 80rpx;
width: 100%; width: 100%;
margin-top: 330rpx; margin-top: 330rpx;
//border:green 1px solid;
} }
.logo-image { .logo-image {
width: 276rpx; width: 276rpx;
height: 276rpx; height: 276rpx;
border-radius: 28rpx;
} }
.main-content {
padding: 0 53rpx;
.form-group {
margin-bottom: 30rpx;
}
.input-container {
position: relative;
display: flex;
align-items: center;
background: #f8f9fa;
border-radius: 25rpx;
padding: 0 20rpx;
border: 2rpx solid transparent;
transition: all 0.3s ease;
}
.input-container:focus-within {
border-color: #ff9a9e;
background: #fff;
box-shadow: 0 0 0 6rpx rgba(255, 154, 158, 0.1);
}
.input-icon {
font-size: 32rpx;
margin-right: 20rpx;
color: #999;
}
.form-input {
flex: 1;
height: 80rpx;
font-size: 28rpx;
color: #333;
background: transparent;
border: none;
outline: none;
}
.form-input::placeholder {
color: #999;
}
.password-toggle {
font-size: 32rpx;
padding: 10rpx;
color: #999;
}
/* 表单选项 */
.form-options {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 40rpx;
}
.remember-password {
display: flex;
align-items: center;
gap: 10rpx;
}
.checkbox {
width: 28rpx;
height: 28rpx;
border: 2rpx solid #ddd;
border-radius: 6rpx;
display: flex; display: flex;
flex-direction: column;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
background: #fff; margin-top: 654rpx;
transition: all 0.3s ease; //border: red 1px solid;
} }
.checkbox.checked {
background: #ff9a9e;
border-color: #ff9a9e;
}
.checkmark {
color: #fff;
font-size: 18rpx;
font-weight: bold;
}
.option-text {
font-size: 26rpx;
color: #666;
}
.forgot-password {
font-size: 26rpx;
color: #ff9a9e;
text-decoration: underline;
}
/* 登录按钮 */
.login-btn { .login-btn {
width: 100%; width: 100%;
height: 90rpx; height: 98rpx;
background: #ff6b35; background: #F15A04;
border-radius: 45rpx; border-radius: 10rpx;
border: none; border: none;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
margin-bottom: 40rpx;
transition: all 0.3s ease; transition: all 0.3s ease;
box-shadow: 0 4rpx 12rpx rgba(255, 107, 53, 0.3); box-shadow: 0 4rpx 12rpx rgba(255, 107, 53, 0.3);
} }
@ -538,7 +367,6 @@ page {
color: #fff; color: #fff;
} }
/* 底部协议 */
.agreement-section { .agreement-section {
display: flex; display: flex;
align-items: center; align-items: center;
@ -588,7 +416,6 @@ page {
text-decoration: underline; text-decoration: underline;
} }
/* 弹窗样式 */
.popup-overlay { .popup-overlay {
position: fixed; position: fixed;
top: 0; top: 0;

File diff suppressed because one or more lines are too long

View File

@ -9,7 +9,6 @@ const utils_loadingManager = require("../../utils/loading-manager.js");
const _sfc_main = { const _sfc_main = {
data() { data() {
return { return {
currentTime: "",
loginLoading: false, loginLoading: false,
hasAgreed: false, hasAgreed: false,
hasReadServiceTerms: false, hasReadServiceTerms: false,
@ -18,24 +17,16 @@ const _sfc_main = {
showPrivacyPolicyPopup: false, showPrivacyPolicyPopup: false,
serviceTermsContent: "", serviceTermsContent: "",
privacyPolicyContent: "", privacyPolicyContent: "",
scrollTop: 0, scrollTop: 0
statusBarHeight: 0
}; };
}, },
computed: { computed: {
CommonEnum() { CommonEnum() {
return enum_commonEnum.commonEnum; return enum_commonEnum.commonEnum;
},
canLogin() {
return this.hasAgreed;
} }
}, },
onLoad() { onLoad() {
const systemInfo = common_vendor.index.getSystemInfoSync();
this.statusBarHeight = systemInfo.statusBarHeight || 0;
this.pageLoading = new utils_loadingManager.AutoLoadingManager(); this.pageLoading = new utils_loadingManager.AutoLoadingManager();
this.updateTime();
setInterval(this.updateTime, 1e3);
}, },
onUnload() { onUnload() {
utils_loadingManager.forceHideLoading(); utils_loadingManager.forceHideLoading();
@ -44,13 +35,6 @@ const _sfc_main = {
} }
}, },
methods: { methods: {
updateTime() {
const now = /* @__PURE__ */ new Date();
const hours = now.getHours().toString().padStart(2, "0");
const minutes = now.getMinutes().toString().padStart(2, "0");
this.currentTime = `${hours}:${minutes}`;
},
// 切换同意状态
toggleAgreement() { toggleAgreement() {
if (this.hasReadServiceTerms && this.hasReadPrivacyPolicy) { if (this.hasReadServiceTerms && this.hasReadPrivacyPolicy) {
this.hasAgreed = !this.hasAgreed; this.hasAgreed = !this.hasAgreed;
@ -61,7 +45,6 @@ const _sfc_main = {
}); });
} }
}, },
// 显示服务条款
async showServiceTerms() { async showServiceTerms() {
try { try {
const res = await api_article_article.getServiceTerms(); const res = await api_article_article.getServiceTerms();
@ -79,14 +62,13 @@ const _sfc_main = {
}); });
} }
} catch (error) { } catch (error) {
common_vendor.index.__f__("error", "at pages/login/login.vue:160", "获取服务条款失败:", error); common_vendor.index.__f__("error", "at pages/login/login.vue:134", "获取服务条款失败:", error);
common_vendor.index.showToast({ common_vendor.index.showToast({
title: "获取服务条款失败", title: "获取服务条款失败",
icon: "none" icon: "none"
}); });
} }
}, },
// 显示隐私政策
async showPrivacyPolicy() { async showPrivacyPolicy() {
try { try {
const res = await api_article_article.getPrivacyPolicy(); const res = await api_article_article.getPrivacyPolicy();
@ -104,22 +86,19 @@ const _sfc_main = {
}); });
} }
} catch (error) { } catch (error) {
common_vendor.index.__f__("error", "at pages/login/login.vue:186", "获取隐私政策失败:", error); common_vendor.index.__f__("error", "at pages/login/login.vue:159", "获取隐私政策失败:", error);
common_vendor.index.showToast({ common_vendor.index.showToast({
title: "获取隐私政策失败", title: "获取隐私政策失败",
icon: "none" icon: "none"
}); });
} }
}, },
// 关闭服务条款弹窗
closeServiceTermsPopup() { closeServiceTermsPopup() {
this.showServiceTermsPopup = false; this.showServiceTermsPopup = false;
}, },
// 关闭隐私政策弹窗
closePrivacyPolicyPopup() { closePrivacyPolicyPopup() {
this.showPrivacyPolicyPopup = false; this.showPrivacyPolicyPopup = false;
}, },
// 同意服务条款
async agreeServiceTerms() { async agreeServiceTerms() {
this.hasReadServiceTerms = true; this.hasReadServiceTerms = true;
this.closeServiceTermsPopup(); this.closeServiceTermsPopup();
@ -130,7 +109,6 @@ const _sfc_main = {
}, 500); }, 500);
} }
}, },
// 同意隐私政策
async agreePrivacyPolicy() { async agreePrivacyPolicy() {
this.hasReadPrivacyPolicy = true; this.hasReadPrivacyPolicy = true;
this.closePrivacyPolicyPopup(); this.closePrivacyPolicyPopup();
@ -141,13 +119,11 @@ const _sfc_main = {
}, 500); }, 500);
} }
}, },
// 检查同意状态
checkAgreementStatus() { checkAgreementStatus() {
if (this.hasReadServiceTerms && this.hasReadPrivacyPolicy) { if (this.hasReadServiceTerms && this.hasReadPrivacyPolicy) {
this.hasAgreed = true; this.hasAgreed = true;
} }
}, },
// 显示未阅读的条款
async showUnreadTerms() { async showUnreadTerms() {
if (!this.hasReadServiceTerms) { if (!this.hasReadServiceTerms) {
await this.showServiceTerms(); await this.showServiceTerms();
@ -172,7 +148,7 @@ const _sfc_main = {
common_vendor.index.login({ common_vendor.index.login({
success(res) { success(res) {
if (res.code) { if (res.code) {
common_vendor.index.__f__("log", "at pages/login/login.vue:266", "登录!", res); common_vendor.index.__f__("log", "at pages/login/login.vue:233", "登录!", res);
let data = { let data = {
loginCode: res.code, loginCode: res.code,
appId: 1 appId: 1
@ -186,7 +162,7 @@ const _sfc_main = {
} }
utils_loadingManager.forceHideLoading(); utils_loadingManager.forceHideLoading();
if (res2.code == 200) { if (res2.code == 200) {
common_vendor.index.__f__("log", "at pages/login/login.vue:283", res2, "resres"); common_vendor.index.__f__("log", "at pages/login/login.vue:250", res2, "resres");
common_vendor.index.setStorageSync("token", res2.token); common_vendor.index.setStorageSync("token", res2.token);
common_vendor.index.showToast({ common_vendor.index.showToast({
title: "登录成功", title: "登录成功",
@ -207,7 +183,7 @@ const _sfc_main = {
that.pageLoading.hide(); that.pageLoading.hide();
} }
utils_loadingManager.forceHideLoading(); utils_loadingManager.forceHideLoading();
common_vendor.index.__f__("error", "at pages/login/login.vue:305", "登录失败:", error); common_vendor.index.__f__("error", "at pages/login/login.vue:272", "登录失败:", error);
common_vendor.index.showToast({ common_vendor.index.showToast({
title: "登录失败", title: "登录失败",
icon: "none" icon: "none"
@ -216,7 +192,7 @@ const _sfc_main = {
} }
}, },
fail(err) { fail(err) {
common_vendor.index.__f__("error", "at pages/login/login.vue:314", "微信登录失败:", err); common_vendor.index.__f__("error", "at pages/login/login.vue:281", "微信登录失败:", err);
common_vendor.index.showToast({ common_vendor.index.showToast({
title: "微信登录失败", title: "微信登录失败",
icon: "none" icon: "none"

View File

@ -31,48 +31,6 @@ page {
max-width: 750rpx; max-width: 750rpx;
background: #ffffff; background: #ffffff;
} }
.status-icons {
display: flex;
gap: 8rpx;
}
.status-icon {
font-size: 20rpx;
}
/* 头部区域 */
.header-section {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 30rpx;
margin-bottom: 40rpx;
}
.header-title {
font-size: 32rpx;
font-weight: 600;
color: #333;
}
.header-actions {
display: flex;
gap: 20rpx;
}
.action-btn {
font-size: 32rpx;
padding: 10rpx;
color: #666;
}
/* 主要内容区域 */
.main-content {
padding: 0 30rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 40vh;
}
/* Logo区域 */
.logo-section { .logo-section {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -85,105 +43,24 @@ page {
.logo-image { .logo-image {
width: 276rpx; width: 276rpx;
height: 276rpx; height: 276rpx;
border-radius: 28rpx;
} }
.form-group { .main-content {
margin-bottom: 30rpx; padding: 0 53rpx;
}
.input-container {
position: relative;
display: flex;
align-items: center;
background: #f8f9fa;
border-radius: 25rpx;
padding: 0 20rpx;
border: 2rpx solid transparent;
transition: all 0.3s ease;
}
.input-container:focus-within {
border-color: #ff9a9e;
background: #fff;
box-shadow: 0 0 0 6rpx rgba(255, 154, 158, 0.1);
}
.input-icon {
font-size: 32rpx;
margin-right: 20rpx;
color: #999;
}
.form-input {
flex: 1;
height: 80rpx;
font-size: 28rpx;
color: #333;
background: transparent;
border: none;
outline: none;
}
.form-input::-webkit-input-placeholder {
color: #999;
}
.form-input::placeholder {
color: #999;
}
.password-toggle {
font-size: 32rpx;
padding: 10rpx;
color: #999;
}
/* 表单选项 */
.form-options {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 40rpx;
}
.remember-password {
display: flex;
align-items: center;
gap: 10rpx;
}
.checkbox {
width: 28rpx;
height: 28rpx;
border: 2rpx solid #ddd;
border-radius: 6rpx;
display: flex; display: flex;
flex-direction: column;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
background: #fff; margin-top: 654rpx;
transition: all 0.3s ease;
} }
.checkbox.checked {
background: #ff9a9e;
border-color: #ff9a9e;
}
.checkmark {
color: #fff;
font-size: 18rpx;
font-weight: bold;
}
.option-text {
font-size: 26rpx;
color: #666;
}
.forgot-password {
font-size: 26rpx;
color: #ff9a9e;
text-decoration: underline;
}
/* 登录按钮 */
.login-btn { .login-btn {
width: 100%; width: 100%;
height: 90rpx; height: 98rpx;
background: #ff6b35; background: #F15A04;
border-radius: 45rpx; border-radius: 10rpx;
border: none; border: none;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
margin-bottom: 40rpx;
transition: all 0.3s ease; transition: all 0.3s ease;
box-shadow: 0 4rpx 12rpx rgba(255, 107, 53, 0.3); box-shadow: 0 4rpx 12rpx rgba(255, 107, 53, 0.3);
} }
@ -200,8 +77,6 @@ page {
font-weight: 600; font-weight: 600;
color: #fff; color: #fff;
} }
/* 底部协议 */
.agreement-section { .agreement-section {
display: flex; display: flex;
align-items: center; align-items: center;
@ -244,8 +119,6 @@ page {
color: #ff6b35; color: #ff6b35;
text-decoration: underline; text-decoration: underline;
} }
/* 弹窗样式 */
.popup-overlay { .popup-overlay {
position: fixed; position: fixed;
top: 0; top: 0;