diff --git a/web/src/views/RiskRules.vue b/web/src/views/RiskRules.vue index be8581b..2f06c4f 100644 --- a/web/src/views/RiskRules.vue +++ b/web/src/views/RiskRules.vue @@ -52,30 +52,11 @@
编辑: {{ editSiteId }} ({{ editSiteType }}) 修改会影响所有 {{ editSiteType }} 类型的站点 - - 表格 - JSON -
- -
+
-
+
保存 取消
@@ -95,8 +76,7 @@ import api from '../api' const loading = ref(false), saving = ref(false), viewVisible = ref(false), viewType = ref(''), viewJson = ref('') const sites = ref([]), rulesMap = ref({}) -const editSiteId = ref(''), editSiteType = ref(''), editorMode = ref('table'), editorJson = ref('') -const editingRules = ref([]) +const editSiteId = ref(''), editSiteType = ref(''), editorJson = ref('') const defaultRules = { nexusphp: [ @@ -120,11 +100,6 @@ const defaults = computed(() => { const fmt = (t) => t ? (t.substring(0,19)||'').replace('T',' ') : '-' -watch(editorMode, (m) => { - if (m === 'json') editorJson.value = JSON.stringify(editingRules.value, null, 2) - else { try { editingRules.value = JSON.parse(editorJson.value) } catch {} } -}) - const merged = computed(() => { return (Array.isArray(sites.value)?sites.value:[]).map(s => ({ siteId: s.siteId, @@ -164,17 +139,15 @@ const viewDefault = (dt) => { const editDefault = (dt) => { editSiteId.value = dt.type editSiteType.value = dt.type - editingRules.value = JSON.parse(JSON.stringify(dt.rules)) - editorMode.value = 'table' + editorJson.value = JSON.stringify(dt.rules, null, 2) window.scrollTo({top: document.body.scrollHeight, behavior:'smooth'}) } const loadDefaultRules = (row) => { editSiteId.value = row.siteId editSiteType.value = row.siteType - editingRules.value = JSON.parse(JSON.stringify(defaultRules[row.siteType] || defaultRules['nexusphp'] || [])) - if (editingRules.value.length === 0) editingRules.value.push({type:'KILL',name:'',metric:'',threshold:0,unit:'DAY',condition:'GT',level:'CRITICAL'}) - editorMode.value = 'table' + const rules = defaultRules[row.siteType] || defaultRules['nexusphp'] || [] + editorJson.value = JSON.stringify(rules, null, 2) window.scrollTo({top: document.body.scrollHeight, behavior:'smooth'}) } @@ -182,17 +155,14 @@ const startEdit = (row) => { if (editSiteId.value === row.siteId) { editSiteId.value = ''; return } editSiteId.value = row.siteId editSiteType.value = row.siteType - editorMode.value = 'table' - try { editingRules.value = JSON.parse(JSON.stringify(JSON.parse(row.rulesJson||'[]'))) } - catch { editingRules.value = [] } - if (editingRules.value.length===0) editingRules.value.push({type:'KILL',name:'',metric:'',threshold:0,unit:'DAY',condition:'GT',level:'CRITICAL'}) + try { editorJson.value = JSON.stringify(JSON.parse(row.rulesJson||'[]'), null, 2) } + catch { editorJson.value = '[]' } } const saveRules = async () => { saving.value = true try { - const rules = editorMode.value==='json' ? JSON.parse(editorJson.value) : editingRules.value - await api.raw.post('/risk-rules/'+editSiteType.value, { rules }) + await api.raw.post('/risk-rules/'+editSiteType.value, { rules: JSON.parse(editorJson.value) }) ElMessage.success('已保存'); editSiteId.value = ''; fetchAll() } catch { ElMessage.error('保存失败') } finally { saving.value = false } diff --git a/web/src/views/SitePages.vue b/web/src/views/SitePages.vue index ec55701..a83a275 100644 --- a/web/src/views/SitePages.vue +++ b/web/src/views/SitePages.vue @@ -50,25 +50,11 @@
编辑: {{ editSiteId }} - - 表格 - JSON -
- -
+
-
+
保存 取消
@@ -88,8 +74,7 @@ import api from '../api' const loading = ref(false), saving = ref(false) const sites = ref([]), pagesMap = ref({}) -const editSiteId = ref(''), editorMode = ref('table'), editorJson = ref('') -const editingEntries = ref([]) +const editSiteId = ref(''), editorJson = ref('') const defaultPages = { nexusphp: [ @@ -121,11 +106,6 @@ const defaults = computed(() => { const fmt = (t) => t ? (t.substring(0,19)||'').replace('T',' ') : '-' -watch(editorMode, (m) => { - if (m === 'json') editorJson.value = JSON.stringify(editingEntries.value, null, 2) - else { try { editingEntries.value = JSON.parse(editorJson.value) } catch {} } -}) - const merged = computed(() => { return (Array.isArray(sites.value)?sites.value:[]).map(s => ({ siteId: s.siteId, @@ -157,17 +137,13 @@ const fetchAll = async () => { const loadDefault = (row) => { editSiteId.value = row.siteId - editingEntries.value = JSON.parse(JSON.stringify(defaultPages[row.siteType] || defaultPages['nexusphp'])) - if (editingEntries.value.length === 0) editingEntries.value.push({key:'home',label:'首页',url:'{base}',method:'GET'}) - editorMode.value = 'table' + editorJson.value = JSON.stringify(defaultPages[row.siteType] || defaultPages['nexusphp'], null, 2) window.scrollTo({top: document.body.scrollHeight, behavior:'smooth'}) } const editDefault = (dt) => { editSiteId.value = dt.type - editingEntries.value = JSON.parse(JSON.stringify(dt.entries)) - if (editingEntries.value.length === 0) editingEntries.value.push({key:'home',label:'首页',url:'{base}',method:'GET'}) - editorMode.value = 'table' + editorJson.value = JSON.stringify(dt.entries, null, 2) window.scrollTo({top: document.body.scrollHeight, behavior:'smooth'}) } @@ -182,17 +158,14 @@ const previewDefault = (dt) => { const toggleEdit = (row) => { if (editSiteId.value === row.siteId) { editSiteId.value = ''; return } editSiteId.value = row.siteId - editorMode.value = 'table' - try { editingEntries.value = JSON.parse(JSON.stringify(JSON.parse(row.entriesJson||'[]'))) } - catch { editingEntries.value = [{key:'home',label:'首页',url:'{base}',method:'GET'}] } - if (editingEntries.value.length===0) editingEntries.value.push({key:'home',label:'首页',url:'{base}',method:'GET'}) + try { editorJson.value = JSON.stringify(JSON.parse(row.entriesJson||'[]'), null, 2) } + catch { editorJson.value = JSON.stringify([{key:'home',label:'首页',url:'{base}',method:'GET'}], null, 2) } } const savePages = async () => { saving.value = true try { - const entries = editorMode.value==='json' ? JSON.parse(editorJson.value) : editingEntries.value - await api.raw.put('/sites/'+editSiteId.value+'/pages', { entries }) + await api.raw.put('/sites/'+editSiteId.value+'/pages', { entries: JSON.parse(editorJson.value) }) ElMessage.success('已保存'); editSiteId.value = ''; fetchAll() } catch { ElMessage.error('保存失败') } finally { saving.value = false }