ai去特征增加开关

This commit is contained in:
2026-07-10 00:13:09 +08:00
parent 6d6bd2a638
commit 6a3588b35b
4 changed files with 40 additions and 8 deletions
+10 -4
View File
@@ -121,7 +121,7 @@ const credits = reactive({ checkin_enabled: true, checkin_reward: 3, invite_enab
const credBusy = ref(false); const credSaved = ref(false)
// ---- deai (去AI特征 附加价格) ----
const deaiCfg = reactive({ price_1k: 1, price_2k: 2, price_4k: 3 })
const deaiCfg = reactive({ enabled: false, price_1k: 1, price_2k: 2, price_4k: 3 })
const deaiBusy = ref(false); const deaiSaved = ref(false)
async function loadDeai() {
const r = await api('/settings/deai')
@@ -130,6 +130,7 @@ async function loadDeai() {
async function saveDeai() {
deaiBusy.value = true; deaiSaved.value = false
const r = await api('/settings/deai', jsonBody('PUT', {
enabled: !!deaiCfg.enabled,
price_1k: Number(deaiCfg.price_1k) || 0,
price_2k: Number(deaiCfg.price_2k) || 0,
price_4k: Number(deaiCfg.price_4k) || 0,
@@ -489,14 +490,18 @@ onMounted(() => { loadSite(); loadReg(); loadSmtp(); loadCredits(); loadAnnounce
<p class="text-xs text-slate-400 mb-4">画图台开启去AI特征,按画质档位在模型价格之上额外扣除的积分仅对图片生成生效</p>
<div class="space-y-3">
<label class="row">
<span><span class="lbl">开启去AI特征</span><span class="hint">关闭后画图台不显示该选项,也不会加价默认关闭</span></span>
<input type="checkbox" v-model="deaiCfg.enabled" class="sw" />
</label>
<label class="row" :class="!deaiCfg.enabled && 'opacity-50'">
<span><span class="lbl">1K 附加价格</span><span class="hint">默认 1 积分</span></span>
<input type="number" min="0" v-model.number="deaiCfg.price_1k" class="num" />
</label>
<label class="row">
<label class="row" :class="!deaiCfg.enabled && 'opacity-50'">
<span><span class="lbl">2K 附加价格</span><span class="hint">默认 2 积分</span></span>
<input type="number" min="0" v-model.number="deaiCfg.price_2k" class="num" />
</label>
<label class="row">
<label class="row" :class="!deaiCfg.enabled && 'opacity-50'">
<span><span class="lbl">4K 附加价格</span><span class="hint">默认 3 积分</span></span>
<input type="number" min="0" v-model.number="deaiCfg.price_4k" class="num" />
</label>
@@ -678,7 +683,8 @@ html.dark .num, html.dark .txt, html.dark .field {
box-shadow: 0 0 0 3px rgb(167 139 250 / 0.15);
}
.num:disabled, .txt:disabled, .field:disabled { opacity: 0.45; cursor: not-allowed; }
.num { width: 6rem; padding: 0.4rem 0.55rem; font-size: 0.8rem; text-align: right; }
.num { width: 6rem; padding: 0.4rem 0.55rem; font-size: 0.8rem; text-align: right; -moz-appearance: textfield; appearance: textfield; }
.num::-webkit-outer-spin-button, .num::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.txt { width: 16rem; max-width: 60%; padding: 0.4rem 0.65rem; font-size: 0.8rem; }
.field { width: 100%; padding: 0.55rem 0.75rem; font-size: 0.85rem; }
+5 -4
View File
@@ -139,7 +139,8 @@ function tierPrice(normalMap, agentMap, key) {
return Number(n)
}
// 去AI特征 per-tier surcharge (loaded from /deai-pricing; defaults 1/2/3 分).
const deaiPricing = ref({ price_1k: 1, price_2k: 2, price_4k: 3 })
const deaiPricing = ref({ enabled: false, price_1k: 1, price_2k: 2, price_4k: 3 })
const deaiEnabled = computed(() => !!deaiPricing.value.enabled)
const deaiSurcharge = computed(() => {
const key = { '1K': 'price_1k', '2K': 'price_2k', '4K': 'price_4k' }[resolution.value] || 'price_1k'
return Number(deaiPricing.value[key] ?? 0)
@@ -155,7 +156,7 @@ const price = computed(() => {
}
const base = tierPrice(m.prices, m.prices_agent, resolution.value)
if (base == null) return null
return base + (deai.value ? deaiSurcharge.value : 0)
return base + (deaiEnabled.value && deai.value ? deaiSurcharge.value : 0)
})
const priceLabel = computed(() => price.value == null ? '—' : pointsLabel(price.value))
const canAfford = computed(() => price.value == null || credits.value >= price.value)
@@ -402,7 +403,7 @@ async function fireOne() {
ratio: ratio.value,
resolution: resolution.value,
duration: mode.value === 'video' ? duration.value : '',
deai: mode.value === 'image' ? deai.value : false,
deai: mode.value === 'image' && deaiEnabled.value ? deai.value : false,
status: 'pending',
url: '',
error: '',
@@ -697,7 +698,7 @@ onUnmounted(() => {
</div>
<!-- 去AI特征 (image only): opt-in post-processing with a per-tier surcharge -->
<div v-if="mode === 'image'" class="flex items-center justify-between">
<div v-if="mode === 'image' && deaiEnabled" class="flex items-center justify-between">
<label class="text-xs font-medium text-slate-500">
去AI特征
<span class="text-slate-400 font-normal">(+{{ deaiSurcharge }} 积分)</span>