feat: WeChat Pay integration, translation quota management, login UX fixes

- WeChat Pay APIv3 integration (JSAPI + Native) with cert-based auth
- TranslationQuota model + admin management UI (配额 tab)
- Alibaba MT provider now checks quota before translation
- Fix: admin tabs scrollable on mobile, remove header-card
- Fix: profile/login navigation - logout stays on profile, login returns to profile
- Fix: login form now visible by default (no extra click to show)
- Fix: home page translate link uses navigateTo (was switchTab to non-tabBar page)
- Add .coverage and apiclient_key.pem to gitignore
This commit is contained in:
TradeMate Dev
2026-05-20 18:30:12 +08:00
parent a60aac4638
commit c397740748
22 changed files with 828 additions and 35 deletions
+2
View File
@@ -11,6 +11,7 @@ from .preference import PreferenceAnalysis, MarketingEffect
from .device import Device
from .followup import FollowupStrategy, FollowupLog
from .system_config import SystemConfig
from .translation_quota import TranslationQuota
__all__ = [
"User", "Product",
@@ -26,4 +27,5 @@ __all__ = [
"Device",
"FollowupStrategy", "FollowupLog",
"SystemConfig",
"TranslationQuota",
]
+18
View File
@@ -0,0 +1,18 @@
from sqlalchemy import Column, String, Boolean, Integer, DateTime, Text
from sqlalchemy.dialects.postgresql import UUID
from datetime import datetime
from app.database import Base
import uuid
class TranslationQuota(Base):
__tablename__ = "translation_quotas"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
version = Column(String(50), unique=True, nullable=False, index=True)
monthly_limit = Column(Integer, nullable=False, default=1000000)
used_chars = Column(Integer, nullable=False, default=0)
current_month = Column(String(7), nullable=False)
enabled = Column(Boolean, nullable=False, default=True)
description = Column(Text, default="")
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)