chore(清理): 删除死代码与过期文件——7个无引用DTO+图片工作台整棵子树(16文件)+冗余副本+一次性脚本+可再生审计快照

每项删除前均做过全仓库引用核对(含 tests/、两个前端、Python 侧):
- Java 7 个 DTO:BrandTaskRunRequest、LegacyBrandTaskCreateVo、Ziniao{SwitchShopRequest,CurrentShopVo,LoginUrlVo,SwitchShopVo}、
  AppearancePatentParsedGroupManifestDto —— 全仓库仅命中声明行本身
- frontend-vue 整棵 src/pages/image/(16 文件):9a487ae9 起首页一级入口已删("图片已并入视频页"),
  该子树完全自闭环;同步移除 /image 路由与 ImageVideoPage 的图片入口
- frontend-vue 两个孤儿组件 AiModuleSwitch/AiWorkflowShell:无引用,且位于 src/shared/components
  而非 unplugin-vue-components 默认扫描的 src/components,不存在自动注册
- backend/tool/devices.py + .device_id:app_client/tool/devices.py 的冗余副本(活的是 app_client 那份),
  app.py 只注册 version_bp,无任何引用
- admin-frontend-vue 的一次性 Playwright 调试脚本 rescan.tmp.mjs / diag-role-price.mjs
- backend-java/scripts/*_report.json ×4:可由 n1_scan.py 等重跑的审计快照
- frontend-vue/DESIGN.md:Last refreshed 2026-06-09,仍是 MPA 时代内容
- backend/requirement.txt:pip freeze 63 条裁剪为实际 import 的 5 条;run.sh 硬依赖该文件存在,故保留文件本身

验证:mvn compile 通过、vue-tsc --noEmit 通过、残留引用 grep 零命中。
注:仓库既有的 4 个失败测试类(FlywayMigration*DocTest、MigrationInventoryTest、HttpClientTimeoutEffectiveTest)
经 stash 对照实验确认与本次改动无关(相同 Failures/Errors 计数)。
This commit is contained in:
2026-09-11 01:33:54 +08:00
parent 48ee76d60d
commit dd45ffe34c
37 changed files with 11 additions and 11972 deletions
@@ -1,105 +0,0 @@
<template>
<div class="ai-module-switch" role="tablist" aria-label="功能模块切换">
<button
v-for="item in options"
:key="item.value"
type="button"
class="ai-module-switch__item"
:class="{
'ai-module-switch__item--active': modelValue === item.value,
'ai-module-switch__item--disabled': item.disabled,
}"
:disabled="item.disabled"
@click="$emit('update:modelValue', item.value)"
>
<span class="ai-module-switch__label">{{ item.label }}</span>
<span v-if="item.description" class="ai-module-switch__description">
{{ item.description }}
</span>
</button>
</div>
</template>
<script setup lang="ts">
export type AiModuleSwitchOption = {
label: string
value: string
description?: string
disabled?: boolean
}
defineProps<{
modelValue: string
options: AiModuleSwitchOption[]
}>()
defineEmits<{
(event: 'update:modelValue', value: string): void
}>()
</script>
<style scoped>
.ai-module-switch {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 12px;
}
.ai-module-switch__item {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 6px;
min-height: 84px;
padding: 16px 18px;
border: 1px solid rgba(71, 85, 105, 0.65);
border-radius: 16px;
background: rgba(15, 23, 42, 0.72);
color: #cbd5e1;
text-align: left;
cursor: pointer;
transition:
border-color 0.2s ease,
transform 0.2s ease,
box-shadow 0.2s ease,
background 0.2s ease;
}
.ai-module-switch__item:hover:not(:disabled) {
border-color: rgba(96, 165, 250, 0.7);
box-shadow: 0 14px 24px rgba(8, 15, 31, 0.34);
transform: translateY(-1px);
}
.ai-module-switch__item--active {
border-color: rgba(96, 165, 250, 0.82);
background:
linear-gradient(180deg, rgba(30, 41, 59, 0.96), rgba(15, 23, 42, 0.96));
box-shadow:
0 0 0 1px rgba(59, 130, 246, 0.18),
0 18px 28px rgba(8, 15, 31, 0.36);
}
.ai-module-switch__item--disabled {
opacity: 0.62;
cursor: not-allowed;
}
.ai-module-switch__label {
color: #f8fafc;
font-size: 16px;
font-weight: 600;
}
.ai-module-switch__description {
color: #94a3b8;
font-size: 12px;
line-height: 1.45;
}
@media (max-width: 900px) {
.ai-module-switch {
grid-template-columns: 1fr;
}
}
</style>
@@ -1,94 +0,0 @@
<template>
<div class="ai-workflow-shell">
<div class="ai-workflow-shell__grid" aria-hidden="true"></div>
<div class="ai-workflow-shell__inner">
<header class="ai-workflow-shell__header">
<div class="ai-workflow-shell__meta">
<slot name="meta" />
</div>
<div class="ai-workflow-shell__actions">
<slot name="actions" />
</div>
</header>
<div class="ai-workflow-shell__toolbar">
<slot name="toolbar" />
</div>
<main class="ai-workflow-shell__content">
<slot />
</main>
</div>
</div>
</template>
<style scoped>
.ai-workflow-shell {
position: relative;
min-height: 100vh;
overflow: hidden;
background:
radial-gradient(circle at top center, rgba(59, 130, 246, 0.14), transparent 32%),
radial-gradient(circle at right bottom, rgba(99, 102, 241, 0.12), transparent 24%),
linear-gradient(180deg, #060913 0%, #09111d 40%, #070b14 100%);
}
.ai-workflow-shell__grid {
position: absolute;
inset: 0;
background-image:
linear-gradient(rgba(77, 104, 145, 0.08) 1px, transparent 1px),
linear-gradient(90deg, rgba(77, 104, 145, 0.08) 1px, transparent 1px);
background-size: 40px 40px;
mask-image: radial-gradient(circle at 50% 18%, rgba(0, 0, 0, 0.9), transparent 75%);
pointer-events: none;
}
.ai-workflow-shell__inner {
position: relative;
z-index: 1;
min-height: 100vh;
padding: 28px;
}
.ai-workflow-shell__header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 20px;
margin-bottom: 18px;
}
.ai-workflow-shell__meta,
.ai-workflow-shell__actions {
min-width: 0;
}
.ai-workflow-shell__actions {
display: flex;
align-items: center;
gap: 12px;
}
.ai-workflow-shell__toolbar {
margin-bottom: 20px;
}
.ai-workflow-shell__content {
min-width: 0;
}
@media (max-width: 960px) {
.ai-workflow-shell__inner {
padding: 20px;
}
.ai-workflow-shell__header {
flex-direction: column;
align-items: stretch;
}
.ai-workflow-shell__actions {
justify-content: flex-start;
flex-wrap: wrap;
}
}
</style>