Commit Graph

18 Commits

Author SHA1 Message Date
4334dec00d docs: 精简 README,细节拆分到 docs/
README 仅保留概览/结构/基础设施/安装/开发命令;
架构、新增页签、子模块管理细节移至 docs/ 下三个 md:
- docs/architecture.md:模块注册/PageShell/KeepAlive/存活校验
- docs/add-module.md:新增页签步骤 + 元数据字段速查 + 常见变体
- docs/submodule-timeTableFix.md:submodule 升级/clone/移除/独立访问
2026-07-23 04:09:42 +00:00
a844f364dc refactor: 引入 PageShell 统一页面外壳,高内聚低耦合
- 新增可复用 PageShell 组件(titleKey/fluid/padded + actions 插槽),
  统一容器宽度(1080px)、垂直节奏与标题,消除各模块重复包裹
- whiteboard/calendar/mobile-game 全部改用 PageShell,去掉各自手写的
  .container/.__inner/.__title 重复样式;calendar 用 fluid 全宽变体
- timetable 改用 mainPage 侧包装器 Timetable.vue:import 子模块 App.vue
  套 PageShell(对齐其他页宽度),并持有 KeepAlive 匹配名 name:'timetable'
- 子模块 timeTableFix 的 App.vue 去掉 defineOptions(保持纯净),name 约定
  由 mainPage 包装器持有,消除跨仓库脆弱约定;submodule 升级到 17aeea8
- 注册表清理:去掉无效 try/catch,order 缺省改 999(避免与 hidden 页 99 冲突),
  注释文档化全部元数据字段与 KeepAlive 约定
- 新增页签照 timetable 模式复用 PageShell,注册方式一致
2026-07-23 04:04:40 +00:00
91d55f1b11 feat: timeTableFix 改为构建期组件集成 + git submodule
- 弃用 iframe 嵌入:直接 import 子模块 timeTableFix 的 App.vue 为懒加载路由
  组件,共享 mainPage 构建/依赖(ical.js)/KeepAlive 缓存,无运行期割裂
- git submodule 接入 third_party/timeTableFix(固定到 a49a725),.gitmodules
  使用无凭据 URL;.gitignore 忽略子模块 node_modules
- 删旧 iframe 包装组件 Timetable.vue,移除 app.config 中 timeTableFix 配置
- timetable 模块不再 requiresAlive(构建期已打包,无远程依赖)
- README 更新:项目结构、submodule clone/升级流程、存活校验描述
- 子模块样式隔离(scoped + ttf- 前缀)已在 timeTableFix 侧完成,无泄漏
2026-07-23 02:54:00 +00:00
7d81da65cf feat: 新增日程整理页签(iframe 嵌入 timeTableFix /ttf/)
- 新增 timetable 模块:iframe 嵌入同源 /ttf/(Apache 反代到本地 vite preview)
- 声明 requiresAlive 探测 /ttf/,复用现有存活校验:周期探测、失活隐藏页签
  并卸载组件、恢复自动重载(与其他 requiresAlive 模块一致)
- app.config.js 新增 timeTableFix 配置(pageUrl / healthUrl)
- timeTableFix 作为独立项目维护(独立仓库/构建/systemd),mainPage 仅嵌入,
  删除该模块文件夹不影响 timeTableFix 本身与其他页签
- i18n:tabs.timetable(日程整理 / Schedule Organizer)
2026-07-23 02:25:54 +00:00
711026be9f feat: 隐藏页签持久可见 + 页签切换不卸载 + 白板周期存活探测
- 隐藏页签(cqy)访问后保持可见:路由进入即标记 visited,切走不再消失
- 页签切换默认不卸载组件:<KeepAlive :include> 缓存全部模块组件
  仅声明 requiresAlive 的模块在服务失活(down)时移出 include -> 卸载
- 白板存活检测改为加载即探测 + 每 30s 周期重探(startPolling),
  状态在 up/down 间响应式翻转,不再一次性固化
- 各模块组件 defineOptions name 与模块 id 一致,便于 KeepAlive 精确匹配
2026-07-22 03:20:48 +00:00
2c33457c87 fix: 白板页改用 .container 容器,与移动游戏项目页一致的左右留白 2026-07-22 02:53:05 +00:00
370388e729 fix: 白板页签乐观显示 + 白板切换输入框 + /whiteboard/{id} 直链
- 存活逻辑改为乐观显示:探测中(pending)/存活(up) 都显示页签,仅明确
  不可达(down) 才隐藏。修复首屏看不到页签、需刷新才出现的问题
- 白板页加 ID 输入框与切换按钮,可切换不同白板,默认 share
- 路由支持 /whiteboard/:boardId 可选参数,直链访问自动填入输入框并切换
- 模块可声明 param 让路由表生成子路径,保持注册表驱动
2026-07-22 02:43:26 +00:00
b5dcf924fb feat: 新增共享记事本页签(iframe 嵌入 + 存活校验)与集中配置
- 新增 whiteboard 模块:iframe 嵌入 f.zikai.wang/wb/shared,骨架屏+降级外链
- 存活校验:模块声明 requiresAlive,启动时 no-cors 探测 /health 一次,
  服务挂掉则隐藏页签(刷新页面才重探)
- 集中配置 src/config/app.config.js:白板 URL/探针/默认记事本 id 统一管理
- 容错强化:注册表/路由/useProjects 单模块异常不影响其他页签,删除一个页签
  仅需删其模块文件夹并重新 build
- i18n:tabs.whiteboard / common.serviceUnavailable / whiteboard.openExternal
- README 精简重写:仅保留项目结构、基础设施、Ubuntu 从0安装、新增页签
2026-07-22 02:22:59 +00:00
Zikai
19b301b937 fix: 日历用全宽(突破 .container 1080px 限制)
日历页改用全宽容器(calendar-page__inner,max-width:100%),
不受全局 .container 的 1080px 限制,仅留左右内边距。
宽屏 1400px 时 frame 从 1032px -> 1352px,iframe 1350x843;
窄屏仍自适应。aspect-ratio 默认 16:10(min-height 500px),
窄屏回退 4:3。
2026-07-13 14:17:49 +00:00
Zikai
337d516c08 fix: 日历页显示页签+页签样式优化+iframe自适应+骨架屏
- useProjects: 访问 hidden 模块(/cqy)时仍显示其页签并高亮,
  让用户知道当前位置;主页仍隐藏日历页签
- TabNav: 非激活页签加圆角背景与 hover 背景反馈,激活页签
  下边线贯通整宽,更像页签
- Calendar: iframe 去除固定 800x600,改 width/height:100% +
  aspect-ratio 自适应(宽屏16:10,窄屏4:3,min-height 400px)
- Calendar: 加载骨架屏覆盖层(iframe @load 后淡出),
  iframe 始终在 DOM 中确保 load 事件触发
- i18n: 日历页签文案改「cqy课程表」/「CQY Timetable」
headless 验证:/cqy 显示页签且激活、hover 有背景反馈、
iframe 自适应宽窄屏、骨架屏加载后淡出
2026-07-13 14:13:23 +00:00
Zikai
49900d2363 feat: 添加隐藏日历页 /cqy(谷歌日历,不在导航显示)
- 新增 calendar 模块(Calendar.vue + index.js),路由 /cqy
- 模块 meta 设 hidden: true,useProjects 过滤隐藏模块,
  TabNav 不显示日历页签,仅能手动访问 zikai.wang/cqy
- Calendar 组件懒加载(独立 chunk),默认页不下载
- iframe 嵌入谷歌日历(周视图),iframe loading=lazy
- 既有 .htaccess SPA 回退已覆盖 /cqy,线上 200
headless 验证:默认页无日历页签且不加载 Calendar chunk;
直接访问 /cqy 渲染 iframe 且加载 chunk;TabNav 仍只有移动游戏
2026-07-13 14:00:03 +00:00
Zikai
c6dad2b79a refactor: 高内聚低耦合 - 配置集中化与 i18n 统一
结构优化:
- 新增 mobile-game/config.js:集中模块静态配置(资源路径、排行榜端点、
  hero meta、子标签页定义),消除散落在各组件的硬编码
- 新增 composables/useLocale.js:共享语言辅助(t/isZh/pick),
  消除 6 个组件各自重复定义的 L() helper
- 文案全部迁入 i18n locale(mobileGame 命名空间),消除模板内联 L('中','英')
- 数据文件 versions.js 去除 {zh,en} 对象,文案改由 i18n 键(tracks/versions)取
- 各组件改为读 config + t(),不再直接 useI18n,降低与 i18n 实现的耦合

headless 验证:中文(hero/meta/team/timeline/3D置顶) + 英文切换 + 切回中文 全通过
2026-07-12 16:08:25 +00:00
Zikai
b3556b8639 perf: 子标签页按需加载(代码与元素懒加载)
原 v-show + 静态 import 导致三个子标签页的组件代码全部打进 MobileGame
chunk,且首屏即渲染全部(排行榜 onMounted 立即发 AJAX、视频元数据加载)。

改为:
- 三个标签页内容拆为独立组件 TeamLeaderboardTab/IterationsTab/ExperimentTab
- MobileGame 用 defineAsyncComponent + 动态 import,Vite 拆成独立 chunk
- v-if + Suspense:未激活的标签页组件根本不挂载(不发 AJAX、不渲染)
构建产物可见三个独立 chunk;headless 验证:默认团队页仅加载 team chunk,
点迭代记录才加载 IterationsTab chunk,点实验才加载 ExperimentTab chunk。
2026-07-12 15:44:39 +00:00
Zikai
88979a68c2 fix: 去掉「作品集」与「角色/主开发」字样
- 品牌栏与页面标题移除「作品集」副标题,仅保留 Zikai
- HeroSection 移除「角色: 主开发/Lead Developer」meta 项
- TeamCard 移除成员角色(主开发/开发/团队),仅显示姓名
- 清理 i18n locales 中无用的 subtitle 字段及 App.vue 对应样式
2026-07-12 15:41:56 +00:00
Zikai
8e08e619fc fix: 时间显示/3D线置顶强调/子标签页重构
1. fix(HeroSection): period 为 {zh,en} 对象却直接渲染导致显示 [object Object],
   改为字符串 '2022'
2. feat(timeline): 3D滚球(最终形态)线移到最前并 featured 强调(渐变背景+★+实心3D徽章),
   其后用分隔标记提示「早期并行演进:2D线」
3. refactor(MobileGame): 团队+排行榜/迭代记录/实验 改为平级子标签页(SubTabs),
   默认显示团队+排行榜;新增 SubTabs.vue 通用子标签组件
   headless 验证:默认页(团队+排行榜) -> 迭代记录(时间线) -> 实验(视频) -> 切回 全通过,
   中英文子标签页文案正常
2026-07-12 15:34:30 +00:00
Zikai
0adb320a47 docs: 部署节更正为 Apache + 补充 SPA .htaccess 回退说明
实际对外服务是 Apache 2.4(非 nginx),DocumentRoot /var/www/html。
history 模式下直接访问 /mobile-game 会 404,已用站点根 .htaccess 回退
(该文件不纳入本项目仓库,仅文档说明)。
2026-07-12 15:24:34 +00:00
Zikai
e8dee338ed fix: EN切换失效、删除贡献者描述、版本按演进线分组(2D->3D)
- fix(i18n): composition 模式下响应式 locale 在 i18n.global 上(非 i18n.locale),
  loadLocaleAsync 与 useI18nLazy 改用 i18n.global.locale;
  useI18nLazy.current 改为派生自全局 locale 的 computed(单一数据源);
  各组件 useI18n() 加 useScope:'global' 确保读到同一 composer。
  headless 验证:默认中文(不下载EN chunk)->点EN加载en.[hash].js并切英文->切回中文 全通过
- content: 删除 MobileGame 概览中「主要贡献者 Zikai Wang... Hongxiang He...」句子
- timeline: 版本数据改为多演进线并行(zikai-ui/main/doby/roll-a-ball),
  每线带 2D/3D 形态标记,3D 线前显示「形态转变:2D -> 3D 滚球」转折标记
2026-07-12 15:03:04 +00:00
Zikai
15af291da0 feat: init mainPage portfolio site
Vue 3 模块化作品集主页,浅色极简风格,中英双语懒加载 i18n。

- 模块注册表(import.meta.glob)约定式收集项目模块,新增页签无需改导航/路由
- i18n: 中文同步注入主 chunk,英文动态 import() 拆独立 chunk,仅切换时下载
- 第一个页签 mobile-game: 展示 448/449 移动游戏毕设(概览/截图轮播/版本时间线/团队/排行榜/ML视频)
- 排行榜复用 /449/449rest.php,失败优雅降级
- 构建: vite outDir=/root/html,emptyOutDir=false,产物用 mainPage/ 命名空间
- 样式: CSS 变量令牌,无 UI 框架运行时依赖
2026-07-12 14:18:35 +00:00