feat(admin): refine theme settings UI

This commit is contained in:
kate522 committed 2026-08-19 13:11:04 +08:00
1 parent 2e442e20ec
commit 8a738c7998
27 files changed
+425 -337

No files matched your search

+2 -2
View File
@@ -80,7 +80,7 @@
<n-spin />
<p style="margin-top:10px;color:#999;">加载中...</p>
</div>
<div v-if="testResult && !testLoading" :style="{color: testResult.success ? '#18a058' : '#d03050', textAlign:'center', padding:'20px'}">
<div v-if="testResult && !testLoading" :style="{color: testResult.success ? 'var(--aksrt-color-primary)' : '#d03050', textAlign:'center', padding:'20px'}">
<p style="font-size:16px;margin:0;">{{ testResult.message }}</p>
</div>
<div v-if="!testLoading && !testResult" id="captcha-test-box" style="min-height:150px;"></div>
@@ -462,7 +462,7 @@ onBeforeUnmount(() => {
.aksrt-schema-page__field-hint {
margin: 8px 0 0;
font-size: 12px;
color: #8a909c;
color: var(--aksrt-color-muted);
}
.captcha-test-overlay {
@@ -733,7 +733,7 @@ onMounted(loadSettings)
align-items: center;
justify-content: center;
background: rgba(24, 160, 88, 0.12);
color: #18a058;
color: var(--aksrt-color-primary);
font-size: 18px;
flex: 0 0 auto;
}
+7 -7
View File
@@ -95,7 +95,7 @@ const themeVersion = ref(window.aksrtAdminData?.themeVersion || '3.4.0-dev')
const dbSchemaVersion = ref('—')
const docs = ref([
{ key: 'admin-ia-map', title: '后台 IA 蓝图', description: '完整的后台信息架构映射,12 个顶级分区及子页面清单。', icon: 'fa fas fa-sitemap', color: '#1890ff', file: 'admin-ia-map.md' },
{ key: 'admin-ia-map', title: '后台 IA 蓝图', description: '完整的后台信息架构映射,12 个顶级分区及子页面清单。', icon: 'fa fas fa-sitemap', color: 'var(--aksrt-color-primary)', file: 'admin-ia-map.md' },
{ key: 'zibll-gap-matrix', title: '对标差异矩阵', description: 'AKSRT 当前 → Zibll 参考 → AKSRT 目标三层对照表。', icon: 'fa fas fa-columns', color: '#722ed1', file: 'zibll-gap-matrix.md' },
{ key: 'frontend-page-matrix', title: '前端页面矩阵', description: '前端模板、CSS、JS 资产映射与覆盖范围。', icon: 'fa fas fa-desktop', color: '#13c2c2', file: 'frontend-page-matrix.md' },
{ key: 'manual-acceptance-baseline', title: '验收基线', description: '每个 Phase 的人工验收标准和检查清单。', icon: 'fa fas fa-clipboard', color: '#52c41a', file: 'manual-acceptance-baseline.md' },
@@ -164,13 +164,13 @@ function openDoc(doc) {
margin: 0 0 2px;
font-size: 14px;
font-weight: 600;
color: #1a1a2e;
color: var(--aksrt-color-text);
}
.aksrt-docs__card-desc {
margin: 0;
font-size: 12px;
color: #8a909c;
color: var(--aksrt-color-muted);
line-height: 1.5;
overflow: hidden;
text-overflow: ellipsis;
@@ -196,26 +196,26 @@ function openDoc(doc) {
}
.aksrt-docs__action i {
color: #1890ff;
color: var(--aksrt-color-primary);
margin-top: 2px;
}
.aksrt-docs__action strong {
display: block;
font-size: 14px;
color: #1a1a2e;
color: var(--aksrt-color-text);
margin-bottom: 2px;
}
.aksrt-docs__action p {
margin: 0 0 4px;
font-size: 12px;
color: #8a909c;
color: var(--aksrt-color-muted);
}
.aksrt-docs__action a {
font-size: 12px;
color: #1890ff;
color: var(--aksrt-color-primary);
text-decoration: none;
}
@@ -276,7 +276,7 @@ export default {
.aksrt-ai__status-icon--warn { background: #fff3cd; color: #856404; }
.aksrt-ai__status-icon--off { background: #f8d7da; color: #721c24; }
.aksrt-ai__status-icon--info { background: #d1ecf1; color: #0c5460; }
.aksrt-ai__status-value { font-size: 18px; font-weight: 600; color: #1a1a2e; }
.aksrt-ai__status-value { font-size: 18px; font-weight: 600; color: var(--aksrt-color-text); }
.aksrt-ai__status-label { font-size: 12px; color: #888; }
.aksrt-ai__form-card {
background: #fff;
@@ -85,20 +85,20 @@ const router = useRouter()
const message = useMessage()
const healthItems = ref([
{ key: 'php', icon: 'fa fas fa-code', color: '#1890ff', value: '—', label: 'PHP 版本', status: 'ok' },
{ key: 'php', icon: 'fa fas fa-code', color: 'var(--aksrt-color-primary)', value: '—', label: 'PHP 版本', status: 'ok' },
{ key: 'wp', icon: 'fa fab fa-wordpress', color: '#722ed1', value: '—', label: 'WordPress', status: 'ok' },
{ key: 'db', icon: 'fa fas fa-database', color: '#52c41a', value: '—', label: '数据库', status: 'ok' },
{ key: 'uploads', icon: 'fa fas fa-folder-open', color: '#fa8c16', value: '—', label: '上传目录', status: 'ok' },
])
const tools = ref([
{ key: 'import-export', icon: 'fa fas fa-exchange-alt', bg: '#1890ff', title: '导入导出', desc: '设置导入、导出和重置', route: '/tools/import-export' },
{ key: 'import-export', icon: 'fa fas fa-exchange-alt', bg: 'var(--aksrt-color-primary)', title: '导入导出', desc: '设置导入、导出和重置', route: '/tools/import-export' },
{ key: 'health', icon: 'fa fas fa-heartbeat', bg: '#52c41a', title: '健康检查', desc: '系统状态检测和诊断', route: '/tools/health' },
{ key: 'email-rollback', icon: 'fa fas fa-undo', bg: '#fa8c16', title: '邮箱回滚', desc: '邮箱变更 14 天内回滚', route: '/tools/email-rollback' },
])
const services = ref([
{ key: 'sms', icon: 'fa fas fa-comment', color: '#1890ff', name: '短信服务', description: '验证码和通知短信', available: false },
{ key: 'sms', icon: 'fa fas fa-comment', color: 'var(--aksrt-color-primary)', name: '短信服务', description: '验证码和通知短信', available: false },
{ key: 'wechat', icon: 'fa fab fa-weixin', color: '#52c41a', name: '微信通知', description: '微信模板消息和订阅通知', available: false },
{ key: 'captcha', icon: 'fa fas fa-shield-alt', color: '#722ed1', name: '验证码服务', description: '人机验证(极验/腾讯/阿里云)', available: false },
{ key: 'push', icon: 'fa fas fa-paper-plane', color: '#fa8c16', name: '搜索引擎推送', description: '百度/Google 主动推送', available: false },
@@ -210,13 +210,13 @@ async function handleRebuildIndex() {
.aksrt-tools__health-card strong {
display: block;
font-size: 14px;
color: #1a1a2e;
color: var(--aksrt-color-text);
}
.aksrt-tools__health-card p {
margin: 2px 0 0;
font-size: 12px;
color: #8a909c;
color: var(--aksrt-color-muted);
}
.aksrt-tools__health-card--warn {
@@ -237,7 +237,7 @@ async function handleRebuildIndex() {
}
.aksrt-tools__tool-card:hover {
border-color: #1890ff;
border-color: var(--aksrt-color-primary);
box-shadow: 0 2px 8px rgba(24, 144, 255, 0.1);
}
@@ -259,12 +259,12 @@ async function handleRebuildIndex() {
.aksrt-tools__tool-body strong {
display: block;
font-size: 14px;
color: #1a1a2e;
color: var(--aksrt-color-text);
}
.aksrt-tools__tool-body p {
margin: 2px 0 0;
font-size: 12px;
color: #8a909c;
color: var(--aksrt-color-muted);
}
</style>
@@ -101,25 +101,25 @@ onMounted(async () => {
align-items: center;
justify-content: center;
background: var(--surface-3, #f0f0f0);
color: var(--color-ink-4, #8a909c);
color: var(--aksrt-color-muted);
font-size: 16px;
}
.aksrt-gateway__icon--active {
background: var(--color-primary-soft, #f0f5ff);
color: var(--color-primary, #1890ff);
color: var(--aksrt-color-primary);
}
.aksrt-gateway__card strong {
display: block;
font-size: 14px;
color: var(--color-ink, #1a1a2e);
color: var(--aksrt-color-text);
}
.aksrt-gateway__card p {
margin: 2px 0 0;
font-size: 12px;
color: var(--color-ink-4, #8a909c);
color: var(--aksrt-color-muted);
}
.aksrt-gateway__help {
@@ -209,13 +209,13 @@ onMounted(loadRevenue)
display: block;
font-size: 24px;
font-weight: 600;
color: var(--color-ink, #1a1a2e);
color: var(--aksrt-color-text);
}
.aksrt-revenue__stat p {
margin: 4px 0 0;
font-size: 12px;
color: var(--color-ink-4, #8a909c);
color: var(--aksrt-color-muted);
}
.aksrt-revenue__charts {
@@ -229,7 +229,7 @@ onMounted(loadRevenue)
.aksrt-revenue__chart h4 {
margin: 0 0 10px;
color: var(--color-ink, #1a1a2e);
color: var(--aksrt-color-text);
}
.aksrt-revenue__chart-bars {
@@ -267,7 +267,7 @@ onMounted(loadRevenue)
.aksrt-revenue__chart-label {
font-size: 10px;
color: var(--color-ink-4, #8a909c);
color: var(--aksrt-color-muted);
margin-top: 4px;
white-space: nowrap;
overflow: hidden;
@@ -285,7 +285,7 @@ onMounted(loadRevenue)
}
.aksrt-revenue__chart-summary strong {
color: var(--color-ink, #1a1a2e);
color: var(--aksrt-color-text);
font-weight: 600;
}
</style>
@@ -20,7 +20,7 @@
<n-grid :cols="3" :x-gap="12" :y-gap="12">
<n-grid-item v-for="item in summaryItems" :key="item.key">
<div class="aksrt-attach__summary">
<FaIcon :icon="item.icon" :size="16" :color="item.enabled ? '#52c41a' : '#8a909c'" />
<FaIcon :icon="item.icon" :size="16" :color="item.enabled ? '#52c41a' : 'var(--aksrt-color-muted)'" />
<div>
<strong>{{ item.label }}</strong>
<p>{{ item.enabled ? '已启用' : '已关闭' }}</p>
@@ -163,12 +163,12 @@ onMounted(load)
.aksrt-attach__summary strong {
display: block;
font-size: 13px;
color: #1a1a2e;
color: var(--aksrt-color-text);
}
.aksrt-attach__summary p {
margin: 2px 0 0;
font-size: 12px;
color: #8a909c;
color: var(--aksrt-color-muted);
}
</style>
@@ -224,7 +224,7 @@ async function handleSave() {
.aksrt-cap-matrix__desc {
margin: 4px 0 0;
font-size: 12px;
color: #8a909c;
color: var(--aksrt-color-muted);
}
.aksrt-cap-matrix__cap {
@@ -26,7 +26,7 @@
<p style="margin: 6px 0 0; color: #4b5565;">
{{ item.current_email }} → {{ item.previous_email }}
</p>
<p style="margin: 6px 0 0; color: #7a7f8a; font-size: 12px;">
<p style="margin: 6px 0 0; color: var(--aksrt-color-muted); font-size: 12px;">
剩余窗口:{{ Math.max(0, Math.floor((item.expires_in || 0) / 3600)) }} 小时
</p>
</div>
+2 -2
View File
@@ -179,7 +179,7 @@ async function handleDismiss() {
flex-direction: column;
gap: 4px;
padding: 14px;
border: 1px solid #eef1f6;
border: 1px solid var(--aksrt-color-border);
border-radius: 12px;
text-decoration: none;
color: inherit;
@@ -187,7 +187,7 @@ async function handleDismiss() {
}
.aksrt-update__guide:hover {
border-color: #1890ff;
border-color: var(--aksrt-color-primary);
background: #f5faff;
}
@@ -231,7 +231,7 @@ export default {
.aksrt-wechat__status-value {
font-size: 18px;
font-weight: 600;
color: #1a1a2e;
color: var(--aksrt-color-text);
}
.aksrt-wechat__status-label {
font-size: 12px;