Tree:
3aa3c60004
master
${ noResults }
6 Commits (3aa3c600041e3a5a566149a43d51c5197e757bf8)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
3070a966b7 |
style: 边距间隔统一 8px(页面留白 / 卡片内边距 / 卡片间隔)
AGENTS.md 第 15 行的「边距间隔一致」在本批次中途补上了数值「,为8px」。
此前按众数取 16 落的 176 处因此作废——回滚还原不回 8(原本就是 16 的 66 张卡
同样要降),故改为按目标值重算,73 个 .tsx 文件共 +390 / -398。
三个维度全部收敛到 8:
- 页面留白:28 个主 ScrollView 的 contentContainerStyle,另加共享页壳 LegalDocScreen
- 卡片内边距:padding / paddingHorizontal / paddingVertical
- 卡片间隔:marginTop / marginBottom,以及分隔卡片的容器 gap
判定口径从「命名」改为「结构」:有 borderRadius 且(有 backgroundColor 或
borderWidth)即为卡片。4.17 的命名判定漏掉了 pendingItem、dimItem、
resume/{education,experience,project} 的 row、suggestionRow、reasonRow、
explanation、option、taxItem,以及一批 radius 已是 8 但内边距非 8 的卡
(matchBanner / offerBanner / salaryBox / cardBase / cardOffer / replyBlock /
rank.section / memberBanner / draftBanner / pathSummary / aiTip 等),本批补齐。
明确排除(附理由,非遗漏):表单控件、标签胶囊、选项卡、按钮、图标底与装饰;
错误重试态的 center 容器(改会把重试页居中打散);引导页 components/onboarding/**
(自成一套 12/14/18 圆角体系)。刻意保留:resume/preview 的 paper.padding 20
(导出文档的屏幕代理版心,对应 resumeHtml.ts 的 @page 34px 38px)、
SliderCaptcha 的 knob 阴影(控件对照项)。
顺带修复一个既有缺陷:skill-cloud 的行业 Tab 在搜索框出现后被纵向裁切,
只剩 6 个可点却看不见的胶囊。根因是 tabsWrap 的 maxHeight 未配 flexShrink: 0。
git diff 确认 tabsWrap 不在本批改动内,确系既有问题。
门槛:tsc / eslint / 365 用例 / check:icons / check:affordances /
check-backend-stubs / check-routes 全绿;已在模拟器截图核对 11 个页面。
详细记录见 项目开发状态.md §4.18。
|
1 month ago |
|
|
c3a3fa0eac |
style: 全站卡片圆角统一 8px 并去除卡片阴影
依据 AGENTS.md 于 2026-09-20 14:12 新增的硬规则「整个项目所有卡片的圆角都必须是
8px,无阴影」,改造 147 处卡片圆角、删除 54 行卡片阴影。同一次 AGENTS.md 编辑还把
提交规则由「每天 17:50 提交」改为「提交并推送到远端」,本次 17:50 动作按新规执行
两步(commit → push),故本提交同时包含该 AGENTS.md 改动。
为什么不能直接 grep borderRadius 全量替换
项目没有「卡片」的样式键约定:同一屏内 card / box / panel / section 混用,且
cardBtn(48 高胶囊按钮)、cardTag(标签)、cardIcon(圆形图标底)共用 card 前缀。
直接全量替换会把胶囊按钮与圆形头像一并压成方角。
判定口径(本轮定义)
卡片:样式键为 card 或以 Card 结尾/内嵌;另经逐条读块复核,纳入 17 个非 card 命名
的「独立承载一组内容的面板」(emptyBox / emptyList / emptyHint / searchEmpty /
pathSummary / section / cardBase / cardOffer / salaryBox / draftBanner /
matchBox / aiTip)。
非卡片:CardBtn|CardBullet|CardDot|CardBadge|CardIcon|CardWrap|CardTag|CardChip,
以及按钮、标签、chip、输入框、Tab 项、列表行(row / *Item)、头像与圆点。
圆/胶囊排除:半径 × 2 ≥ min(字面量宽, 字面量高) 时判为圆或胶囊,不动
(如 cardBtn 48 高/r24、radioOuter 18×18/r9、countdownCard 60×60/r30、
Holland 结果页类型序号圆标)。
改动规模(git diff 实测)
圆角改为 8:147 处,分布 50 个 .tsx/.ts
删除阴影行(shadowColor/Offset/Opacity/Radius、elevation):54 行,7 个文件
其中 app/jobs/[id].tsx 删除模块级 const shadow 常量及其 ...shadow 展开点(共 7 行)
卡片类样式 167 个,其中仍非 8px:0
审计脚本自身的两个缺陷(差点改错别人的圆角,已在文档中如实记录)
① 单行样式块(modalCard: { …, borderRadius: 16, … },)被当普通块解析,会把下一个
样式块的值算作它自己的 —— 不是漏改,是取到邻居半径然后改到邻居头上。
② shadowOffset: { width, height } 被当成元素尺寸,导致所有带阴影的卡片都被判为
胶囊而整类静默跳过(带阴影的恰是最该改的)。
两处均为静默漏判而非崩溃,故本批不采信脚本输出,改用 git diff -U0 逐行反查证明:
147 行新增半径中,130 行在 card 命名样式内、17 行在人工复核白名单内、0 行在名单外。
范围边界(刻意不动,非遗漏)
components/onboarding/ui/SliderCaptcha.tsx:294-297 滑块阴影保留(控件非卡片,
去阴影会使滑块与轨道糊在一起);src/theme/colors.ts 的 shadow token 保留
(colors.test.ts:11 仍断言)。全库 elevation:/shadowOpacity: 现仅此一处。
另有 116 条「像卡片但不叫 card」的样式未动,逐类看过几乎全是按钮/标签/chip/输入框/
Tab/列表行/头像底,压成 8px 反而是错的 —— 这是本轮口径的边界,不是余数。
回归锁
新增 0 例测试;本批为纯样式常量改动,不改变任何数据逻辑,靠既有 365 例与新立的
圆角审计脚本(167 个卡片类样式非 8px = 0)看守。
真机实测(Android 模拟器 emulator-5554,截图核对,非代码走查)
jobs 列表、jobs/1 详情、profile 求职端、enterprise-overview(本轮删除阴影最多的页面,
4 张卡 15 行)| job-publish | tools/skill-cloud | holland-result | resume/export
—— 均确认 8px 直角、无阴影,且内部胶囊标签与圆形序号标未被误伤,
白底卡片与 pageBg #F6F8F9 仍可区分、未塌成一片。
未实测(仅代码级验证):components/resume/EditKit.tsx、components/onboarding/ui/
Modal.tsx、components/onboarding/screens/P3Identity.tsx、LegalDocScreen
—— 嵌在弹层/引导流/长文档中,深链直达需先走完前置流程。
已知缝隙
「8px」目前仍是各 StyleSheet 里的字面量,未如颜色那样收敛为 theme 常量,
新增卡片没有强制来源。是否立 theme 层面的圆角 token,留待下一批定夺。
门槛:npx tsc --noEmit 0 错误 · npx eslint . 0 error/0 warning · npm test 26 套件
365 例全绿 · node scripts/check-routes.mjs 0 失效跳转 · npm run check:affordances 0 处 ·
npm run check:icons 0 处无效字形(194 文件 / 1357 字形) ·
node scripts/check-backend-stubs.mjs 140 个接口函数 · git diff --check 通过
|
1 month ago |
|
|
aff9fc8b19 |
fix: 收敛「同一事实两个数」类数据矛盾并补颜色 lint 盲区
合并 2026-09-20 当天的 4.14、4.15 两个批次。范围仅前端:后端(Java + SpringBoot)
由其他成员实现,本次未写后端代码,接口仍按约定在 api.ts 中预留注释版 fetch。
主线索是一类反复出现的缺陷:**同一个业务事实被写了两份,两处取值不同**。
修法一律是让重复的那一份在接口层从权威源**派生**,而不是把两个字面量手工对齐 ——
手工对齐只解决这一次,下次改数据照样分叉。
4.14 求职意向词表统一 + 四处数据自相矛盾
- 引导采集的期望薪资 / 求职状态 / 期望城市三组选项,引导页与「设置求职意向」页
各有一份词表,三组全部匹配不上:走完引导进来的用户看到三组 chip 一个都没选中,
像资料丢了。更严重的是在那里选「暂不考虑」保存后,简历仍把他记成积极求职中
(判定常量与页面词表不是同一个字符串)。三组选项下沉到 src/constants 单一来源,
新增 withCurrentOption 处理引导阶梯能拼出、快捷档覆盖不到的薪资组合。
- 顺带收敛四处数据矛盾:当前用户 Offer 数、求职进度每月 Offer 之和、企业端在招岗位、
企业端评价数、企业名(全称 / 简称两个值)。
- 撤回 4.10 第 7 条的错误结论:该条断言「常量无消费者、缺页脚组件」,实际
components/onboarding/ui/SupportFooter.tsx 早一天就已存在并挂在 P1Login / P2QuickLogin
两页上,页脚一直渲染。该结论朝「把已完成的当成未完成」的方向错,已改为如实。
4.15 数据自相矛盾批量收敛 + 半透明色 token 化 + lint 补盲区
- 又查出并修掉 10 组同源不同值,多为跨页面 / 跨层级,翻页时肉眼不易对照:
· 求职进度 stats 五项之和 30 ≠ 总数 28(ended 改为由其余四项相减得出,求和成为结构性的)
· 月度图表投递合计 52 / 面试合计 16,而卡片写 28 / 6(六个月三列重排为 28 / 6 / 2)
· 我的页收藏徽标 12 与收藏列表 3
· 勋章「投递满100次」显示已获得,而实际只有 28 次投递(obtained / progress 改由
buildUserStats() 派生)
· 匹配成功横幅写 3 家,而会话列表里 matched 为 true 的只有 2 条
· 岗位详情综合分恒为 92 分·优秀(fetchJobOverallScore 里是 `void id;`),9 个岗位里
只有第 1 个对得上;雷达图八维改按该岗位实际分等比缩放,否则 65 分的岗位会配一张
最低 78 分的图
· 对比页把产品经理与 UI 设计师的综合评分正好写反
· 候选人 4–8 号点进去全叫「张明远」(身份改取自人才推荐列表)
· 岗位 1 的公司所在地在列表卡写海淀区、详情页写朝阳区
· 待回复卡片写 3 人,而它跳转的「未回复」Tab 只有 2 条 —— 两者不是同一集合
(有未读消息 vs 未回复)。判据应是「与去向一致」,不是「某个内部集合的长度」
- 顺带修掉一处同屏矛盾:求职进度页标题「求职中 {stats.interviewing}」压在按 Tab 过滤的
companies 上(4 条),标题写 2、下面列 4 行,切到「面试中」Tab 只剩 1 行。该事实当时有
三份副本(统计卡 / 标题 / Tab 列表),已去掉标题这一份。
**未解决并如实记录**:companies 是 28 条投递的抽样,故统计卡的分阶段数字在 Tab 列表里
永远对不上行数 —— 属全量 vs 抽样的结构问题,两条修法都会改变用户看到的页面,需产品定夺。
- 5 处 rgba(255,255,255,x) 逐处看下来不是同一个 token 被写重 5 次,而是 4 个不同角色
(卡片底 / 弱底色 / 分割线 / 进度条轨道),故按角色拆成 4 个 token,值等于现状、一像素未改;
resume.tsx 的 rgba(0,0,0,0.4) 改用已有 colors.scrim。
- 补 lint 盲区:no-hardcoded-hex-color 只匹配纯 hex,拦不住 rgba()/hsl()。已扩到函数式颜色,
并加 TemplateElement 访问器,否则模板字符串里的颜色照样漏网。
- formatCompact(企业端看板内联的 .toFixed(1)k)与 formatThousands 下沉到 src/utils。
formatCompact 刻意保留尾随 .0(2000 → 2.0k),与 formatViews 去掉 .0 的做法不一致且是有意的,
改口径会动到看板现状显示。
测试
- 新增 data-consistency.test.ts(22 例),断言刻意写成「A 必须等于 B」的关系而非「A 等于 28」:
以后调整 mock 数据不会让测试变红,只有把派生关系改回写字面量才会红。
- 新增 job-preference-options.test.ts(15 例),含源码级接线锁。
- 修正 enterprise-filters.test.ts 一条把矛盾当契约的断言:原先锁的是「有未读消息的会话数」,
与卡片跳转过去的「未回复」Tab 不是同一集合,等于把缺陷固化成了期望。现锁「与去向一致」。
- 灵敏度验证:注入缺陷确认对应断言确实变红(含一次一次性注入 3 个缺陷、5 例如期失败),
随后逐字还原并 grep 确认无残留。
- 两处如实记录:一次用 python 做注入时脚本静默失败(本机 python 是 Windows 商店占位存根,
非交互调用不执行也不报错),文件其实没被改动 —— 若没先 grep 确认注入物存在,就会拿一次
「未注入」的运行去证明「规则有效」;以及 data-consistency.test.ts 初版把「累计面试邀请数」
与「当前面试中数」当成同一个事实而断言相等,红的是测试不是数据,已改为反向断言并写明注释。
实测(Android 模拟器 emulator-5554,截图核对,非代码走查)
- 求职进度统计卡 28 / 6 / 2 / 2 / 18,6+2+2+18 = 28 成立;月度图表三列合计 28 / 6 / 2;
段落标题随 Tab 变化,不再出现与列表矛盾的数字。
- 我的页 投递 28 / 收藏 3 / 沟通 8 / Offer 2(收藏 12 → 3);勋章 28/100、6/10、95/100,
其中诚信之星 95 与同屏「八大维度 → 诚信记录 95」同源,肉眼可自查。
- 未验到的:候选人详情 4–8 号姓名、岗位详情评分、对比页评分互换、收藏列表条数 ——
均有测试锁盖住,但本轮未逐屏截图,按「未做真机验证」记录,不当成已验证。
门槛:tsc 0 / eslint 0 / 25 文件 339 例全绿 / check:routes 0 / check:affordances 0 /
check:icons 0(194 文件、1357 字形)/ check:backend-stubs 140
|
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 |
|
|
29acbc23b8 |
feat(page): 新增业务页面与共享组件
C 端求职链路: - 新增 ability / assessment / holland(含 question、result)/ interview / hr-evaluation / appeal - 新增 resume(含 export)、progress、onboarding、game(含 level) - 新增 legal(含 chat)法律服务助手 企业端: - 新增 enterprise-overview / job-management / talent-recommendation / enterprise-chat - 新增 job-publish / job-evaluations / candidate-detail / interview-score - 新增 audit-report / operation-rules / enterprise-certification - 岗位管理、人才推荐、企业沟通均支持空态与数据态分支(hasData 驱动) 设置与工具: - 新增 settings 子页(privacy / account / notification / about) - 新增 personal-data-export 个人数据导出页 - 新增 jobs 子页(compare / offer-compare / rank / weight-settings) - 新增 tools 子页(salary-calculator / skill-cloud) - 新增 components 共享组件 |
2 months ago |
|
|
30cc3dc106 |
feat: 完成求职App核心页面与数据层并迁移至 Expo Router
|
2 months ago |