refactor(audit): split list detail flows

This commit is contained in:
caoxiaozhu
2026-05-29 09:44:03 +08:00
parent 064eeb614f
commit 99e90798d2
28 changed files with 2636 additions and 2142 deletions

View File

@@ -0,0 +1,101 @@
import {
fetchAgentAssetRuleJson,
saveAgentAssetRuleJson
} from '../../services/agentAssets.js'
import {
applyRiskRuleJsonState,
resolveRiskRuleDescription
} from './auditViewModel.js'
function readJsonPayload(payload) {
return payload?.payload && typeof payload.payload === 'object' ? payload.payload : payload
}
function downloadTextFile({ content, fileName, type }) {
const blob = new Blob([content], { type })
const objectUrl = URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = objectUrl
link.download = fileName
link.click()
URL.revokeObjectURL(objectUrl)
}
export function useAuditRiskRuleJsonEditor({
selectedSkill,
canEditMarkdown,
actionState,
toast
}) {
async function loadRiskRuleJson(assetId) {
if (!assetId || !selectedSkill.value?.usesJsonRiskRule) {
return
}
const payload = await fetchAgentAssetRuleJson(assetId)
selectedSkill.value = applyRiskRuleJsonState(
selectedSkill.value,
readJsonPayload(payload),
payload
)
}
async function saveRiskRuleJson() {
if (!selectedSkill.value?.id || !canEditMarkdown.value) {
return
}
actionState.value = 'save-risk-json'
try {
const parsed = JSON.parse(String(selectedSkill.value.riskRuleJsonText || '{}'))
const saved = await saveAgentAssetRuleJson(selectedSkill.value.id, { payload: parsed })
selectedSkill.value = applyRiskRuleJsonState(
selectedSkill.value,
readJsonPayload(saved),
saved
)
toast('风险规则 JSON 已保存。')
} catch (error) {
toast(error?.message || '风险规则 JSON 保存失败。')
} finally {
actionState.value = ''
}
}
function formatRiskRuleJson() {
if (!selectedSkill.value?.usesJsonRiskRule) {
return
}
try {
const parsed = JSON.parse(String(selectedSkill.value.riskRuleJsonText || '{}'))
selectedSkill.value = applyRiskRuleJsonState(selectedSkill.value, parsed, {
name: selectedSkill.value.name,
description: resolveRiskRuleDescription(parsed)
})
} catch (error) {
toast(error?.message || 'JSON 格式无效,无法格式化。')
}
}
function downloadRiskRuleJson() {
if (!selectedSkill.value?.usesJsonRiskRule) {
return
}
downloadTextFile({
content: String(selectedSkill.value.riskRuleJsonText || '{}'),
fileName:
selectedSkill.value.ruleDocument?.file_name ||
`${selectedSkill.value.code || 'risk-rule'}.json`,
type: 'application/json;charset=utf-8'
})
}
return {
loadRiskRuleJson,
saveRiskRuleJson,
formatRiskRuleJson,
downloadRiskRuleJson
}
}