# 移动端前端(老师 / 学生 / 家长) > 单一 Vue 项目,**按角色分包**:`teacher` / `student` / `parent` 三端共享 `shared/`(身份/登录态、通用组件、接口封装)。本文档描述工程结构约定;接口契约见 `../unified/`、`../academic/05-architecture/`、`../teaching/05-architecture/`。 ## 定位 一个移动端仓服务三个角色端: | 端 | 主要场景 | 主要域 | |---|---|---| | 老师端 | 打卡、查看/批改练习、备课查看 | 教务(打卡)+ 教学(练习/备课) | | 学生端 | 做题、查看练习记录与分析 | 教学 | | 家长端 | 绑定孩子、查看孩子练习/费用 | 教务(bindchild 绑定、费用)+ 教学(练习) | 三端**底层用户统一**(canonical_user_id + 7 角色),故共用 `shared/` 的 SSO 接入与登录态,仅按角色分包差异视图。 ## 技术栈(与规划对齐) | 关注点 | 选型 | 依据 | |---|---|---| | 框架 | Vue 3 + TypeScript + Vite | 与 PC 端同栈,组件/工具可复用 | | UI | 移动端 UI 组件库(Vant 系,落地时定) | 移动交互 | | 状态 | Pinia | 登录态 / 角色 / institution·campus 作用域 | | 接口封装 | 统一 `{code, data, message}` 信封 | 以教学 code 体系为基线(对齐清单 §2) | | 鉴权 | SSO(OIDC)token;家长端走微信 per-campus 授权 | 统一 identity 签发;教务微信免登收敛 | ## 目录结构约定 ``` frontend-mobile/ ├── README.md ← 本文件 └── src/ ├── shared/ # 三端共享 │ ├── identity/ # SSO 接入:token 存取、刷新/吊销、微信授权(per-campus appid) │ ├── components/ # 通用组件(作用域感知、列表、表单) │ └── api/ # 接口封装:统一信封 + 错误码;按域分子目录 ├── teacher/ # 老师端:views/ + 路由 ├── student/ # 学生端:views/ + 路由 └── parent/ # 家长端:views/ + 路由 ``` ## 结构铁律 1. **登录态/SSO 只有一份**,放 `shared/identity`;三端不得各自实现登录(对齐"底层用户统一")。 2. **家长↔学生绑定以教务侧 `bindchild` 为事实源**(对齐清单 §6):家长端进入时按绑定关系拉取孩子数据。 3. **三端路由独立**(各自 `views/`),但共用 `shared/components` 与 `shared/api`;角色差异用权限码判断,不写 `role == N` 硬编码。 4. 接口调用只经 `shared/api/`,三端 `views` 内不散写请求。 ## 可复用资产(源自教务 Go 重构实战) - **三端复用**:与教务重构一致采用"移动教师/移动家长 Vant + 共享 `shared`"模式;`shared/identity`(SSO 接入、token 存取/刷新/吊销)三端共用一份。 - **locale**:Vant4 默认中文,不动;如混用 Element Plus 组件需命令式+声明式双注入。 - **响应封装**:统一「HTTP 恒 200 + body `code`」,判成功读 `code===200`、错误文案读 `data.msg`。 - 建议 pnpm monorepo 与 `../frontend-pc` 共用 `shared`(types/http/色板/列表规范);移植清单见 `../unified/00-planning/experience-impact-analysis.md` §4。 ## 与文档目录的关系 - 本目录**只放移动端代码**;家长绑定、费用、练习契约见 `../academic/05-architecture/` 与 `../teaching/05-architecture/`;学生端契约兼容基线见 `../unified/00-planning/cross-system-reconciliation.md` §5。