From b286f733dc05716066da01aa30401e04e2d616e4 Mon Sep 17 00:00:00 2001 From: mediabot-pt <295750538+mediabot-pt@users.noreply.github.com> Date: Sun, 5 Jul 2026 22:50:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=A1=B5=E9=9D=A2=E9=85=8D=E7=BD=AE+?= =?UTF-8?q?=E9=A3=8E=E9=99=A9=E8=A7=84=E5=88=99=E5=8F=B3=E4=BE=A7=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=8F=AF=E7=BC=96=E8=BE=91=E8=A1=A8=E6=A0=BC=E5=8F=8C?= =?UTF-8?q?=E5=90=91=E5=90=8C=E6=AD=A5JSON=E7=BC=96=E8=BE=91=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/views/RiskRules.vue | 38 +++++++++++++++++++++++++------------ web/src/views/SitePages.vue | 28 +++++++++++++++++++-------- 2 files changed, 46 insertions(+), 20 deletions(-) diff --git a/web/src/views/RiskRules.vue b/web/src/views/RiskRules.vue index 4a690cf..48a7a59 100644 --- a/web/src/views/RiskRules.vue +++ b/web/src/views/RiskRules.vue @@ -43,20 +43,34 @@
-
该类型暂无规则
- +
双向可视化
+ - + - - - - + + - - + + + + + + + + + + + + + + + + + +
该类型暂无规则
+ 添加
@@ -69,8 +83,6 @@ import api from '../api'; import { Refresh } from '@element-plus/icons-vue' const loading = ref(false), saving = ref(false), sites = ref([]), rulesMap = ref({}) const editType = ref(''), editorJson = ref('[]') const fmt = (t) => t ? (t.substring(0,19)||'').replace('T',' ') : '-' -const condText = (c) => ({GT:'>',LT:'<',GTE:'>=',LTE:'<=',EQ:'='})[c]||c -const appText = (r) => r.applicable ? Object.entries(r.applicable).map(([k,v])=>k+'>='+v).join(', ') : null const parsed = computed(() => { try { return JSON.parse(editorJson.value) } catch { return [] } }) const merged = computed(() => (Array.isArray(sites.value)?sites.value:[]).map(s => ({ siteId: s.siteId, names: s.names, siteType: s.siteType, @@ -98,7 +110,9 @@ const editRule = async (row) => { try { const r = await api.raw.get('/admin/risk-rules/'+row.siteType); editorJson.value = (r?.data||r)?.rules ? JSON.stringify((r.data||r).rules, null, 2) : '[]' } catch { editorJson.value = '[]' } } -const addRule = () => { parsed.value.push({type:'TRAFFIC',name:'',metric:'',threshold:0,unit:'DAY',condition:'GT',level:'WARN'}); editorJson.value = JSON.stringify(parsed.value, null, 2) } +const sync = () => { editorJson.value = JSON.stringify(parsed.value, null, 2) } +const remove = (idx) => { parsed.value.splice(idx,1); sync() } +const addRule = () => { parsed.value.push({type:'TRAFFIC',name:'',metric:'',threshold:0,unit:'DAY',condition:'GT',level:'WARN'}); sync() } const saveRules = async () => { saving.value = true try { await api.raw.post('/risk-rules/'+editType.value, { rules: parsed.value }); ElMessage.success('已保存'); editType.value=''; fetchAll() } diff --git a/web/src/views/SitePages.vue b/web/src/views/SitePages.vue index 1f047be..6bb7915 100644 --- a/web/src/views/SitePages.vue +++ b/web/src/views/SitePages.vue @@ -42,15 +42,25 @@
-
暂无页面入口
- - - - - - +
双向可视化
+ + + + + + + + + + + + + + + +
暂无页面入口
+ 添加
@@ -93,7 +103,9 @@ const editPage = async (row) => { catch { editorJson.value = '[]' } } -const addEntry = () => { parsed.value.push({key:'',label:'',url:'{base}',method:'GET'}); editorJson.value = JSON.stringify(parsed.value, null, 2) } +const syncToJson = () => { editorJson.value = JSON.stringify(parsed.value, null, 2) } +const remove = (idx) => { parsed.value.splice(idx,1); syncToJson() } +const addEntry = () => { parsed.value.push({key:'',label:'',url:'{base}',method:'GET'}); syncToJson() } const savePages = async () => { saving.value = true try { await api.raw.put('/sites/'+editSiteId.value+'/pages', { entries: parsed.value }); ElMessage.success('已保存'); editSiteId.value=''; fetchAll() }