现在有什么(已交付,打开就能看)
- 三栏布局为主体CommunityShell 与文档站布局均已按三栏实现,xl 断点三栏、lg 两栏、移动端单栏。
- 单社区页/c/[community] 已可用,PHP / Vue / Rust / MySQL / Ubuntu 五个社区结构各异。
- 无限级横向 megamenuMegaMenu + MegaFlyout 递归组件;PHP 社区已有 5 级示例(网址大全 → 工具链 → 静态分析 → PHPStan)。
- 每个菜单一个独立 slug 页menuRegistry 注册表 + defineAsyncComponent;未登记的 slug 回退到自动生成的骨架页,不返回 404。
- 社区主题色切换通过 --c-brand / --c-brand-dark / --c-brand-soft 三个 CSS 变量注入,子树全部引用变量。
- 移动端菜单降级MegaTree 递归折叠,按深度缩进,仅展开当前分支。
- 「信息优先」视觉语言重做v3 全站重做完成:行动色收敛为单一暖橙红 #d93d16,正文链接单独用 #0b6bcb,其余全部中性灰;静态卡片不再用阴影。
- 全站响应式与自适应文档与社区页断点为 1024 / 1280;目录页(/c)改为容器查询,因为它嵌在布局中栏里,宽度由布局决定而与视口无关。
- 设计令牌单一来源main.css 的 @theme 是唯一来源;另已把手写 SVG 图表里 230 处旧色值全部替换为新令牌取值。
- 界面原子组件CommunityAvatar / JoinButton / VoteRail / PostCard / DirectoryCard / DirectoryRow 已落地并被目录页与社区页复用。
- 组件类的级联层归属Tailwind 4 工具类住在 @layer utilities;无层样式优先于任何 @layer。修前 .r-chip 让 class 里的 hidden 永久失效,手机上领域标签白占 88px 并把「加入」按钮顶出卡片被裁。
- 布局自动验收在 320 → 1920 共 14 个宽度 × 14 条路由 = 196 项上跑自动断言,全部通过。判据取自实测:目录页中栏 349 → 653px,简介列 162 → 184px,列右边界像素级一致。
- 社区页免 hero:顶栏与 megamenu 直接相邻原hero把社区名、头像、简介各说了一遍,而这四样顶栏与左右栏都已具备 —— 首屏被 128px 重复信息占掉。实测改后 megamenu 顶边 = 顶栏底边 = 57px(紧贴,无缝隙)。左栏原本还列了一份「社区导航」,与 megamenu 是同一批条目,一并删掉,换成「我的订阅」与「本社区热门标签」(后者取自信息流真实标签分布,是菜单给不了的信息)。
- 顶栏三段式:标识 / 搜索居中 / 操作贴右修前搜索用了「flex-1 + max-w + mx-auto」,auto margin 与 max-width 冻结顺序让留白偏向一侧,1440 下左右留白 159/317 且操作组被挤在中间,右侧空出 611px。改成两层结构(外层 flex-1 负责居中、内层封顶 560px)后,768 → 1920 实测左右留白均为 12/12。
- 响应式栅格必须有基础列定义隐式单列的轨道尺寸是 auto(= min-content),宽内容会把轨道顶破;grid-cols-1 等于 minmax(0,1fr),最小值为 0 才能真正收缩。全仓 53 处响应式栅格已补齐,并用「改动行只允许插入一个 token」的方式逐行校验,避免批量脚本误伤。典型受害例:/ui 的 URL 规范表 min-content 500px,两栏布局每栏最多 436px,被 overflow-hidden 裁掉 64~204px 且任何视口都塞不下 —— 该表改为整行铺开。
- 全站移除面包屑Breadcrumb 组件与 3 处引用(StubPage、菜单页、帖子详情页)已删除;StubPage 改为「第 N 层」层级芯片 + 单个上级链接,属于回退入口而非路径链。同步修正了 /ui、/modules、/roadmap、/prototype 与 R-UI-08 中共 10 处描述面包屑的文案与图注。
- 顶栏语言切换器桌面端放在右侧操作组内(地球图标 + 语言短码),移动端在抽屉里并列「社区目录 / 社区演示」。控件宽度固定为 62px,避免中英文字宽不同导致顶栏跳动;菜单里同时列出已启用语言与「还有 N 种待启用」。实现见 /tasks 的 UI-21。
- 语言注册表与可扩展app/utils/locale.ts 的 LOCALES 登记 10 种语言(zh-CN / en 启用,zh-TW / ja / ko / fr / de / es / ru / ar 预登记)。每种语言带 htmlLang 与 dir,切换器底部显式标出「还有 N 种语言待启用」—— 不假装只有两种。
- 浏览器语言协商解析 Accept-Language(按 q 降序、忽略 q=0、前缀匹配),服务端与客户端调用同一个 negotiateLocale(),因此 SSR 输出的 HTML 与 hydration 结果一致。cookie ruyi_lang 优先于浏览器声明,有效期 1 年。未覆盖的语言回落到 zh-CN(本站在中文语境下生长,把陌生语言送到英文更远)。协商结果一律用 302 —— 结果依赖请求头,301 会被中间层缓存并扩散。
- URL 语言前缀全部页面收敛到 app/pages/[locale]/。旧路径(/ui、/c/php)在用户没有显式选择语言时 301 到默认语言 /zh-CN/…(目标确定,可安全缓存以收敛权重);若用户选过语言(ruyi_lang cookie)则改用 302 送到该语言。形状像语言码但并不存在的(/xx-YY/ui)返回 404 而不是重定向 —— 不掩盖「该语言没有这个版本」。
- 手动切换并保持当前页切换只改 URL 前缀、走客户端路由,不整页刷新,滚动位置与已展开的菜单状态都保留。社区 slug 在目标语言下不同时(community_locales.slug)用目标 slug 重拼,映射缺失则回落该社区首页而不是 404。
- 界面词典与键集合校验messages.ts 把 zh-CN 与 en 两份词典写在同一个文件里,配 assertMessageParity() 断言键集合完全一致 —— 分成两个文件时,「少一个键」在 TypeScript 里不会报错。开发环境缺键渲染成 ⟦key⟧,一眼可见。当前 263 个键已对齐。错误页(4xx/5xx)也走同一套词典:app/error.vue 不再暴露中间件里那句中文 statusMessage,改按语言取文案与按钮,否则英文读者撞到 404 时会看到一整句中文。
- 社区内容本地化数据字符串走「原文 → 英文」术语表(对应未来真实的 translations 表),界面字符串走词典,两条路分开:前者按 id 稳定、可增量翻译,后者由构建期校验兜底。目录页英文版残留汉字已从 1042 降到个位数(剩下的都是模板源码注释,生产构建会被剥离)。
- 信息流与评论按语言生成文案池按语言拆分,locale 只进入 makeFeed 的随机种子,不进入正文与评论树的生成 —— 因此中英两版的剧情结构(帖子数、评论条数、最大深度)完全一致,只有文案不同,切语言不会像「换了一个社区」。
- hreflang 与 html langapp.vue 统一输出 htmlAttrs.lang / dir 与每页的 hreflang alternate(含 x-default),页面标题与描述也按语言输出。这一条最初整批漏掉:11 个文档页的 <title> 各自写死中文,现已收敛到 useDocHead() 一处。
- 万级社区目录按 1.3 万条数据实测:搜索(匹配名称/简介/话题/领域)+ 16 个领域带计数 + 4 档排序 + 3 档密度 + 分批渲染 + URL query 同步,服务端可直出已筛选的首屏。
- 目录社区统一适配toCommunity 适配器把目录社区转换为标准站点骨架(左栏导航 + 通用 megamenu + 规则/版主),任意 slug 均可打开,叶子落到通用骨架页。
- 目录密度与简介列宽预算实测 1440 视口下中栏 651px、简介列 184px、中文 12.75px/字 → 简介压到 ≤14 字;变体短语 ≤8 字、收尾短语 4 字。修前简介 340px、89% 的行在句子中间被切断。
- Nuxt 4 SSR 前端骨架本项目即该骨架,构建与 SSR 均已验证通过。
- 组件库与设计令牌v3 已把颜色/圆角/阴影/字体全部收敛到 main.css 的 @theme(唯一来源),组件层用 .r-* 原子类与 9 个 Vue 组件实现。
- 产品与技术设计文档站本站即交付物,11 个页面全部可访问。
- 交互原型/prototype 可交互;另有 /c 下的完整界面演示。
- 数据表设计/database 页含 SVG ER 图与 45 张表的完整定义(MySQL 语法)。
- 架构与部署设计/architecture 与 /stack 两页,全部按实际选型编写。
- AI 可执行任务分解/tasks 已交付:58 条任务 / 10 个分类,每条含前置依赖、涉及文件或表、执行步骤与可客观判定的验收标准;按依赖拓扑给出并行开工批次,并支持导出 Markdown 直接交给执行者。