feat: support both site-level and type-level risk rule storage
List shows source column: site-level or type-level Fallback: siteId rule first, then siteType rule Save always creates site-level entry; load falls back to type-level if none exists
This commit is contained in:
@@ -11,6 +11,9 @@
|
|||||||
<template #default="s">{{ (s.row.names||[]).join('/') || '-' }}</template>
|
<template #default="s">{{ (s.row.names||[]).join('/') || '-' }}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="siteType" label="类型" width="100" />
|
<el-table-column prop="siteType" label="类型" width="100" />
|
||||||
|
<el-table-column label="来源" width="80" align="center">
|
||||||
|
<template #default="s">{{ s.row.source || '—' }}</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column label="规则数" width="80" align="center">
|
<el-table-column label="规则数" width="80" align="center">
|
||||||
<template #default="s"><el-tag size="small">{{ s.row.ruleCount || 0 }}</el-tag></template>
|
<template #default="s"><el-tag size="small">{{ s.row.ruleCount || 0 }}</el-tag></template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@@ -332,11 +335,16 @@ const ruleText = (r) => {
|
|||||||
}
|
}
|
||||||
return `${typeLabel(r.type)}:${val} → <span style="color:#f56c6c;font-weight:500">封号/删除账号</span>${appText}`
|
return `${typeLabel(r.type)}:${val} → <span style="color:#f56c6c;font-weight:500">封号/删除账号</span>${appText}`
|
||||||
}
|
}
|
||||||
const merged = computed(() => (Array.isArray(sites.value)?sites.value:[]).map(s => ({
|
const merged = computed(() => (Array.isArray(sites.value)?sites.value:[]).map(s => {
|
||||||
siteId: s.siteId, names: s.names, siteType: s.siteType,
|
// 优先站点级,兜底类型级
|
||||||
ruleCount: rulesMap.value[s.siteId]?.ruleCount || 0, version: rulesMap.value[s.siteId]?.version || null,
|
const entry = rulesMap.value[s.siteId] || rulesMap.value[s.siteType] || {}
|
||||||
updatedAt: rulesMap.value[s.siteId]?.updatedAt || null, rulesJson: rulesMap.value[s.siteId]?.rulesJson || null,
|
return {
|
||||||
})))
|
siteId: s.siteId, names: s.names, siteType: s.siteType,
|
||||||
|
ruleCount: entry.ruleCount || 0, version: entry.version || null,
|
||||||
|
updatedAt: entry.updatedAt || null, rulesJson: entry.rulesJson || null,
|
||||||
|
source: rulesMap.value[s.siteId] ? '站点级' : entry.ruleCount ? '类型级' : null,
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
|
||||||
// ============ 数据操作 ============
|
// ============ 数据操作 ============
|
||||||
const fetchAll = async () => {
|
const fetchAll = async () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user