feat(compliance): add content compliance detection across tenant, ops, and clients

Implements the Revision 8/9 compliance design: tenant + ops backends, ops-web
content-safety pages, admin-web editor/publish gate integration, desktop publish
block surfacing, and supporting migrations / shared types / config plumbing.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-05 20:48:14 +08:00
parent 81577b6154
commit 745cdd79cf
73 changed files with 12747 additions and 1892 deletions
@@ -0,0 +1,61 @@
<template>
<div class="platform-scope-picker">
<a-radio-group :value="scope" @change="onScopeChange">
<a-radio value="all">全部平台</a-radio>
<a-radio value="specific">指定平台</a-radio>
</a-radio-group>
<a-select
mode="multiple"
class="platform-scope-picker__select"
:value="platforms"
:disabled="scope === 'all'"
:options="publishPlatformOptions"
placeholder="选择适用平台"
@change="onPlatformsChange"
/>
</div>
</template>
<script setup lang="ts">
import type { RadioChangeEvent } from 'ant-design-vue'
import { publishPlatformOptions } from '@/lib/compliance-display'
import type { CompliancePlatformScope } from '@/lib/compliance'
defineProps<{
scope: CompliancePlatformScope
platforms: string[]
}>()
const emit = defineEmits<{
'update:scope': [value: CompliancePlatformScope]
'update:platforms': [value: string[]]
}>()
function onScopeChange(event: RadioChangeEvent) {
const value = event.target.value as CompliancePlatformScope
emit('update:scope', value)
if (value === 'all') {
emit('update:platforms', [])
}
}
function onPlatformsChange(value: string[]) {
emit('update:platforms', value)
if (value.length > 0) {
emit('update:scope', 'specific')
}
}
</script>
<style scoped>
.platform-scope-picker {
display: flex;
flex-direction: column;
gap: 12px;
}
.platform-scope-picker__select {
width: 100%;
}
</style>