diff --git a/apps/admin-web/src/pages/AdminEditorGenerationModel3dPricingSection.tsx b/apps/admin-web/src/pages/AdminEditorGenerationModel3dPricingSection.tsx
index 569890a1e..9530bd7e1 100644
--- a/apps/admin-web/src/pages/AdminEditorGenerationModel3dPricingSection.tsx
+++ b/apps/admin-web/src/pages/AdminEditorGenerationModel3dPricingSection.tsx
@@ -1,4 +1,7 @@
-import type { EditorGenerationModel3dPricingPayload } from '../api/adminApiTypes';
+import type {
+ EditorGenerationModel3dPricingPayload,
+ EditorGenerationModel3dVersionPricePayload,
+} from '../api/adminApiTypes';
import {
EDITOR_MODEL3D_ENDPOINT_SECTIONS,
editorModel3dAddOnLabel,
@@ -6,6 +9,18 @@ import {
updateEditorModel3dEndpointPricing,
} from './adminEditorGenerationPricing';
+/**
+ * 一个模型版本的两个底价字段。两栏只有字段键与展示名不同,用描述表驱动渲染,
+ * 避免两段近乎相同的 JSX 各自演化。
+ */
+const VERSION_PRICE_FIELDS = [
+ { key: 'noTexture', label: '无贴图' },
+ { key: 'texture', label: '带贴图' },
+] as const satisfies ReadonlyArray<{
+ key: keyof EditorGenerationModel3dVersionPricePayload;
+ label: string;
+}>;
+
interface AdminEditorGenerationModel3dPricingSectionProps {
model3d: EditorGenerationModel3dPricingPayload;
onChange: (next: EditorGenerationModel3dPricingPayload) => void;
@@ -51,54 +66,34 @@ export function AdminEditorGenerationModel3dPricingSection({
{version}
-
-
+ {VERSION_PRICE_FIELDS.map(
+ ({ key: field, label: fieldLabel }) => (
+
+ ),
+ )}
),
)}