yml2213
90de6b9419
perf(worker): 单号检索收敛为可走索引的等值/前缀,并支持关联单号反查
...
问题:后台「按单号检索」在平台单号/工单号分支里 OR 了一支
`work_order_no ILIKE '%'||$n||'%'`。前置通配符非 sargable,任何 B-Tree 都用不上,
整条查询退化成 work_orders 的 Seq Scan。
生产实测(10.3 万行 / 572MB,pg_stat_statements 46 小时窗口):
- 列表查询 + 统计查询用同一份 filters 并行执行,一次检索打两遍全表;
两者合计占全库 66% 的磁盘读(1.1TB/46h),单次读 26,442 个块(约 211MB)、398ms、返回 1 行。
- 收敛后同库同参数:等值 0.19ms,前缀 30ms(约 2000 倍)。
- 真实统计查询端到端 760ms → 61.6ms。
改动:
1. 平台单号/工单号分支收敛为「等值 + 前缀」,与 order-repo / task-repo 既有写法一致;
工单号含随机小写段(10.2 万行里 7.4 万行非全大写),保留 LOWER() 比较。
2. 迁移 090 补 text_pattern_ops 前缀索引:当前库 collation 为 en_US.utf8,
前缀 LIKE 在默认 B-Tree 上会退化成全索引扫(实测 438ms)。
3. 新增关联单号反查分支:SUB/INV/AS/DT 不在 work_orders 上,
经关联表反查工单 id,四条链路均命中唯一索引。
4. 前端 isExplicitOrderNoSearch 同步补齐(否则搜到的单会被状态页签挡掉、
实时补丁还会把行删掉)。
验证:生产 EXPLAIN 逐条比对 + 14 项仓储单测 + 6 项分类器单测。
2026-10-03 14:27:32 +08:00
yml2213
56e718a65d
fix(admin): 显式单号检索下,其它筛选不得把正在看的工单从实时补丁里删掉
...
## 修的是什么
实时补丁的判定链里,「状态 / 接单人员 / 日期范围」这些可证伪条件排在关键词护栏之前,
任一不成立就先返回 mismatch(允许删行),于是第 156 行那条「有关键词就不删行」的护栏
在带筛选时根本执行不到。
d6523635 只在 UI 侧补了一半:搜显式单号时清空 状态/赠送阶段/验收模式,
但**没清接单人员、分类、日期范围**,而 workerId 与 createdRange 同样会先返回 mismatch。
所以「单号 + 接单人员」或「单号 + 日期范围」仍会把行删掉。
实测(真实函数):
单号 + 状态筛选 -> mismatch(删行)
单号 + 接单人员筛选 -> mismatch(删行)
单号 + 日期范围 -> mismatch(删行)
## 修法
只对「显式单号检索」提前短路为 unknown(只原地更新,不插不移):
if (isExplicitOrderNoSearch(filters.keyword)) return 'unknown'
刻意**不**推翻既有设计:模糊关键词(产品名/昵称等)仍保留「状态可证伪即移除」的语义,
因此原来锁定该语义的用例继续通过。
顺带把 isExplicitOrderNoSearch 合并到 utils:此前面板与 AdminLayout 各有一份规则,
重复两份正是上次 tab 名单漏改那类问题的温床。
## 边界(重要)
**本次修复不覆盖「无任何其它筛选、只按单号搜索」的场景。**
实测该场景下判定本就是 unknown、行不会被删(状态原地更新、分页与统计一致),
因此线上反馈的「状态变化后搜不到、必须整页刷新」若发生在无筛选条件下,另有他因,尚未定位。
2026-10-02 17:51:39 +08:00
yml2213
e0d7398d37
fix(admin): 风控 tab 点了没反应 —— tab key 白名单漏登记,并合并为唯一来源
...
## 现象与根因
风控 tab 渲染得出来、但怎么点都切不过去,且不报错、不白屏。
原因是 tab key 名单在同一文件里写了两遍:
- isWorkerPlatformTab()(changeTab 的守卫)
- loadActiveTabPreference()(localStorage 旧选择校验)
新增风控 tab 时只把 'risk-control' 加了 TAB_QUERY_KEYS 与 Tabs items,漏了上面两处,
于是 changeTab('risk-control') 在第一行 `if (!isWorkerPlatformTab(nextTab)) return` 就返回了。
这类漏改没有任何报错信号,只能靠点一下才发现——上一轮的验证只查了构建产物里
是否含面板代码,没有验证 tab 真的能切换,所以没拦住。
## 修法
把名单抽到 utils/admin-worker-platform-tabs.ts,只保留唯一一份
WORKER_PLATFORM_TAB_KEYS;查询缓存映射与「只登记缓存但不是 tab」的例外(hall-config,
它是「杂项配置」tab 内部的区块)也一并显式化,避免下次再靠人记。
## 回归测试
新增 tests/admin-worker-platform-tabs.test.ts(5 个用例):
- 风控 tab 必须被 isWorkerPlatformTab 接受
- 每个登记了切页缓存的 tab 都必须在合法 tab 名单里 ← 正是本次漏改的形态
- 名单无重复项 / 非法 key 被拒 / 名单内自洽
2026-10-02 17:13:59 +08:00
yml2213 and Cursor
1239393fc2
perf: 筛选统计去掉 JSON 兜底,并补上 orders 覆盖索引
...
去掉 work_orders 堆访问后,JOIN 会把 orders 整表扫进 Hash Right Join。
领取页在快照新鲜时不再打上游;快手出网统一 10 秒超时。倒计时改为自适应间隔。
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-01 15:05:38 +08:00
yml2213
f4c405d51a
fix(worker): 打手端实时补丁不再误删"按工单号搜到的行",并同步分页总数
...
这是后台那个"搜工单号搜不到、必须刷新整页"在打手端的同源副本:
WorkerLayout 的 operation = event.operation === 'remove' || !matches ? 'remove' : 'upsert'
只要前端判"不匹配"就删行,而前端关键词匹配器**没有比对工单号**——
后端搜索表达式的第一项恰恰就是 work_order_no(还有 material_json 里更多前端不知道的字段)。
于是按工单号搜索时,该单一旦有实时变更,行就被从缓存删掉、列表变空。
修法与后台侧对齐:
1. 抽出 utils/worker-realtime-work-orders.ts(可单测、无运行时依赖),关键词匹配补上
workOrderNo,并改成三态判定——状态/分类等可证伪维度不符才删行;关键词能找到=match
(允许插入),找不到=unknown(不删不插,只就地更新)。
2. patchWorkerWorkOrderListEnvelope 增删行时同步 data.pagination.total,
修掉"列表空了、分页器还显示有 N 条"。
3. 大厅无限下拉只在第 1 页允许插入,其余页只就地更新。
验证:前端 86 项单测全绿(新增 6 项,覆盖"按工单号搜索+实时变更不得删行"、
unknown 只就地更新、删/插同步总数、无限下拉页边界)。
2026-10-01 13:48:05 +08:00
yml2213
d262b22a41
fix(admin-worker): 实时补丁同步筛选统计,并锁住"按工单号搜索结果被删行"的回归
...
线上现象:按工单号搜到的那一单,状态一变(实时 SSE),列表就变成「暂无数据」,而上方
筛选统计仍显示「共 1 单」;整页刷新后才恢复。
成因在前端实时快照补丁:旧逻辑里的 matchesWorkOrderKeyword 只比对「商品名 + 平台单号」,
不比对「工单号」,所以按 WO… 搜出来的行一旦有实时变更就被判成不匹配,直接从缓存里删掉;
而 statistics 是首次响应里带出来的、没被同步,于是出现"统计说有、列表没有"的自相矛盾。
(删行本身已由上一条提交改为:关键词筛选归入「不可证真」→ 只原地更新。)
本条补齐剩下的一致性:
1. 实时补丁增删/原地更新行时,同步维护 data.statistics 的 totalCount 与 statusCounts
(statusCounts 按运营态口径记账,与后端 getWorkOrderStatistics 一致),列表与统计不再打架;
2. 补两个回归测试:按工单号搜到的行在状态变化后必须原地保留;插入/移除/原地改状态三种
情况下统计都要跟得上。
验证:前端 80 项单测全绿(新增 2 项),lint / typecheck / build 通过。
2026-10-01 12:35:59 +08:00
yml2213
40ee36d72a
fix(consignment): 修复寄卖取消解绑、SUB 单号写空、拼单门禁与后台工单列表实时乱跳
...
1. 问题单处置「取消」后打手信息不消失:resolveProblemWorkOrder 的取消分支从未解绑寄卖现货,现货永久停在 consumed 占库不还,工单 material 上的寄售标记残留又让列表继续显示「供货打手」。取消时补上解绑;调用必须排在状态 UPDATE 之前——那条 UPDATE 会清空 friend_added_at,清完再解绑会把已确认加好友的货误判成可回池(二次出货);
2. 解绑函数在没有现货可解绑时直接 return,跳过了摘标记,于是「库存行早已不存在」的老帖永远摘不掉寄售标记(列表一直显示供货打手)。现在无论是否解绑到现货都摘标记,痕迹保留在 material.consignmentHistory 的 detachReason 里;
3. 内部现货履约写入的 sourceSubmissionNo 恒为空:取的是占库 `UPDATE ... RETURNING *` 的行,只带回本表列,没有 join 出来的 submission_no,导致工单列表把所有寄卖单都显示成「老单无提报单号」,SUB 单号这个唯一锚点丢失。改取带 join 的预读库存(内部现货资料、指派工单资料、指派事件留痕三处)。存量老单按业务口径不回填;
4. 后台接单工单列表实时乱跳:SSE 快照补丁按数组下标读 queryKey,面板 key 加了字段后下标全错(page 被读成 targetWorkOrderId → 任何页都被当成第 1 页),且完全没判「内部寄售匹配」等筛选,于是任意一条不在当前页的老单只要发生变更就被插到列表顶部。改为结构化 queryKey + 三态判定(match 才允许插顶、mismatch 才允许移除、其余只原地更新),插入还要求 page===1 且工单 id 大于当前首行;状态比对改用 rawStatus(快照的 status 是运营态,拼单母单会被显示成 in_progress),分类筛选因快照不带 parentCategoryId 归入不可证伪;
5. 新增「寄卖只做整单」硬门禁:已有人参与的拼单工单不参与现货匹配与库存提醒,履约入口一律返回 work_order_sharing_not_consignable,前端「手动匹配寄卖」入口按同一口径收敛;开了拼单但无人参与的整单不受影响,避免过度拦截。
验证:后端 520 项单测(517 pass / 3 skip)、前端 78 项全绿;并对真实开发库跑通问题单取消三类场景(老帖无库存行 / 回库 / 已加好友作废)、退回打手与退回大厅的反向用例(不得解绑)、履约写入真实 SUB 单号、拼单门禁四入口 + 未过度拦截反向用例。
2026-10-01 12:17:00 +08:00
yml2213 and Cursor
9298b31b9b
feat(worker-platform): 增加寄卖白名单总开关,关闭后全员可发布
...
资金配置与打手列表可一键切换白名单模式;发布校验、打手端入口按总开关放行。同时收紧未开通判定、关权限确认和开通弹窗文案。
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-21 14:23:00 +08:00
yml2213 and Cursor
577e0eec02
fix(consignment): 内部现货履约文案对齐待加好友,并移除已废弃的指派打手路径
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-21 12:04:30 +08:00
yml2213
29589bb9af
feat(worker-platform): 接单工单表格「打手」列支持展示寄售供货打手与现货资料
...
1. 新增 resolveConsignmentWorkerDisplay 工具函数,自动解析工单寄售现货与资料字段(供货打手、游戏角色昵称、游戏ID及联系方式);
2. 优化 renderWorkOrderWorkers 渲染逻辑:当工单为内部寄售现货履约时,打手列带「供货打手」或「内部现货」专属角标,主标题展示打手名/角色名,副标题拼接游戏ID与联系方式,解决原先显示为破折号 - 的问题;
3. 新增 consignment-worker-display 单元测试,更新寄卖库存优化现状与进度追踪文档,前端 57 个测试全绿并通过类型检查。
2026-09-21 11:40:25 +08:00
yml2213
f07e4087ad
feat(consignment): 优化寄售仓库与接单工单双向手动匹配,支持工单号与提报单号检索与强制匹配
...
1. 寄售仓库手动匹配订单扩充支持 open 状态工单,增强 WO 工单号与纯数字的模糊/前缀搜索,修复工单搜不到的问题并在卡片高亮展示内部工单号与状态;
2. 接单工单操作列全面支持【手动匹配寄售】,允许从接单工单主动调起寄售匹配弹窗;
3. 寄售现货筛选支持通过 SUB 提报单号、INV 仓库号、供货打手等快速搜索;
4. 完善规格冲突下的强制匹配确认与必填原因提交机制,确保履约全流程留痕合规。
2026-09-19 17:59:05 +08:00
yml2213
f8101c1730
feat(consignment): 规格口径定案——互通通配 + 后台全量/发布端按物品展示
...
业务定案:
- 操作后台全量:系统 苹果/安卓/通用,区服 微信区/QQ区/互通;提报审核与
库存编辑的系统/区服从自由文本改为受控下拉(单一来源 utils/consignment-spec.ts)
- 打手端发布按物品类型展示:苏尔南系统二选一(必须区分端),区服唯一
「互通」选项且默认选中;后续其他品类在共享常量按品类加条目
- 匹配引擎通配符对称化:区服通配=互通(通用/全区/不限归一化为别名),
系统通配=通用(双端/全端同理);订单侧写通配同样放行,只增不减匹配面;
差异描述不把通配对当冲突
- 提报白名单校验(API 层):系统只收 苹果/安卓,区服只收 微信/QQ/互通,
旧页面缓存或直调接口绕不过
- 物品名拼接:区服为互通时不拼入(对买家无信息量),前后端同口径
后端 481(+互通双向匹配/通配不算差异/真冲突仍排除/白名单校验)、
前端 54(+选项口径/表单引用/默认值)测试全绿;typecheck/lint/format/check:sql 通过
docs/寄卖系统优化方案.md 记录批次 W
2026-09-17 13:01:59 +08:00
yml2213
b666a9c951
fix(consignment): 拼单份额验收收官补寄卖结算钩子 + 手动匹配弹窗三处复核遗留
...
- acceptWorkOrderShareAndSettle 最后一个份额把母单转 accepted 的分支,
此前不释放发布押金也不结算供货货款(两钩子只在统一验收里):
现在同口径补上;供货货款传 assignedWorkerId=0(拼单母单无单一接单人,
份额打手已各自按 share_reward 结算,不会重复付款)
- 手动匹配弹窗:race_condition/unavailable/spec_mismatch/partial_requires_confirm
四个错误码清空已选并自动重拉列表,数据过期不再死循环撞错
- 手动匹配弹窗库存侧:keyword+pageSize100 透传后端(原来 keyword 是死参数、
只拉 50 条),300ms 防抖后端搜索;无供货打手时禁用指派选项并在提交前
再拦一道(原来必 400 死路);选中订单回显 workerId/workerName
- 凭证核销反馈抽共享 utils/voucher-consume,WorkOrdersPanel 与弹窗共用,
口径不再漂移(弹窗顺带获得"已提前核销 N 张"提示)
- docs/寄卖系统优化方案.md 记录批次 V
后端 477(+4)/ 前端 50(+1)测试全绿,typecheck / lint / format / check:sql 通过
2026-09-17 12:45:51 +08:00
yml2213
0476339ec4
fix(consignment): 手动匹配订单按钮点了不弹窗(弹窗挂错了位置)
...
用户反馈:在库待匹配列表点「手动匹配订单」没有反应。
根因:上一批把手动匹配弹窗挂到了「编辑寄售物品」弹窗**内部**,外层弹窗未打开时
该组件根本没被挂载,点击只改状态、界面无变化。
- 弹窗移到面板顶层(与其它弹窗同级),点击即弹
- 新增静态守卫测试:断言手动匹配弹窗前面不能有未闭合的 Modal(即不能嵌在别的弹窗里)、
按钮必须真的 setState、open 由该状态驱动;已验证该守卫能拦下错误写法
- 顺带补入口缺口:订单侧原先只在"检测到系统候选"的提醒弹窗里给入口,订单没有任何候选时
反而进不去手动匹配 —— 工单行内新增常驻「手动匹配现货」(仅待指派/待补资料,
与后端前置校验同口径)
- 已暂停匹配的现货点按钮会直接 409,改为按钮禁用并提示先打开「允许匹配」开关
- destroyOnClose → antd 6 的 destroyOnHidden(前者已废弃)
验证:前端 typecheck/lint/format/48 例测试/build 全过。
2026-09-17 12:27:58 +08:00
yml2213
a7a55d6c16
feat(consignment): 客服手动指定现货匹配的界面入口
...
后端批次已提供判定/差异/强制留痕与双向读取接口,这里补界面,让客服真的能用上。
- 新增共享弹窗 ConsignmentManualMatchModal:订单侧(匹配弹窗「手动指定现货匹配」)与
库存侧(寄售仓库行内「手动匹配订单」)共用同一套交互与落地逻辑,避免两套 UI 漂移
- 交互:搜索 → 选中(精确/非精确/规格冲突三档标签 + 字段级差异说明)→ 选交付方式
(内部现货履约 / 指派供货打手)→ 非精确需勾选确认、冲突需勾选「确认规格不一致」并必填原因
→ 落地;并在落地前提示"现货立刻被占用、点错需撤销寄售履约"
- 判定规则收敛成纯函数 consignment-manual-match.ts(需不需要确认/填原因、能否提交、
关键词过滤、标签文案)并加 4 例单测
- 服务与类型补齐:fetchWorkOrderConsignmentMatchOptions / fetchInventoryMatchableOrders,
fulfill/assign 入参增加 allowSpecMismatch 与 matchNote
- 凭证核销失败的提示沿用既有规则(核销失败不能报成功)
验证:前端 typecheck/lint/format/44 例测试/build 全过;两个新接口未登录访问均 401
(路由已挂载、权限位生效)。
2026-09-17 12:23:30 +08:00
yml2213
ca04e09deb
feat(consignment): 客服端凭证链可视化(提报凭证 + 赠送凭证)
...
问题:一件寄卖有两类凭证,客服界面只看得见第一类,还是 48x48 一张缩略图,
看不出是主页还是物品;第二类(证明"这件货真送出去了"的赠送完成截图)只在工单验收界面,
客服要证明赠送是否完成得自己跨模块翻,没有任何地方把两类凭证并排呈现。
- 两类凭证分别在哪里:
提报凭证 = 提报表 screenshots_json(卖家提报时的游戏主页截图,含物品/仓库详情)
赠送凭证 = 绑定工单的验收资料 work_orders.acceptance_json(冷却结束后上传、客服凭此验收)
- 后端把凭证链从客服两个列表/详情接口一起下发:提报表/库存 → 结果库存 → 绑定工单,
新增 submissionScreenshots / giftEvidenceImages / giftEvidenceNote / giftEvidenceSubmittedAt /
giftWorkOrderNo / giftWorkOrderStatus / giftEvidenceReviewStatus(none|pending|accepted|submitted);
赠送凭证图从 imageUrls 与 files[].url|mediumUrl|thumbnailUrl 两处取并去重
- 提报凭证口径统一:有来源提报单用提报单主页截图,客服手工入库现货回退库存自身截图,
前端只看 submissionScreenshots 一个字段,不会拿错
- 前端新增共享组件 ConsignmentEvidenceGallery(缩略图 + 大图预览 + 共 N 张,
预览用 Image.PreviewGroup items,被折叠的图在大图里仍能翻看);审核面板把「凭据截图」
拆成「提报凭证(游戏主页截图)」与「赠送凭证」(带待验收/已验收 Tag + 关联工单 Tooltip),
仓库面板新增「凭证」列并分组展示,两个详情弹窗同口径(含备注/提交时间/工单号/一句话说明)
真实库验证:赠送凭证解析在构造的工单验收资料上取到 3 张图(imageUrls 1 + files 2)并识别
pending_acceptance → 待客服验收;提报凭证在真实数据上取到 1 张。临时数据已清理。
2026-09-17 11:22:59 +08:00
yml2213
44de11a3a7
feat(consignment): 一个寄卖单号锚定全流程 + 统一状态机 + 卖家侧确认加好友/提交赠送截图
...
问题:一件货身上挂着三套互不相通的状态(提报单审核态、仓库库存态、工单赠送态),
my-items 同时返回两个数组、卖家端分两个列表渲染,同一件货显示两行两个号;
且卖家端只映射了前两套状态,"已出库"之后流程就断了,卖家不知道该干什么。
- 提报单号 SUB… 作为唯一「寄卖单号」从发布锚定到结算(零迁移);
listWorkerConsignments 改成一件货一条记录,库存/工单信息挂上去,
客服手工入库的现货(无提报单)才回退用库存号当锚点
- 新增 domain/consignment-item-stage.ts:把三套底层状态推导成卖家看得懂的一个阶段
(待审核/已通过待匹配/已匹配-待加好友/冷却中/待赠送/已赠送待审核/已完成/驳回/作废/取消)
+ 一句"下一步做什么" + 能力位(谁能确认加好友、谁该传截图),列表筛选与 KPI 也改由它驱动
- 卖家侧新增动作(以前只有 publish + my-items,卖家只能干看):
POST /worker/consignment/items/:submissionId/{confirm-friend,gift-evidence}
POST /worker/consignment/inventories/:inventoryId/{confirm-friend,gift-evidence}(手工入库现货)
复用既有工单链路 confirmWorkOrderFriendAdded / submitWorkerOrderAcceptance,
只加归属校验(不是本人履约的订单 403),顺带白拿"冷却没结束不许提交凭证""必须带图"
- 客服端用同一个号:库存列表/详情补 sourceSubmissionNo(LEFT JOIN 提报单),
履约/指派写进工单的寄售信息也带上;关键字搜索支持按寄卖单号搜(计数 SQL 同步补 join)
真实库端到端验证:确认加好友 → gift_phase=friend_countdown / friend_added_at 落库 /
gift_available_at 正好 +72h;冷却期内提交截图被拒(work_order_gift_cooldown_active);
越权操作被拒(consignment_item_not_found);按寄卖单号搜索命中正确。临时数据已清理。
2026-09-17 10:57:57 +08:00
yml2213
d6f6219fe9
feat(consignment): 内部现货履约改为停在「待加好友」,由客服确认后进赠送冷却
...
需求:发布匹配成功后订单要停在待加好友,客服线下通知加好友、手动确认后才进赠送冷却。
- 新增 parkWorkOrderWaitingFriendAddWithClient:占库落地时把工单停在
acceptance_mode=friend_gift + gift_phase=material_required 的「待加好友」阶段,
friend_added_at / gift_available_at / deadline_at 都留空(没有打手在跑,不该背时限),
并把商品规则里的冷却时长落到工单上(两者都为 0 时补默认 72 小时,
否则客服确认后会得到 0 秒冷却而立刻可赠送)。
- 履约服务不再传 forceFriendGift(该开关会直接把 friend_added_at 写成当前时间、
跳过客服确认);同步删除这个已无调用方的开关,冷却起始事件里的
skippedWorkerMaterial 改为按是否内部现货履约判断。
- 前端:内部现货单在该阶段显示「待加好友」(原为「待打手提交资料」),
确认按钮统一为「确认加好友」,确认弹窗补上"先用库存账号加好友、通知进展记备注"的引导。
- 后台备注增加快捷项「已通知加好友」,一键追加「[已通知加好友] 操作人 时间」。
- 阶段文案抽到 utils/gift-phase.ts 以便单测覆盖这条口径。
验证:真实库跑通全链路(停阶段 → 确认加好友进冷却 → 重复确认被拒 → 事件流正确,临时单已清理);
后端 415 例(412 通过,新增 3 例)、前端 25 例(新增 4 例)全绿。
2026-09-16 21:02:50 +08:00
yml2213
563e548b2e
feat(consignment): 补齐寄卖前端权限门控,收口调拨状态与运营体验
...
权限门控(P1-8 剩余):
- 新增 resolveAdminPermission(sessionPermissions, code):会话接口的最新权限列表优先,
接口异常才回退登录时的本地快照;空数组也判无权限,避免"刚被收回权限仍能点"。
- 寄售仓库面板:consignment.manage 控制手动入库/编辑/作废/退单回库/匹配开关(无权限时开关禁用)。
- 寄卖提报面板:consignment.review 控制审核入库/驳回。
- 接单平台页:无 consignment.view 不渲染两个寄卖 tab,并把 URL/localStorage 的旧选择拉回工单页。
数据约束(P2-19 剩余):
- 迁移 080:allocation_status 历史非法值归位「待安排」(备注留痕)后加 CHECK(待安排/已安排),
并顺手修正 077 遗留的"收集链接/玩家提交"权限描述文案。
- 编辑接口拒绝直接改 allocationStatus(400 consignment_allocation_status_update_forbidden)。
运营体验:
- 两个面板补 isError 错误态与重试;审核通过/驳回加 confirmLoading 与提交中守卫(防双提交)。
- 待审徽标改用后端真实总数(原来只统计当前页);编辑弹窗押金不再兜底 ¥100(会误写押金)。
- 履约拦截弹窗冷静期文案不再硬编码"3 天",改为按商品规则设定。
- 核实并撤回"倒计时时区偏移"误报:deadlineAt 为带 Z 的 ISO,前端无偏移问题。
验证:后端 412 例(409 通过)、前端 21 例(新增 5 例权限解析)全绿,
typecheck / lint / format / check:sql / build 通过;迁移 001→080 在全新空库跑通并在 dev 库应用。
2026-09-16 20:39:52 +08:00
yml2213 and Cursor
40c51e1d8e
fix(admin): 订单列表默认近7天并按支付时间筛选
...
避免无日期过滤时展示全库,关键词搜索不受日期限制;SSE 插入裁剪并尊重筛选,新单入库优先使用平台支付时间。
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-15 13:41:29 +08:00
yml2213 and Cursor
b7d246e5b9
fix(admin): 任务列表商品名与执行器标签改为中文展示
...
建单时不再把英文 sku 写入商品名,列表按映射反查中文名,并将 Affiliate Dash 等标签本地化。
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-15 13:03:47 +08:00
yml2213 and Cursor
b3aad0044c
refactor(fulfillment): 移除飞飞/乐玩通道,仅保留 affiliate_dash
...
新单只路由 affiliate_dash(未命中走 manual_dispatch);历史飞飞/乐玩任务保留只读 stub,避免订单重同步失败。同步清理 cloudtentacles 调度、Admin 写路径与相关 env。
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-14 17:29:47 +08:00
yml2213 and Cursor
a49db84771
fix(worker-platform): 修复售后欠款抵扣导致验收失败,并支持余额偿还
...
有待还欠款时结算写入 settled_at 发生 timestamptz/text 类型错误会整单 500;顺带支持充值/解冻自动偿还与后台手动偿还。
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-13 20:44:35 +08:00
yml2213
18ac95ca27
feat(worker-hall): 接单大厅支持内部打手可见订单已发布时长标签
2026-09-13 11:14:16 +08:00
yml2213
1cf790d6ab
feat(worker-hall): 抢单大厅支持分类与全部按钮图标自定义及PNG透明通道修复
2026-09-12 20:16:27 +08:00
yml2213
bf167d98ed
新增财务角色与财务报表并完善后台权限
2026-09-02 13:58:03 +08:00
yml2213
de63daf1ac
优化订单履约分流与后台筛选
2026-09-02 11:59:38 +08:00
yml2213
ffb71f2276
修复接单端过期会话重复请求
2026-08-30 17:32:34 +08:00
yml2213
f20ff3018f
feat(打手): 支持个人追加免押额度
2026-08-28 21:36:54 +08:00
yml2213
e189811617
将退单审核文案明确为打手退单
2026-08-23 18:19:47 +08:00
yml2213
003c3e9208
统一取消订单申请审核文案
2026-08-23 18:13:37 +08:00
yml2213
3df271b30c
后台新增RBAC权限模型支持按角色配置接单管理权限
...
- 新增 admin_roles/admin_permissions/admin_role_permissions 三表与种子数据(059迁移)
- 接单平台全部管理路由从固定角色切换为细粒度权限校验
- 撤单按动作二次校验:退回大厅与取消订单分别要求对应权限
- 管理员账号页新增角色权限配置卡片(admin专属,带审计日志)
- 权限更新走事务保证原子性;session实时解析权限确保修改立即生效
2026-08-23 16:04:10 +08:00
yml2213
985e61209d
资金申请增加渠道筛选合计与审核留痕
2026-08-22 09:57:28 +08:00
yml2213
ed81122047
大厅与后台工单列表改为精确补丁并支持抢单确认
2026-08-22 09:30:38 +08:00
yml2213
1f7ff016df
新增打手端新订单语音播报开关
2026-08-22 09:12:26 +08:00
yml2213
c3bd6daee2
优化本地Mock接单
2026-08-21 12:39:24 +08:00
yml2213
e6ab139071
修复容器测试并补订单回归
2026-08-21 12:29:19 +08:00
yml2213
d2512ccb6b
调整接单密码强度规则
2026-08-20 16:19:44 +08:00
yml2213
ee79195f47
完善拼单状态与份额验收流程
2026-08-18 18:02:43 +08:00
yml2213
f938ab0cba
增加打手登录设备管理与三台设备限制
2026-08-17 15:26:40 +08:00
yml2213
8d18daa0fe
增加打手密码强度校验
2026-08-17 15:02:33 +08:00
yml2213
5c7c3e14e3
统一前后端代码格式化配置
2026-08-16 17:27:12 +08:00
yml2213
bc2909d6f2
打手端迁移至独立子域名
2026-08-16 16:08:38 +08:00
yml2213
10ae3d01ee
初步优化手机端ui
2026-08-16 10:33:45 +08:00
yml2213
d433518038
修复验收图片多选暂存
2026-08-15 14:49:48 +08:00
yml2213
a2587eda01
完善接单平台上传与物品规则
2026-07-25 15:56:18 +08:00
yml2213
f6d3f00f21
新增接单平台第一期闭环
2026-07-25 13:58:53 +08:00
yml2213
3196e1ccdc
修复 kuaishou-lewan 多账号健康检查与平台配置展示
...
恢复 health 任务对全部账号的合并监控,补齐 React 后台多账号 UI 与账号选择,并将用户可见文案统一为 kuaishou-lewan。
2026-07-10 21:43:32 +08:00
yml2213
d61a04befa
统一后台 Table 分页:常开 10/20/50/100 条数切换
...
- 新增 admin-pagination 工具,标准列表与云触手记录分别配置
- 用户/审计等页补齐 showSizeChanger,避免 total≤50 时无法切换
- ConfigProvider 默认开启条数切换
2026-07-10 16:05:27 +08:00
yml
1c50569ea9
添加快手 Cloud 换绑角色功能
2026-05-30 11:23:52 +08:00