diff --git a/web/src/views/AccessResultCheck.vue b/web/src/views/AccessResultCheck.vue index fd65775..a2795e2 100644 --- a/web/src/views/AccessResultCheck.vue +++ b/web/src/views/AccessResultCheck.vue @@ -244,8 +244,12 @@ const fetchSnapshotStatus = async () => { const savePreview = async () => { savingPreview.value = true - try { await api.raw.post('/admin/sites/' + siteId + '/save-preview'); ElMessage.success('预览版已保存'); fetchSnapshotStatus() } - catch { ElMessage.error('保存预览版失败') } + try { + // 先自动保存脚本 + if (selectedConfig.value) { await api.adminConfigs.updateScript(selectedConfig.value.id, scriptContent.value); originalScript.value = scriptContent.value } + // 再拍快照 + await api.raw.post('/admin/sites/' + siteId + '/save-preview'); ElMessage.success('预览版已保存'); fetchSnapshotStatus() + } catch { ElMessage.error('保存预览版失败') } finally { savingPreview.value = false } } diff --git a/web/src/views/RiskRules.vue b/web/src/views/RiskRules.vue index 2a646be..ce257fa 100644 --- a/web/src/views/RiskRules.vue +++ b/web/src/views/RiskRules.vue @@ -393,8 +393,13 @@ const fetchSnapshotStatus = async () => { const savePreview = async () => { savingPreview.value = true - try { await api.raw.post('/admin/sites/' + editType.value + '/save-preview'); ElMessage.success('预览版已保存'); fetchSnapshotStatus() } - catch { ElMessage.error('保存预览版失败') } + try { + // 先自动保存风险规则 + await api.raw.post('/risk-rules/' + editType.value, { rules: parsed.value }) + originalJson.value = editorJson.value + // 再拍快照 + await api.raw.post('/admin/sites/' + editType.value + '/save-preview'); ElMessage.success('预览版已保存'); fetchSnapshotStatus() + } catch { ElMessage.error('保存预览版失败') } finally { savingPreview.value = false } } diff --git a/web/src/views/SitePages.vue b/web/src/views/SitePages.vue index eda20f8..face7e5 100644 --- a/web/src/views/SitePages.vue +++ b/web/src/views/SitePages.vue @@ -237,8 +237,16 @@ const fetchSnapshotStatus = async () => { const savePreview = async () => { savingPreview.value = true - try { await api.raw.post('/admin/sites/' + editSiteId.value + '/save-preview'); ElMessage.success('预览版已保存'); fetchSnapshotStatus() } - catch { ElMessage.error('保存预览版失败') } + try { + // 先自动保存页面配置 + const url = editSiteId.value.startsWith('default:') + ? '/admin/default-pages/' + editSiteId.value.replace('default:','') + : '/sites/' + editSiteId.value + '/pages' + await api.raw.put(url, { entries: parsed.value, authType: authType.value }) + originalJson.value = editorJson.value + // 再拍快照 + await api.raw.post('/admin/sites/' + editSiteId.value + '/save-preview'); ElMessage.success('预览版已保存'); fetchSnapshotStatus() + } catch { ElMessage.error('保存预览版失败') } finally { savingPreview.value = false } } diff --git a/web/src/views/Sites.vue b/web/src/views/Sites.vue index dff68fc..46ac1b4 100644 --- a/web/src/views/Sites.vue +++ b/web/src/views/Sites.vue @@ -182,6 +182,11 @@ const newSite = () => { const savePreview = async () => { savingPreview.value = true try { + // 先自动保存站点数据 + const s = JSON.parse(editorJson.value) + await api.raw.put('/sites/' + s.siteId, {names:s.names||[],urls:s.urls||[],tags:s.tags||[],description:s.description||'',siteType:s.siteType||'unknown',status:s.status||'active'}) + originalJson.value = editorJson.value + // 再拍快照 await api.raw.post('/admin/sites/' + editSiteId.value + '/save-preview') ElMessage.success('预览版已保存') fetchSnapshotStatus()