chore(release): 版本发布 - publish v1.5.4
This commit is contained in:
@@ -1,5 +1,14 @@
|
|||||||
# CHANGELOG
|
# CHANGELOG
|
||||||
|
|
||||||
|
## v1.5.4
|
||||||
|
|
||||||
|
- 创作端直接读取启用的系统渠道模型,一级按模型展示名跨渠道分组,二级显示渠道展示名;移除渠道级“前台名称”,保留每条渠道的调用身份、能力和售价。
|
||||||
|
- 模型价格档新增管理员积分成本价,后台请求记录、详情与 CSV 同时展示销售金额和成本金额;成本按下单快照核算,改价不影响历史订单,普通用户接口不返回成本字段。
|
||||||
|
- 修复备用供应线路切换时的成本快照归属,成本独立于用户售价策略更新;未配置成本的历史记录不显示虚构的零成本。
|
||||||
|
- 修复删除画布时预加载关联素材导致的 MIME 合同校验阻塞,直接按画布 ID 删除并保留服务端失败处理与本地缓存清理顺序。
|
||||||
|
- 升级需同步数据库 schema v27,新增价格档成本与账单成本快照列,不重算既有售价、余额或历史订单;受管部署由迁移服务执行,其他部署先运行 `migrate-schema up` 和 `migrate-schema verify`。
|
||||||
|
- 历史模型的展示字段按原值读取;若模型展示名和渠道展示名曾填反,需在后台纠正,升级不会自动交换配置。
|
||||||
|
|
||||||
## v1.5.3
|
## v1.5.3
|
||||||
|
|
||||||
- 合并 PR #537(Rou325)的 AutoDL H3 Z0901/Z0902/Z0903 工作流更新。
|
- 合并 PR #537(Rou325)的 AutoDL H3 Z0901/Z0902/Z0903 工作流更新。
|
||||||
|
|||||||
@@ -3,19 +3,30 @@ import type { ChannelModelFormValues } from "./channel-model-editor-form";
|
|||||||
|
|
||||||
export function CreditCostFields({ index, form, billingMode, isVideo }: { index: number; form: FormInstance<ChannelModelFormValues>; billingMode: string; isVideo: boolean }) {
|
export function CreditCostFields({ index, form, billingMode, isVideo }: { index: number; form: FormInstance<ChannelModelFormValues>; billingMode: string; isVideo: boolean }) {
|
||||||
const configured = Form.useWatch(["priceTiers", index, "costConfigured"], form) === true;
|
const configured = Form.useWatch(["priceTiers", index, "costConfigured"], form) === true;
|
||||||
const fields = billingMode === "token"
|
const fields =
|
||||||
? isVideo
|
billingMode === "token"
|
||||||
? [["costOutputTokenPrice", "积分 / 百万视频 Token"]]
|
? isVideo
|
||||||
: [["costInputTokenPrice", "输入 / 百万 Token"], ["costOutputTokenPrice", "输出 / 百万 Token"], ["costCachedTokenPrice", "缓存 / 百万 Token"]]
|
? [["costOutputTokenPrice", "积分 / 百万视频 Token"]]
|
||||||
: [["costUnitPrice", billingMode === "per_second" ? "积分 / 秒" : "积分 / 次"]];
|
: [
|
||||||
return <div className="admin-price-tier-block">
|
["costInputTokenPrice", "输入 / 百万 Token"],
|
||||||
<Form.Item name={[index, "costConfigured"]} label="积分成本价(仅管理员可见)" valuePropName="checked" extra="按当前价格档的计费方式核算成本,不影响用户售价;开启并填 0 表示零成本。">
|
["costOutputTokenPrice", "输出 / 百万 Token"],
|
||||||
<Switch aria-label="配置积分成本价" />
|
["costCachedTokenPrice", "缓存 / 百万 Token"],
|
||||||
</Form.Item>
|
]
|
||||||
{configured ? <div className={billingMode === "token" && !isVideo ? "admin-price-tier-token-grid" : "admin-price-tier-billing-grid"}>
|
: [["costUnitPrice", billingMode === "per_second" ? "积分 / 秒" : "积分 / 次"]];
|
||||||
{fields.map(([field, label]) => <Form.Item key={field} className="mb-0" name={[index, field]} label={label} rules={[{ required: true, message: "请输入积分成本价" }]}>
|
return (
|
||||||
<InputNumber className="w-full" min={0} max={1_000_000} precision={6} step={0.1} />
|
<div className="admin-price-tier-block">
|
||||||
</Form.Item>)}
|
<Form.Item name={[index, "costConfigured"]} label="积分成本价(仅管理员可见)" valuePropName="checked" extra="按当前价格档的计费方式核算成本,不影响用户售价;开启并填 0 表示零成本。">
|
||||||
</div> : null}
|
<Switch aria-label="配置积分成本价" />
|
||||||
</div>;
|
</Form.Item>
|
||||||
|
{configured ? (
|
||||||
|
<div className={billingMode === "token" && !isVideo ? "admin-price-tier-token-grid" : "admin-price-tier-billing-grid"}>
|
||||||
|
{fields.map(([field, label]) => (
|
||||||
|
<Form.Item key={field} className="mb-0" name={[index, field]} label={label} rules={[{ required: true, message: "请输入积分成本价" }]}>
|
||||||
|
<InputNumber className="w-full" min={0} max={1_000_000} precision={6} step={0.1} />
|
||||||
|
</Form.Item>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
) : null}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user