feat(frontend): 实现新手引导功能

- 添加 Guide 组件和引导步骤配置
- 实现 useOnboardingTour 和 useTourStepDescription composables
- 添加 onboarding store 管理引导状态
- 更新多个视图和组件以支持引导功能
- 添加国际化支持(中英文)
- 删除旧的实现指南文档
This commit is contained in:
IanShaw027
2025-12-29 15:21:05 +08:00
parent c01db6b180
commit dd247e55e9
30 changed files with 3968 additions and 36 deletions

View File

@@ -0,0 +1,247 @@
/* Sub2API Interactive Tour Styles - DOM Restructured Version */
/* 1. Overlay & Highlight */
.driver-overlay {
position: fixed !important;
inset: 0 !important;
z-index: 99999998 !important;
background-color: transparent !important;
}
.driver-active-element {
position: relative !important;
z-index: 99999999 !important;
outline: 4px solid rgba(20, 184, 166, 0.2) !important;
border-radius: 4px !important;
}
/* 2. Popover Container */
.driver-popover.theme-tour-popover {
position: fixed !important;
z-index: 100000000 !important;
background-color: #ffffff !important;
border: 1px solid #e5e7eb !important;
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04) !important;
border-radius: 12px !important;
padding: 0 !important;
max-width: min(440px, 90vw) !important; /* Responsive on small screens */
color: #1f2937 !important;
font-family: ui-sans-serif, system-ui, sans-serif !important;
overflow: hidden !important;
}
.dark .driver-popover.theme-tour-popover {
background-color: #1e293b !important;
border-color: #334155 !important;
color: #f3f4f6 !important;
}
/* 3. Header Area */
.theme-tour-popover .driver-popover-title {
display: flex !important;
align-items: center !important;
padding: 20px 24px 12px 24px !important;
margin: 0 !important;
background-color: transparent !important;
position: relative !important;
}
.driver-popover-title-text {
font-size: 18px !important;
font-weight: 700 !important;
color: #111827 !important;
line-height: 1.3 !important;
padding-right: 100px !important; /* Ensure title doesn't overlap Skip/Close */
}
.dark .driver-popover-title-text { color: #ffffff !important; }
/* Skip Button */
.header-skip-btn {
position: absolute !important;
top: 18px !important;
right: 60px !important;
font-size: 12px !important;
color: #9ca3af !important;
background: transparent !important;
border: none !important;
padding: 4px 8px !important;
cursor: pointer !important;
border-radius: 4px !important;
transition: all 0.2s !important;
white-space: nowrap !important;
display: flex !important;
align-items: center !important;
height: 28px !important;
max-width: 120px !important;
overflow: hidden !important;
text-overflow: ellipsis !important;
}
.header-skip-btn:hover {
background-color: rgba(239, 68, 68, 0.1) !important;
color: #ef4444 !important;
}
.dark .header-skip-btn:hover {
background-color: rgba(248, 113, 113, 0.1) !important;
color: #f87171 !important;
}
/* Close Button */
.theme-tour-popover .driver-popover-close-btn {
position: absolute !important;
top: 18px !important;
right: 20px !important;
width: 28px !important;
height: 28px !important;
padding: 0 !important;
color: #9ca3af !important;
background-color: transparent !important;
border: none !important;
z-index: 20 !important;
border-radius: 4px !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
}
.theme-tour-popover .driver-popover-close-btn:hover { background-color: #f3f4f6 !important; color: #4b5563 !important; }
.dark .theme-tour-popover .driver-popover-close-btn:hover { background-color: #334155 !important; }
/* 4. Body Content */
.theme-tour-popover .driver-popover-description {
display: block !important;
font-size: 14px !important;
font-weight: 400 !important;
color: #4b5563 !important;
padding: 0 24px 24px 24px !important;
margin: 0 !important;
line-height: 1.6 !important;
background-color: transparent !important;
}
.dark .theme-tour-popover .driver-popover-description { color: #cbd5e1 !important; }
/* 5. Footer Area - Flex Row with Left/Right Containers */
.theme-tour-popover .driver-popover-footer {
display: flex !important;
align-items: center !important;
justify-content: space-between !important; /* Push Left and Right apart */
padding: 16px 24px !important;
background-color: #f9fafb !important;
border-top: 1px solid #f3f4f6 !important;
margin: 0 !important;
}
.dark .theme-tour-popover .driver-popover-footer {
background-color: #0f172a !important;
border-top-color: #1e293b !important;
}
/* Left Container: Progress + Shortcuts */
.footer-left {
display: flex !important;
align-items: center !important;
gap: 16px !important;
}
/* Right Container: Buttons */
.footer-right {
display: flex !important;
align-items: center !important;
gap: 8px !important;
}
/* Progress */
.theme-tour-popover .driver-popover-progress-text {
font-size: 13px !important;
color: #6b7280 !important;
margin: 0 !important;
font-weight: 500 !important;
white-space: nowrap !important;
}
.dark .theme-tour-popover .driver-popover-progress-text { color: #9ca3af !important; }
/* Shortcuts (Divider + Keys) */
.footer-shortcuts {
display: flex !important;
align-items: center !important;
gap: 12px !important;
padding-left: 16px !important;
border-left: 1px solid #e5e7eb !important;
height: 20px !important;
}
.dark .footer-shortcuts { border-left-color: #334155 !important; }
.shortcut-item {
display: flex !important;
align-items: center !important;
gap: 4px !important;
font-size: 12px !important;
color: #6b7280 !important;
white-space: nowrap !important;
}
.dark .shortcut-item { color: #94a3b8 !important; }
.shortcut-item kbd {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, monospace !important;
background-color: #ffffff !important;
border: 1px solid #e5e7eb !important;
border-radius: 4px !important;
padding: 1px 6px !important;
font-size: 11px !important;
font-weight: 600 !important;
color: #4b5563 !important;
box-shadow: 0 1px 0 rgba(0,0,0,0.05) !important;
min-width: 20px !important;
text-align: center !important;
display: inline-block !important;
}
.dark .shortcut-item kbd {
background-color: #1e293b !important;
border-color: #475569 !important;
color: #cbd5e1 !important;
}
/* Nav Buttons */
.theme-tour-popover button {
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
padding: 8px 16px !important;
font-size: 13px !important;
font-weight: 500 !important;
border-radius: 6px !important;
cursor: pointer !important;
transition: all 0.2s !important;
border: 1px solid transparent !important;
line-height: 1.2 !important;
white-space: nowrap !important; /* Force no wrap */
}
.theme-tour-popover .driver-popover-next-btn {
background-color: #14b8a6 !important;
color: #ffffff !important;
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05) !important;
}
.theme-tour-popover .driver-popover-next-btn:hover { background-color: #0d9488 !important; }
.theme-tour-popover .driver-popover-prev-btn {
background-color: white !important;
color: #6b7280 !important;
border: 1px solid #e5e7eb !important;
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05) !important;
}
.theme-tour-popover .driver-popover-prev-btn:hover { background-color: #f9fafb !important; color: #374151 !important; }
.dark .theme-tour-popover .driver-popover-prev-btn {
background-color: #1e293b !important;
border-color: #475569 !important;
color: #9ca3af !important;
}
/* Arrows */
.driver-popover-arrow { z-index: 100000001 !important; }
.driver-popover-arrow-side-left.driver-popover-arrow { border-left-color: #ffffff !important; }
.driver-popover-arrow-side-right.driver-popover-arrow { border-right-color: #ffffff !important; }
.driver-popover-arrow-side-top.driver-popover-arrow { border-top-color: #ffffff !important; }
.driver-popover-arrow-side-bottom.driver-popover-arrow { border-bottom-color: #ffffff !important; }
.dark .driver-popover-arrow-side-left.driver-popover-arrow { border-left-color: #1e293b !important; }
.dark .driver-popover-arrow-side-right.driver-popover-arrow { border-right-color: #1e293b !important; }
.dark .driver-popover-arrow-side-top.driver-popover-arrow { border-top-color: #1e293b !important; }
.dark .driver-popover-arrow-side-bottom.driver-popover-arrow { border-bottom-color: #1e293b !important; }