From 308cf4244fc1b80f673b972705f3d7052706ce8e Mon Sep 17 00:00:00 2001 From: ddCat <2695092045@qq.com> Date: Sat, 19 Sep 2026 10:12:43 +0800 Subject: [PATCH] =?UTF-8?q?chore(release):=20=E7=89=88=E6=9C=AC=E5=8F=91?= =?UTF-8?q?=E5=B8=83=20-=20publish=20v1.5.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 9 ++++ VERSION | 2 +- .../admin/components/credit-cost-fields.tsx | 41 ++++++++++++------- 3 files changed, 36 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a0190fcc8..e5ebefd8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # CHANGELOG +## v1.5.4 + +- 创作端直接读取启用的系统渠道模型,一级按模型展示名跨渠道分组,二级显示渠道展示名;移除渠道级“前台名称”,保留每条渠道的调用身份、能力和售价。 +- 模型价格档新增管理员积分成本价,后台请求记录、详情与 CSV 同时展示销售金额和成本金额;成本按下单快照核算,改价不影响历史订单,普通用户接口不返回成本字段。 +- 修复备用供应线路切换时的成本快照归属,成本独立于用户售价策略更新;未配置成本的历史记录不显示虚构的零成本。 +- 修复删除画布时预加载关联素材导致的 MIME 合同校验阻塞,直接按画布 ID 删除并保留服务端失败处理与本地缓存清理顺序。 +- 升级需同步数据库 schema v27,新增价格档成本与账单成本快照列,不重算既有售价、余额或历史订单;受管部署由迁移服务执行,其他部署先运行 `migrate-schema up` 和 `migrate-schema verify`。 +- 历史模型的展示字段按原值读取;若模型展示名和渠道展示名曾填反,需在后台纠正,升级不会自动交换配置。 + ## v1.5.3 - 合并 PR #537(Rou325)的 AutoDL H3 Z0901/Z0902/Z0903 工作流更新。 diff --git a/VERSION b/VERSION index f1a2e631d..f074f24d2 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v1.5.3 +v1.5.4 diff --git a/web/src/pages/admin/components/credit-cost-fields.tsx b/web/src/pages/admin/components/credit-cost-fields.tsx index 8a4cbf715..dce90329d 100644 --- a/web/src/pages/admin/components/credit-cost-fields.tsx +++ b/web/src/pages/admin/components/credit-cost-fields.tsx @@ -3,19 +3,30 @@ import type { ChannelModelFormValues } from "./channel-model-editor-form"; export function CreditCostFields({ index, form, billingMode, isVideo }: { index: number; form: FormInstance; billingMode: string; isVideo: boolean }) { const configured = Form.useWatch(["priceTiers", index, "costConfigured"], form) === true; - const fields = billingMode === "token" - ? isVideo - ? [["costOutputTokenPrice", "积分 / 百万视频 Token"]] - : [["costInputTokenPrice", "输入 / 百万 Token"], ["costOutputTokenPrice", "输出 / 百万 Token"], ["costCachedTokenPrice", "缓存 / 百万 Token"]] - : [["costUnitPrice", billingMode === "per_second" ? "积分 / 秒" : "积分 / 次"]]; - return
- - - - {configured ?
- {fields.map(([field, label]) => - - )} -
: null} -
; + const fields = + billingMode === "token" + ? isVideo + ? [["costOutputTokenPrice", "积分 / 百万视频 Token"]] + : [ + ["costInputTokenPrice", "输入 / 百万 Token"], + ["costOutputTokenPrice", "输出 / 百万 Token"], + ["costCachedTokenPrice", "缓存 / 百万 Token"], + ] + : [["costUnitPrice", billingMode === "per_second" ? "积分 / 秒" : "积分 / 次"]]; + return ( +
+ + + + {configured ? ( +
+ {fields.map(([field, label]) => ( + + + + ))} +
+ ) : null} +
+ ); }