闲鱼租赁选品与 ROI 分析
功能概述
本 Skill 面向准备开展闲鱼副业、二手商品租赁和小额资产经营的用户,也面向维护选品测算系统的产品与开发团队。它把“商品是否值得买来出租”拆解为可验证的数据链路、成本结构、收益模型和风险条件,协助 AI 对候选商品进行系统化比较,而不是只凭售价、月租或热门程度做判断。
在软件项目中,本 Skill 还能完成端到端质量检查:找到真正可编辑的源码目录,验证市场数据能否刷新,检查前后端投资计算是否一致,并捕获图表不显示、结果出现 NaN、页面溢出、接口失败等常见问题。
核心能力
- 真实项目定位:识别空壳目录、复制目录和包装目录,找到包含前端、后端、计算模块与数据服务的真实源码树。
- 选品数据核验:检查采购价、参考租金、出租率、数据时间、来源与刷新状态,避免使用过期或不可追溯的数据。
- 收益模型检查:覆盖采购成本、平台费用、物流、维修、空置、折旧、残值、融资成本和再投资参数。
- 投资指标分析:核验月度现金流、年度净利润、累计净利润、回本周期、现金回报率、ROI、IRR 和退出残值。
- 多方案比较:按预算、持有年限、风险偏好和资金配置比较不同商品或组合,解释收益差异来自哪里。
- 端到端质量保障:执行静态检查、前后端构建、接口探测和浏览器核心流程测试,定位计算、刷新与展示问题。
- 可审阅结论:明确数据来源、计算假设、已验证项目、未验证项目和剩余风险,不把估算结果包装成收益承诺。
适用场景
- 用户提到闲鱼、咸鱼、二手租赁、租赁副业、选品、投资回报率、ROI、IRR、回本周期或租赁产品看板。
- 用户希望比较相机、无人机、游戏机、露营装备、工具设备等候选商品的出租价值。
- 用户需要判断高收益商品是否伴随高空置、高维修、高折旧或低流动性风险。
- 项目采用 React/Vite 前端与 Node/Express 后端,并包含商品、刷新、投资计算或组合分析模块。
- 市场数据需要通过按钮触发或后端定时任务刷新。
- 图表使用 Recharts 或类似的响应式图表容器。
- 当前看到的项目目录可能只是包装目录,并不是真实可编辑源码。
关键指标口径
- 总投入:采购价、整备费、配件、首程物流、押金占用以及必要的软件或服务成本。
- 有效租金收入:标称租金乘以预计出租率,并扣除优惠、退款和无法收回的款项。
- 运营成本:平台费、支付费、物流、包装、清洁、维修、保险、仓储和人工时间成本。
- 净现金流:有效租金收入减去同期运营成本、融资支出和新增投入。
- 回本周期:累计净现金流首次覆盖初始总投入所需的时间。
- ROI:在明确持有周期后,以累计净收益相对总投入计算;必须同时说明时间范围。
- IRR:依据各期现金流计算的内部收益率;现金流不完整或无符号变化时应标记为不可计算。
- 退出残值:在所选持有年限末,按合理折旧和二手流动性估算的可回收价值。
标准工作流程
1. 找到真实源码树
- 先检查当前目录中的
package.json、vite.config.*、backend/package.json和投资计算文件。 - 如果当前目录为空或只有说明文件,再搜索用户指定范围内的候选源码目录。
- 不在空壳包装目录中直接修改代码,避免出现“改了但线上项目没有变化”。
2. 阅读项目约束与当前状态
- 阅读
AGENTS.md、README*、tasks.md、前后端package.json、路由、数据服务和计算模块。 - 确认项目的 Node 版本、启动方式、接口前缀、数据库和数据刷新机制。
- 如果是 Git 项目,修改前检查工作区状态,避免覆盖用户已有改动。
3. 建立指标与假设清单
- 记录候选商品、采购成本、租金、预计出租率、持有年限、残值率和运营成本。
- 标记每个数据的来源、抓取或更新时间,以及它是事实、估算还是用户假设。
- 对缺失数据使用“待确认”或区间估算,不凭空补造确定数值。
4. 确认运行环境
- 如果后端依赖
better-sqlite3,优先核对 Node 主版本与原生模块编译版本;此类项目通常使用 Node 22。 - 检查
.nvmrc、.node-version、engines与实际node --version是否一致。 - 使用
lsof -nP -iTCP:<端口> -sTCP:LISTEN查看端口,不随意终止无关开发服务。
5. 执行静态检查与构建
常见命令包括:
npm run lint
npx tsc -b --pretty false
cd backend && npm run build
npm run build
将 Browserslist 数据过期视为维护提示,除非它确实阻断构建或影响目标浏览器。
6. 启动并探测本地服务
- 后端常用端口为
3001,Vite 前端常用5173;如被其他项目占用可使用5174。 - 使用
scripts/qa_probe.py检查源码结构和已启动的 HTTP 端点。 - 在安全且得到允许时,测试
GET /api/products、GET /api/products/refresh/status和POST /api/products/refresh。 - 确认刷新接口返回商品列表、更新时间和状态,而不是仅返回静态成功提示。
7. 核验投资计算
- 检查前端与后端是否使用同一组预算、持有年限、风险等级、融资和再投资参数。
- 对至少一个商品手工复算关键结果,重点核验收入、成本、折旧、残值和退出年份。
- 检查零值、负值、空数组、超高出租率、极短持有期等边界输入。
- 所有货币、百分比和时间指标应显示明确单位,避免把年化与累计收益混为一谈。
8. 浏览器测试核心流程
- 加载市场商品表并确认商品、价格、租金、更新时间和数据状态正确显示。
- 点击刷新,等待成功或失败状态,确认页面数据和计算结果同步更新。
- 修改预算、持有年限、风险等级、融资和再投资配置。
- 打开组合方案与分析标签页,检查图表、表格、空状态和移动端布局。
- 检查失败请求、控制台错误、
NaN、空白图表、文本截断和横向溢出。
9. 小范围修复并复测
- 沿用项目现有结构和组件风格,不夹带无关重构。
- 计算修复至少通过类型检查、构建和对应浏览器流程验证。
- 修复后重复相关检查,并在结束前停止临时测试服务,除非用户要求保留访问地址。
常见问题与修复模式
Recharts 在标签页中显示空白
表现:图表标题可见,但没有 SVG;控制台提示宽度或高度为 0。
处理:为激活的图表面板设置明确高度并禁止 Flex 收缩,同时为 ResponsiveContainer 设置最小高度。
const chartPanelClassName = 'h-[350px] min-h-[350px] flex-none';
<TabsContent value="yearly" className={chartPanelClassName}>
<ResponsiveContainer width="100%" height="100%" minHeight={350}>
{/* chart */}
</ResponsiveContainer>
</TabsContent>
better-sqlite3 原生模块版本不匹配
表现:TypeScript 构建可能通过,但后端运行时因 NODE_MODULE_VERSION 不一致而崩溃。
处理:使用编译该原生模块时对应的 Node 主版本,并核对 .nvmrc、.node-version 和 package.json 中的 engines。
后端刷新成功但前端仍显示旧数据
重点检查:
POST /api/products/refresh是否返回刷新后的商品与元数据。- 前端是否替换当前
products,同步刷新时间和状态,并按当前配置重新计算组合。 - 比较计算是否接收到完整配置,而不只是预算字段。
- 请求缓存、状态管理和错误分支是否导致旧结果继续留在页面。
持有年限和残值标签错误
- 净利润标签应跟随用户选择的持有年限,例如“2 年净利润”。
- 残值应在用户选择的退出年份计入,不能无条件固定在第 3 年。
- ROI、年化回报与累计净利润必须展示各自口径,不能互相替代。
检查脚本
在 Skill 目录或指定脚本路径运行:
python3 scripts/qa_probe.py \
--root /path/to/app \
--backend-url http://127.0.0.1:3001 \
--frontend-url http://127.0.0.1:5174
可选参数:
python3 scripts/qa_probe.py --root /path/to/app --post-refresh
python3 scripts/qa_probe.py --root /path/to/app --json
脚本不会安装依赖、启动服务或修改项目文件。默认只检查本地结构和可访问的 HTTP 端点;只有显式添加 --post-refresh 时才会请求刷新接口。
输出要求
完成分析、测试或修复后,使用以下中文结构交付:
- 问题原因:说明发现的核心问题、数据口径或技术根因;推断必须标明。
- 我做了哪些改动:列出实际修改的文件、模块和目的。
- 改动后效果:说明计算、刷新、图表或页面行为发生了什么变化。
- 验证情况:列出执行过的命令、接口、浏览器流程和结果。
- 风险与未完成项:写明缺失数据、被阻断检查和仍需人工确认的假设。
- 建议下一步:给出最有价值的后续测试、数据补充或产品决策。
使用边界
- 本 Skill 提供的是选品测算、软件质量检查和决策辅助,不构成投资建议、收益承诺或保本保证。
- 闲鱼成交价、租金和出租率会随地区、季节、信用、供需与商品成色变化,应优先使用最新可追溯数据。
- 对无法确认的数据采用区间或敏感性分析,并明确标注假设;不得伪造订单、成交量或收益记录。
- 涉及登录、支付、发布、删除、生产数据和对外提交的操作,应在用户授权范围内执行,并保留可审阅结果。