feat(portal): add logical group packaging config

This commit is contained in:
phamnazage-jpg
2026-05-30 10:54:32 +08:00
parent aac18e0df6
commit ef33762db5
10 changed files with 300 additions and 41 deletions

View File

@@ -545,6 +545,36 @@
<textarea id="group-next-step-hint" placeholder="例如:先创建测试 Key再按推荐模型发起第一次请求。"></textarea>
</label>
</div>
<div class="field-grid two" style="margin-top:12px;">
<label>
visibility_scope
<select id="group-visibility-scope">
<option value="public">public</option>
<option value="login_required">login_required</option>
<option value="entitled_only">entitled_only</option>
<option value="hidden">hidden</option>
</select>
</label>
<label>
package_tier
<select id="group-package-tier">
<option value="free">free</option>
<option value="standard">standard</option>
<option value="pro">pro</option>
<option value="enterprise">enterprise</option>
</select>
</label>
</div>
<div class="field-grid two" style="margin-top:12px;">
<label>
purchase_cta_label
<input id="group-purchase-cta-label" type="text" placeholder="例如:升级到 Pro">
</label>
<label>
purchase_cta_url
<input id="group-purchase-cta-url" type="text" placeholder="例如https://sub.tksea.top/portal/upgrade/pro">
</label>
</div>
<div class="actions">
<button class="primary" id="create-group-btn" type="button">创建分组</button>
<button class="secondary" id="update-group-btn" type="button">更新分组</button>
@@ -708,6 +738,10 @@
const groupUsageScenarioInput = document.getElementById("group-usage-scenario");
const groupRecommendationInput = document.getElementById("group-recommendation");
const groupNextStepHintInput = document.getElementById("group-next-step-hint");
const groupVisibilityScopeInput = document.getElementById("group-visibility-scope");
const groupPackageTierInput = document.getElementById("group-package-tier");
const groupPurchaseCTALabelInput = document.getElementById("group-purchase-cta-label");
const groupPurchaseCTAURLInput = document.getElementById("group-purchase-cta-url");
const groupRoutePolicyInput = document.getElementById("group-route-policy");
const groupStickyModeInput = document.getElementById("group-sticky-mode");
const groupConversationTTLInput = document.getElementById("group-conversation-ttl");
@@ -888,6 +922,10 @@
usage_scenario: groupUsageScenarioInput.value.trim(),
recommendation: groupRecommendationInput.value.trim(),
next_step_hint: groupNextStepHintInput.value.trim(),
visibility_scope: groupVisibilityScopeInput.value,
package_tier: groupPackageTierInput.value,
purchase_cta_label: groupPurchaseCTALabelInput.value.trim(),
purchase_cta_url: groupPurchaseCTAURLInput.value.trim(),
route_policy: groupRoutePolicyInput.value,
sticky_mode: groupStickyModeInput.value,
conversation_ttl_seconds: Number(groupConversationTTLInput.value || "0"),
@@ -919,6 +957,10 @@
groupUsageScenarioInput.value = group?.usage_scenario || "";
groupRecommendationInput.value = group?.recommendation || "";
groupNextStepHintInput.value = group?.next_step_hint || "";
groupVisibilityScopeInput.value = group?.visibility_scope || "public";
groupPackageTierInput.value = group?.package_tier || "standard";
groupPurchaseCTALabelInput.value = group?.purchase_cta_label || "";
groupPurchaseCTAURLInput.value = group?.purchase_cta_url || "";
groupRoutePolicyInput.value = group?.route_policy || "priority";
groupStickyModeInput.value = group?.sticky_mode || "conversation_preferred";
groupConversationTTLInput.value = String(group?.conversation_ttl_seconds || 7200);