wpmind/templates/tabs/budget.php
LinuxJoy cbe047fa2a style: 全页面设计统一 — 单色调 + GEO 风格标准化
以 GEO 页面为参考标准,统一所有页面的设计语言:
- 页面标题 14px + 18px primary 图标,section 标题 13px + 图标
- 卡片统一 gray-50 背景 + border,移除 box-shadow
- 统计卡片移除多色图标背景,统一 primary 单色
- 概览页 Hero 改为左侧强调线风格,移除大色块和水印图标
- 按钮基础样式统一(inline-flex + icon 对齐)
- 部署规则:每次 deploy 必须递增版本号

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-08 03:29:14 +08:00

157 lines
6.7 KiB
PHP

<?php
/**
* WPMind 预算管理 Tab
*
* 包含:预算限额 + 告警设置
*
* @package WPMind
* @since 2.0.0
*/
// 防止直接访问
defined( 'ABSPATH' ) || exit;
// 获取预算设置
$budget_manager = \WPMind\Modules\CostControl\BudgetManager::instance();
$budget_settings = $budget_manager->get_settings();
$budget_checker = \WPMind\Modules\CostControl\BudgetChecker::instance();
$budget_summary = $budget_checker->get_summary();
?>
<div class="wpmind-budget-panel">
<div class="wpmind-budget-header">
<h2 class="wpmind-budget-title">
<span class="dashicons ri-money-cny-circle-line"></span>
<?php esc_html_e( '预算管理', 'wpmind' ); ?>
</h2>
<?php if ( $budget_settings['enabled'] ) : ?>
<span class="wpmind-budget-status-badge wpmind-budget-enabled"><?php esc_html_e( '已启用', 'wpmind' ); ?></span>
<?php endif; ?>
</div>
<p class="wpmind-budget-desc">
<?php esc_html_e( '设置 AI 服务的费用限额和告警规则,控制成本支出。', 'wpmind' ); ?>
</p>
<div class="wpmind-budget-content">
<div class="wpmind-budget-toggle-row">
<label class="wpmind-toggle">
<input type="checkbox" id="wpmind_budget_enabled" name="budget_enabled" value="1" <?php checked( $budget_settings['enabled'] ); ?>>
<span class="wpmind-toggle-slider"></span>
<span class="wpmind-toggle-label"><?php esc_html_e( '启用预算限额', 'wpmind' ); ?></span>
</label>
<p class="description"><?php esc_html_e( '启用后,当费用达到设定限额时将触发告警或自动限制服务。', 'wpmind' ); ?></p>
</div>
<div class="wpmind-budget-settings" id="wpmind-budget-settings" style="<?php echo $budget_settings['enabled'] ? '' : 'display:none;'; ?>">
<!-- 全局限额 -->
<div class="wpmind-budget-section">
<h3>
<span class="dashicons ri-wallet-3-line"></span>
<?php esc_html_e( '全局限额', 'wpmind' ); ?>
</h3>
<div class="wpmind-budget-grid">
<div class="wpmind-budget-field">
<label for="budget_daily_usd"><?php esc_html_e( '每日 USD', 'wpmind' ); ?></label>
<div class="wpmind-budget-input-group">
<span class="wpmind-budget-currency">$</span>
<input type="number" id="budget_daily_usd" name="daily_limit_usd"
value="<?php echo esc_attr( $budget_settings['global']['daily_limit_usd'] ?? 0 ); ?>"
min="0" step="0.01" class="small-text">
</div>
</div>
<div class="wpmind-budget-field">
<label for="budget_monthly_usd"><?php esc_html_e( '每月 USD', 'wpmind' ); ?></label>
<div class="wpmind-budget-input-group">
<span class="wpmind-budget-currency">$</span>
<input type="number" id="budget_monthly_usd" name="monthly_limit_usd"
value="<?php echo esc_attr( $budget_settings['global']['monthly_limit_usd'] ?? 0 ); ?>"
min="0" step="0.01" class="small-text">
</div>
</div>
<div class="wpmind-budget-field">
<label for="budget_daily_cny"><?php esc_html_e( '每日 CNY', 'wpmind' ); ?></label>
<div class="wpmind-budget-input-group">
<span class="wpmind-budget-currency">¥</span>
<input type="number" id="budget_daily_cny" name="daily_limit_cny"
value="<?php echo esc_attr( $budget_settings['global']['daily_limit_cny'] ?? 0 ); ?>"
min="0" step="0.01" class="small-text">
</div>
</div>
<div class="wpmind-budget-field">
<label for="budget_monthly_cny"><?php esc_html_e( '每月 CNY', 'wpmind' ); ?></label>
<div class="wpmind-budget-input-group">
<span class="wpmind-budget-currency">¥</span>
<input type="number" id="budget_monthly_cny" name="monthly_limit_cny"
value="<?php echo esc_attr( $budget_settings['global']['monthly_limit_cny'] ?? 0 ); ?>"
min="0" step="0.01" class="small-text">
</div>
</div>
</div>
<p class="description"><?php esc_html_e( '设置为 0 表示不限制', 'wpmind' ); ?></p>
</div>
<!-- 告警设置 -->
<div class="wpmind-budget-section">
<h3>
<span class="dashicons ri-alarm-warning-line"></span>
<?php esc_html_e( '告警设置', 'wpmind' ); ?>
</h3>
<div class="wpmind-budget-row">
<div class="wpmind-budget-field">
<label for="budget_alert_threshold"><?php esc_html_e( '告警阈值', 'wpmind' ); ?></label>
<div class="wpmind-budget-input-group">
<input type="number" id="budget_alert_threshold" name="alert_threshold"
value="<?php echo esc_attr( $budget_settings['global']['alert_threshold'] ); ?>"
min="1" max="100" step="1" class="small-text">
<span class="wpmind-budget-suffix">%</span>
</div>
<p class="description"><?php esc_html_e( '当费用达到限额的此百分比时发送告警', 'wpmind' ); ?></p>
</div>
<div class="wpmind-budget-field">
<label for="budget_enforcement_mode"><?php esc_html_e( '超限处理', 'wpmind' ); ?></label>
<select id="budget_enforcement_mode" name="enforcement_mode">
<?php foreach ( \WPMind\Modules\CostControl\BudgetManager::get_mode_options() as $mode => $label ) : ?>
<option value="<?php echo esc_attr( $mode ); ?>" <?php selected( $budget_settings['enforcement_mode'] ?? 'alert', $mode ); ?>>
<?php echo esc_html( $label ); ?>
</option>
<?php endforeach; ?>
</select>
</div>
</div>
</div>
<!-- 通知设置 -->
<div class="wpmind-budget-section">
<h3>
<span class="dashicons ri-notification-3-line"></span>
<?php esc_html_e( '通知方式', 'wpmind' ); ?>
</h3>
<div class="wpmind-budget-checkboxes">
<label>
<input type="checkbox" name="admin_notice" value="1" <?php checked( $budget_settings['notifications']['admin_notice'] ); ?>>
<?php esc_html_e( '后台通知 - 在 WordPress 后台显示告警', 'wpmind' ); ?>
</label>
<label>
<input type="checkbox" name="email_alert" value="1" <?php checked( $budget_settings['notifications']['email_alert'] ); ?>>
<?php esc_html_e( '邮件通知 - 发送告警邮件', 'wpmind' ); ?>
</label>
<div class="wpmind-budget-email-field" style="<?php echo $budget_settings['notifications']['email_alert'] ? '' : 'display:none;'; ?>">
<input type="email" name="email_address"
value="<?php echo esc_attr( $budget_settings['notifications']['email_address'] ); ?>"
placeholder="<?php esc_attr_e( '告警邮箱地址', 'wpmind' ); ?>"
class="regular-text">
</div>
</div>
</div>
<!-- 保存按钮 -->
<div class="wpmind-budget-actions">
<button type="button" class="button button-primary" id="wpmind-save-budget">
<?php esc_html_e( '保存预算设置', 'wpmind' ); ?>
</button>
<span class="spinner"></span>
</div>
</div>
</div>
</div>