refactor(audit): split list detail flows
This commit is contained in:
151
web/src/views/scripts/useAuditRuleVersionActions.js
Normal file
151
web/src/views/scripts/useAuditRuleVersionActions.js
Normal file
@@ -0,0 +1,151 @@
|
||||
import {
|
||||
activateAgentAsset,
|
||||
createAgentAssetVersion,
|
||||
restoreAgentAssetVersion,
|
||||
updateAgentAsset
|
||||
} from '../../services/agentAssets.js'
|
||||
import {
|
||||
buildRuleConfigPayload,
|
||||
incrementVersion
|
||||
} from './auditViewRuntimeModel.js'
|
||||
import {
|
||||
buildMarkdownVersionContent,
|
||||
normalizeText,
|
||||
parseRuntimeRuleText
|
||||
} from './auditViewModel.js'
|
||||
|
||||
export function useAuditRuleVersionActions({
|
||||
selectedSkill,
|
||||
selectedSkillIsRule,
|
||||
canEditMarkdown,
|
||||
canManageSelected,
|
||||
actionState,
|
||||
detailBusy,
|
||||
refreshCurrentAssets,
|
||||
loadSelectedAssetDetail,
|
||||
resolveActor,
|
||||
toast
|
||||
}) {
|
||||
async function persistRuleRuntimeConfig(asset, runtimeRule) {
|
||||
await updateAgentAsset(
|
||||
asset.id,
|
||||
{
|
||||
config_json: buildRuleConfigPayload(asset, runtimeRule)
|
||||
},
|
||||
{ actor: resolveActor() }
|
||||
)
|
||||
}
|
||||
|
||||
async function saveRuleVersion({ action, changeNote, successLabel }) {
|
||||
if (
|
||||
!selectedSkill.value ||
|
||||
!selectedSkillIsRule.value ||
|
||||
selectedSkill.value.usesSpreadsheetRule ||
|
||||
!canEditMarkdown.value ||
|
||||
detailBusy.value
|
||||
) {
|
||||
return
|
||||
}
|
||||
|
||||
if (!normalizeText(selectedSkill.value.markdownContent)) {
|
||||
toast('规则 Markdown 内容不能为空。')
|
||||
return
|
||||
}
|
||||
|
||||
const runtimeRule = parseRuntimeRuleText(selectedSkill.value.runtimeRuleText)
|
||||
if (!runtimeRule) {
|
||||
toast('运行时 JSON 必须是合法的对象。')
|
||||
return
|
||||
}
|
||||
|
||||
const nextVersion = incrementVersion(selectedSkill.value.currentVersion)
|
||||
actionState.value = action
|
||||
|
||||
try {
|
||||
await createAgentAssetVersion(
|
||||
selectedSkill.value.id,
|
||||
{
|
||||
version: nextVersion,
|
||||
content: buildMarkdownVersionContent(selectedSkill.value.markdownContent, runtimeRule),
|
||||
content_type: 'markdown',
|
||||
change_note: changeNote,
|
||||
created_by: resolveActor()
|
||||
},
|
||||
{ actor: resolveActor() }
|
||||
)
|
||||
await persistRuleRuntimeConfig(selectedSkill.value, runtimeRule)
|
||||
await refreshCurrentAssets()
|
||||
await loadSelectedAssetDetail(selectedSkill.value.id)
|
||||
toast(`${successLabel} ${nextVersion}。`)
|
||||
} catch (error) {
|
||||
toast(error?.message || `${successLabel}失败,请稍后重试。`)
|
||||
} finally {
|
||||
actionState.value = ''
|
||||
}
|
||||
}
|
||||
|
||||
async function saveRuleMarkdown() {
|
||||
await saveRuleVersion({
|
||||
action: 'save-markdown',
|
||||
changeNote: '通过规则中心保存 Markdown 规则内容,并同步运行时 JSON。',
|
||||
successLabel: '规则 Markdown 已保存为'
|
||||
})
|
||||
}
|
||||
|
||||
async function saveRuleRuntimeJson() {
|
||||
await saveRuleVersion({
|
||||
action: 'save-runtime-json',
|
||||
changeNote: '通过规则中心保存运行时 JSON 配置。',
|
||||
successLabel: '规则 JSON 已保存为'
|
||||
})
|
||||
}
|
||||
|
||||
async function activateSelectedRule() {
|
||||
if (!selectedSkill.value || !selectedSkillIsRule.value || !canManageSelected.value || detailBusy.value) {
|
||||
return
|
||||
}
|
||||
|
||||
actionState.value = 'activate'
|
||||
try {
|
||||
await activateAgentAsset(selectedSkill.value.id, { actor: resolveActor() })
|
||||
await refreshCurrentAssets()
|
||||
await loadSelectedAssetDetail(selectedSkill.value.id)
|
||||
toast('规则已正式上线。')
|
||||
} catch (error) {
|
||||
toast(error?.message || '规则上线失败,请稍后重试。')
|
||||
} finally {
|
||||
actionState.value = ''
|
||||
}
|
||||
}
|
||||
|
||||
async function restoreSelectedVersion(version) {
|
||||
if (
|
||||
!selectedSkill.value ||
|
||||
!selectedSkillIsRule.value ||
|
||||
!canManageSelected.value ||
|
||||
detailBusy.value ||
|
||||
!version
|
||||
) {
|
||||
return
|
||||
}
|
||||
|
||||
actionState.value = `restore-${version}`
|
||||
try {
|
||||
await restoreAgentAssetVersion(selectedSkill.value.id, version, { actor: resolveActor() })
|
||||
await refreshCurrentAssets()
|
||||
await loadSelectedAssetDetail(selectedSkill.value.id)
|
||||
toast(`已基于 ${version} 生成新的工作版本。`)
|
||||
} catch (error) {
|
||||
toast(error?.message || '历史版本恢复失败,请稍后重试。')
|
||||
} finally {
|
||||
actionState.value = ''
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
saveRuleMarkdown,
|
||||
saveRuleRuntimeJson,
|
||||
activateSelectedRule,
|
||||
restoreSelectedVersion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user