仰望星辰工作室

better-staridc-MNBT

better-staridc-MNBT/ templates/tdesign/docker/_spa_boot.php 3.9 KB · 95 行 原始文件
Z zfhsh first commit 2 天前
1<?php
2/**
3 * TDesign Docker 控制台 SPA 公共启动片段
4 * 注入 window.__TD_BOOT__ 并挂载构建产物
5 *
6 * 由 tdesign/docker/ 下的入口视图(login/console/appstore/...)include
7 * 依赖:IN_CRONLITE 已定义、docker.member.php 已加载
8 */
9if (!defined('IN_CRONLITE')) {
10 exit('Access Denied');
11}
12
13$td_dist = __DIR__ . '/dist';
14$td_js = $td_dist . '/assets/index.js';
15$td_css = $td_dist . '/assets/index.css';
16$td_ver = is_file($td_js) ? (string)@filemtime($td_js) : (string)time();
17
18// 当前 Docker 用户(login 入口为 null)
19$dkUser = isset($me) && is_array($me) ? $me : (function_exists('docker_auth_current') ? docker_auth_current() : null);
20$dkPlan = null;
21if ($dkUser) {
22 $dkPlan = isset($plan) && is_array($plan) ? $plan : (function_exists('docker_user_plan') ? docker_user_plan($dkUser) : null);
23}
24
25$boot = [
26 'siteName' => $conf['name'] ?? 'MNBT',
27 'footer' => $conf['hxp'] ?? '',
28 'ajaxBase' => './ajax.php',
29 'theme' => 'tdesign',
30 'version' => '0.3.0',
31 'entry' => $td_entry ?? 'console',
32 'hash' => $td_hash ?? '',
33 'captchaBase' => mnbt_theme_url('dist/captcha-images/', 'docker'),
34 'dockerUser' => $dkUser ? array_merge($dkUser, [
35 'password_hash' => null,
36 'plan_name' => $dkPlan['name'] ?? '',
37 'cpu_max' => $dkPlan['cpu_max'] ?? 1,
38 'mem_max' => $dkPlan['mem_max'] ?? 512,
39 'disk_max' => $dkPlan['disk_max'] ?? '0',
40 'proxy_max' => $dkPlan['proxy_max'] ?? '0',
41 ]) : null,
42];
43
44// 视图可在 include 前设置 $td_inject(数组),把页面级数据注入 boot
45if (isset($td_inject) && is_array($td_inject)) {
46 foreach ($td_inject as $k => $v) {
47 $boot[$k] = $v;
48 }
49}
50?>
51<!DOCTYPE html>
52<html lang="zh-CN">
53<head>
54<meta charset="UTF-8" />
55<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
56<title><?= htmlspecialchars(($title ?? 'Docker 控制台') . ' · ' . ($conf['name'] ?? 'MNBT'), ENT_QUOTES, 'UTF-8') ?></title>
57<link rel="icon" href="<?= htmlspecialchars(mnbt_asset_url('images/logo-ico.png'), ENT_QUOTES, 'UTF-8') ?>" type="image/ico" />
58<link rel="stylesheet" href="<?= htmlspecialchars(mnbt_asset_url('css/materialdesignicons.min.css'), ENT_QUOTES, 'UTF-8') ?>" />
59<?php if (is_file($td_css)): ?>
60<link rel="stylesheet" href="<?= htmlspecialchars(mnbt_theme_url('dist/assets/index.css', 'docker'), ENT_QUOTES, 'UTF-8') ?>?v=<?= $td_ver ?>" />
61<?php endif; ?>
62<style>
63 html, body, #app { margin: 0; padding: 0; height: 100%; background: #f2f3f5; }
64 .td-boot-missing { max-width: 540px; margin: 12vh auto; padding: 32px; border-radius: 12px; background: #fff; border: 1px solid #e7e7e7; font-family: system-ui, -apple-system, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif; color: #1a2e28; }
65 .td-boot-missing h2 { margin: 0 0 12px; font-size: 18px; color: #d54941; }
66 .td-boot-missing code { background: #f3f3f3; padding: 2px 8px; border-radius: 4px; font-size: 13px; }
67 .td-boot-missing p { margin: 10px 0; line-height: 1.7; font-size: 14px; }
68</style>
69</head>
70<body>
71<div id="app">
72<?php if (!is_file($td_js)): ?>
73 <div class="td-boot-missing">
74 <h2>TDesign Docker 控制台尚未构建</h2>
75 <p>请在服务器或本机执行:</p>
76 <p><code>cd templates/tdesign/spa &amp;&amp; npm install &amp;&amp; npm run build:docker</code></p>
77 <p>构建产物应位于 <code>templates/tdesign/docker/dist/</code></p>
78 </div>
79<?php endif; ?>
80</div>
81<script>
82window.__TD_BOOT__ = <?= json_encode($boot, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) ?>;
83<?php if (!empty($td_hash)): ?>
84if (window.__TD_BOOT__.hash) {
85 if (!location.hash || location.hash === '#' || location.hash === '#/') {
86 location.hash = window.__TD_BOOT__.hash;
87 }
88}
89<?php endif; ?>
90</script>
91<?php if (is_file($td_js)): ?>
92<script type="module" src="<?= htmlspecialchars(mnbt_theme_url('dist/assets/index.js', 'docker'), ENT_QUOTES, 'UTF-8') ?>?v=<?= $td_ver ?>"></script>
93<?php endif; ?>
94</body>
95</html>