Tree:
c16ce63039
master
${ noResults }
5 Commits (c16ce630396a053398a21b2b2c84f1d91fa70ff5)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
928c310c36 |
feat(theme): 新增间距设计令牌层并收敛 onboarding 非卡片间距
- 新增 src/theme/spacing.ts:标尺(xs4/sm8/md12/lg16/xl24) + 语义令牌(card8/gutter8/framework16/block12/section12),src/theme/index.ts 从 ./spacing 导出 - 扩展 scripts/check-spacing.mjs:resolveSpacing 解析 spacing./spacingTokens. 引用,令牌化卡片不再被静默跳过(修潜在 bug),输出新增令牌命中统计 - onboarding 35 文件非卡片间距令牌化+收敛(18→block/22→section/14→block/10→sm/12→block) - 更新项目开发状态.md 4.21 - B5(app 框架 padding:16) 本批延期,spacing.framework 单一来源已就绪 |
1 month ago |
|
|
eaa8adb858 |
style(ui): 引导页 8px 收敛与上批 gap 漏网修正,新增间距核对门槛
4.18 的核对脚本把 components/onboarding/ 整目录排除了,于是规则里最明确的 「整个项目所有卡片的圆角都必须是 8px」在 26 个引导页上从未被核对过。排除是 脚本作者自己加的,不是用户说的。本批先把它从「待定夺」变成「有数据」。 实测引导页 42 处 borderRadius:真卡片只有 5 张,其余是控件、图标底色块、圆与 占位框。「引导页自成一套半径体系」这个排除前提是假的 —— 其卡片半径是 8/14/10/8/8,只有两张不在 8,不存在另一套体系。 改动(10 个文件 +14/−14): - ScreenShell.scrollContent 内容留白 20 → 8;P1Login.content 24 → 8 (P1 不用页壳,自带 content) - RadioRow.row 12/14/16 → 8/8/8 —— 它与主应用 holland/question.option、 game/level.option 同形态(横排 + space-between + 白底 + borderWidth: 1), 那两处上批已判为卡片并置 8,是代码库自己否掉了「RadioRow 属控件」的判断 - B1Wechat.preview 圆角 14 → 8、内边距 14 → 8 - P12Company.notice 圆角 10 → 8、内边距 12 → 8、卡片间隔 16 → 8 - P9JobStatus.list / P18Education.list 的卡片间隔 gap 10 → 8 改错又还原的两处(本批最该记的教训): ScreenShell.backRow 与 footer 我改成了 8,两处都还原为 16。主应用底部固定区 的口径就是 16(padding: 16 出现 4 次),头部返回图标的视觉位置也在 16 上下 (headerBtn 是 40×40 居中盒,42/58 个文件如此)。即引导页原本的 16 本就与 主应用一致,只有内容留白 20 与主应用的 8 不符。我先前「同屏三个留白、体系 不自洽」的判断站不住:16 是全应用通用的框架留白,且返回按钮属页面框架、 不是卡片,不在「页面留白」范围内。教训是:判断某个值该不该统一之前, 先量一遍主应用同类元素的既有取值。 补上 4.18 卡片间隔维度的 3 处漏网:holland/question.options gap 10、 holland.featureList gap 10、jobs/weight-settings.templateRow gap 10, 三者子元素分别是 option / featureCard / templateCard,全是 r8/padding 8 的卡片。 纠正 4.18 的不实结论:当时报「卡片 477 / 圆角 = 8:217」并称剩余非 8 的只有 若干控件。实际那个脚本的排除正则锚定全名(^(...|btn|tag|chip|...)$), retryBtn / statusTag / filterChip / progressTrack 这类带后缀的键一个都没匹配上, 260 个控件全被当成卡片报出来。217/477 是脚本的原始通过数,剩余 260 项是肉眼 判成控件的,脚本从未验证过这个判断。另有大小写漏匹配与 *Box 排除过头 (emptyBox / salaryBox / matchBox 被一并吞掉,等于把上批改过的东西排除在核对之外)。 新增 scripts/check-spacing.mjs + npm run check:spacing(--error 有命中即 exit 1), 与 check-routes / check-affordances / check-icons / check-backend-stubs 同族体例。 把判据编码进脚本而不是留在人脑:结构判定而非命名判定、按词尾而非全名排除、 圆用几何判据(width === height 且 borderRadius ≈ width/2)、排除项逐条打印供复核, 给排除表加名字要写理由。可失败性已在仓库脚本上复验:塞入含 4 类违规的探针文件 四维全命中且 exit 1,删掉后 exit 0。 真机验证(emulator-5554,非代码走查):引导页由内部状态机驱动、无 URL 参数, 临时改初始步截图,看完已还原并 git diff 确认无残留。用像素测量代替目视 (/tmp/mdj/px.js 解码 PNG 取某行首个非背景像素;密度 420dpi → 比例 2.625)。 P1 按钮 8dp、P9 卡片 8dp/按钮 8dp、P17 卡片 8dp/按钮 8dp、B1 卡片居中(设计如此) /按钮 8dp、P12 提示卡 8dp/按钮 8dp。头部返回箭头改动前后同行 52px → 73px, 差 21px 正好 8dp,一次同时证明热重载与还原都生效。 门槛:tsc 0 / eslint 0 / 26 套件 365 用例全过 / check-routes / check:affordances / check:icons(194 文件 1357 字形)/ check-backend-stubs(140 函数)/ check:spacing(卡片 196,圆角 = 8:196/196,另三维度 0)全绿。 |
1 month ago |
|
|
0c2ebf6149 |
feat: 清零假交互,补全导出分享与企业端写通道,修复四态与图标缺陷
合并 2026-09-18 当天的 4.9–4.13 五个批次。范围仅前端:后端(Java + SpringBoot)
由其他成员实现,本次新增接口一律按约定在 api.ts 中预留注释版 fetch,未写后端代码。
4.9 假交互盲区 + 四态缺口 + 企业端写通道
- 修掉 4.8「死控件已清零」结论的盲区:审计脚本只认「无处理函数 / 空处理函数」的
Pressable,查不到「有处理函数、点了只弹『功能开发中』」这一类,全仓实有 37 处。
- 按「能真做的真做,不能做的删入口」逐条处理:能接线的接线(如「评分申诉」→ /appeal);
能真导出的复用 shareText;无落点的删入口,并同步删掉 api.ts 里对应的下发项,
不留「数据里有、页面不渲染」的悬空字段。
- 修复 error 被静默丢弃的真 bug:legal/checkout 与 legal/service 的网络故障会被渲染成
「套餐不存在 / 服务不存在」,把用户引向错误的自救路径;另有 5 处有 error 分支但无重试
入口、1 处 refresh 已在作用域内却没用。统一改用既有 StateView(ErrorState 自带 onRetry)。
- 企业端岗位管理补「下架 + 刷新」写通道:新增 updateJobStatus / refreshJob,经 storage
覆盖表叠加(mockRequest 不深拷贝,直接改常量会污染全局且重启即丢),JobManagementJob
补 refreshedAt 字段,hook 补写方法与进行中标志,页面加二次确认,并补写通道单测。
- 企业端列表页补筛选/排序真实现,修掉一个无 value/onChangeText 的死输入框;Tab 过滤
从页面 useMemo 下沉到 api 层(原与「业务规则放 API 层」相悖)。
- 扩展 scripts/check-affordances.mjs 覆盖上述盲区,防止同类问题再次逃过审计。
4.10 平台资质证照页 + 死链修复 + 推送缺口
- 新增 app/settings/qualifications.tsx(平台运营主体自身的证照公示,合规 / 应用商店
上架审核用),配套 src/types/qualification.ts、src/hooks/useQualifications.ts、
api 取数函数与单测。注意它和企业端 EnterpriseCertificationForm 不是一回事:后者是
入驻企业上传自己的营业执照以取得认证,主体 / 目的 / 入口全不同,已在类型文件顶部写明。
- 修复死链。
- 补记 09-11~09-17 共 12 个提交从未推送的缺口(远端一直停在 09-10),并把「提交之后
必须推送」写进 AGENTS.md:17:50 的动作明确为 commit → push 两步,9:20 拉取前先看
git rev-list --left-right --count HEAD...@{u}。
4.11 企业端状态文案缺陷 + 状态映射下沉
- 修 4.9 写通道回看时暴露的缺陷:标着「草稿」的卡片按钮显示「重新上架」。JobManagementJobStatus
有三个值(active | offline | draft),三元表达式只分了两支,草稿落进「已下线」那一支;
确认文案「重新上架后,候选人可以再次看到该岗位」对从未上架过的草稿两句都不成立。
- 状态 → 文案映射下沉到 api 层,页面不再自行分叉。
4.12 六处导出 / 分享真机验证 + 霍兰德参与人数两处不一致
- 6 处导出 / 分享路径在 Android 模拟器上逐个验到系统分享面板,并借面板的文本预览核对
拼装内容与页面一致(数字、名称、状态)。
- 修正一处数据前后不一致(霍兰德参与人数两处对不上)。
4.13 六处空态实测 + 无效图标名缺陷 + check:icons 新门槛 + 缓存失败态结案 + 分享文本测试锁
- 用「注入空数据 + 逐个截图」把 4.9 遗留的 6 处空态实测通过(progress / legal /
hr-evaluation / ability / jobs/offer-compare / jobs/[id]),确认按设计渲染、无死代码。
- 修复文书模板 gavel-outline 无效字形名:Ionicons 全库 1357 个字形里没有 gavel,运行时会
打 "not a valid icon name" 且图标渲染为空白;页面的 `as keyof typeof Ionicons.glyphMap`
断言把类型错误吞掉了,故 tsc 一直没报。改用语义最接近的 hammer-outline。
- 新增 scripts/check-icons.mjs + npm run check:icons 门槛:直接读取已安装包的 glyphmap
(另存一份必然与真实图标库脱节),扫描 app/ 与 src/ 中的图标名字面量,含灵敏度验证。
- 结案 settings 缓存「读取失败」态:不是「未验证」,而是 readCacheBytes() 把异常全吞成 0,
故障传不上来,该分支在任何条件下都不可达。新增 cache.test.ts(12 例),以「构造会抛错的
文件系统」把这条永不抛错的契约锁住。
- 补上第七处分享路径(入职清单导出)的真机验证,7 处分享至此全部验过。
- 新增 share-text.test.ts(28 例),补 4.9 同批 5 个分享拼装函数一直缺的测试锁(4.9 方案里
写了「并补单测」,当时只给范式 buildChecklistText 补了)。侧重锁三类:空值守卫、取的
是本地选择态而非接口默认值、对外可见格式;并把 4.12 那个真机证伪实验固化成不依赖设备的断言。
- 顺带把「数据层引用外部词表」三类系统排查完:图标名(已修 + 已设门槛)、路由(已被
check-routes 覆盖,本次补验其数据层灵敏度)、颜色(硬编码色值 0 处)。
其他
- AGENTS.md 第九节记录暗模式决策:本项目维持纯亮色。理由是全仓 3302 处静态 colors.X 分布在
124 个文件,其中 119 个为模块级 StyleSheet.create —— 模块级样式在启动时即固化颜色,与
运行时切换主题不相容,接入暗模式属重构级工程,且当前无自动化视觉回归手段可验证这 3302 处
改动。故本轮只记录决策、不改代码,将来应作为独立重构批次推进。
- 项目开发状态.md 同步各批次结论与证据(含一次错误归因的更正:深链不路由不是 expo-dev-client
缺失,而是应用跑在 Expo Go 里、Expo Go 只注册 exp://,已补 am start 实测证据)。
门槛:tsc 0 / eslint 0 / 23 文件 302 例 / check:routes 0 / check:affordances 0 /
check:backend-stubs 140 / check:icons 0
|
1 month ago |
|
|
00522d53f9 |
feat: 死控件清零并修复一键登录取号、重做引导页
一键登录(P2Q)取不到手机号的根因不在取号:页面读的是 data.phone,而该字段 只有短信通道才写入,且 loginByCarrier 返回的 phone 被直接丢弃,于是号码位恒为 占位「本机号码」。现改为进页面即预取(useCarrierPhone + fetchCarrierPhone), 失败时置灰按钮并给出「重新获取 / 改用验证码登录」,成功后把号码写回引导资料 (P2P/P2R 预填与 B3 联系人电话同源)。真实取号是运营商原生 SDK,Expo Go 跑不了, 接入路线图见新增文档《运营商一键登录接入方案.md》。 引导页重做四屏内容与配图,配图位走新增组件 ImageSlot:素材未到位时在页面上标注 「配图待补」+ 该放什么图,补图只改 assets.ts 的 source 一行;设置页补「查看引导页」 入口(此前只有首次启动能进,看过一次就再也进不去),并区分「首次启动」与 「已登录回顾」两种出口,避免把已登录用户甩回注册流程。 企业沟通 / 人才推荐两页的 Tab 与搜索真正生效:Tab 计数与待办数量改由列表推导 (原先写死的数字与示例数据对不上,会出现「Tab 写 3、列表 0 条」),无对应页面的 漏斗图标摘除,筛选复位不再只是弹提示;申诉举证接真实选图,候选人详情「发起沟通」 跳会话页,面试评分支持本地草稿与恢复,入职清单勾选落库并可增删自定义待办、导出文本, 薪资计算器「更多工具」改指真实路由(原先三项都指回自己),技能词云接搜索与学习路径生成。 测试新增 3 个文件 51 例(共 219 例全绿),存储 mock 由「恒返回 null」改为带状态 Map, 使「存了要能读回来」这类行为真正被验证;tsc / eslint / 三个审计脚本(0 失效跳转、 0 死控件、137 个接口预留)均 0 问题。 另:package-lock.json(本项目统一用 yarn.lock)与本地调试截图加入 .gitignore。 |
1 month ago |
|
|
b8d19d29cc |
chore: 有职 App 多模块推进与配置同步(2026-09-10)
按每日 17:50 提交纪律,精确分阶段 git add(未用 -A / 未用 git rm), tsc --noEmit 0 错误。涵盖本日及近期累积改动。 | 模块 | 主要文件 | 变更要点 | 状态 | |---|---|---|---| | 构建/发布 | eas.json, app.config.js | EAS 构建/OTA 骨架(runtimeVersion/updates/channel、iOS·Android 包名) | 完成·占位待注入 | | 依赖治理 | package.json, yarn.lock, package-lock.json(删) | 移 web 脚本、统一 yarn、删陈旧 lock | 完成 | | 微信登录 | wechat-sdk.ts, useWechatLogin.ts, useWechatBindPhone.ts, wechat-auth.ts, P2WechatCode.tsx, DeletedAccountModal.tsx | 三分支状态机(new/active/deleted)+注销不可复活 | mock 完成·真实SDK 待开放平台申请 | | 企业端 | enterprise-chat.tsx, enterprise-overview.tsx, talent-recommendation.tsx | 快捷入口话术统一 + 沟通页快捷操作 onPress 接线 | 完成 | | 通关小游戏 | src/api/api.ts | 7 关内容增厚至 22 题(单选/多选/输入混排) | 完成 | | UI 技术债 | profile/audit-report/game/legal.tsx | as any → Ionicons 类型化、路由类型化 | 完成 | | 滑块验证/注销 | SliderCaptcha.tsx, ScreenShell.tsx, settings/account-cancel.tsx, index.tsx | 滑块验证 + 账号注销流程接线 | 完成 | | 注册链路 | register.tsx, P1Login.tsx, P2PhoneCode.tsx, AuthContext/RoleContext | 微信分支 + 手机号验证整合 | 完成 | | 路由审计 | scripts/check-routes.mjs | 死链/失效跳转自检工具 | 完成 | | 文档 | 项目开发状态.md, 微信登录接入方案.md | 状态盘点 + 接入路线图 | 完成 | |
2 months ago |