From fc81f5a568ea4006e6e7445999c62e906b05eb65 Mon Sep 17 00:00:00 2001 From: inman Date: Fri, 24 Jul 2026 17:11:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=99=BB=E5=BD=95=E9=A1=B5?= =?UTF-8?q?=E4=B8=8E=E9=94=9A=E7=82=B9=E6=BB=9A=E5=8A=A8=E4=BD=93=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/miniprogram/src/app.css | 21 +++++++---- .../src/pages/login/index.config.ts | 3 ++ apps/miniprogram/src/pages/login/index.tsx | 33 ++++++++++-------- .../pages/login/wanderq-logo-black-green.png | Bin 0 -> 9421 bytes src/App.tsx | 28 ++++++++++----- 5 files changed, 55 insertions(+), 30 deletions(-) create mode 100644 apps/miniprogram/src/pages/login/wanderq-logo-black-green.png diff --git a/apps/miniprogram/src/app.css b/apps/miniprogram/src/app.css index 68ae989..c3a109a 100644 --- a/apps/miniprogram/src/app.css +++ b/apps/miniprogram/src/app.css @@ -127,18 +127,25 @@ page, view, text, image, input, button, scroll-view, swiper, swiper-item { .contact-fallback { background: #e8f1e9; } .contact-back { width: 100%; color: #19766a; background: transparent; border: 1px solid #bcd3c5; border-radius: 999px; font-size: 22px; } -.login-page { display: grid; align-content: start; gap: 22px; min-height: 100vh; padding: 64px 32px 100px; background: #f6f4ee; } -.login-hero { display: grid; gap: 14px; padding: 16px 4px 30px; } -.login-title { display: block; color: #182522; font-size: 42px; font-weight: 800; line-height: 1.3; } -.login-note { display: block; color: #718079; font-size: 22px; line-height: 1.6; } -.phone-login-button { width: 100%; color: #fff; background: #19766a; border-radius: 999px; font-size: 25px; } +.login-page { display: flex; align-items: center; justify-content: center; min-height: 100vh; padding: 40px 28px calc(40px + env(safe-area-inset-bottom)); background: #fff; } +.login-content { width: 100%; max-width: 334px; display: flex; flex-direction: column; align-items: center; text-align: center; } +.login-logo { width: 174px; height: auto; margin-bottom: 38px; } +.login-title { display: block; margin-bottom: 42px; color: #182522; font-size: 34px; font-weight: 800; line-height: 1.3; white-space: nowrap; } +.phone-login-button { width: 100%; min-height: 58px; padding: 0 16px; color: #fff; background: #287642; border: 0; border-radius: 999px; box-shadow: 0 10px 22px rgba(40, 118, 66, .18); font-size: 24px; font-weight: 700; line-height: 58px; } +.phone-login-button::after { border: 0; } .phone-login-button[disabled] { opacity: .6; } -.login-message { display: block; color: #b15842; text-align: center; font-size: 20px; line-height: 1.5; } -.login-privacy { display: block; color: #87938c; text-align: center; font-size: 17px; line-height: 1.5; } +.login-message { display: block; margin-top: 16px; padding: 12px 14px; border-radius: 14px; background: #fff1ec; color: #b15842; text-align: center; font-size: 18px; line-height: 1.5; } +.login-benefits { width: 100%; display: flex; justify-content: center; gap: 24px; margin-top: 30px; } +.login-benefit { flex: 1 1 0; min-width: 0; color: #287642; font-size: 17px; font-weight: 700; line-height: 1.3; text-align: center; white-space: nowrap; } @media (max-width: 680px) { .product-grid { grid-template-columns: 1fr; } .hero-copy > text:nth-child(2), .hero-fallback > text:nth-of-type(1) { font-size: 34px; } .section-title { font-size: 31px; } .key-fact-grid { grid-template-columns: 1fr 1fr; } + .login-logo { width: 158px; } + .login-title { font-size: 31px; } + .phone-login-button { font-size: 22px; } + .login-benefits { gap: 10px; } + .login-benefit { font-size: 15px; } } diff --git a/apps/miniprogram/src/pages/login/index.config.ts b/apps/miniprogram/src/pages/login/index.config.ts index 73fccff..c949595 100644 --- a/apps/miniprogram/src/pages/login/index.config.ts +++ b/apps/miniprogram/src/pages/login/index.config.ts @@ -1,4 +1,7 @@ export default definePageConfig({ navigationBarTitleText: "微信手机号登录", + navigationBarBackgroundColor: "#ffffff", + backgroundColor: "#ffffff", + backgroundColorContent: "#ffffff", backgroundTextStyle: "light", }); diff --git a/apps/miniprogram/src/pages/login/index.tsx b/apps/miniprogram/src/pages/login/index.tsx index bc8d8f4..a888cee 100644 --- a/apps/miniprogram/src/pages/login/index.tsx +++ b/apps/miniprogram/src/pages/login/index.tsx @@ -1,7 +1,8 @@ -import { Button, Text, View } from "@tarojs/components"; +import { Button, Image, Text, View } from "@tarojs/components"; import { useState } from "react"; import Taro, { useLoad } from "@tarojs/taro"; import { clearToken, loginMiniProgramWithPhone } from "../../services/api"; +import WANDERQ_LOGO_URL from "./wanderq-logo-black-green.png"; type LoginPageParams = { mode?: string; @@ -43,20 +44,24 @@ export default function LoginPage() { return ( - - 万趣账号 - 登录万趣,开启贵州旅程 + + + 一键登录,开启万趣! + + {message ? {message} : null} + + 收藏行程 + 同步记录 + 专属管家 + - - {message ? {message} : null} - 登录即同意万趣保存必要账号信息 ); } diff --git a/apps/miniprogram/src/pages/login/wanderq-logo-black-green.png b/apps/miniprogram/src/pages/login/wanderq-logo-black-green.png new file mode 100644 index 0000000000000000000000000000000000000000..41b85033a674647e83188e5c9c584e42e706e276 GIT binary patch literal 9421 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 K>V^d^_WuFehEgB^ literal 0 HcmV?d00001 diff --git a/src/App.tsx b/src/App.tsx index 39d6612..d4003c0 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1182,6 +1182,25 @@ function AnchorTabs({ activeTab, tabs, onSearch }: { activeTab: string; tabs: Ar document.getElementById(id)?.scrollIntoView({ behavior: "smooth", block: "start" }); }; + useEffect(() => { + const container = tabsRef.current; + const activeButton = container?.querySelector("button.active"); + if (!container || !activeButton) return; + + const buttonStart = activeButton.offsetLeft; + const buttonEnd = buttonStart + activeButton.offsetWidth; + const visibleStart = container.scrollLeft; + const visibleEnd = visibleStart + container.clientWidth; + if (buttonStart >= visibleStart && buttonEnd <= visibleEnd) return; + + const targetLeft = buttonStart - (container.clientWidth - activeButton.offsetWidth) / 2; + const maxScrollLeft = Math.max(0, container.scrollWidth - container.clientWidth); + container.scrollTo({ + left: Math.max(0, Math.min(targetLeft, maxScrollLeft)), + behavior: "smooth", + }); + }, [activeTab]); + if (!tabs.length) return null; return ( @@ -4068,15 +4087,6 @@ export default function App() { }; }, [anchorTabs]); - useEffect(() => { - if (!activeTab) return; - document.querySelector(".anchor-tabs-scroll button.active")?.scrollIntoView({ - block: "nearest", - inline: "center", - behavior: "smooth", - }); - }, [activeTab]); - const renderHomeModule = (module: HomeModuleConfig) => { const templateType = module.templateType ?? module.id; const items = module.content?.items;