wpmind/includes/Admin/AdminAssets.php
LinuxJoy 9a9003605c fix(release): vendor 资源被排除导致 CDN 加载失败
release.yml rsync --exclude="vendor" 匹配了 assets/vendor/ 和
assets/js/vendor/,导致发布 zip 缺少 Remixicon 字体和 Chart.js。
改为 --exclude="/vendor" 仅排除根目录 Composer vendor。

同时移除 Chart.js CDN fallback(本地文件已打包),版本升至 0.11.4。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 11:41:35 +08:00

203 lines
5.4 KiB
PHP

<?php
/**
* Admin assets loader.
*
* @package WPMind\Admin
* @since 3.3.0
*/
declare(strict_types=1);
namespace WPMind\Admin;
/**
* Class AdminAssets
*/
final class AdminAssets {
/**
* Singleton instance.
*
* @var AdminAssets|null
*/
private static ?AdminAssets $instance = null;
/**
* Get singleton instance.
*
* @return AdminAssets
*/
public static function instance(): AdminAssets {
if ( null === self::$instance ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Constructor.
*/
private function __construct() {}
/**
* 加载管理后台资源
*
* @param string $hook_suffix 当前页面钩子后缀
* @since 1.1.0
*/
public function enqueue_admin_assets( string $hook_suffix ): void {
// 一级菜单的 hook suffix 是 toplevel_page_{menu_slug}
if ( 'toplevel_page_wpmind' !== $hook_suffix ) {
return;
}
// Remixicon 图标库(本地打包)
wp_enqueue_style(
'remixicon',
WPMIND_PLUGIN_URL . 'assets/vendor/remixicon/remixicon.css',
[],
'4.9.1'
);
wp_enqueue_style(
'wpmind-admin',
WPMIND_PLUGIN_URL . 'assets/css/admin.css',
[ 'remixicon' ],
WPMIND_VERSION
);
wp_enqueue_style(
'wpmind-modules',
WPMIND_PLUGIN_URL . 'assets/css/modules.css',
[ 'wpmind-admin' ],
WPMIND_VERSION
);
wp_enqueue_style(
'wpmind-overview',
WPMIND_PLUGIN_URL . 'assets/css/overview.css',
[ 'wpmind-admin' ],
WPMIND_VERSION
);
wp_enqueue_style(
'wpmind-panels',
WPMIND_PLUGIN_URL . 'assets/css/panels.css',
[ 'wpmind-admin' ],
WPMIND_VERSION
);
wp_enqueue_style(
'wpmind-routing',
WPMIND_PLUGIN_URL . 'assets/css/pages/routing.css',
[ 'wpmind-panels' ],
WPMIND_VERSION
);
wp_enqueue_style(
'wpmind-module-layout',
WPMIND_PLUGIN_URL . 'assets/css/components/module-layout.css',
[ 'wpmind-admin' ],
WPMIND_VERSION
);
wp_enqueue_style(
'wpmind-responsive',
WPMIND_PLUGIN_URL . 'assets/css/responsive.css',
[ 'wpmind-panels', 'wpmind-routing' ],
WPMIND_VERSION
);
// Chart.js 图表库(本地打包,无外部 CDN 依赖)
wp_register_script(
'chartjs',
WPMIND_PLUGIN_URL . 'assets/js/vendor/chartjs/chart.umd.min.js',
[],
'4.5.0',
true
);
wp_enqueue_script(
'wpmind-admin-ui',
WPMIND_PLUGIN_URL . 'assets/js/admin-ui.js',
[ 'jquery' ],
WPMIND_VERSION,
true
);
wp_enqueue_script(
'wpmind-admin-boot',
WPMIND_PLUGIN_URL . 'assets/js/admin-boot.js',
[ 'wpmind-admin-ui' ],
WPMIND_VERSION,
true
);
wp_enqueue_script(
'wpmind-admin-endpoints',
WPMIND_PLUGIN_URL . 'assets/js/admin-endpoints.js',
[ 'wpmind-admin-boot' ],
WPMIND_VERSION,
true
);
wp_enqueue_script(
'wpmind-admin-routing',
WPMIND_PLUGIN_URL . 'assets/js/admin-routing.js',
[ 'wpmind-admin-boot', 'jquery-ui-sortable' ],
WPMIND_VERSION,
true
);
wp_enqueue_script(
'wpmind-admin-analytics',
WPMIND_PLUGIN_URL . 'assets/js/admin-analytics.js',
[ 'wpmind-admin-boot', 'chartjs' ],
WPMIND_VERSION,
true
);
wp_enqueue_script(
'wpmind-admin-budget',
WPMIND_PLUGIN_URL . 'assets/js/admin-budget.js',
[ 'wpmind-admin-boot' ],
WPMIND_VERSION,
true
);
wp_enqueue_script(
'wpmind-admin-geo',
WPMIND_PLUGIN_URL . 'assets/js/admin-geo.js',
[ 'wpmind-admin-boot' ],
WPMIND_VERSION,
true
);
wp_enqueue_script(
'wpmind-admin-modules',
WPMIND_PLUGIN_URL . 'assets/js/admin-modules.js',
[ 'wpmind-admin-boot' ],
WPMIND_VERSION,
true
);
// 完整的国际化字符串
wp_localize_script( 'wpmind-admin-boot', 'wpmindL10n', [
'testSuccess' => __( '连接成功!', 'wpmind' ),
'testFailed' => __( '连接失败:', 'wpmind' ),
'testing' => __( '测试中...', 'wpmind' ),
'enabled' => __( '已启用', 'wpmind' ),
'apiKeyRequired' => __( '请为已启用的服务填写 API Key', 'wpmind' ),
'apiKeySet' => __( '已设置', 'wpmind' ),
'apiKeyCleared' => __( 'API Key 将被清除', 'wpmind' ),
] );
// 为 AJAX 添加数据
wp_localize_script( 'wpmind-admin-boot', 'wpmindData', [
'nonce' => wp_create_nonce( 'wpmind_ajax' ),
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'version' => WPMIND_VERSION,
'debug' => defined( 'WP_DEBUG' ) && WP_DEBUG,
] );
}
}