导入 AKSRT 主题开发源码

This commit is contained in:
Claude Code committed 2026-07-03 22:50:34 +08:00
1 parent 9681dd3d48
commit 1268a55dd0
595 files changed
+127705

No files matched your search

@@ -0,0 +1,10 @@
/**
* Admin sections — central menu and route registry.
*
* Sidebar menu, route metadata, schema domain mapping, and deferred-page
* planning details are all registered in domain modules to avoid drift between
* the navigation tree and router definitions while keeping each file focused.
*/
export { ADMIN_SECTIONS, getAllAdminPages } from './sections/index.js'
export { renderFaIcon, customPage, schemaPage, deferredPage } from './sections/helpers.js'
@@ -0,0 +1,20 @@
import { renderFaIcon, customPage } from './helpers'
export const docsSection = {
key: 'tools-compat',
label: '兼容&工具',
icon: renderFaIcon('fas fa-toolbox'),
route: '/tools',
hidden: true,
children: [
customPage({
key: 'docs-dashboard',
name: 'DocsDashboard',
label: '文档中心',
route: '/docs',
component: 'DocsPage',
title: '文档中心',
desc: '更新日志、文档链接和发布说明。',
}),
],
}
@@ -0,0 +1,80 @@
import { renderFaIcon, schemaPage, customPage } from './helpers'
export const extensionsSection = {
key: 'extensions',
label: '扩展&增强',
icon: renderFaIcon('fas fa-puzzle-piece'),
route: '/extensions',
children: [
schemaPage({
key: 'extensions-ip',
name: 'ExtensionsIp',
label: 'IP归属地',
route: '/extensions/ip',
title: 'IP归属地',
desc: '配置 IP 数据源、缓存策略和前台归属地展示。',
canonicalDomain: 'extensions',
section: 'ip',
}),
schemaPage({
key: 'extensions-audit',
name: 'ExtensionsAudit',
label: 'API内容审核',
route: '/extensions/audit',
title: 'API内容审核',
desc: '配置第三方内容审核 API 接入、审核范围和失败回退策略。',
canonicalDomain: 'extensions',
section: 'audit',
}),
schemaPage({
key: 'extensions-push',
name: 'ExtensionsPush',
label: '百度推送',
route: '/extensions/push',
title: '百度推送',
desc: '配置搜索引擎主动推送、批量提交和状态追踪。',
canonicalDomain: 'extensions',
section: 'push',
}),
schemaPage({
key: 'extensions-docs-mode',
name: 'ExtensionsDocsMode',
label: '文档模式',
route: '/extensions/docs-mode',
title: '文档模式',
desc: '文档专题内容模式与页面增强。',
canonicalDomain: 'extensions',
section: 'docs-mode',
}),
customPage({
key: 'extensions-security',
name: 'ExtensionsSecurity',
label: '网站安全',
route: '/extensions/security',
component: 'ExtensionSecurity',
title: '网站安全',
desc: '扩展安全策略和第三方安全集成。',
}),
customPage({
key: 'extensions-tools',
name: 'ExtensionsTools',
label: '系统工具',
route: '/extensions/tools',
component: 'ExtensionTools',
title: '系统工具',
desc: '额外运维工具与扩展能力。',
}),
customPage({
key: 'extensions-ai',
name: 'ExtensionAI',
label: 'AI 子系统',
route: '/extensions/ai',
component: 'ExtensionAI',
status: 'available',
title: 'AI 子系统',
desc: '配置 AI 内容辅助能力。',
canonicalDomain: 'extensions',
section: 'ai',
}),
],
}
@@ -0,0 +1,165 @@
import { renderFaIcon, schemaPage, customPage } from './helpers'
export const forumSection = {
key: 'forum',
label: '社区&论坛',
icon: renderFaIcon('fas fa-comments'),
route: '/forum',
children: [
schemaPage({
key: 'forum-settings-basic',
name: 'ForumSettingsBasic',
label: '基础设置',
route: '/forum/settings',
title: '论坛基础设置',
desc: '论坛总开关、管理员和名称定义。',
canonicalDomain: 'forum',
section: 'basic',
}),
schemaPage({
key: 'forum-settings-names',
name: 'ForumSettingsNames',
label: '名称定义',
route: '/forum/settings/names',
title: '名称定义',
desc: '自定义论坛各实体的显示名称。',
canonicalDomain: 'forum',
section: 'names',
}),
schemaPage({
key: 'forum-settings-homepage',
name: 'ForumSettingsHomepage',
label: '首页设置',
route: '/forum/settings/homepage',
title: '论坛首页设置',
desc: '首页 Tab 引擎、快速发帖入口和移动端交互配置。',
canonicalDomain: 'forum',
section: 'homepage',
}),
schemaPage({
key: 'forum-settings-board-page',
name: 'ForumSettingsBoardPage',
label: '版块页面',
route: '/forum/settings/board-page',
title: '版块页面设置',
desc: '版块页布局、Tab 栏目和移动端交互配置。',
canonicalDomain: 'forum',
section: 'board_page',
}),
schemaPage({
key: 'forum-settings-post-page',
name: 'ForumSettingsPostPage',
label: '帖子页面',
route: '/forum/settings/post-page',
title: '帖子页面设置',
desc: '面包屑、评分、高度限制和封面配置。',
canonicalDomain: 'forum',
section: 'post_page',
}),
schemaPage({
key: 'forum-settings-reply',
name: 'ForumSettingsReply',
label: '回复评论',
route: '/forum/settings/reply',
title: '回复评论设置',
desc: '回复翻页方式、工具栏功能和快捷回复配置。',
canonicalDomain: 'forum',
section: 'reply',
}),
schemaPage({
key: 'forum-settings-permissions',
name: 'ForumSettingsPermissions',
label: '权限配置',
route: '/forum/settings/permissions',
title: '论坛权限配置',
desc: '发帖限制、帖子付费和版块付费关注。',
canonicalDomain: 'forum',
section: 'permissions',
}),
schemaPage({
key: 'forum-settings-other',
name: 'ForumSettingsOther',
label: '其它设置',
route: '/forum/settings/other',
title: '论坛其它设置',
desc: '投票、版主申请说明、标题字数和 URL 别名。',
canonicalDomain: 'forum',
section: 'other',
}),
schemaPage({
key: 'forum-settings-upload',
name: 'ForumSettingsUpload',
label: '上传权限',
route: '/forum/settings/upload',
title: '上传权限设置',
desc: '图片、视频和文件上传大小与格式限制。',
canonicalDomain: 'forum',
section: 'upload',
}),
schemaPage({
key: 'forum-settings-credits',
name: 'ForumSettingsCredits',
label: '积分设置',
route: '/forum/settings/credits',
title: '论坛积分设置',
desc: '论坛行为积分奖励矩阵和每日上限。',
canonicalDomain: 'forum',
section: 'credits',
}),
customPage({
key: 'forum-boards',
name: 'ForumBoards',
label: '板块管理',
route: '/forum/boards',
component: 'ForumBoards',
title: '板块管理',
desc: '创建、编辑和排序论坛板块。',
canonicalDomain: 'forum',
section: 'boards',
}),
customPage({
key: 'forum-topics',
name: 'ForumTopics',
label: '主题治理',
route: '/forum/topics',
component: 'ForumTopics',
title: '主题治理',
desc: '集中处理主题审核、可见性、版块移动和治理状态。',
canonicalDomain: 'forum',
section: 'topics',
}),
customPage({
key: 'forum-moderator-applications',
name: 'ForumModeratorApplications',
label: '版主申请',
route: '/forum/moderator-applications',
component: 'ForumModeratorApplications',
title: '版主申请',
desc: '处理前台版主申请和审核结果反馈。',
canonicalDomain: 'forum',
section: 'moderator-applications',
}),
customPage({
key: 'forum-moderators',
name: 'ForumModerators',
label: '版主管理',
route: '/forum/moderators',
component: 'ForumModerators',
title: '版主管理',
desc: '为每个论坛版块分配和管理版主。',
canonicalDomain: 'forum',
section: 'moderators',
}),
customPage({
key: 'forum-dashboard',
name: 'ForumDashboard',
label: '论坛概览',
route: '/forum',
component: 'ForumDashboard',
title: '论坛概览',
desc: '社区讨论、帖子管理、版块配置等论坛功能概览。',
canonicalDomain: 'forum',
section: 'dashboard',
}),
],
}
@@ -0,0 +1,108 @@
import { renderFaIcon, schemaPage, customPage } from './helpers'
export const globalSection = {
key: 'global',
label: '全局&功能',
icon: renderFaIcon('fas fa-globe'),
route: '/global',
children: [
schemaPage({
key: 'global-common',
name: 'GlobalCommon',
label: '常用功能',
route: '/global/common',
title: '常用功能',
desc: '评论、性能、头像源与备案等全局基础配置。',
canonicalDomain: 'global',
section: 'common',
}),
schemaPage({
key: 'global-logo',
name: 'GlobalLogo',
label: 'LOGO图像',
route: '/global/logo',
title: 'LOGO图像',
desc: '管理站点 Logo、站点图标和品牌标识。',
canonicalDomain: 'global',
section: 'logo',
}),
schemaPage({
key: 'global-seo',
name: 'GlobalSeo',
label: 'SEO优化',
route: '/global/seo',
title: 'SEO优化',
desc: '站点标题、描述、关键词、Sitemap 等搜索引擎优化设置。',
canonicalDomain: 'global',
section: 'seo',
}),
schemaPage({
key: 'global-layout',
name: 'GlobalLayout',
label: '显示&布局',
route: '/global/layout',
title: '显示&布局',
desc: '全局布局风格、颜色方案、字体设置。',
canonicalDomain: 'global',
section: 'layout',
}),
schemaPage({
key: 'global-search',
name: 'GlobalSearch',
label: '搜索功能',
route: '/global/search',
title: '搜索功能',
desc: '搜索页面样式、搜索建议、热门搜索配置。',
canonicalDomain: 'global',
section: 'search',
}),
customPage({
key: 'global-tabbar',
name: 'GlobalTabbar',
label: '手机底部Tab',
route: '/global/tabbar',
title: '手机底部Tab',
desc: '移动端底部导航栏配置。',
component: 'FooterTabbarSettings',
}),
customPage({
key: 'global-floating',
name: 'GlobalFloating',
label: '右侧悬浮按钮',
route: '/global/floating',
title: '右侧悬浮按钮',
desc: '页面右侧浮动按钮的显示与配置。',
component: 'FloatingButtonsSettings',
}),
schemaPage({
key: 'global-i18n',
name: 'GlobalI18n',
label: '多语言翻译',
route: '/global/i18n',
title: '多语言翻译',
desc: '配置站点语言、语言切换器和翻译管理。',
canonicalDomain: 'global',
section: 'i18n',
}),
schemaPage({
key: 'global-email',
name: 'GlobalEmail',
label: 'Email邮件',
route: '/global/email',
title: 'Email邮件',
desc: 'SMTP 发信配置、邮件模板与测试。',
canonicalDomain: 'global',
section: 'email',
}),
schemaPage({
key: 'global-custom-code',
name: 'GlobalCustomCode',
label: '自定义代码',
route: '/global/custom-code',
title: '自定义代码',
desc: '自定义 CSS、JS 代码注入。',
canonicalDomain: 'global',
section: 'custom-code',
}),
],
}
@@ -0,0 +1,39 @@
import { h } from 'vue'
export function renderFaIcon(faClass) {
return () => h('i', { class: faClass, style: 'font-size:18px;width:18px;text-align:center' })
}
function sectionPage(config) {
return {
status: 'available',
component: 'SchemaPage',
canonicalDomain: '',
section: '',
phase: '',
dependsOn: [],
reason: '',
features: [],
iconClass: '',
...config,
}
}
export function customPage(config) {
return sectionPage(config)
}
export function schemaPage(config) {
return sectionPage({
component: 'SchemaPage',
...config,
})
}
export function deferredPage(config) {
return sectionPage({
component: 'DeferredPage',
status: 'deferred',
...config,
})
}
@@ -0,0 +1,66 @@
import { globalSection } from './global'
import { pageDisplaySection } from './page-display'
import { postListSection } from './post-list'
import { permissionsSection } from './permissions'
import { usersSection } from './users'
import { paymentSection } from './payment'
import { shopSection } from './shop'
import { forumSection } from './forum'
import { extensionsSection } from './extensions'
import { themeInfoSection } from './theme-info'
import { docsSection } from './docs'
import { toolsSection } from './tools'
const primarySections = [
globalSection,
pageDisplaySection,
postListSection,
permissionsSection,
usersSection,
paymentSection,
shopSection,
forumSection,
extensionsSection,
]
const compatChildren = [
...(toolsSection.children || []),
...(themeInfoSection.children || []),
...(docsSection.children || []),
]
export const compatToolsSection = {
key: 'tools-compat',
label: '兼容&工具',
icon: toolsSection.icon,
route: '/tools',
children: compatChildren,
}
export const ADMIN_SECTIONS = [
...primarySections,
compatToolsSection,
]
export function getAllAdminPages() {
const pages = []
for (const section of ADMIN_SECTIONS) {
if (section.placeholder) {
pages.push({
sectionKey: section.key,
...section,
})
continue
}
for (const child of section.children || []) {
pages.push({
sectionKey: section.key,
...child,
})
}
}
return pages
}
@@ -0,0 +1,118 @@
import { renderFaIcon, schemaPage, customPage } from './helpers'
export const pageDisplaySection = {
key: 'page-display',
label: '页面&显示',
icon: renderFaIcon('fas fa-desktop'),
route: '/page-display',
children: [
schemaPage({
key: 'page-display-header-nav',
name: 'PageDisplayHeaderNav',
label: '顶部导航栏',
route: '/page-display/header-nav',
title: '顶部导航栏',
desc: '导航栏布局、菜单位置、LOGO 与搜索入口配置。',
canonicalDomain: 'page_display',
section: 'header-nav',
}),
schemaPage({
key: 'page-display-background',
name: 'PageDisplayBackground',
label: '全局背景',
route: '/page-display/background',
title: '全局背景',
desc: '配置站点全局背景图、背景色、暗色模式背景和遮罩。',
canonicalDomain: 'page_display',
section: 'background',
}),
schemaPage({
key: 'page-display-menu-decoration',
name: 'PageDisplayMenuDecoration',
label: '菜单装饰',
route: '/page-display/menu-decoration',
title: '菜单装饰',
desc: '配置导航菜单的图标、徽章、下拉样式和图文卡片子菜单。',
canonicalDomain: 'page_display',
section: 'menu-decoration',
}),
schemaPage({
key: 'page-display-header-components',
name: 'PageDisplayHeaderComponents',
label: '顶部多功能组件',
route: '/page-display/header-components',
title: '顶部多功能组件',
desc: '顶部轮播、图标卡片、搜索条、公告条等组件配置。',
canonicalDomain: 'page_display',
section: 'header-components',
}),
customPage({
key: 'page-display-footer',
name: 'PageDisplayFooter',
label: '底部页脚',
route: '/page-display/footer',
title: '底部页脚',
desc: '页脚布局、友链、版权信息配置。',
component: 'FooterSettings',
}),
customPage({
key: 'page-display-homepage',
name: 'PageDisplayHomepage',
label: '首页配置',
route: '/page-display/homepage',
title: '首页配置',
desc: '首页模块、布局、推荐位配置。',
component: 'HomepageSettings',
}),
schemaPage({
key: 'page-display-category',
name: 'PageDisplayCategory',
label: '分类页面',
route: '/page-display/category',
title: '分类页面',
desc: '分类归档页的头图、简介、列表模式、侧栏配置。',
canonicalDomain: 'page_display',
section: 'category',
}),
schemaPage({
key: 'page-display-tag',
name: 'PageDisplayTag',
label: '标签页面',
route: '/page-display/tag',
title: '标签页面',
desc: '标签归档页的展示样式与配置。',
canonicalDomain: 'page_display',
section: 'tag',
}),
schemaPage({
key: 'page-display-special',
name: 'PageDisplaySpecial',
label: '专题页面',
route: '/page-display/special',
title: '专题页面',
desc: '配置专题聚合页的封面、摘要、布局、聚合规则和子页面展示策略。',
canonicalDomain: 'page_display',
section: 'special',
}),
schemaPage({
key: 'page-display-user-home',
name: 'PageDisplayUserHome',
label: '用户主页',
route: '/page-display/user-home',
title: '用户主页',
desc: '用户公开主页的布局与展示配置。',
canonicalDomain: 'page_display',
section: 'user-home',
}),
schemaPage({
key: 'page-display-other',
name: 'PageDisplayOther',
label: '其它页面',
route: '/page-display/other',
title: '其它页面',
desc: '404 页面、搜索结果页等其它页面配置。',
canonicalDomain: 'page_display',
section: 'other',
}),
],
}
@@ -0,0 +1,100 @@
import { renderFaIcon, schemaPage, customPage } from './helpers'
export const paymentSection = {
key: 'payment',
label: '支付&付费',
icon: renderFaIcon('fas fa-wallet'),
route: '/payment',
children: [
customPage({
key: 'payment-gateway',
name: 'PaymentGateway',
label: '收款接口',
route: '/payment/gateway',
component: 'PaymentGateway',
status: 'available',
title: '收款接口',
desc: '支付网关适配器、测试网关和手动确认配置。',
canonicalDomain: 'payment',
section: 'gateway',
}),
customPage({
key: 'payment-paid',
name: 'PaymentPaid',
label: '下载/付费内容中心',
route: '/payment/paid',
title: '下载/付费内容中心',
desc: '资源下载门槛、付费内容策略和人工交付说明。',
component: 'ResourceDownload',
}),
schemaPage({
key: 'payment-recharge',
name: 'PaymentRecharge',
label: '余额充值',
route: '/payment/recharge',
status: 'available',
title: '余额充值',
desc: '余额充值策略、记录和手动确认配置。',
canonicalDomain: 'payment',
section: 'recharge',
}),
schemaPage({
key: 'payment-vip',
name: 'PaymentVip',
label: 'VIP会员',
route: '/payment/vip',
status: 'available',
title: 'VIP会员',
desc: '会员套餐、会员特权和免扣策略。',
canonicalDomain: 'payment',
section: 'vip',
}),
customPage({
key: 'payment-revenue',
name: 'PaymentRevenue',
label: '创作分成',
route: '/payment/revenue',
component: 'PaymentRevenue',
status: 'available',
title: '创作分成',
desc: '创作者收益分配和结算记录。',
canonicalDomain: 'payment',
section: 'revenue',
}),
schemaPage({
key: 'payment-affiliate',
name: 'PaymentAffiliate',
label: '推广返佣',
route: '/payment/affiliate',
status: 'available',
title: '推广返佣',
desc: '返佣规则、邀请链路和结算记录。',
canonicalDomain: 'payment',
section: 'affiliate',
}),
customPage({
key: 'payment-charge-card',
name: 'PaymentChargeCard',
label: '充值卡',
route: '/payment/charge-card',
component: 'PaymentChargeCard',
status: 'available',
title: '充值卡',
desc: '创建和管理充值卡。',
canonicalDomain: 'payment',
section: 'charge-card',
}),
customPage({
key: 'payment-rebate',
name: 'PaymentRebate',
label: '返佣管理',
route: '/payment/rebate',
component: 'PaymentRebate',
status: 'available',
title: '返佣管理',
desc: '管理订单返佣和推广返佣记录。',
canonicalDomain: 'payment',
section: 'rebate',
}),
],
}
@@ -0,0 +1,74 @@
import { renderFaIcon, customPage, schemaPage } from './helpers'
export const permissionsSection = {
key: 'permissions',
label: '功能&权限',
icon: renderFaIcon('fas fa-shield-alt'),
route: '/permissions',
children: [
customPage({
key: 'permissions-comment',
name: 'PermissionsComment',
label: '评论权限',
route: '/permissions/comment',
component: 'CommentPermissions',
title: '评论权限',
desc: '游客评论、频率限制、敏感词和审核策略。',
canonicalDomain: 'permissions',
section: 'comment',
}),
customPage({
key: 'permissions-attachment',
name: 'PermissionsAttachment',
label: '附件权限',
route: '/permissions/attachment',
component: 'AttachmentPermissions',
title: '附件权限',
desc: '上传角色、文件类型、大小限制和审核状态。',
canonicalDomain: 'permissions',
section: 'attachment',
}),
customPage({
key: 'permissions-download',
name: 'PermissionsDownload',
label: '下载权限',
route: '/permissions/download',
component: 'DownloadPermissions',
title: '下载权限',
desc: '登录要求、积分要求、角色要求和 VIP 特权。',
canonicalDomain: 'permissions',
section: 'download',
}),
schemaPage({
key: 'permissions-login',
name: 'PermissionsLogin',
label: '登录权限',
route: '/permissions/login',
title: '登录权限',
desc: '登录验证、人机验证、注册限制配置。',
canonicalDomain: 'permissions',
section: 'login',
}),
schemaPage({
key: 'permissions-moderation',
name: 'PermissionsModeration',
label: '审核和风控',
route: '/permissions/moderation',
title: '审核和风控',
desc: '评论审核、反垃圾、限流与风控配置。',
canonicalDomain: 'permissions',
section: 'moderation',
}),
customPage({
key: 'permissions-capabilities',
name: 'PermissionsCapabilities',
label: '基本权限',
route: '/permissions/capabilities',
component: 'PermissionsCapabilities',
title: '基本权限 / 能力矩阵',
desc: '统一管理用户治理、投稿和评论的角色能力矩阵。',
canonicalDomain: 'permissions',
section: 'capabilities',
}),
],
}
@@ -0,0 +1,92 @@
import { renderFaIcon, schemaPage, customPage } from './helpers'
export const postListSection = {
key: 'post-list',
label: '文章&列表',
icon: renderFaIcon('fas fa-file-alt'),
route: '/post-list',
children: [
schemaPage({
key: 'post-list-list',
name: 'PostListList',
label: '文章列表',
route: '/post-list/list',
title: '文章列表',
desc: '列表样式、元信息开关、分页方式配置。',
canonicalDomain: 'post_list',
section: 'list',
}),
schemaPage({
key: 'post-list-thumb',
name: 'PostListThumb',
label: '列表缩略图',
route: '/post-list/thumb',
title: '列表缩略图',
desc: '缩略图策略、封面回退、多图模式配置。',
canonicalDomain: 'post_list',
section: 'thumb',
}),
schemaPage({
key: 'post-list-page',
name: 'PostListPage',
label: '文章页面',
route: '/post-list/page',
component: 'PostPageSettings',
title: '文章页面',
desc: '文章页布局、目录树、灯箱、版权区配置。',
canonicalDomain: 'post_list',
section: 'page',
}),
schemaPage({
key: 'post-list-filter',
name: 'PostListFilter',
label: '高级筛选',
route: '/post-list/filter',
title: '高级筛选',
desc: '筛选栏、排序方式、分类筛选配置。',
canonicalDomain: 'post_list',
section: 'filter',
}),
schemaPage({
key: 'post-list-feature',
name: 'PostListFeature',
label: '文章功能',
route: '/post-list/feature',
title: '文章功能',
desc: '收藏、分享、阅读进度、相关推荐等功能开关。',
canonicalDomain: 'post_list',
section: 'feature',
}),
schemaPage({
key: 'post-list-share',
name: 'PostListShare',
label: '分享设置',
route: '/post-list/share',
title: '分享设置',
desc: '配置微信分享凭据、海报分享和社交分享选项。',
canonicalDomain: 'post_list',
section: 'share',
}),
schemaPage({
key: 'post-list-comment',
name: 'PostListComment',
label: '评论设置',
route: '/post-list/comment',
component: 'CommentSettings',
title: '评论设置',
desc: '评论排序、楼层展示、登录限制、回复限制等配置。',
canonicalDomain: 'post_list',
section: 'comment',
}),
schemaPage({
key: 'post-list-submit',
name: 'PostListSubmit',
label: '前台投稿',
route: '/post-list/submit',
title: '前台投稿',
desc: '配置前台投稿表单字段、审核流程、附件权限和封面策略。',
canonicalDomain: 'post_list',
section: 'submit',
}),
],
}
+157
View File
@@ -0,0 +1,157 @@
import { renderFaIcon, schemaPage, customPage } from './helpers'
export const shopSection = {
key: 'shop',
label: '商城&商品',
icon: renderFaIcon('fas fa-shopping-cart'),
route: '/shop',
children: [
customPage({
key: 'shop-products',
name: 'ShopProducts',
label: '商品管理',
route: '/shop/products',
component: 'ShopProducts',
title: '商品管理',
desc: '管理所有商品的上架、编辑和库存。',
canonicalDomain: 'shop',
section: 'products',
}),
customPage({
key: 'shop-orders',
name: 'ShopOrders',
label: '订单管理',
route: '/shop/orders',
component: 'ShopOrders',
title: '订单管理',
desc: '查看和管理所有交易订单。',
canonicalDomain: 'shop',
section: 'orders',
}),
customPage({
key: 'shop-withdrawals',
name: 'ShopWithdrawals',
label: '提现管理',
route: '/shop/withdrawals',
component: 'ShopWithdrawals',
title: '提现管理',
desc: '审核和管理创作者提现申请。',
canonicalDomain: 'shop',
section: 'withdrawals',
}),
customPage({
key: 'shop-coupons',
name: 'ShopCoupons',
label: '优惠券',
route: '/shop/coupons',
component: 'ShopCoupons',
title: '优惠券',
desc: '创建和管理优惠券。',
canonicalDomain: 'shop',
section: 'coupons',
}),
customPage({
key: 'shop-after-sale',
name: 'ShopAfterSale',
label: '售后管理',
route: '/shop/after-sale',
component: 'ShopAfterSale',
title: '售后管理',
desc: '管理退款、换货等售后工单。',
canonicalDomain: 'shop',
section: 'after-sale',
}),
customPage({
key: 'shop-shipping',
name: 'ShopShipping',
label: '物流管理',
route: '/shop/shipping',
component: 'ShopShipping',
title: '物流管理',
desc: '管理订单发货、物流单号和发货状态。',
canonicalDomain: 'shop',
section: 'shipping',
}),
schemaPage({
key: 'shop-basic',
name: 'ShopBasic',
label: '商城基础',
route: '/shop/basic',
title: '商城基础',
desc: '商城总开关、首页链接、面包屑和 URL 别名设置。',
canonicalDomain: 'shop',
section: 'basic',
}),
schemaPage({
key: 'shop-list',
name: 'ShopList',
label: '商品列表',
route: '/shop/list',
title: '商品列表',
desc: '商品列表排序、分页、卡片样式和销量显示配置。',
canonicalDomain: 'shop',
section: 'list',
}),
schemaPage({
key: 'shop-contact',
name: 'ShopContact',
label: '客服配置',
route: '/shop/contact',
title: '客服配置',
desc: '商品详情页客服按钮和联系方式配置。',
canonicalDomain: 'shop',
section: 'contact',
}),
schemaPage({
key: 'shop-single',
name: 'ShopSingle',
label: '商品详情',
route: '/shop/single',
title: '商品详情',
desc: '商品详情页布局、相关推荐和底部内容设置。',
canonicalDomain: 'shop',
section: 'single',
}),
schemaPage({
key: 'shop-product-defaults',
name: 'ShopProductDefaults',
label: '商品默认参数',
route: '/shop/product-defaults',
title: '商品默认参数',
desc: '主题级商品参数默认值,作为参数继承链的根。',
canonicalDomain: 'shop',
section: 'product-defaults',
}),
schemaPage({
key: 'shop-shipping-config',
name: 'ShopShippingConfig',
label: '物流配置',
route: '/shop/shipping-config',
title: '物流配置',
desc: '快递查询接口、物流公司列表和收货地址设置。',
canonicalDomain: 'shop',
section: 'shipping-config',
}),
schemaPage({
key: 'shop-timing',
name: 'ShopTiming',
label: '时效与售后原因',
route: '/shop/timing',
title: '时效与售后原因',
desc: '确认收货、评价、退货时效和售后原因配置。',
canonicalDomain: 'shop',
section: 'timing',
}),
customPage({
key: 'shop-dashboard',
name: 'ShopDashboard',
label: '商城概览',
route: '/shop',
component: 'ShopDashboard',
title: '商城概览',
desc: '商品管理、订单系统、库存管理等电商功能概览。',
canonicalDomain: 'shop',
section: 'dashboard',
}),
],
}
@@ -0,0 +1,29 @@
import { renderFaIcon, customPage } from './helpers'
export const themeInfoSection = {
key: 'tools-compat',
label: '兼容&工具',
icon: renderFaIcon('fas fa-toolbox'),
route: '/tools',
hidden: true,
children: [
customPage({
key: 'theme-info-dashboard',
name: 'ThemeInfoDashboard',
label: '主题信息',
route: '/theme-info',
component: 'ThemeInfoPage',
title: '主题信息',
desc: '主题版本、授权信息和帮助入口。',
}),
customPage({
key: 'theme-authorization',
name: 'ThemeAuthorization',
label: '主题授权',
route: '/theme-info/authorization',
component: 'ThemeAuthorizationPage',
title: '主题授权',
desc: '当前版本的授权策略与产品决策说明。',
}),
],
}
@@ -0,0 +1,67 @@
import { renderFaIcon, customPage, schemaPage } from './helpers'
export const toolsSection = {
key: 'tools-compat',
label: '兼容&工具',
icon: renderFaIcon('fas fa-toolbox'),
route: '/tools',
children: [
customPage({
key: 'tools-import-export',
name: 'ToolsImportExport',
label: '导入导出',
route: '/tools/import-export',
title: '导入导出',
desc: '导出当前配置、执行 dry-run 导入并按域重置。',
component: 'ToolsImportExport',
}),
schemaPage({
key: 'tools-backup',
name: 'ToolsBackup',
label: '数据备份',
route: '/tools/backup',
title: '数据备份',
desc: '管理设置快照、创建备份并执行恢复或删除。',
canonicalDomain: 'tools',
section: 'backup',
}),
customPage({
key: 'tools-health',
name: 'ToolsHealth',
label: '健康检查',
route: '/tools/health',
title: '健康检查',
desc: '查看主题环境、数据表、邮箱验证迁移和系统诊断状态。',
component: 'ToolsHealth',
}),
customPage({
key: 'tools-migration',
name: 'ToolsMigration',
label: '迁移状态',
route: '/tools/migration',
title: '迁移状态',
desc: '查看数据库 schema 版本、设置迁移版本和迁移日志。',
component: 'ToolsMigration',
}),
customPage({
key: 'tools-email-rollback',
name: 'ToolsEmailRollback',
label: '邮件回滚',
route: '/tools/email-rollback',
title: '邮件回滚',
desc: '查看 14 天邮箱变更窗口内的账号并执行回滚。',
component: 'ToolsEmailRollback',
}),
customPage({
key: 'tools-update',
name: 'ToolsUpdate',
label: '更新中心',
route: '/tools/update',
title: '更新中心',
desc: '查看版本状态、检测更新并浏览更新日志与教程入口。',
component: 'ToolsUpdate',
canonicalDomain: 'tools',
section: 'update',
}),
],
}
@@ -0,0 +1,188 @@
import { renderFaIcon, schemaPage, customPage } from './helpers'
export const usersSection = {
key: 'users',
label: '用户&互动',
icon: renderFaIcon('fas fa-users'),
route: '/users',
children: [
schemaPage({
key: 'users-auth',
name: 'UsersAuth',
label: '注册登录',
route: '/users/auth',
title: '注册登录',
desc: '注册方式、登录限制和密码策略配置。',
canonicalDomain: 'users',
section: 'auth',
}),
schemaPage({
key: 'users-oauth',
name: 'UsersOauth',
label: '第三方登录',
route: '/users/oauth',
title: '第三方登录',
desc: 'GitHub、Gitee、QQ、Google 等第三方登录配置。',
canonicalDomain: 'users',
section: 'oauth',
}),
customPage({
key: 'users-features',
name: 'UsersFeatures',
label: '用户功能',
route: '/users/features',
component: 'UsersFeatures',
title: '用户功能',
desc: '用户中心与个人主页模块配置。',
canonicalDomain: 'users',
section: 'features',
}),
customPage({
key: 'users-signin',
name: 'UsersSignin',
label: '签到奖励',
route: '/users/signin',
component: 'UsersSignin',
title: '签到奖励',
desc: '签到规则、连续签到奖励和签到页面配置。',
canonicalDomain: 'users',
section: 'signin',
}),
customPage({
key: 'users-credits',
name: 'UsersCredits',
label: '用户积分',
route: '/users/credits',
title: '用户积分',
desc: '积分规则、积分日志和用户积分管理。',
component: 'CmsCredits',
canonicalDomain: 'users',
section: 'credits',
}),
customPage({
key: 'users-verify',
name: 'UsersVerify',
label: '身份认证',
route: '/users/verify',
component: 'UsersVerify',
status: 'available',
title: '身份认证',
desc: '身份认证字段、审核流和展示标签。',
canonicalDomain: 'users',
section: 'verify',
}),
customPage({
key: 'users-level',
name: 'UsersLevel',
label: '用户等级',
route: '/users/level',
component: 'UsersLevel',
status: 'available',
title: '用户等级',
desc: '等级规则、升级条件和权益映射。',
canonicalDomain: 'users',
section: 'level',
}),
customPage({
key: 'users-badge',
name: 'UsersBadge',
label: '用户徽章',
route: '/users/badge',
component: 'UsersBadge',
status: 'available',
title: '用户徽章',
desc: '徽章规则、授予条件和前台展示。',
canonicalDomain: 'users',
section: 'badge',
}),
schemaPage({
key: 'users-notifications',
name: 'UsersNotifications',
label: '消息通知',
route: '/users/notifications',
title: '消息通知',
desc: '站内通知、邮件通知和通知策略配置。',
canonicalDomain: 'users',
section: 'notifications',
}),
customPage({
key: 'users-invite-codes',
name: 'UsersInviteCodes',
label: '邀请码运营',
route: '/users/invite-codes',
component: 'UsersInviteCodes',
title: '邀请码运营',
desc: '管理邀请码列表、生成新邀请码和查看邀请统计。',
canonicalDomain: 'users',
section: 'invite-codes',
}),
schemaPage({
key: 'users-sms',
name: 'UsersSms',
label: '短信接口',
route: '/users/sms',
title: '短信接口',
desc: '配置短信验证码和短信通知服务的供应商、模板和限流策略。',
canonicalDomain: 'users',
section: 'sms',
}),
schemaPage({
key: 'users-wechat',
name: 'UsersWechat',
label: '微信通知',
route: '/users/wechat',
title: '微信通知',
desc: '配置微信模板消息、订阅/解绑和站外通知策略。',
canonicalDomain: 'users',
section: 'wechat',
}),
customPage({
key: 'users-wechat-template',
name: 'UsersWechatTemplate',
label: '微信模板消息',
route: '/users/wechat-template',
component: 'UsersWechatTemplate',
status: 'available',
title: '微信模板消息',
desc: '配置微信公众号模板消息推送。',
canonicalDomain: 'users',
section: 'wechat-template',
}),
customPage({
key: 'users-messages',
name: 'UsersMessages',
label: '消息中心',
route: '/users/messages',
component: 'UsersMessages',
status: 'available',
title: '消息中心',
desc: '管理站内通知、系统消息和用户私信记录。',
canonicalDomain: 'users',
section: 'messages',
}),
customPage({
key: 'users-ban',
name: 'UsersBan',
label: '禁封管理',
route: '/users/ban',
component: 'UsersBan',
status: 'available',
title: '禁封管理',
desc: '查看和管理用户封禁、限制状态。',
canonicalDomain: 'users',
section: 'ban',
}),
customPage({
key: 'users-report',
name: 'UsersReport',
label: '禁封/举报',
route: '/users/report',
component: 'UsersReport',
status: 'available',
title: '禁封/举报',
desc: '举报受理、用户封禁和治理台账。',
canonicalDomain: 'users',
section: 'report',
}),
],
}
@@ -0,0 +1,28 @@
import { ALL_SCHEMAS, CANONICAL_SCHEMA_DOMAINS, normalizeSchemaDomain } from '@/schema/index.js'
function cloneDefaults(defaults = {}) {
return JSON.parse(JSON.stringify(defaults))
}
export function getSectionDefaults(domain, section) {
const domainKey = normalizeSchemaDomain(domain)
const sectionSchema = ALL_SCHEMAS[domainKey]?.[section]
return cloneDefaults(sectionSchema?.defaults || {})
}
export function getDomainDefaults(domain) {
const domainKey = normalizeSchemaDomain(domain)
const sections = Object.values(ALL_SCHEMAS[domainKey] || {})
return sections.reduce((defaults, schema) => {
return {
...defaults,
...cloneDefaults(schema?.defaults || {}),
}
}, {})
}
export const SETTINGS_DEFAULTS_BY_DOMAIN = CANONICAL_SCHEMA_DOMAINS.reduce((defaults, domain) => {
defaults[domain] = getDomainDefaults(domain)
return defaults
}, {})