63 lines
1.4 KiB
TypeScript
63 lines
1.4 KiB
TypeScript
import type { ReactNode } from 'react';
|
|
import { Calculator } from 'lucide-react';
|
|
|
|
export function PricingInlineField(props: {
|
|
label: string;
|
|
children: ReactNode;
|
|
}) {
|
|
return (
|
|
<div className="pricingInlineField">
|
|
<span>{props.label}</span>
|
|
{props.children}
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export function PricingReadonlyField(props: {
|
|
label: string;
|
|
value: string;
|
|
}) {
|
|
return (
|
|
<div className="pricingInlineField pricingInlineReadonly">
|
|
<span>{props.label}</span>
|
|
<strong>{props.value}</strong>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export function unitLabel(unit: string | undefined) {
|
|
const labels: Record<string, string> = {
|
|
image: '每张图片',
|
|
'5s': '每 5 秒',
|
|
second: '每秒',
|
|
item: '每次',
|
|
'1k_tokens': '每 1K Token',
|
|
character_1k: '每 1K 字符',
|
|
};
|
|
return labels[unit ?? ''] ?? unit ?? '-';
|
|
}
|
|
|
|
export function calculatorLabel(calculatorType: string | undefined) {
|
|
const labels: Record<string, string> = {
|
|
token_usage: '按 Token 用量',
|
|
unit_weight: '按数量和参数',
|
|
duration_weight: '按时长和参数',
|
|
formula: '按公式',
|
|
};
|
|
return labels[calculatorType ?? ''] ?? calculatorType ?? '-';
|
|
}
|
|
|
|
export function PricingFormulaNote(props: {
|
|
children: ReactNode;
|
|
}) {
|
|
return (
|
|
<div className="pricingFormulaBox">
|
|
<Calculator size={16} />
|
|
<div>
|
|
<strong>计费公式</strong>
|
|
<p>{props.children}</p>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|