doublex001
|
b0ed17b17b
|
feat(theme): 收敛 app 框架 padding:16 至 spacing.framework 单一来源
- 25 个 app 文件 padding/paddingHorizontal/paddingVertical:16 收敛为 spacing.framework(值不变=16)
- 每文件补 spacing 到 theme 导入(路径分三类,脚本按实际路径处理,无导入损坏)
- 框架16px有意比卡片宽、不被check-spacing审计;令牌化后审计仍能解析,不撕裂门禁网
- 更新项目开发状态.md 4.21 第4条及残留项改为已完成
- 验收全绿:tsc0/eslint0/check:spacing0/check:routes0/check:affordances0/check:icons0/365测试
|
1 month ago |
doublex001
|
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 |
doublex001
|
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 |
doublex001
|
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 |
doublex001
|
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 |
doublex001
|
cbf38e7745
|
feat: 法律服务付费闭环、会员权益兑现与岗位评价发布(2026-09-10)
按提交纪律精确分阶段 git add(未用 -A / 未用 git rm),tsc --noEmit 0 错误、
eslint .(全量)0 警告。
| 模块 | 主要文件 | 变更要点 | 状态 |
|---|---|---|---|
| 付费支付闭环 | legal/checkout.tsx(新)、useLegalMembership.ts(新)、legal.tsx、upgrade.tsx | 选套餐→结算→选支付方式→模拟支付→会员激活并 AsyncStorage 持久化;套餐卡可点击、返回时 focus 刷新 | 完成·真实SDK仅换 api 函数体 |
| 会员权益兑现 | legal/service.tsx(新)、useLegalServiceRequests.ts(新)、legal.tsx | 修复「付了钱却拿不到服务」:未开通引导开通,已开通进入使用页提交申请并留痕 | 完成 |
| 岗位评价发布 | jobs/[id].tsx、useJobDetail.ts、api.ts | 修复「评价生态却发不出评价」:新增 createJobReview,发布后置顶并持久化 | 完成 |
| 类型与导出 | types/legal.ts、types/index.ts、api/index.ts、hooks/index.ts | 新增订单/会员态/服务申请类型与对应函数、hook 导出 | 完成 |
| 文档 | 项目开发状态.md | 同步三批功能状态与审计结论 | 完成 |
注:mock 阶段持久化统一走 src/lib/storage.ts(AsyncStorage,youzhi: 前缀),
storage 为唯一真相源,真实后端就绪后仅替换 api.ts 对应函数体。
|
2 months ago |
doublex001
|
6637c0ef8c
|
fix(ui): 清理页面空交互,接真实逻辑与 Alert 兜底
- settings.tsx:退出登录按钮接 useAuth().logout() + 确认弹窗 + 跳登录页(修复登出失效)
- jobs/[id].tsx:「加入对比」接真实路由 /jobs/compare;分享/评分说明/发布评论接 Alert 兜底
- profile.tsx:「编辑」与偏好行接真实路由 /job-preference;「评分申诉」Alert 兜底
- chat/[id].tsx:面试/薪资卡片动作与输入框图标、加号按钮接 Alert 兜底
- job-management.tsx:筛选/排序/编辑/刷新/下架接 Alert 兜底
- login.tsx:微信/Apple 第三方登录占位接 Alert 兜底
- personal-data-export.tsx:导出下载与查看更多接 Alert 兜底
- salary-calculator.tsx:历史记录/城市选择/保存接 Alert 兜底
- settings/privacy.tsx:查看隐私报告接 Alert 兜底
- settings/account-cancel.tsx:注销前待办「去处理」接 Alert 兜底
(跳过 jobs.tsx 弹层内 filterPanel 空 onPress:属故意吸收点击防关闭弹窗)
|
2 months ago |
doublex001
|
7d5f2a0628
|
fix(jobs): 为 Offer 对比与竞争力排名页空 onPress 接入 Alert 兜底
- offer-compare.tsx:添加Offer / 导出对比报告 / 接受Offer / AI建议按钮 4 处接 Alert
- rank.tsx:查看我的详细分析 / 提升建议 action 2 处接 Alert
|
2 months ago |
doublex001
|
3d808b3aab
|
chore: 清理调试日志并提取霍兰德硬编码色
- 中和 app/ 下 52 处 console.* 调试日志(占位 onPress 改为 () => {},独立语句移除)
- 霍兰德 E 型 #FFB347 三处复用 colors.compareOrange,消除硬编码十六进制
- 修复移除日志后产生的未使用变量(result/url)
|
2 months ago |
doublex001
|
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 |
doublex001
|
a6301a8570
|
feat: 新增岗位详情页,重构个人中心与底部导航
- 岗位详情:新增 JobDetail/JobOverallScore/SalaryData/EmployeeReview 等类型、fetchJobDetail 等接口、useJobDetail Hook,新增 app/jobs/[id].tsx 页面(含 SVG 雷达图、真实薪资区间、员工评价、评论输入),岗位列表卡片接入详情跳转
- 个人中心:重做我的页 UI,品牌蓝渐变头部、综合评分卡片、八大维度横向评分条、求职偏好、勋章横滑
- 导航栏:底部 Tab 改为悬浮毛玻璃胶囊,选中浅蓝高亮 + 图标弹跳动画,引入 expo-blur 依赖
|
2 months ago |