fix: 域能系统全量检查 — 修复 5 个逻辑/交互 Gap

- 修复 Admin 改名路径未扣域能(非审核路径补充 HasCompletedTask + DeductOnRename)
- 赋能按钮改为 Modal 弹窗(轻赋/重赋选择 + 每日上限提示)
- EnergyInfo API 增加 daily_energize_exp/daily_exp_cap_reached 返回值
- "我的域能" TAB 增加经验值和等级展示
- Energize 事务修复:导出 EnergyStore + WithTx 方法确保 DB 操作原子性
- Studio 写文章页新增 LV0 锁止横幅 + 禁用提交按钮
This commit is contained in:
2026-06-01 12:10:16 +08:00
parent e1d7c318ab
commit 6542d1e055
10 changed files with 325 additions and 44 deletions

View File

@ -159,7 +159,7 @@
<div class="settings-card">
<div class="settings-card-header">
<h2>我的域能</h2>
<p class="settings-card-desc">域能流水和余额</p>
<p class="settings-card-desc">域能余额和经验</p>
</div>
<div class="settings-card-body">
<div class="energy-summary">
@ -167,6 +167,14 @@
<span class="energy-label">域能余额</span>
<span class="energy-value" id="energyBalance">加载中...</span>
</div>
<div class="energy-stat">
<span class="energy-label">经验</span>
<span class="energy-value" id="energyExp">加载中...</span>
</div>
<div class="energy-stat">
<span class="energy-label">等级</span>
<span class="energy-value" id="energyLevel">加载中...</span>
</div>
</div>
<div class="energy-log-list" id="energyLogList">
<div class="energy-log-empty">加载中...</div>
@ -899,6 +907,8 @@
// ===== 域能 Tab =====
(function () {
var balanceEl = document.getElementById('energyBalance');
var expEl = document.getElementById('energyExp');
var levelEl = document.getElementById('energyLevel');
var logListEl = document.getElementById('energyLogList');
if (!balanceEl || !logListEl) return;
@ -914,6 +924,25 @@
})
.catch(function () { balanceEl.textContent = '获取失败'; });
// 获取经验和等级
if (expEl && levelEl) {
fetch('/api/level/info')
.then(function (r) { return r.json(); })
.then(function (d) {
if (d.success && d.data) {
expEl.textContent = d.data.exp;
levelEl.textContent = 'Lv' + d.data.level;
} else {
expEl.textContent = '获取失败';
levelEl.textContent = '获取失败';
}
})
.catch(function () {
expEl.textContent = '获取失败';
levelEl.textContent = '获取失败';
});
}
// 获取域能流水
fetch('/api/energy/logs?days=7&page=1&page_size=50')
.then(function (r) { return r.json(); })