# 子项目 zWhiteBoard(git submodule) zWhiteBoard(共享记事本前端)作为 **git submodule** 被 mainPage 引入,位于 `third_party/zWhiteBoard`,独立仓库为 https://git.zikai.wang/zikai/zWhiteBoard.git 。 ## 集成方式 mainPage 侧的 `src/modules/whiteboard/Whiteboard.vue` 包装器 import 子模块的 `src/App.vue` 作为组件,套 `PageShell` 统一容器与标题,并持有 KeepAlive 匹配名 `defineOptions({ name: 'whiteboard' })`。 - 子模块 `App.vue` 保持纯净(不持 name、不依赖宿主),可独立 `npm run build` / `npm test` / 部署。 - **构建期集成(非 iframe)**,共享 mainPage 的构建与 KeepAlive 缓存。前后端分离:UI/交互在 zWhiteBoard,能力由 zTools2 的 `/api/wb/*` REST API 与 `/api/ws/wb/*` WebSocket 提供。 - 子模块样式已隔离(scoped),全局重置仅在独立 app 的 `main.js` 加载,不污染宿主。 - 页签带 `requiresAlive: healthUrl('whiteboard')`(同源 `/api/health`),zTools2 不可达时隐藏页签并卸载组件。 - **身份标识**:白板不依赖 cookie。客户端 id 由 WebSocket 首帧 `hello` 携带或服务端生成(`client_id`),用于区分广播来源。组件经同源 fetch/WS 调用,反代使 `/api/` 与主页同源,无需 CORS。 - 包装器解析路由参数 `/whiteboard/:boardId` 并经 `:board-id` prop 透传给子模块,支持直链预填白板 id。 ## 克隆(含子模块) ```bash git clone --recursive https://git.zikai.wang/zikai/zMainPage.git mainPage ``` 若已 clone 但未带子模块: ```bash cd mainPage git submodule update --init --recursive ``` > 构建前需在子模块目录内 `npm install`(mainPage 的 Vite 编译子模块 `.vue`,但子模块依赖如 `vue-i18n` 须各自安装): ```bash cd third_party/zWhiteBoard && npm install ``` ## 升级子模块到最新版本 ```bash cd mainPage git submodule update --remote third_party/zWhiteBoard # 拉取最新 cd third_party/zWhiteBoard && git checkout master # 固定到目标分支/commit cd ../.. git add third_party/zWhiteBoard # 更新 gitlink 指针 git commit -m "chore: 升级 zWhiteBoard 子模块" npm run build # 重新构建 mainPage git push # 推送 mainPage(gitlink) ``` > 推送顺序:先确保子模块的 commit 已推到 zWhiteBoard.git,再推 mainPage 的 gitlink,否则别人 clone mainPage 时拉不到子模块对应 commit。 ## 移除子模块集成(仅移除 mainPage 页签,不影响 zWhiteBoard 本身) ```bash cd mainPage git submodule deinit -f third_party/zWhiteBoard git rm third_party/zWhiteBoard git commit -m "chore: 移除 zWhiteBoard 子模块集成" ``` 同时删 `src/modules/whiteboard/` 文件夹即移除页签。zWhiteBoard 独立仓库不受影响。 ## 与其他子模块的差异 | 维度 | timeTableFix / z449 | zPDF_package | zWhiteBoard | |------|---------------------|--------------|-------------| | 集成方式 | 构建期组件 import(共享构建/KeepAlive) | 构建期组件 import(共享构建/KeepAlive) | 构建期组件 import(共享构建/KeepAlive) | | 后端依赖 | 无(纯前端) | 有(zTools2 `/api/pdf/*`) | 有(zTools2 `/api/wb/*` + `/api/ws/wb/*`) | | 同源/CORS | 不涉及 | 同源经反代,无需 CORS | 同源经反代,无需 CORS | | 身份标识 | 不涉及 | httpOnly `zk_pdf` cookie,同源自动携带 | WS 首帧 `client_id`(无 cookie) | | 路由参数 | 无 | 无 | `:boardId`(直链预填白板 id) | | mainPage 是否编译子模块 | 是(import .vue) | 是(import .vue) | 是(import .vue) | > 四个子项目均采用构建期组件 import 集成,无 iframe。zWhiteBoard 与 zPDF_package 额外依赖 zTools2 后端 API,页签带存活探针;zWhiteBoard 是唯一带 WebSocket 与路由参数的子模块。