feat(widgets): add phase 4 validation and accessibility

This commit is contained in:
kate522 committed 2026-08-17 19:14:40 +08:00
1 parent 8cad3c2d3d
commit e1723a8f08
117 files changed
+6 -17338

No files matched your search

@@ -1,88 +0,0 @@
export const ipSchema = {
key: 'extensions.ip',
title: 'IP归属地',
icon: 'fas fa-map-marker-alt',
description: '配置 IP 数据源、缓存策略和前台归属地展示。',
defaults: {
ip_geo_enabled: false,
ip_addr_sdk: 'null',
ip_geo_cache_ttl: 86400,
ip_geo_display: ['comment', 'user_home', 'user_center', 'post'],
ip_geo_format: 'province_city',
ip_geo_fallback_text: '',
ip_addr_sdk_qq_appkey: '',
ip_addr_sdk_qq_secretkey: '',
ip_addr_sdk_amap_appkey: '',
ip_addr_sdk_amap_secretkey: '',
},
groups: [
{
key: 'basic',
title: '基础配置',
icon: 'fas fa-globe',
fields: [
{ key: 'ip_geo_enabled', label: '启用 IP 归属地', type: 'switch', default: false, help: '开启后将在评论、用户主页等位置显示 IP 归属地信息' },
{
key: 'ip_addr_sdk',
label: 'IP 接口服务商',
type: 'radio',
default: 'null',
options: [
{ label: '轮流查询', value: 'polling' },
{ label: '腾讯位置服务', value: 'qq' },
{ label: '高德位置服务', value: 'amap' },
{ label: '太平洋公共接口', value: 'null' },
],
dependsOn: { key: 'ip_geo_enabled', value: true },
help: '优先使用国内接口,轮流查询会按腾讯→高德→公共接口顺序回退。',
},
{ key: 'ip_geo_cache_ttl', label: '缓存时间 (秒)', type: 'number', default: 86400, min: 3600, max: 604800, dependsOn: { key: 'ip_geo_enabled', value: true }, help: 'IP 查询结果缓存时长,避免频繁请求外部接口' },
],
},
{
key: 'providers',
title: '接口凭据',
icon: 'fas fa-key',
fields: [
{ key: 'ip_addr_sdk_qq_appkey', label: '腾讯 AppKey', type: 'input', default: '', dependsOn: { key: 'ip_addr_sdk', values: ['qq', 'polling'] }, help: '「腾讯位置服务」或「轮流查询」时填写;未填则轮询会跳过腾讯。' },
{ key: 'ip_addr_sdk_qq_secretkey', label: '腾讯 SecretKey', type: 'input', default: '', dependsOn: { key: 'ip_addr_sdk', values: ['qq', 'polling'] }, help: '启用 SK 签名时必填;未启用可留空。' },
{ key: 'ip_addr_sdk_amap_appkey', label: '高德 AppKey', type: 'input', default: '', dependsOn: { key: 'ip_addr_sdk', values: ['amap', 'polling'] }, help: '必须在高德开放平台创建「Web服务」类型 Key,并开通 IP 定位。选错平台会报 USERKEY_PLAT_NOMATCH。「轮流查询」时未填则跳过高德。' },
{ key: 'ip_addr_sdk_amap_secretkey', label: '高德 SecretKey', type: 'input', default: '', dependsOn: { key: 'ip_addr_sdk', values: ['amap', 'polling'] }, help: '若控制台启用了「数字签名」,必填安全密钥;未启用可留空。' },
],
},
{
key: 'display',
title: '展示设置',
icon: 'fas fa-eye',
fields: [
{
key: 'ip_geo_display',
label: '展示位置',
type: 'checkbox',
default: ['comment', 'user_home', 'user_center', 'post'],
options: [
{ label: '评论区', value: 'comment' },
{ label: '用户主页', value: 'user_home' },
{ label: '用户中心', value: 'user_center' },
{ label: '文章详细页', value: 'post' },
],
dependsOn: { key: 'ip_geo_enabled', value: true },
help: '用户主页/用户中心还需在「用户 → 用户功能」开启「显示城市」;评论区还需在评论设置开启「评论城市」。',
},
{
key: 'ip_geo_format',
label: '显示格式',
type: 'radio',
default: 'province_city',
options: [
{ label: '省份+城市', value: 'province_city' },
{ label: '仅省份', value: 'province' },
{ label: '国家+省份', value: 'country_province' },
],
dependsOn: { key: 'ip_geo_enabled', value: true },
},
{ key: 'ip_geo_fallback_text', label: '查询失败时文案', type: 'input', default: '', placeholder: '留空则不显示', dependsOn: { key: 'ip_geo_enabled', value: true } },
],
},
],
}
@@ -1,64 +0,0 @@
export const pushSchema = {
key: 'extensions.push',
title: '百度推送',
icon: 'fas fa-paper-plane',
description: '配置搜索引擎主动推送、批量提交和状态追踪。',
defaults: {
baidu_push_enabled: false,
baidu_push_token: '',
baidu_push_auto: true,
baidu_push_on_publish: true,
baidu_push_on_update: false,
baidu_push_batch_size: 50,
baidu_push_log_enabled: true,
xzh_on: false,
xzh_appid: '',
xzh_render_tail: true,
xzh_jsonld_single: true,
xzh_jsonld_page: false,
xzh_jsonld_img: false,
},
groups: [
{
key: 'basic',
title: '推送配置',
icon: 'fas fa-rocket',
fields: [
{ key: 'baidu_push_enabled', label: '启用百度推送', type: 'switch', default: false, help: '开启后将自动向百度搜索推送页面链接' },
{ key: 'baidu_push_token', label: '推送 Token', type: 'input', default: '', dependsOn: { key: 'baidu_push_enabled', value: true }, help: '在百度搜索资源平台获取的推送准入 Token' },
],
},
{
key: 'trigger',
title: '触发规则',
icon: 'fas fa-bolt',
fields: [
{ key: 'baidu_push_auto', label: '自动推送 (页面加载时)', type: 'switch', default: true, dependsOn: { key: 'baidu_push_enabled', value: true }, help: '在前台页面中嵌入百度自动推送 JS 代码' },
{ key: 'baidu_push_on_publish', label: '发布时主动推送', type: 'switch', default: true, dependsOn: { key: 'baidu_push_enabled', value: true } },
{ key: 'baidu_push_on_update', label: '更新时推送', type: 'switch', default: false, dependsOn: { key: 'baidu_push_enabled', value: true } },
],
},
{
key: 'xzh',
title: '熊掌号 / JSON-LD',
icon: 'fas fa-paw',
fields: [
{ key: 'xzh_on', label: '启用熊掌号', type: 'switch', default: false },
{ key: 'xzh_appid', label: '百度 AppID', type: 'input', default: '', dependsOn: { key: 'xzh_on', value: true } },
{ key: 'xzh_render_tail', label: '文章底部显示熊掌号尾部', type: 'switch', default: true, dependsOn: { key: 'xzh_on', value: true } },
{ key: 'xzh_jsonld_single', label: '文章页 JSON-LD', type: 'switch', default: true, dependsOn: { key: 'xzh_on', value: true } },
{ key: 'xzh_jsonld_page', label: '页面 JSON-LD', type: 'switch', default: false, dependsOn: { key: 'xzh_on', value: true } },
{ key: 'xzh_jsonld_img', label: '不添加图片', type: 'switch', default: false, dependsOn: { key: 'xzh_on', value: true } },
],
},
{
key: 'advanced',
title: '高级设置',
icon: 'fas fa-cog',
fields: [
{ key: 'baidu_push_batch_size', label: '批量推送条数', type: 'number', default: 50, min: 1, max: 500, dependsOn: { key: 'baidu_push_enabled', value: true } },
{ key: 'baidu_push_log_enabled', label: '记录推送日志', type: 'switch', default: true, dependsOn: { key: 'baidu_push_enabled', value: true } },
],
},
],
}