Tree:
b22ed57151
master
${ noResults }
7 Commits (b22ed57151f4c3ae95945fa64b87ce85370774fc)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
410b1b7386 |
refactor(theme): 卡片间隔令牌化收尾,borderRadius/padding:8 收敛为 spacing.card
- 82 个 .tsx 文件的卡片 borderRadius/padding(含 H/V):8 收敛为 spacing.card(值恒 8,零视觉变化) - 自动补齐 spacing 的 theme 导入(复用已有导入或按目录深度计算相对路径) - check-spacing 令牌引用命中 954 处且仍 0 违规,审计网未撕裂 - 更新项目开发状态.md(4.21 残留①标记完成 + 新增 4.23) |
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 |
|
|
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 |
|
|
65f138bae2 |
refactor: 收敛 14 处重复声明的映射表与业务规则
接 4.14 / 4.15 的同一类缺陷排查。那两批治的是「同一个事实两处取值不同」,
本批治它的另一半:**取值当时相同,但同一张映射表 / 同一段业务规则被抄了多份**。
后者平时看不出来,代价有两个:改一处漏一处;以及测试锁的是**没人渲染的那份**。
本批不改任何取值,属纯重构 —— 已逐条核对 git diff 的删除行,无一色值被改。
修法:14 处本地声明 → 6 张单一来源的表
- 评级 → 文字色 **5 份 → 1**:growth / jobs / ability / assessment 四处同名同值
(三处叫 LEVEL_TEXT_COLOR、一处叫 LEVEL_COLOR),hr-evaluation 另有一份中文键版。
- 霍兰德六型 → 强调色 3 份 → 1(介绍 / 答题 / 结果三页各一份 TYPE_COLORS)。
- 语义色名 → 色值 3 份 → 1(企业看板 / 面试评分 / AI 面试各一份 COLOR_TOKENS)。
- 文章缩略图 2 种写法 → 1:成长页是 {violet:{bg,color}} 对象表,详情页则拆成
THUMBNAIL_BG + THUMBNAIL_COLOR 两份平行 Record。
- 社保基数 clamp **3 份 → 1**:权威那份在接口层 computeSalaryResult 里,另两份在
计算器页(一个同名 helper + handleSelectCity 内联)。提取时把 city 提成**显式参数** ——
页面内联那份的成因正是 helper 读的是 inputs.city(旧城市),而切城市要用新城市的上限,
所以「简化成调用 helper」会静默算错城市。
- 时间戳 → 「月-日 时:分」2 份 → 1:utils.formatDateTime 收 ISO 串、页面 formatRecordTime
收时间戳,格式逐字节相同。formatDateTime 改为接受 string | number。
副作用(正向的):时间戳版本原先不判 NaN,坏值会渲染出「NaN-NaN NaN:NaN」,现返回空串。
- 手机号脱敏 2 份 → 1:登录页内联的那段与 api.maskPhone 逐字节相同,而
carrier-login.test.ts 里那条 describe 的名字就是「脱敏在接口层,页面不自己切字符串」,
《运营商一键登录接入方案.md》也写明「页面不做脱敏」—— 页面违反了它自己的约定。
- 企业端发布页自持的学历 / 工作类型选项表接回 src/constants(工作类型的编码与标签
成对定义,标签列表由它派生,避免「有编码没标签」的悬空项)。
放置位置按职责定,不是就近塞:颜色映射进 theme(该文件自己写着「色值是本文件独占的职责」,
且已有 templateAccentColors 先例);clamp 进 api 层(AGENTS.md 规定业务规则在接口层,
权威那份本来就在那里);时间格式化进 utils;选项词表进 constants。
一处是**派生**而不是搬家
hr-evaluation 的键是中文评级('优秀'),不是 JobLevel —— 根因是数据层
EvaluationDimension.level 声明为 string 且直接下发中文评级。这是「同一事实、两个键域」,
把字面量搬个地方等于把「两份同值」换成「两份同值、只是搬了家」。故 levelLabelTextColors
按引用派生自 jobLevelTextColors,将来换色只改一处。断言锁的是关系(同键同值),不是字面量。
刻意**不**合并的两处
- 经验要求:constants 的 EXPERIENCE_OPTIONS 是**筛选**项(含「不限」、不含「1年以内」),
发布页那份是**必填要求**(含「1年以内」、无「不限」),不是同一个事实。已加反向锁
把差异写死,防止后来者按名字想当然地合并。
- DIMENSION_LEVEL(profile.tsx)不在收敛范围:键的是 DimensionScore['level'](只有两档),
且「良好」用 textSecondary 而非另外五处的 primary。两处对同一档取色确实不同,
属需要产品定夺的配色分歧,**未擅自统一**,已记入《项目开发状态.md》4.16。
测试
- 新增 shared-color-maps.test.ts(26 例)。断言分两类:**关系**(中文评级表与
jobLevelTextColors 同键同值、各表内部色值互不相同、计算器养老金额可由 clampSocialBase
反推、formatDateTime 两种入参格式一致)与**接线锁**(读源码断言 14 处旧声明名不再出现、
页面必须引用新表名)—— 值对了但页面不读表,缺陷照旧。
- 灵敏度验证:一次性注入 6 个缺陷(重建旧声明 + input.city 换成 '北京' +
levelLabelTextColors 改回字面量),**6 例如期全红**,逐字还原后 grep 确认 0 残留。
- 一处如实记录:clamp 那条接线锁**第一版是写错的** —— 断言「页面不得出现 socialBaseUpper」,
而页面本来就该读它展示「基数范围 ¥x – ¥y(城市)」。错的是断言不是代码,已改为精确锁
「上下限字段与 Math.min/Math.max 同现」(那才是旧版内联 clamp 的形状)。
另有一次 edit 吃掉了 `const DIM_COLORS =` 后的空格,已复原到与 HEAD 逐字节一致。
如实记录:一份子代理报告的三条说法未通过核对
- 称 DIMENSION_LEVEL 重复声明 —— 不成立,全仓只有 profile.tsx 一处。
- 称 THUMBNAIL_* 重复「×2」—— 不精确,实为一个对象表 + 两份平行 Record(两种写法)。
- 给的 clamp 行号不准,且**没提权威那份在 api.ts**。
与既有一贯口径一致:代理报告是模型输出、不是证据,每条都独立 grep + 逐行读过才动手。
实测(Android 模拟器 emulator-5554,截图核对,非代码走查)
- 本批取值未变,真机的价值在「没崩、没落到兜底」:成长页三个缩略图色系全部解析;
HR 评价「优秀」「良好」都有色、无一落兜底灰;企业看板统计四宫格与快捷入口
**五个语义色各不相同**(若有键写错会静默全变蓝,多色并存即证明未落兜底);
发布页学历 5 项 / 经验 6 项 / 工作类型 4 项且选中态正确;薪资格算器切城市后
提示与区间正确更新。
- 未验到的:clamp 本身未在真机制造出越界值 —— 社保基数输入框**逐键 clamp**,
手工输入停不到目标值(既有交互,非本批改动),故 clamp 语义以单测 + 注入为准;
岗位列表 / 能力 / 测评的评级色、霍兰德三页六型色、面试两页语义色、登录页掩码手机号、
薪资历史记录时间格式 —— 均有类型约束或测试锁盖住,但本轮未逐屏截图。
仍未做(需产品定夺,未自行选择)
- 「良好」一档在个人页与其余五处取色不同(灰 vs 蓝),统一只改一行。
- JobExperienceRequirement 的「1年以内」是死值(全仓仅见于类型声明,mock 数据没用过、
筛选表也没这项),留还是删。
- 数据层 color: string 未收紧成联合类型,故 semanticColorTokens 的键只能保持
Record<string, string>,代价是数据层写错色名会静默落到 ?? colors.primary。已在注释与
测试里把「这是刻意的」写死,根治属另一批。
门槛:tsc 0 / eslint 0 / 26 文件 365 例全绿(较 4.15 的 339 例 +26)/ check-routes 0 /
check:affordances 0 / check:icons 0(194 文件、1357 字形)/ check-backend-stubs 140
|
1 month ago |
|
|
3d808b3aab |
chore: 清理调试日志并提取霍兰德硬编码色
- 中和 app/ 下 52 处 console.* 调试日志(占位 onPress 改为 () => {},独立语句移除)
- 霍兰德 E 型 #FFB347 三处复用 colors.compareOrange,消除硬编码十六进制
- 修复移除日志后产生的未使用变量(result/url)
|
2 months 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 |