feat(consignment): 收敛寄卖迁移并调整发布页价格区布局

- 142–148 收敛为 142_consignment_platform,旧账本自动清理

- 价格三卡保持一行等宽,其余发布页布局回退

- 修复发布 tab 空白并统一价格文案为系统建议价
This commit is contained in:
2026-11-06 14:28:35 +08:00
parent 374e2a69df
commit 8b7bcca36a
17 changed files with 711 additions and 614 deletions
@@ -89,9 +89,9 @@ test('降价提示:未到时长不提示,到点后按比例给出建议售
assert.equal(suggestion?.dropHours, 24)
})
test('迁移 142 必须包含寄卖配置、库存数量/售价与分配表', async () => {
test('合并迁移 142 必须包含寄卖配置、库存数量/售价与分配表', async () => {
const source = await readFile(
new URL('../../db/migrations/142_consignment_matching.sql', import.meta.url),
new URL('../../db/migrations/142_consignment_platform.sql', import.meta.url),
'utf8',
)
for (const fragment of [
@@ -103,6 +103,6 @@ test('迁移 142 必须包含寄卖配置、库存数量/售价与分配表', as
'internal_match_deadline_at',
'consignment_inventory_id',
]) {
assert.ok(source.includes(fragment), `迁移 142 缺少 ${fragment}`)
assert.ok(source.includes(fragment), `合并迁移 142 缺少 ${fragment}`)
}
})
@@ -35,7 +35,7 @@ function option(label: string, value: string) {
return { label, value, enabled: true }
}
/** 苏尔南手枪种子配置的五个字段(与迁移 144 一致)。 */
/** 苏尔南手枪种子配置的五个字段(与合并迁移 142 一致)。 */
function surnanSpecs(): ConsignmentSpecField[] {
return [
{
@@ -457,9 +457,9 @@ test('动态规格:旧列仍由兼容 key 同步', () => {
})
})
test('迁移 143 必须包含 JSON、匹配 key、文本与改价上限', async () => {
test('合并迁移 142 必须包含动态规格的 JSON、匹配 key、文本与改价上限', async () => {
const sql = await readFile(
new URL('../../db/migrations/143_consignment_dynamic_specs.sql', import.meta.url),
new URL('../../db/migrations/142_consignment_platform.sql', import.meta.url),
'utf8',
)
for (const fragment of [
@@ -469,13 +469,13 @@ test('迁移 143 必须包含 JSON、匹配 key、文本与改价上限', async
'price_cap_fen',
'CREATE INDEX IF NOT EXISTS idx_consignment_inventories_spec_key',
]) {
assert.ok(sql.includes(fragment), `迁移 143 缺少 ${fragment}`)
assert.ok(sql.includes(fragment), `合并迁移 142 缺少 ${fragment}`)
}
})
test('迁移 144 必须为苏尔南手枪写入已发布的五个单选字段配置', async () => {
test('合并迁移 142 必须为苏尔南手枪写入已发布的五个单选字段配置', async () => {
const sql = await readFile(
new URL('../../db/migrations/144_consignment_surnan_default_profile.sql', import.meta.url),
new URL('../../db/migrations/142_consignment_platform.sql', import.meta.url),
'utf8',
)
for (const fragment of [
@@ -485,6 +485,6 @@ test('迁移 144 必须为苏尔南手枪写入已发布的五个单选字段配
"'published'",
'"key": "brillianceCount"',
]) {
assert.ok(sql.includes(fragment), `迁移 144 缺少 ${fragment}`)
assert.ok(sql.includes(fragment), `合并迁移 142 缺少 ${fragment}`)
}
})
@@ -3,9 +3,9 @@
*
* 设计约定:
* - 没有任何「内置字段」:配置初始 specs 为空,字段全部由运营在寄卖配置里维护;
* 苏尔南手枪的五个字段由迁移 131 作为种子配置写入;
* 苏尔南手枪的五个字段由迁移 142 作为种子配置写入;
* - 字段类型支持:文本 / 长文本 / 下拉 / 单选 / 数字 / 日期;
* - 价格只有两种:接单模板价打折、模板价固定下调;打手只能按系统建议价往下调;
* - 价格只有两种:接单模板价打折、模板价固定下调;打手只能按系统建议价格往下调;
* - 旧列兼容:字段 key 仍为 system/serverZone/series/diamondLevel/brillianceCount 时,
* 继续同步旧列并沿用旧匹配器,保证存量库存与工单不回归。
*/
@@ -1045,7 +1045,7 @@ export async function submitWorkerConsignmentGiftEvidence(
/**
* 发布寄卖的建议价:
* - 模板折扣:接单模板价 × 折扣;
* - 固定价格:直接使用固定价,有模板价时校验不得高于模板价;
* - 模板价固定下调:接单模板价 − 固定下调金额,有模板价才允许发布;
* - 同时返回改价上限(等于建议价,打手只能往下调)。
*/
export async function getWorkerConsignmentPriceSuggestion(payload: {