doublex001
|
3aa3c60004
|
feat: 软件改名「轻松聘」,引导页改为三屏满屏主题色
改名(带断言的白名单脚本,逐文件核对改前出现次数,对不上不写盘):
- 显示名「有职」→「轻松聘」:代码+配置 13 文件 50 处,文档 12 处
- 标识符 youzhi → qingsongpin:app.config.js 的 slug / scheme /
ios.bundleIdentifier / android.package、storage 键前缀、高德 URL 的 src、
screenshots 截图流水线 manifest 的 scheme
- 注意:storage 的 KEY_PREFIX 变更会让本机旧数据读不到(未上架、仅开发数据,
可接受;若已有线上用户数据必须写迁移而非直接换前缀)
引导页 app/guide.tsx 四屏 → 三屏(标题为产品文案):
求职开挂 AI护驾 / 真实能力 一测便知 / 一起解锁 职场秘籍
- 副标题只写仓库里查得到的已上线模块,未编造能力
- 整页底色改用新增 token onboardingGradient(primary → primaryBtn → primaryDark):
现成的 headerGradient 三支末端是青 #4FD1C5,白字仅约 1.9:1,只适合顶部深色区,
不能做整页底色;配 locations=[0,0.34,1] 使正文落在 5.2:1 以上
- 底部按钮反色为白底 + primaryText 蓝字;前两屏「下一步」、第三屏「开启体验」
- 状态栏加 style="light"(根布局是 dark,深蓝底上会黑压黑)
- 素材位 guideEvaluate/guideWeightDim/guideGameMap/guideLegalAI
→ guideAiCopilot/guideAbilityTest/guideGrowthUnlock
待补图(已逐张打开确认,非推测):assets/icon.png、splash-icon.png、
brand-logo.jpg、android-icon-{foreground,background,monochrome}.png 仍是有职字标
门槛:tsc 0 / eslint 0 / 26 套件 365 用例全过 / check:spacing 196 张卡片全 8px 全绿
真机:模拟器像素测量,CTA 按钮左边界 16.0dp、高 50.0dp,渐变三点与理论值吻合
|
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
|
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 |
doublex001
|
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 |
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
|
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 |
doublex001
|
5fbb7222f0
|
feat(auth): 补齐密码登录通道并修复登录态从未写入的缺口
【严重缺口修复】P2(验证码)/ P2Q(一键登录)此前只 navigate('P3'),从不写登录态——
全项目唯一写 token 的地方是微信链路。微信入口一旦摘除,isTokenValid 恒为 false,
每次冷启动都会把用户打回登录页。现三条通道均接入 useAuth().login()。
【新增通道】P1 主通道改为「验证码登录」,「一键登录」为次,新增「密码登录」(P2P):
- P2P 手机号 + 密码登录;P2R 设置 / 重置密码(同页两阶段:验证手机号 → 设新密码,
成功后直接下发登录态,用户无需再登录一次)
- 设置页新增 /settings/password 修改密码,改完强制重登
【密码规则】8–20 位且需含字母和数字,规则计算统一放在 api.ts 的 validatePassword /
validatePasswordConfirm,错误码 → 文案映射放在 constants 的 PASSWORD_RULE_LABEL,
按联合类型 PasswordRuleError 建模,新增成员漏配文案会被测试拦下。
【微信入口摘除】按产品决定(丁总 2026-09-14)前端不做 QQ / 微信登录:
P1Login 移除微信按钮、滑块验证与注销弹窗;P2W / B1 页面、useWechatLogin 状态机、
wechat-sdk 及三个接口函数全部保留待启用,接入路线见 微信登录接入方案.md。
【去重公共件】新增 PasswordField(密码输入 + 明文切换)、useAgreementGate(协议门卫,
此前在 3 个页面被逐字复制)、utils/validators(手机号 / 验证码规则的单一来源)。
【测试】新增 src/__tests__/password.test.ts(24 例)。全套 6 套 45 例通过,
tsc --noEmit 0 错误,eslint . 0 问题,check-routes 67 路由 0 失效跳转。
|
1 month ago |
doublex001
|
82771bc103
|
fix(ui): 修复多处按钮绑定空函数导致点击无反馈
9 个页面存在 onPress={() => {}} 的死控件,用户点击后无任何反馈,无法区分「功能不存在」与「App 卡住了」。按项目既有约定分别处理:
- talent-recommendation:人才池快捷操作接入分发函数,「面试安排」改「面试评分」并跳 /interview-score(路由已存在),其余无对应页面者弹「功能开发中」
- hr-evaluation:「申诉」入口接 /appeal(路由已存在,此前是死按钮)
- chat/[id] / holland-result / interview / onboarding:右上角「更多 / 分享」无对应页面,统一弹提示
- progress:右上角漏斗按钮与页内 FilterTabs 功能重复且点击无响应,直接移除,保留同尺寸占位维持标题居中
- resume/export:「保存」仅在数据就绪后渲染,loading/error 态不再出现点了无反应的入口
- enterprise-chat:空状态文案「人才库」→「人才推荐」,与实际路由名对齐
|
1 month ago |
doublex001
|
ee264b644c
|
fix(privacy): 修复隐私设置页开关项无入口,7 个页面无法跳转
app/settings/privacy.tsx 的 switch 分支渲染为 View + Switch,未绑定
onPress;而 handlePress(内部 router.push(item.route))只挂在
Pressable 分支上,导致带 route 的开关型条目点击无任何反应。
mock 数据中共 7 条 type: 'switch' 条目挂着 route(real-name /
contact / algo / third-party / location / contacts / dnd),对应
app/settings/privacy/[id].tsx(279 行,覆盖 6 个 slug)与 dnd.tsx
(295 行)两个实页面,运行期完全不可达,违反「有页面出口就一定要
有入口」规范。
对照证据:同组末尾的 keyword-block 是 type: 'value',走 Pressable
分支,其 /settings/privacy/keywords(357 行)可正常进入。这种不对称
证明是漏绑而非设计意图。
修法:仅将左侧文字区包为 Pressable 触发跳转,并补 chevron-forward
提示可点;右侧 Switch 保持独立切换,二者为兄弟节点不嵌套,互不干扰。
无 route 的开关(如「头像公开」)行为不变。
|
1 month ago |
doublex001
|
2afe503b32
|
feat(salary): 薪资计算器保存记录与计算历史
- types: 新增 SalaryCalcRecord(输入快照+结果快照+备注+时间戳)
- api: salary:records 本地持久化 fetch/save/delete,以 storage 为唯一真相源
- hooks: 新增 useSalaryRecords(useAsyncData 取列表 + save/remove 变更)
- page: 历史按钮→历史弹层(加载/错误重试/空态/列表,点按回填参数);
保存按钮→保存弹层(备注+确认),清除两处占位 Alert
- test: 新增保存/倒序读取/删除用例;同步修正城市基数 clamp 影响的既有用例
|
2 months ago |
doublex001
|
f6d42023be
|
feat: 薪资计算器城市选择 + 文书模板预览(占位审计断点收口)
- 薪资计算器:新增城市社保/公积金基数上下限表,选城市后 clamp 社保基数并计入计算(断点②)
- 文书模板:新增模板正文与预览页 /legal/template,正文 selectable 长按可复制(断点③)
- 分层:types/constants/api/页面;tsc --noEmit 0 错误、eslint 0 警告、路由审计 0 死链
|
2 months 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
|
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 |
doublex001
|
731b4c9bac
|
feat(onboarding): 品牌更名「有职」并重构注册引导流程
- 品牌从「职来」更名为「有职」(slug: youzhi),同步 storage 前缀与全部文案
- 登录页与选择身份页合并重构为分步引导注册(register + onboarding 多屏 + UI 组件库)
- 新增品牌 logo,设置页「身份切换/退出登录」改跳注册页
- 更新 AGENTS.md 仓库地址与提交节奏说明
|
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
|
0d4ee5b87c
|
fix(navigation): 修正双端(端口)切换的角色与入口问题
- 身份选项类型 hr→enterprise,与全局 AppRole 对齐(消除类型不一致)
- 两端 layout 将 setRole 由 useEffect 改为 useFocusEffect,
根治「从企业端返回求职端」后 role 残留 enterprise、菜单/数据串端的问题
- 企业端「我的」页补「切换到求职端」入口(setRole('candidate') + replace /(tabs)/jobs),
与求职端「切换到企业端」对称,避免经设置进入企业端后回不去
- 求职端「切换到企业端」卡片 onPress 显式 setRole('enterprise') 兜底
|
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
|
8ca6d2e44e
|
feat(content): 文章详情页正文真实化,消除占位文案
- Article 接口新增 content 字段承载文章正文
- MOCK_ARTICLES 三篇(简历/面试/薪资)补真实 mock 正文,与标题标签匹配
- article/[id].tsx 用 article.content 替换原占位文本(保留三态与样式)
说明:企业端「更多服务」6 个子页经核查均已存在真实页面
(job-management/talent-recommendation/enterprise-chat 为 Tab,
job-publish/job-evaluations/interview-score 为已治理真实页),无需填充;
故本次边界项聚焦文章正文真实化。
|
2 months ago |
doublex001
|
0431d84ad3
|
refactor(menu): 按角色拆分功能菜单,从根上消除角色混淆
- 类型层:AppRole('candidate'|'enterprise') 下沉至 src/types/user.ts,
RoleContext 改为复用并 re-export;types 桶导出补登记 AppRole
- 数据层:MOCK_MENU_ITEMS 拆为 MOCK_CANDIDATE_MENU_ITEMS(16 项求职者功能
+企业入驻入口) 与 MOCK_ENTERPRISE_MENU_ITEMS(6 项企业功能)
- fetchMenuItems(role) 按角色下发对应菜单
- 企业端总览 EnterpriseOverview 新增 menuItems 字段,接入 MOCK_ENTERPRISE_MENU_ITEMS
- useProfileData(role) 透传角色;profile.tsx 用 useRole() 传入
- 企业端「我的」新增「更多服务」区渲染 menuItems(与「管理后台」分区并列)
效果:求职者端不再出现发布岗位/岗位管理等企业功能,企业端不再混排
求职者功能,角色隔离从根上解决后台术语/企业功能暴露给 C 端的问题
|
2 months ago |
doublex001
|
5022ff2842
|
refactor(menu): 后台管理入口迁至企业端,清理 C 端菜单重复 id
- MOCK_MENU_ITEMS 移除「运营规则配置」「数据审计报告」:后台管理术语不再
暴露给求职者端菜单(这两个页面在企业端「我的-管理后台」重新落地,非孤儿页)
- 修复 MOCK_MENU_ITEMS 中 enterprise-certification 重复出现两次导致
React key 警告的问题(保留「企业入驻」)
- EnterpriseOverview 类型新增 manageActions 字段;新增
MOCK_ENTERPRISE_MANAGE_ACTIONS 并接入企业总览
- 企业端「我的」页新增 ManageList「管理后台」分区:纵向列表,不挤占
快捷入口已有的 6 项横排布局
|
2 months ago |
doublex001
|
4f8202f25f
|
fix(ui): 身份选择页清理开发标识与后台术语,统一样式与文案
- _layout: identity-select 补 header 配置 title=选择身份,消除顶部暴露路由名
identity-select(同时获得系统返回按钮)
- 移除底部悬浮齿轮入口「管理规则 / 风控审计」(后台术语,用户看不懂)
- 统一两张身份卡图标样式:白底描边 + 主色线框,去除蓝/绿重量不均衡
- 卡片间距 12→16,缓解手机屏拥挤感
- 提示文案:点击上方卡片,进入对应身份页面(原「对应端」为开发术语)
- 补充安抚提示:身份后续可在设置中切换(设置页已有该入口)
- API: HR 卡片简介改为「发布岗位、筛选人才、管理评价、展示企业形象」
替换书面化运营话术「品牌透明度建设」
|
2 months ago |
doublex001
|
7a239ffe5a
|
feat: 补全 P1 占位页与 P2 空 onPress 接线
P1 收藏/历史占位页补真实数据:
- 新增 fetchFavorites/fetchHistory 接口(api.ts + index.ts 登记)
- 新增 useFavorites/useHistory hooks 并注册导出
- 新增复用组件 JobCard,favorites/history 接入真实列表+三态+点击进 /jobs/[id]
P2 空 onPress 接线:
- growth 设置→/settings、文章卡与"更多"→/article/[id]
- legal 四分支:chat/templates/faq/upgrade 分别跳对应子页
- 新增 articles 详情页 /article/[id] 与 legal 三子页(faq/upgrade/templates)
- appeal 提交成功弹 Alert 并 router.back()
|
2 months ago |
doublex001
|
b8462676a5
|
fix: 修复企业端 P0 逻辑断裂(聊天跳转 + 人才详情路由参数)
- enterprise-chat ChatRow 增加 onPress,点击进入 /chat/[id] 会话详情
- talent-recommendation 详情按钮跳转携带 ?id= 参数
- candidate-detail 从 useLocalSearchParams 读取 id(兜底 candidate-1)
- fetchCandidateDetail 按 id 回填候选人身份字段,避免不同候选人显示同一份资料
|
2 months ago |
doublex001
|
a55799490e
|
test: 补齐 ESLint+jest 工程化配置,治理 shadowColor 硬编码为 colors.shadow,tsconfig 排除测试目录
|
2 months ago |
doublex001
|
31ab07eb35
|
chore(ci): 修复 jest/eslint 工程化门禁(对齐 RN0.86 jest-preset、eslint9、mock 默认值、清理 any/空块)
|
2 months ago |
doublex001
|
5e89bfdc13
|
refactor(profile): 求职端企业入口与企业入驻菜单主色统一为 primary,去绿
|
2 months ago |
doublex001
|
ab7cc7102e
|
refactor(enterprise): 企业端主色统一为 primary,我的页接入设置入口,统一菜单话术
|
2 months ago |
doublex001
|
e4324e585f
|
refactor(enterprise): 企业端底部导航改为 岗位/人才/沟通/我的,首屏落地岗位
|
2 months ago |
doublex001
|
39728cd1aa
|
fix: 修复 HR/企业端进不去(非 Tab 页误置于 Tabs 组内)
- 将 (enterprise) 组内 6 个非 Tab 屏企业页(enterprise-certification/audit-report/candidate-detail/hr-evaluation/job-publish/operation-rules)移回根目录 app/,与求职端 job-preference 结构对称
- 仅保留 4 个 Tab 屏(enterprise-overview/job-management/talent-recommendation/enterprise-chat)+ _layout 在组内
- 修正移回文件相对引用 ../../src → ../src
- 根因:enterprise-certification 被塞进 Tabs 组但非 Tab 屏,router.replace('/enterprise-certification') 进入后 Tab 导航器因 route 未声明而导航失败/白屏,导致『HR 进不去』;移出后成为干净栈页,身份认证→企业端链路通畅
|
2 months ago |
doublex001
|
756960b32e
|
fix: 修复选身份后『进不去』并补充分端必经步骤
- identity-select 卡片点击即跳转(原仅显示对勾无反应);按 candidateSetupDone/enterpriseVerified 分流到下一步
- 新增 app/job-preference.tsx 求职意向设置页(求职者必经,保存后置位标记进 /(tabs)/jobs,可稍后设置)
- enterprise-certification 提交/稍后认证均 completeEnterpriseVerify 并 replace 到 /(enterprise)/enterprise-overview(原为死胡同)
- index 闸门改用显式落地路由(/(tabs)/jobs、/(enterprise)/enterprise-overview),避免路由组无 index 导致空白
|
2 months ago |
doublex001
|
a2fa2bad44
|
feat: 新增引导页/登录页并接通入口漏斗
- app/index.tsx 总闸门:引导→登录→选择身份→对应端(Redirect 漏斗)
- app/guide.tsx 引导页(4 屏职来核心能力,分页+跳过+立即体验)
- app/login.tsx 登录页(手机号+验证码倒计时、协议勾选、其他登录、游客浏览)
- _layout 包 AuthProvider 并注册 guide/login/index 屏
- 避开 onboarding.tsx(入职清单功能页),引导页命名为 guide.tsx
|
2 months ago |
doublex001
|
3d808b3aab
|
chore: 清理调试日志并提取霍兰德硬编码色
- 中和 app/ 下 52 处 console.* 调试日志(占位 onPress 改为 () => {},独立语句移除)
- 霍兰德 E 型 #FFB347 三处复用 colors.compareOrange,消除硬编码十六进制
- 修复移除日志后产生的未使用变量(result/url)
|
2 months ago |
doublex001
|
7e849de548
|
refactor: 新增共享 StateView 三态组件并接入数据/占位页
- src/components/StateView 提供 LoadingState/ErrorState(可重试)/EmptyState,颜色走主题 token
- privacy 页复用 StateView 去除重复 loading/error 样板
- favorites/history 占位页接入 EmptyState 统一空态样式
|
2 months ago |
doublex001
|
87ad5e629c
|
feat: 区分企业端与求职端导航
- 新增 RoleContext(会话级角色持久化),identity-select 进入时写入 role
- 新增 app/(enterprise) 路由组 + 企业端底部 Tab 栏(概览/岗位/人才/沟通,success 绿)
- 将 10 个企业端页面迁移至 (enterprise) 组(路由路径不变),修正相对引用
- (tabs) 求职端挂载时 setRole('candidate'),两端体感对称
|
2 months ago |
doublex001
|
78de95135f
|
feat(page): 实现隐私中心 8 子页与注销/删数据/隐私政策/用户协议;竞争力排名与岗位评价管理补数据态
隐私中心 8 子页:
- app/settings/privacy/[id].tsx(动态路由):真实姓名可见性、联系方式、算法训练、第三方分析、位置授权、通讯录 6 个开关类二级页
- app/settings/privacy/dnd.tsx:勿扰模式(时段设置 + 重要通知穿透)
- app/settings/privacy/keywords.tsx:关键词屏蔽(增删 + 系统建议)
合规 4 页(上架硬阻塞):
- app/settings/account-cancel.tsx:账号注销(后果 + 待办 + 原因 + 二次确认)
- app/settings/delete-data.tsx:删除数据(分类勾选 + 输入确认)
- app/settings/privacy-policy.tsx / user-agreement.tsx:法律文档(共享 LegalDocScreen 渲染)
数据态:竞争力排名(app/jobs/rank.tsx)、岗位评价管理(app/job-evaluations.tsx)已展示数据态
所有页面沿用 theme token,无硬编码颜色;入口均已在隐私中心 mock 接入,无孤儿页面
|
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
|
cdca855117
|
refactor(router): 迁移至 Expo Router,清理废弃模块
- 删除 app/(tabs)/index.tsx,Tab 入口改由 _layout 托管
- 删除迁移后失效的 4 个旧 hooks(useHomeData / useCategoryData / useMatchData / useUserProfile)
- 删除随之失效的 src/types/home.ts
|
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 |
doublex001
|
30cc3dc106
|
feat: 完成求职App核心页面与数据层并迁移至 Expo Router
|
2 months ago |