Skip to content

Commit c34f6f1

Browse files
committed
fix: 补齐移动端设置目录与详情页
1 parent 65b3197 commit c34f6f1

2 files changed

Lines changed: 92 additions & 11 deletions

File tree

‎app/[lang]/components/component-gallery.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ export function NoteGenComponentGallery({ lang }: { lang: NoteGenReplicaLanguage
226226
description={text("移动端使用独立的手机框架、状态栏、页面标题和底部导航,可按 screen 属性直接切换展示。", "Mobile uses a dedicated device frame, status bar, headers, and dock. Select a screen through a single prop.")}
227227
>
228228
<div className="grid gap-6 sm:grid-cols-2 xl:grid-cols-3">
229-
{(["capture", "chat", "writing", "canvas", "settings"] as const).map((screen) => <ComponentCard key={screen} title={`Mobile · ${screen}`} description={text("代码实时渲染", "Rendered live from code")}><NoteGenMobileReplica lang={lang} screen={screen} /></ComponentCard>)}
229+
{(["capture", "chat", "writing", "canvas", "me", "settings", "settings-general"] as const).map((screen) => <ComponentCard key={screen} title={`Mobile · ${screen}`} description={text("代码实时渲染", "Rendered live from code")}><NoteGenMobileReplica lang={lang} screen={screen} /></ComponentCard>)}
230230
</div>
231231
</GallerySection>
232232

‎components/notegen/mobile-replica.tsx‎

Lines changed: 91 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
import type { ReactNode } from "react"
22
import {
3-
BatteryFull, Bot, Bold, CheckSquare, ChevronDown, ChevronRight, Cloud, Code2,
4-
EllipsisVertical, FilePlus2, FileText, Filter, Highlighter, History, Italic, Lightbulb,
5-
MessageCircle, MessageSquare, MessageSquareDashed, MessageSquarePlus, Palette, Plus, Quote, Redo2,
6-
RefreshCw, Search, Send, Settings, ShieldQuestion, SquarePen, Strikethrough,
7-
Trash2, Underline, Undo2, User, WandSparkles, Wifi,
3+
ArrowLeft, BatteryFull, Book, Bot, BotMessageSquare, Bold, Brain, CheckSquare,
4+
ChevronDown, ChevronRight, Cloud, Code2, DatabaseBackup, Drama, EllipsisVertical,
5+
FileCog, FilePlus2, FileText, Filter, FolderOpen, Globe2, Highlighter, History,
6+
ImageUp, Italic, Languages, LayoutTemplate, Lightbulb, MessageCircle, MessageSquare,
7+
MessageSquareDashed, MessageSquarePlus, Moon, Paintbrush, Palette, PenTool, Plus,
8+
Puzzle, Quote, Redo2, RefreshCw, ScanText, Search, Send, Settings, ShieldQuestion,
9+
Sparkles, SquarePen, Store, Strikethrough, Trash2, Type, Underline, Undo2, User,
10+
Volume2, WandSparkles, Wifi,
811
} from "lucide-react"
912

1013
import type { NoteGenReplicaLanguage } from "@/components/notegen/types"
1114
import { cn } from "@/lib/utils"
1215

13-
export type NoteGenMobileScreen = "capture" | "chat" | "writing" | "canvas" | "settings"
16+
export type NoteGenMobileScreen = "capture" | "chat" | "writing" | "canvas" | "me" | "settings" | "settings-general"
1417

1518
const MOBILE_WIDTH = 402
1619
const MOBILE_HEIGHT = 874
@@ -59,7 +62,7 @@ export function NoteGenMobileStatusBar() {
5962
}
6063

6164
export function NoteGenMobileDock({ screen = "capture", lang = "cn" }: { screen?: NoteGenMobileScreen; lang?: NoteGenReplicaLanguage }) {
62-
const active = screen === "settings" ? "chat" : screen
65+
const active = screen === "me" ? "chat" : screen
6366
const items = [
6467
["chat", MessageSquare, lang === "en" ? "Chat" : "对话"],
6568
["writing", SquarePen, lang === "en" ? "Write" : "写作"],
@@ -200,7 +203,7 @@ function StatCard({ title, subtitle }: { title: string; subtitle: string }) {
200203
return <div className="h-[109px] rounded-[22px] border border-[#e7e7e8] bg-white p-4"><p className="text-xs text-[#8b8e93]">{title}</p><b className="mt-2 block text-2xl font-semibold">0</b><p className="mt-1 text-xs text-[#8b8e93]">{subtitle}</p></div>
201204
}
202205

203-
export function NoteGenMobileSettings({ lang = "cn" }: { lang?: NoteGenReplicaLanguage }) {
206+
export function NoteGenMobileMe({ lang = "cn" }: { lang?: NoteGenReplicaLanguage }) {
204207
const activeCells = new Set([18, 26, 34, 35, 50, 58, 66, 67, 74, 75, 76, 82, 83, 89, 90, 91, 98])
205208
return (
206209
<div className="relative min-h-0 flex-1 overflow-hidden px-3 pt-9">
@@ -216,13 +219,91 @@ export function NoteGenMobileSettings({ lang = "cn" }: { lang?: NoteGenReplicaLa
216219
)
217220
}
218221

222+
function MobileSettingsHeader({ title, lang }: { title: string; lang: NoteGenReplicaLanguage }) {
223+
return <header className="flex h-14 shrink-0 items-center border-b border-[#e7e7e8] bg-white px-2"><span className="flex size-11 items-center justify-center"><ArrowLeft className="size-[18px]" /></span><h1 className="min-w-0 flex-1 truncate pr-11 text-center text-base font-semibold">{title}</h1><span className="sr-only">{lang === "en" ? "Back" : "返回"}</span></header>
224+
}
225+
226+
const settingsGroups = [
227+
{
228+
key: "basic",
229+
cn: "基础设置",
230+
en: "Basic settings",
231+
items: [
232+
[Settings, "常规设置", "General settings"],
233+
[PenTool, "记录设置", "Record settings"],
234+
[FileCog, "编辑器设置", "Editor settings"],
235+
[Palette, "画布设置", "Canvas settings"],
236+
[ScanText, "图片记录", "Image capture"],
237+
[Volume2, "音频设置", "Audio settings"],
238+
],
239+
},
240+
{
241+
key: "extensions",
242+
cn: "AI 与扩展",
243+
en: "AI & extensions",
244+
items: [
245+
[BotMessageSquare, "AI 服务", "AI services"],
246+
[Globe2, "联网搜索", "Web search"],
247+
[Book, "知识库", "Knowledge base"],
248+
[Brain, "记忆", "Memories"],
249+
[Drama, "提示词", "Prompts"],
250+
[Puzzle, "MCP", "MCP"],
251+
[Sparkles, "技能", "Skills"],
252+
[LayoutTemplate, "模板", "Templates"],
253+
],
254+
},
255+
{
256+
key: "data",
257+
cn: "数据与存储",
258+
en: "Data & storage",
259+
items: [
260+
[DatabaseBackup, "同步", "Sync"],
261+
[ImageUp, "图床", "Image hosting"],
262+
[FolderOpen, "文件", "Files"],
263+
],
264+
},
265+
] as const
266+
267+
export function NoteGenMobileSettings({ lang = "cn" }: { lang?: NoteGenReplicaLanguage }) {
268+
return (
269+
<div className="flex min-h-0 flex-1 flex-col overflow-hidden bg-white">
270+
<MobileSettingsHeader title={lang === "en" ? "Settings" : "设置"} lang={lang} />
271+
<div className="min-h-0 flex-1 overflow-hidden p-3">
272+
<p className="text-sm leading-relaxed text-[#83868c]">{lang === "en" ? "Open each section to manage NoteGen on this device." : "直接在这里进入各项功能设置。"}</p>
273+
<div className="mt-5 flex h-9 items-center rounded-[10px] border border-[#dedfe2] px-3 text-sm text-[#96999e]"><Search className="mr-2 size-4" />{lang === "en" ? "Search settings..." : "搜索设置..."}</div>
274+
<div className="mt-5">
275+
{settingsGroups.map((group) => <div key={group.key} className="pb-1 pt-5 first:pt-0"><h2 className="mb-1 px-1 text-xs font-medium text-[#85888e]">{lang === "en" ? group.en : group.cn}</h2>{group.items.map(([ItemIcon, cnLabel, enLabel]) => <div key={cnLabel} className="flex h-11 items-center rounded-xl px-1"><span className="flex size-9 items-center justify-center"><ItemIcon className="size-4" /></span><span className="text-sm">{lang === "en" ? enLabel : cnLabel}</span><ChevronRight className="ml-auto size-4 text-[#85888e]" /></div>)}</div>)}
276+
</div>
277+
</div>
278+
</div>
279+
)
280+
}
281+
282+
function GeneralSettingItem({ icon: ItemIcon, title, description, value }: { icon: typeof Moon; title: string; description: string; value: string }) {
283+
return <div className="flex min-h-[67px] items-center rounded-xl border border-[#dedfe2] bg-white p-3"><span className="mr-3 flex size-8 shrink-0 items-center justify-center rounded-lg bg-[#f4f4f5]"><ItemIcon className="size-4" /></span><div className="min-w-0 flex-1"><h3 className="text-sm font-medium">{title}</h3><p className="mt-1 truncate text-xs text-[#85888e]">{description}</p></div><span className="ml-2 flex shrink-0 items-center gap-1 text-xs text-[#666a70]">{value}<ChevronRight className="size-4 text-[#85888e]" /></span></div>
284+
}
285+
286+
export function NoteGenMobileGeneralSettings({ lang = "cn" }: { lang?: NoteGenReplicaLanguage }) {
287+
const isEn = lang === "en"
288+
return (
289+
<div className="flex min-h-0 flex-1 flex-col overflow-hidden bg-white">
290+
<MobileSettingsHeader title={isEn ? "General settings" : "常规设置"} lang={lang} />
291+
<div className="min-h-0 flex-1 overflow-hidden p-3">
292+
<p className="text-sm leading-relaxed text-[#83868c]">{isEn ? "Configure the app theme, display language, fonts and reading size." : "在这里,你可以配置应用的基本设置,包括界面主题、语言等选项。"}</p>
293+
<section className="mt-6"><h2 className="text-base font-semibold">{isEn ? "Appearance & language" : "外观与语言"}</h2><p className="mt-1 text-sm text-[#83868c]">{isEn ? "Adjust theme, language and global font" : "调整应用主题、显示语言和全局字体"}</p><div className="mt-3 space-y-3"><GeneralSettingItem icon={Moon} title={isEn ? "Theme" : "主题"} description={isEn ? "Choose the app appearance" : "选择应用的外观主题"} value={isEn ? "System" : "跟随系统"} /><GeneralSettingItem icon={Languages} title={isEn ? "Language" : "语言"} description={isEn ? "Choose the display language" : "选择应用的显示语言"} value={isEn ? "English" : "简体中文"} /><GeneralSettingItem icon={Type} title={isEn ? "App font" : "应用字体"} description={isEn ? "Use a generic system font" : "移动端使用系统允许的通用字体族"} value={isEn ? "System" : "跟随系统"} /><GeneralSettingItem icon={Paintbrush} title={isEn ? "Custom theme colors" : "自定义主题颜色"} description={isEn ? "Customize the app color palette" : "自定义应用的主题颜色"} value={isEn ? "Edit" : "编辑"} /></div></section>
294+
<section className="mt-6"><h2 className="text-base font-semibold">{isEn ? "Reading & scale" : "阅读与缩放"}</h2><p className="mt-1 text-sm text-[#83868c]">{isEn ? "Adjust Markdown content text size" : "分别调整界面、正文和列表的显示尺寸"}</p><div className="mt-3"><GeneralSettingItem icon={Store} title={isEn ? "Content scale" : "正文缩放"} description={isEn ? "Editor and chat Markdown text" : "调整编辑器和对话中 Markdown 内容的文字大小"} value="100%" /></div></section>
295+
</div>
296+
</div>
297+
)
298+
}
299+
219300
export function NoteGenMobileReplica({ lang = "cn", screen = "capture" }: { lang?: NoteGenReplicaLanguage; screen?: NoteGenMobileScreen }) {
220301
return (
221302
<NoteGenMobileFrame>
222303
<div className="relative flex h-full min-h-0 flex-col bg-white">
223304
<NoteGenMobileStatusBar />
224-
{screen === "capture" ? <NoteGenMobileCapture lang={lang} /> : screen === "chat" ? <NoteGenMobileChat lang={lang} /> : screen === "writing" ? <NoteGenMobileWriting lang={lang} /> : screen === "canvas" ? <NoteGenMobileCanvas lang={lang} /> : <NoteGenMobileSettings lang={lang} />}
225-
<NoteGenMobileDock screen={screen} lang={lang} />
305+
{screen === "capture" ? <NoteGenMobileCapture lang={lang} /> : screen === "chat" ? <NoteGenMobileChat lang={lang} /> : screen === "writing" ? <NoteGenMobileWriting lang={lang} /> : screen === "canvas" ? <NoteGenMobileCanvas lang={lang} /> : screen === "me" ? <NoteGenMobileMe lang={lang} /> : screen === "settings" ? <NoteGenMobileSettings lang={lang} /> : <NoteGenMobileGeneralSettings lang={lang} />}
306+
{screen === "settings" || screen === "settings-general" ? null : <NoteGenMobileDock screen={screen} lang={lang} />}
226307
</div>
227308
</NoteGenMobileFrame>
228309
)

0 commit comments

Comments
 (0)