feat: 编辑器增加「重置」和「丢弃预览版」按钮,支持回退预览版快照

This commit is contained in:
mediabot-pt
2026-07-07 13:12:19 +08:00
parent e99de15703
commit 6505f621d1
8 changed files with 108 additions and 4 deletions

View File

@@ -53,9 +53,11 @@
</div>
<div style="display:flex;gap:8px">
<el-button size="small" type="primary" @click="savePages" :loading="saving">保存</el-button>
<el-button v-if="hasUnsavedChanges" size="small" @click="resetEditor" type="warning">重置</el-button>
<el-button size="small" @click="uploadPages" :loading="uploading">上传</el-button>
<el-button v-if="!isDefaultEditor && snapshotStatus" size="small" @click="savePreview" :loading="savingPreview">保存预览版</el-button>
<el-button v-if="!isDefaultEditor && snapshotStatus?.draft.exists" size="small" type="success" @click="publishSnapshot" :loading="publishing">发布正式版</el-button>
<el-button v-if="!isDefaultEditor && snapshotStatus?.draft.exists" size="small" type="danger" @click="discardDraft" :loading="discardingDraft">丢弃预览版</el-button>
<el-button size="small" type="danger" @click="deletePages" :loading="deleting">删除</el-button>
<el-button size="small" @click="editSiteId=''">返回列表</el-button>
</div>
@@ -122,7 +124,7 @@
<script setup>
import api from '../api'; import { Refresh } from '@element-plus/icons-vue'
const loading = ref(false), saving = ref(false), uploading = ref(false), deleting = ref(false), savingPreview = ref(false), publishing = ref(false)
const loading = ref(false), saving = ref(false), uploading = ref(false), deleting = ref(false), savingPreview = ref(false), publishing = ref(false), discardingDraft = ref(false)
const sites = ref([]), pagesMap = ref({}), sitesList = ref([])
const editSiteId = ref(''), editorJson = ref('{}'), originalJson = ref('')
const snapshotStatus = ref(null)
@@ -247,6 +249,22 @@ const publishSnapshot = async () => {
finally { publishing.value = false }
}
const resetEditor = () => {
editorJson.value = originalJson.value
ElMessage.success('已重置到上次保存的状态')
}
const discardDraft = async () => {
try { await ElMessageBox.confirm('确认丢弃预览版?将回退到正式版。', '丢弃预览版', {confirmButtonText:'确认丢弃',type:'warning'}) } catch { return }
discardingDraft.value = true
try {
await api.raw.post('/admin/sites/' + editSiteId.value + '/discard-draft')
ElMessage.success('预览版已丢弃,当前为正式版')
fetchSnapshotStatus()
} catch { ElMessage.error('丢弃预览版失败') }
finally { discardingDraft.value = false }
}
const remove = (idx) => { parsed.value.splice(idx,1); syncToJson() }
const addEntry = () => { parsed.value.push({key:'',method:'GET',url:'{base}'}); syncToJson() }
const deletePages = async () => {