feat(frontend): SortableJS 改为本地依赖,移除公网 CDN 运行时依赖(R33)

- package.json: 新增 sortablejs@^1.15.0(dependencies)
- src/main.js: import Sortable + 挂载 window.Sortable
  (保留全局挂载形式 => Admin.vue 的 window.Sortable.* 零改动)
- index.html: 删除 cdn.jsdelivr.net 的 <script>,留注释说明原因
- 原因: 内网/离线部署时 CDN 不可达 => window.Sortable 为 undefined,
  而 Admin.vue:3089/3276 的 `if (!window.Sortable) return` 会静默吞掉
  新闻/轮播的拖拽排序(界面零提示)
- 验证: 真 chromium 16/16 PASS(含整站 0 次 CDN 请求、宿主元素 expando
  Sortable<数字> 探针、news/carousel handle 正确、0 pageerror/0 console.error);
  构建 ✓ built in 18.57s / VITE_EXIT=0; TDZ src 38 + dist 26 全 PASS
This commit is contained in:
2026-09-29 09:57:48 +08:00
parent cb672b621a
commit 042e0a8e1f
4 changed files with 18 additions and 1 deletions

View File

@@ -8,6 +8,13 @@ import 'element-plus/dist/index.css'
// 全局样式(含 Element Plus 主题色变量,防止 getThemeColors 解构 undefined 报错)
import './styles/global.css'
// SortableJS:新闻/轮播的拖拽排序依赖 window.Sortable(见 Admin.vue initNewsSortable/initCarouselSortable)。
// 原先由 index.html 从 cdn.jsdelivr.net 加载,内网/离线环境取不到时会静默失效
// (Admin.vue 内的 `if (!window.Sortable) return` 守卫不会报错也不提示)。
// 改为本地依赖并由 Vite 打包进产物,彻底消除对外网 CDN 的运行时依赖。
import Sortable from 'sortablejs'
window.Sortable = Sortable
import App from './App.vue'
import router from './router'
// 主动 token 续期(防活跃用户因 token 过期被强制踢回登录页)