|
|
|
@ -1,7 +1,7 @@ |
|
|
|
# 有职 App 开发进度与规划文档 |
|
|
|
|
|
|
|
> 生成日期:2026-09-10 |
|
|
|
> 最后更新:2026-09-10(EAS 构建/OTA 配置骨架已建 · 技术债 8 处 `any` 已清理) |
|
|
|
> 最后更新:2026-09-15(登录方式改为「验证码 / 密码 / 运营商一键登录」三通道 · 密码闭环打通 · 登录态未写入的严重缺口已修复) |
|
|
|
> 范围:项目健康审查 + 已开发 / 待开发清单 |
|
|
|
> 结论先行:**当前项目可运行**(`tsc` 0 错误、`eslint` 0 error、路由 0 失效跳转),无需修正阻塞错误。 |
|
|
|
|
|
|
|
@ -13,7 +13,7 @@ |
|
|
|
|---|---|---| |
|
|
|
| 类型检查 | `npx tsc --noEmit` | ✅ 0 错误(Exit 0) | |
|
|
|
| 代码规范 | `npx eslint .` | ✅ 0 error / ⚠️ 8 warning(均为 `any` 软警告) | |
|
|
|
| 路由闭合 | `node scripts/check-routes.mjs` | ✅ 63 路由全部存在,0 失效跳转 | |
|
|
|
| 路由闭合 | `node scripts/check-routes.mjs` | ✅ 67 路由全部存在,0 失效跳转(2026-09-15 复跑) | |
|
|
|
| 入口接线 | 读 `app/_layout.tsx` / `app/index.tsx` | ✅ 根栈 → 入口围栏 → 双端 Tab 完整 | |
|
|
|
| 应用配置 | `app.config.js` | ✅ name「有职」、scheme `youzhi`、plugins 正确 | |
|
|
|
|
|
|
|
@ -23,7 +23,7 @@ |
|
|
|
|
|
|
|
## 二、技术栈与架构 |
|
|
|
|
|
|
|
- **框架**:Expo SDK 57 · React Native 0.86.2 · React 19 · TypeScript 6 · Expo Router(文件路由) |
|
|
|
- **框架**:Expo SDK 57 · React Native 0.86.3 · React 19 · TypeScript 6 · Expo Router(文件路由) |
|
|
|
- **双端同构**: |
|
|
|
- 求职端 `(tabs)`:岗位 / 沟通 / 成长 / 我的(落地 `jobs`) |
|
|
|
- 企业端 `(enterprise)`:岗位 / 人才 / 沟通 / 我的(落地 `job-management`) |
|
|
|
@ -70,7 +70,14 @@ |
|
|
|
2. 我的页补【设置】入口 —— ✅ `enterprise-overview.tsx` 第 281 行已 `router.push('/settings')` |
|
|
|
3. 统一快捷入口话术 —— ✅ 已完成(2026-09-10):`MOCK_ENTERPRISE_QUICK_ACTIONS` 与沟通页 `QUICK_ACTIONS` 中 6 处 label 已对齐规范词(人才库→人才推荐、评价管理→岗位评价管理、沟通→企业沟通、面试日程/面试安排→面试评分),与「我的」菜单、`/interview-score` 路由名一致。 |
|
|
|
4. 沟通页快捷操作接线 —— ✅ 已完成(2026-09-10):`QuickActions` 死入口已绑定 `onPress`;批量发邀请→`/talent-recommendation`、面试评分→`/interview-score`(根级自包含页、可返回)走跳转,批量发Offer / 群发通知无对应企业端页、按项目约定弹 `Alert '功能开发中'`。tsc/eslint 0 问题。 |
|
|
|
- **微信登录**:三分支(`new` / `active` / `deleted`)已建模,前端状态机 + 页面流转(P1Login → P2PhoneCode → P3)**已全联通**;`src/lib/wechat-sdk.ts` 隔离待接真实 SDK;需 EAS 自定义客户端 + 微信开放平台移动应用(iOS 另需 Universal Links)。当前为 mock 分支切换验证。**接入路线图已落文档:`微信登录接入方案.md`**。 |
|
|
|
- **微信登录**:⚠️ **入口已于 2026-09-15 按产品决定摘除**(丁总:前端不做 QQ / 微信登录)。三分支(`new` / `active` / `deleted`)状态机、`P2W` / `B1` 页面、`src/lib/wechat-sdk.ts`、相关 hook / 类型 / 接口**全部保留未删**,仅 `P1Login` / `P2PhoneCode` 不再挂入口;`app/register.tsx` 的 `P2W` / `B1` case 亦保留。**接入路线图仍见 `微信登录接入方案.md`**(该文档开头已加摘除说明)。恢复入口 = 重新挂上按钮与 `useWechatLogin` 状态机。 |
|
|
|
- **登录方式(2026-09-15 改造)**:现为「手机号 + 验证码」(`P2`)·「手机号 + 密码」(`P2P`)·「运营商一键登录」(`P2Q`)三通道,微信入口已摘除。 |
|
|
|
- **修复了一个此前存在的严重缺口**:`P2PhoneCode` / `P2QuickLogin` 原先只 `navigate('P3')` 而**从不写入登录态**(`useLogin` / `loginByPhone` 写好却无人调用),全项目唯一写 token 的地方是微信链路 —— 入口一摘 `isTokenValid` 将恒为 false、每次冷启动都被打回登录页。现三条通道均已接入 `useAuth().login()`。 |
|
|
|
- **密码闭环**:`P2P` 密码登录 → `P2R` 设置/重置密码(**同页两阶段**:验证手机号 → 设新密码,成功后直接下发登录态)→ 设置页 `/settings/password` 修改密码(改完强制重登)。「登录即注册」的用户天生无密码,**首次获得密码即走「忘记密码」入口**,不额外插入注册步骤。 |
|
|
|
- 密码规则(8–20 位、需含字母和数字)在 `src/api/api.ts` 的 `validatePassword` 统一计算,错误码 → 文案映射在 `src/constants` 的 `PASSWORD_RULE_LABEL`;新增测试 `src/__tests__/password.test.ts`(24 例)。 |
|
|
|
- 新增公共件:`src/components/PasswordField.tsx`(密码输入 + 明文切换)、`src/hooks/useAgreementGate.ts`(协议门卫,此前逐字复制 3 份)、`src/utils/validators.ts`(手机号 / 验证码规则单一来源)。 |
|
|
|
- **按钮底色全局改深**:`components/onboarding/ui/PrimaryButton.tsx` 的 `colors.primary`(#2C83FD) → `colors.primaryBtn`(#1F6FDB)。原白字对比仅 **3.64:1,不满足 WCAG AA**;`primaryBtn` 为 **4.82:1**,且 AGENTS.md 配色规范本就要求 primary 不作白字按钮底。**副作用:整条注册流程按钮视觉变深,如已对外出图需重新确认。** |
|
|
|
- 账号与安全页的「微信账号」项已随入口一并移除(`MOCK_ACCOUNT_SECURITY`),避免留下有出口无入口的死项;「修改登录密码」项补上 `route: '/settings/password'`,此前点击无任何反应。 |
|
|
|
|
|
|
|
### 4.2 功能完整性缺口(标注【待确认】为推断项,需与产品对齐) |
|
|
|
|
|
|
|
@ -114,6 +121,9 @@ npx eslint . |
|
|
|
# 路由闭合审计(改动路由后必跑) |
|
|
|
node scripts/check-routes.mjs |
|
|
|
|
|
|
|
# 单元测试(src/__tests__ 下纯逻辑) |
|
|
|
npm test |
|
|
|
|
|
|
|
# 启动 |
|
|
|
npm start # 即 expo start |
|
|
|
``` |
|
|
|
|