+
保存
取消
@@ -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 }