From a92f00af252ff3820eec589eaa0f70b41f72d6a7 Mon Sep 17 00:00:00 2001 From: hailin Date: Mon, 23 Feb 2026 16:57:30 -0800 Subject: [PATCH] =?UTF-8?q?feat(branding+fix):=20=E4=B8=AD=E6=96=87?= =?UTF-8?q?=E5=93=81=E7=89=8C=E5=90=8D=E3=80=81miniapp=20logo=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E3=80=81=E7=BC=96=E8=AF=91=E9=94=99=E8=AF=AF=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 中文品牌名更新 - admin-app: 中文环境下 app_name → "企业券信",login_title/ai_welcome/settings_about 同步更新 - miniapp: 中文环境下 app_name → "券信",6处内联文本(share/activity/register/ai_chat等)同步更新 - genex-mobile: zh_cn + zh_tw 共12处 "Genex" → "券信"(login/register/aiChat/profile/aiFab) - 英文/日文环境保持 "Genex" 不变 ## miniapp logo 资源集成 - 新增 src/assets/images/ 目录:logo.png, logo_icon.png, logo_icon.svg, logo_full.svg - login 页:CSS模拟logo(.logo-left/.logo-right) → - h5-share 页:💎 emoji → (header + RegisterGuidePage) - h5-activity 页:"G" 文字方块 → (footer) - h5-register 页:"G" 文字方块 → (branding section) ## genex-mobile 编译错误修复 - wallet_coupons_page: EmptyState.noCoupons() + StatusTags.active/pending/expired/used() 添加 context 参数 - trading_page: StatusTags.onSale/completed/cancelled() 添加 context 参数 - message_page: EmptyState.noMessages() 添加 context 参数 - coupon_service: inner['total'] 添加 `as int?` 显式类型转换 Co-Authored-By: Claude Opus 4.6 --- .../lib/app/i18n/app_localizations.dart | 8 ++--- .../lib/app/i18n/strings/zh_cn.dart | 12 +++---- .../lib/app/i18n/strings/zh_tw.dart | 12 +++---- .../lib/core/services/coupon_service.dart | 2 +- .../pages/wallet_coupons_page.dart | 9 +++--- .../presentation/pages/message_page.dart | 2 +- .../presentation/pages/trading_page.dart | 6 ++-- frontend/miniapp/src/assets/images/logo.png | Bin 0 -> 11781 bytes .../miniapp/src/assets/images/logo_full.svg | 30 ++++++++++++++++++ .../miniapp/src/assets/images/logo_icon.png | Bin 0 -> 3497 bytes .../miniapp/src/assets/images/logo_icon.svg | 23 ++++++++++++++ frontend/miniapp/src/i18n/index.ts | 14 ++++---- .../miniapp/src/pages/h5-activity/index.tsx | 17 ++-------- .../miniapp/src/pages/h5-register/index.tsx | 19 +++-------- frontend/miniapp/src/pages/h5-share/index.tsx | 7 ++-- frontend/miniapp/src/pages/login/index.tsx | 19 ++--------- 16 files changed, 100 insertions(+), 80 deletions(-) create mode 100644 frontend/miniapp/src/assets/images/logo.png create mode 100644 frontend/miniapp/src/assets/images/logo_full.svg create mode 100644 frontend/miniapp/src/assets/images/logo_icon.png create mode 100644 frontend/miniapp/src/assets/images/logo_icon.svg diff --git a/frontend/admin-app/lib/app/i18n/app_localizations.dart b/frontend/admin-app/lib/app/i18n/app_localizations.dart index 08ae8b7..79a0b0f 100644 --- a/frontend/admin-app/lib/app/i18n/app_localizations.dart +++ b/frontend/admin-app/lib/app/i18n/app_localizations.dart @@ -37,7 +37,7 @@ class AppLocalizations { // ================================================================ static const Map _zhCN = { // ── Common ── - 'app_name': 'Genex', + 'app_name': '企业券信', 'confirm': '确认', 'cancel': '取消', 'save': '保存', @@ -68,7 +68,7 @@ class AppLocalizations { 'tab_mine': '我的', // ── Login ── - 'login_title': 'Genex 发行方控制台', + 'login_title': '券信 发行方控制台', 'login_subtitle': '登录您的企业账号管理券发行', 'login_phone': '手机号', 'login_phone_hint': '请输入企业管理员手机号', @@ -510,7 +510,7 @@ class AppLocalizations { // ── AI Agent ── 'ai_agent_title': 'AI 助手', - 'ai_agent_welcome': '您好!我是 Genex AI 助手,可以帮您分析销售数据、优化定价策略、提升信用评级。有什么可以帮您的吗?', + 'ai_agent_welcome': '您好!我是企业券信 AI 助手,可以帮您分析销售数据、优化定价策略、提升信用评级。有什么可以帮您的吗?', 'ai_agent_input_hint': '输入问题...', 'ai_agent_action_sales': '分析本月销售数据', 'ai_agent_action_timing': '推荐最优发券时间', @@ -545,7 +545,7 @@ class AppLocalizations { 'settings_group_security': '安全与账号', 'settings_change_password': '修改密码', 'settings_operation_log': '操作日志', - 'settings_about': '关于 Genex', + 'settings_about': '关于企业券信', 'settings_logout': '退出登录', // ── AI Suggestion Card ── diff --git a/frontend/genex-mobile/lib/app/i18n/strings/zh_cn.dart b/frontend/genex-mobile/lib/app/i18n/strings/zh_cn.dart index b6272b0..6fffec9 100644 --- a/frontend/genex-mobile/lib/app/i18n/strings/zh_cn.dart +++ b/frontend/genex-mobile/lib/app/i18n/strings/zh_cn.dart @@ -38,7 +38,7 @@ const Map zhCN = { 'welcome.agreement': '注册即表示同意《用户协议》和《隐私政策》', 'login.title': '欢迎回来', - 'login.subtitle': '登录 Genex 管理你的券资产', + 'login.subtitle': '登录券信管理你的券资产', 'login.passwordTab': '密码登录', 'login.codeTab': '验证码登录', 'login.phoneOrEmail': '手机号或邮箱', @@ -50,8 +50,8 @@ const Map zhCN = { 'login.getCode': '获取验证码', 'register.title': '创建账号', - 'register.emailSubtitle': '使用邮箱注册 Genex 账号', - 'register.phoneSubtitle': '使用手机号注册 Genex 账号', + 'register.emailSubtitle': '使用邮箱注册券信账号', + 'register.phoneSubtitle': '使用手机号注册券信账号', 'register.email': '邮箱地址', 'register.phone': '手机号', 'register.emailHint': '请输入邮箱地址', @@ -451,7 +451,7 @@ const Map zhCN = { // ============ AI Chat ============ 'aiChat.title': 'AI 助手', - 'aiChat.greeting': '你好!我是 Genex AI 助手,可以帮你发现高性价比好券、比价分析、组合推荐。试试问我:', + 'aiChat.greeting': '你好!我是券信 AI 助手,可以帮你发现高性价比好券、比价分析、组合推荐。试试问我:', 'aiChat.suggest1': '推荐适合我的券', 'aiChat.suggest2': '星巴克券值不值得买?', 'aiChat.suggest3': '帮我做比价分析', @@ -612,7 +612,7 @@ const Map zhCN = { 'profile.myFavorites': '我的收藏', 'profile.securitySettings': '安全设置', 'profile.advancedSettings': '高级设置', - 'profile.aboutGenex': '关于 Genex', + 'profile.aboutGenex': '关于券信', 'profile.simplifiedChinese': '简体中文', // ============ Pro Mode ============ @@ -658,7 +658,7 @@ const Map zhCN = { 'wallet.redeemUse': '核销', // ============ AI Fab ============ - 'aiFab.greeting': '你好!我是 Genex AI 助手,可以帮你管理券资产、查找优惠、分析价格。有什么需要帮助的吗?', + 'aiFab.greeting': '你好!我是券信 AI 助手,可以帮你管理券资产、查找优惠、分析价格。有什么需要帮助的吗?', 'aiFab.inputHint': '输入消息...', 'aiFab.suggest1': '帮我找高折扣券', 'aiFab.suggest2': '我的券快到期了吗?', diff --git a/frontend/genex-mobile/lib/app/i18n/strings/zh_tw.dart b/frontend/genex-mobile/lib/app/i18n/strings/zh_tw.dart index 3862cf3..a5b06f0 100644 --- a/frontend/genex-mobile/lib/app/i18n/strings/zh_tw.dart +++ b/frontend/genex-mobile/lib/app/i18n/strings/zh_tw.dart @@ -38,7 +38,7 @@ const Map zhTW = { 'welcome.agreement': '註冊即表示同意《使用者協議》和《隱私權政策》', 'login.title': '歡迎回來', - 'login.subtitle': '登入 Genex 管理你的券資產', + 'login.subtitle': '登入券信管理你的券資產', 'login.passwordTab': '密碼登入', 'login.codeTab': '驗證碼登入', 'login.phoneOrEmail': '手機號或信箱', @@ -50,8 +50,8 @@ const Map zhTW = { 'login.getCode': '取得驗證碼', 'register.title': '建立帳號', - 'register.emailSubtitle': '使用信箱註冊 Genex 帳號', - 'register.phoneSubtitle': '使用手機號註冊 Genex 帳號', + 'register.emailSubtitle': '使用信箱註冊券信帳號', + 'register.phoneSubtitle': '使用手機號註冊券信帳號', 'register.email': '信箱地址', 'register.phone': '手機號', 'register.emailHint': '請輸入信箱地址', @@ -451,7 +451,7 @@ const Map zhTW = { // ============ AI Chat ============ 'aiChat.title': 'AI 助手', - 'aiChat.greeting': '你好!我是 Genex AI 助手,可以幫你發現高性價比好券、比價分析、組合推薦。試試問我:', + 'aiChat.greeting': '你好!我是券信 AI 助手,可以幫你發現高性價比好券、比價分析、組合推薦。試試問我:', 'aiChat.suggest1': '推薦適合我的券', 'aiChat.suggest2': 'Starbucks 券值不值得買?', 'aiChat.suggest3': '幫我做比價分析', @@ -612,7 +612,7 @@ const Map zhTW = { 'profile.myFavorites': '我的收藏', 'profile.securitySettings': '安全設定', 'profile.advancedSettings': '進階設定', - 'profile.aboutGenex': '關於 Genex', + 'profile.aboutGenex': '關於券信', 'profile.simplifiedChinese': '簡體中文', // ============ Pro Mode ============ @@ -658,7 +658,7 @@ const Map zhTW = { 'wallet.redeemUse': '核銷', // ============ AI Fab ============ - 'aiFab.greeting': '你好!我是 Genex AI 助手,可以幫你管理券資產、查找優惠、分析價格。有什麼需要幫助的嗎?', + 'aiFab.greeting': '你好!我是券信 AI 助手,可以幫你管理券資產、查找優惠、分析價格。有什麼需要幫助的嗎?', 'aiFab.inputHint': '輸入訊息...', 'aiFab.suggest1': '幫我找高折扣券', 'aiFab.suggest2': '我的券快到期了嗎?', diff --git a/frontend/genex-mobile/lib/core/services/coupon_service.dart b/frontend/genex-mobile/lib/core/services/coupon_service.dart index dd11921..1b5efea 100644 --- a/frontend/genex-mobile/lib/core/services/coupon_service.dart +++ b/frontend/genex-mobile/lib/core/services/coupon_service.dart @@ -50,7 +50,7 @@ class CouponApiService { ?.map((e) => CouponModel.fromJson(e as Map)) .toList() ?? []; - return (items: items, total: inner['total'] ?? items.length); + return (items: items, total: (inner['total'] as int?) ?? items.length); } catch (e) { debugPrint('[CouponApiService] getMyHoldings 失败: $e'); rethrow; diff --git a/frontend/genex-mobile/lib/features/coupons/presentation/pages/wallet_coupons_page.dart b/frontend/genex-mobile/lib/features/coupons/presentation/pages/wallet_coupons_page.dart index 597f2f5..54262c4 100644 --- a/frontend/genex-mobile/lib/features/coupons/presentation/pages/wallet_coupons_page.dart +++ b/frontend/genex-mobile/lib/features/coupons/presentation/pages/wallet_coupons_page.dart @@ -237,6 +237,7 @@ class _WalletCouponsPageState extends State if (coupons.isEmpty) { return EmptyState.noCoupons( + context, onBrowse: () => Navigator.pop(context), ); } @@ -365,13 +366,13 @@ class _WalletCouponsPageState extends State Widget _statusWidget(CouponStatus status) { switch (status) { case CouponStatus.active: - return StatusTags.active(); + return StatusTags.active(context); case CouponStatus.pending: - return StatusTags.pending(); + return StatusTags.pending(context); case CouponStatus.expired: - return StatusTags.expired(); + return StatusTags.expired(context); case CouponStatus.used: - return StatusTags.used(); + return StatusTags.used(context); } } diff --git a/frontend/genex-mobile/lib/features/message/presentation/pages/message_page.dart b/frontend/genex-mobile/lib/features/message/presentation/pages/message_page.dart index d7474fc..1bb39ee 100644 --- a/frontend/genex-mobile/lib/features/message/presentation/pages/message_page.dart +++ b/frontend/genex-mobile/lib/features/message/presentation/pages/message_page.dart @@ -133,7 +133,7 @@ class _MessagePageState extends State : _error != null ? _buildErrorView() : _notifications.isEmpty - ? EmptyState.noMessages() + ? EmptyState.noMessages(context) : RefreshIndicator( onRefresh: _loadNotifications, child: ListView.separated( diff --git a/frontend/genex-mobile/lib/features/trading/presentation/pages/trading_page.dart b/frontend/genex-mobile/lib/features/trading/presentation/pages/trading_page.dart index e9a2c63..1eb0c55 100644 --- a/frontend/genex-mobile/lib/features/trading/presentation/pages/trading_page.dart +++ b/frontend/genex-mobile/lib/features/trading/presentation/pages/trading_page.dart @@ -62,9 +62,9 @@ class _TradingPageState extends State separatorBuilder: (_, __) => const SizedBox(height: 12), itemBuilder: (context, index) { final statuses = [ - StatusTags.onSale(), - StatusTags.completed(), - StatusTags.cancelled(), + StatusTags.onSale(context), + StatusTags.completed(context), + StatusTags.cancelled(context), ]; return Container( padding: AppSpacing.cardPadding, diff --git a/frontend/miniapp/src/assets/images/logo.png b/frontend/miniapp/src/assets/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..56abb54d61450f718d4aee029893cb75e83868cc GIT binary patch literal 11781 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 UE~YX(rE;l#OJAcx&F=C40p{j->;M1& literal 0 HcmV?d00001 diff --git a/frontend/miniapp/src/assets/images/logo_full.svg b/frontend/miniapp/src/assets/images/logo_full.svg new file mode 100644 index 0000000..afd3407 --- /dev/null +++ b/frontend/miniapp/src/assets/images/logo_full.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + GENEX + + diff --git a/frontend/miniapp/src/assets/images/logo_icon.png b/frontend/miniapp/src/assets/images/logo_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f84999a45e58c0417d92dbcb7b392c0c2364003d GIT binary patch literal 3497 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 + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/miniapp/src/i18n/index.ts b/frontend/miniapp/src/i18n/index.ts index 6696dc8..ca76be0 100644 --- a/frontend/miniapp/src/i18n/index.ts +++ b/frontend/miniapp/src/i18n/index.ts @@ -22,7 +22,7 @@ export function t(key: string, locale: Locale = defaultLocale): string { const translations: Record> = { 'zh-CN': { // ── Common ── - 'app_name': 'Genex', + 'app_name': '券信', 'confirm': '确认', 'cancel': '取消', 'save': '保存', @@ -174,7 +174,7 @@ const translations: Record> = { 'share_copied': '链接已复制', // ── Download App ── - 'download_app_title': '下载 Genex App', + 'download_app_title': '下载券信 App', 'download_app_desc': '下载App享受更多功能和更好体验', 'download_app_button': '立即下载', 'download_app_ios': 'iOS 下载', @@ -244,7 +244,7 @@ const translations: Record> = { 'download_btn': '下载', // ── H5 Share ── - 'share_from_genex': '来自 Genex 的分享', + 'share_from_genex': '来自券信的分享', 'share_open_app': '打开 App 购买', 'share_miniapp_buy': '小程序购买', 'share_to_friends': '分享给好友', @@ -265,7 +265,7 @@ const translations: Record> = { 'activity_rule_2': '每位用户限购每种券3张,活动优惠券不与其他优惠叠加使用', 'activity_rule_3': '优惠券自购买之日起30天内有效,过期自动作废', 'activity_rule_4': '活动券仅限新注册用户首次购买使用', - 'activity_rule_5': '如遇商品售罄,Genex保留调整活动内容的权利', + 'activity_rule_5': '如遇商品售罄,券信保留调整活动内容的权利', 'activity_rule_6': '退款将原路返回,处理时间为1-3个工作日', 'activity_rule_7': '如有疑问请联系客服:support@genex.com', 'activity_participants': '已有 {count} 人参与', @@ -277,7 +277,7 @@ const translations: Record> = { 'activity_coupons': '活动好券', 'activity_brand': '品牌', 'activity_join_now': '立即参与', - 'register_join': '加入 Genex', + 'register_join': '加入券信', 'register_slogan': '让每一张券都有价值', 'register_benefit': '注册即享首单立减优惠', 'register_benefit_coupons': '海量优惠券', @@ -288,7 +288,7 @@ const translations: Record> = { 'register_benefit_safe_desc': '平台担保,放心购买', 'register_now': '立即注册', 'register_login': '已有账号,登录', - 'register_why_genex': '为什么选择 Genex?', + 'register_why_genex': '为什么选择券信?', 'register_benefit_coupons_full': '覆盖餐饮、购物、娱乐等20+品类,全球大牌低价好券', 'register_benefit_safe_full': '平台担保交易,资金托管机制,保障每一笔交易安全可靠', 'register_benefit_ai': 'AI智能推荐', @@ -387,7 +387,7 @@ const translations: Record> = { // ── AI Chat ── 'ai_chat_title': 'AI 助手', - 'ai_chat_greeting': '你好!我是 Genex AI 助手,可以帮你发现高性价比好券。试试问我:', + 'ai_chat_greeting': '你好!我是券信 AI 助手,可以帮你发现高性价比好券。试试问我:', 'ai_chat_suggest1': '推荐适合我的券', 'ai_chat_suggest2': '星巴克券值不值得买?', 'ai_chat_suggest3': '帮我做比价分析', diff --git a/frontend/miniapp/src/pages/h5-activity/index.tsx b/frontend/miniapp/src/pages/h5-activity/index.tsx index ad0d051..92a70c7 100644 --- a/frontend/miniapp/src/pages/h5-activity/index.tsx +++ b/frontend/miniapp/src/pages/h5-activity/index.tsx @@ -2,6 +2,7 @@ import React, { useState, useEffect } from 'react'; import { t } from '@/i18n'; import { getFeaturedCoupons } from '../../services/coupon'; import type { CouponItem } from '../../services/coupon'; +import logoIcon from '@/assets/images/logo_icon.png'; // Taro mini-program component /** @@ -205,9 +206,7 @@ const H5ActivityPage: React.FC = () => { {/* Brand Footer */} - - G - + Genex {t('app_platform_slogan')} @@ -564,20 +563,10 @@ CSS (H5活动页样式 - 对应 index.scss): align-items: center; margin-bottom: 12rpx; } -.footer-logo-box { +.footer-logo-img { width: 48rpx; height: 48rpx; - background: linear-gradient(135deg, #6C5CE7, #9B8FFF); - border-radius: 12rpx; - display: flex; - align-items: center; - justify-content: center; margin-right: 12rpx; } -.footer-logo-text { - font-size: 28rpx; - font-weight: 700; - color: white; -} .footer-logo-name { font-size: 30rpx; font-weight: 600; diff --git a/frontend/miniapp/src/pages/h5-register/index.tsx b/frontend/miniapp/src/pages/h5-register/index.tsx index cd2780c..b8882d3 100644 --- a/frontend/miniapp/src/pages/h5-register/index.tsx +++ b/frontend/miniapp/src/pages/h5-register/index.tsx @@ -3,6 +3,7 @@ import { t } from '@/i18n'; import Taro from '@tarojs/taro'; import { register, sendSmsCode } from '../../services/auth'; import { authStore } from '../../store/auth'; +import logoIcon from '@/assets/images/logo_icon.png'; // Taro mini-program component /** @@ -71,9 +72,7 @@ const H5RegisterPage: React.FC = () => { - - G - + Genex {t('app_platform_slogan')} @@ -248,22 +247,12 @@ CSS (H5注册引导页样式 - 对应 index.scss): border-radius: 50%; bottom: -20rpx; left: -30rpx; } -.brand-logo-box { +.brand-logo-img { width: 120rpx; height: 120rpx; - background: rgba(255,255,255,0.2); - border-radius: 28rpx; - display: flex; - align-items: center; - justify-content: center; margin-bottom: 20rpx; - border: 2rpx solid rgba(255,255,255,0.3); + border-radius: 28rpx; box-shadow: 0 8rpx 32rpx rgba(0,0,0,0.15); } -.brand-logo-letter { - font-size: 56rpx; - font-weight: 700; - color: white; -} .brand-app-name { font-size: 44rpx; font-weight: 700; diff --git a/frontend/miniapp/src/pages/h5-share/index.tsx b/frontend/miniapp/src/pages/h5-share/index.tsx index 99a99cc..ea67b32 100644 --- a/frontend/miniapp/src/pages/h5-share/index.tsx +++ b/frontend/miniapp/src/pages/h5-share/index.tsx @@ -3,6 +3,7 @@ import { t } from '@/i18n'; import Taro from '@tarojs/taro'; import { getCouponDetail } from '../../services/coupon'; import type { CouponItem } from '../../services/coupon'; +import logoIcon from '@/assets/images/logo_icon.png'; /** * E2. H5页面 - 券分享页 + 活动落地页 + 注册引导页 @@ -51,7 +52,7 @@ export const SharePage: React.FC = () => { color: 'white', fontSize: 13, }}> - 💎 + Genex {t('share_from_genex')} @@ -264,15 +265,15 @@ export const RegisterGuidePage: React.FC = () => { {/* Logo */}
- 💎 + Genex

diff --git a/frontend/miniapp/src/pages/login/index.tsx b/frontend/miniapp/src/pages/login/index.tsx index c30ad4e..f96fd34 100644 --- a/frontend/miniapp/src/pages/login/index.tsx +++ b/frontend/miniapp/src/pages/login/index.tsx @@ -3,6 +3,7 @@ import { t } from '@/i18n'; import Taro from '@tarojs/taro'; import { authStore } from '../../store/auth'; import { sendSmsCode } from '../../services/auth'; +import logoIcon from '@/assets/images/logo_icon.png'; // Taro mini-program component /** @@ -65,10 +66,7 @@ const LoginPage: React.FC = () => { {/* Logo */} - - - - + GENEX {t('app_slogan')} @@ -149,19 +147,8 @@ CSS: display: flex; flex-direction: column; align-items: center; padding-top: 160rpx; padding-bottom: 80rpx; } -.logo-box { +.logo-img { width: 120rpx; height: 120rpx; - border-radius: 28rpx; - display: flex; align-items: center; justify-content: center; - overflow: hidden; transform: rotate(45deg); -} -.logo-left { - width: 50%; height: 100%; - background: linear-gradient(135deg, #9B5CF6, #A855F7); -} -.logo-right { - width: 50%; height: 100%; - background: linear-gradient(135deg, #D946EF, #E11D89); } .app-name { font-size: 40rpx; font-weight: 700; color: #141723; margin-top: 24rpx; } .app-slogan { font-size: 26rpx; color: #A0A8BE; margin-top: 8rpx; }