feat: 配置中心-版本历史(列表/两版对比/回滚/组级重置出厂)
Task 7d——Phase 3 配置中心四连收尾:
- API(api/config.ts):fetchConfigVersions / fetchConfigVersionDetail /
rollbackConfig / resetConfigGroup 四函数补齐(骨架端点与类型已就位;
响应形态对照 config_routes 实测——列表无 config 本体、详情整份+掩码、
reset 响应与 PUT 分组保存同形)
- VersionsPane:版本 tab 实装(导航占位转正)——列表倒序(版本/时间/
作者/备注,当前版标记)+ 详情抽屉整份 JSON;勾两版(限两个,第三个
自动撤销最早勾选行)并排等宽 JSON 对比(spec §7.3 最低形态,范围
下拉可聚焦单组——wall 20KB+ 场景);回滚确认框明示「将产生新版本,
历史不变」→ 响应内新快照直接回写页头版本/快照/品牌表单,无需再 GET
- 组级重置出厂:六个已实装编辑卡(品牌/提示词/词表/邮件/推送/AI)头部
危险色小按钮 → reset.ts 共用确认入口(明示组名与「恢复出厂档案值」)
→ POST config/{group}/reset → 表单/密钥态/版本刷新(RESET_GROUP_
LABELS 九组镜像后端 CONFIG_GROUPS,含待实装的联系方式/引擎/杂项)
- 测试:vitest 120(+13——API 四函数调用形态 5 条 + model 辅助 8 条);
后端不动 595;冒烟 jiancai:v1-v10 列表 → v1/v10 并排对比(push 组
__SET__ 掩码可见)→ 回滚 v1 产 v11 且品牌回 v1 值 → 改占位存 v12 →
重置品牌产 v13 表单回档案值 → 回滚 v10 复原现场(v14)
Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,8 @@
|
||||
- 保存链:保存词表前自动先跑一次试金石(当前表单值预演)——有
|
||||
blocked/replaced 时二次确认「判定符合预期再保存」;PUT config/wall
|
||||
整组提交;正则编译错误 400 的字段路径展示在内联错误区;版本 +1 提示
|
||||
- 重置出厂(Task 7d):头部危险色小按钮 → 确认框 → POST config/wall/reset
|
||||
→ emit saved 回写快照组 → watch 重建编辑模型 = 出厂档案墙
|
||||
-->
|
||||
<template>
|
||||
<div class="wall-pane">
|
||||
@@ -18,7 +20,18 @@
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span class="card-title">安全词表(wall 组 · 整组替换)</span>
|
||||
<span class="card-sub">保存即写新版本并热生效;保存前自动跑试金石</span>
|
||||
<div class="header-side">
|
||||
<span class="card-sub">保存即写新版本并热生效;保存前自动跑试金石</span>
|
||||
<ElButton
|
||||
size="small"
|
||||
type="danger"
|
||||
plain
|
||||
:loading="resetting"
|
||||
@click="onReset"
|
||||
>
|
||||
重置出厂
|
||||
</ElButton>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -332,6 +345,7 @@
|
||||
type PoolField,
|
||||
type WallEditModel
|
||||
} from './model'
|
||||
import { confirmAndResetGroup } from './reset'
|
||||
|
||||
defineOptions({ name: 'WallPane' })
|
||||
|
||||
@@ -643,6 +657,26 @@
|
||||
saving.value = false
|
||||
}
|
||||
}
|
||||
|
||||
// ---- 重置出厂(Task 7d:确认 → POST reset → emit saved 回写快照组 →
|
||||
// group 引用变化触发上方 watch 重建编辑模型 = 出厂档案墙) --------------------------
|
||||
|
||||
const resetting = ref(false)
|
||||
|
||||
async function onReset(): Promise<void> {
|
||||
if (resetting.value) return
|
||||
resetting.value = true
|
||||
try {
|
||||
const res = await confirmAndResetGroup(props.slug, 'wall')
|
||||
if (!res) return // 用户取消确认
|
||||
ElMessage.success(`词表已重置出厂(版本 v${res.version},热生效)`)
|
||||
emit('saved', { version: res.version, group: 'wall', config: res.config })
|
||||
} catch (error) {
|
||||
actionError.value = error instanceof Error ? error.message : '重置失败'
|
||||
} finally {
|
||||
resetting.value = false
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
@@ -673,6 +707,14 @@
|
||||
font-size: 12px;
|
||||
color: var(--art-gray-400);
|
||||
}
|
||||
|
||||
// 头部右列:副标题 + 重置出厂小按钮(Task 7d)
|
||||
.header-side {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user