简介:AdminLTE-3.1.0-rc 是一款基于 Bootstrap 的响应式后台管理前端框架,主要面向需要快速搭建 Dashboard 或企业级管理界面的 Web 开发者。它提供导航栏、卡片、表格、表单、模态框等丰富组件,并支持多种配色与深色模式,适合从初级到中级的前端开发者直接上手或二次定制。该压缩包约 23.88MB,为预发布候选版本,适合希望提前体验新特性或参与测试的团队;不过上游暂未提供文件总数与类型明细,需下载后自行查看目录结构。目前已有 202 人学习下载,社区活跃度较高,官方文档提供安装指南与 API 参考,可帮助使用者快速掌握配置方式。通过这份资源,开发者可以获得一套完整可用的后台 UI 基础模板,节省从零搭建样式系统的时间,同时可结合源码研究其栅格布局、主题定制与组件封装思路,为自身项目提供参考。
1. AdminLTE-3.1.0-rc.zip 是什么:后台项目里那个包到底解决了什么
拿到一个AdminLTE-3.1.0-rc.zip,第一反应不是解压,而是先想清楚它在整个后台系统里的位置。AdminLTE 是构建管理后台最常用的开源模板框架之一,3.1.0-rc 是 3.x 系列的候选发布版,意味着功能与界面已冻结,只等 bug 收敛。它给你打包好了整套后台骨架:侧边栏、顶栏、卡片、表格样式、控件皮肤,以及一堆开箱即用的 jQuery 插件。你不需要从零画按钮和导航,只需要在这个骨架上填自己的业务页面。适合快速做内部管理系统、运营后台、数据看板这类项目,也适合前端经验不多但需要独立交付完整后台的开发者。
这个 zip 包的价值不是某一两个炫酷组件,而是它把「后台该有的样子」标准化了。解压之后你会看到 dist 目录里已经编译好的 CSS 和 JS,以及 plugins 目录里几十个常用插件。真正用起来,你会发现它比自己在 Bootstrap 上拼装省下大量时间,但也会遇到版本兼容、资源路径、构建整合这些绕不开的坑。下文从一个实际交付过的后台项目视角,拆解这个包从解压到上线的完整路径。
2. 拿到 zip 后怎么落地:解压、目录结构与最小接入步骤
2.1 解压后先认清目录:dist、plugins 分别该放哪
压缩包解压后,根目录下最关键的只有两个地方:dist和plugins。dist是编译好的可交付资源,里面css、js、img三个子目录,对应后台的全局样式、核心脚本和内置图片;plugins存的是第三方插件,比如图表用的 Chart.js、表格用的 DataTables、弹窗用的 SweetAlert2,它们未经打包,需要单独引入。很多人把整个压缩包直接扔进项目里,这不是不行,但会让仓库变成一锅粥。
我一般会这样处理:只保留dist和plugins,根目录下的文档、源码示例全不要。然后在项目里建assets/vendor/adminlte放dist,建assets/vendor/plugins放plugins。这样做的原因是dist/css/adminlte.css和dist/js/adminlte.js是编译后的成品,源码里的 SCSS 文件对你没意义,除非你打算改主题变量。plugins 目录则要按需裁剪,否则体积会非常难看,备份起来也慢。
2.2 用静态 HTML 快速跑通 AdminLTE 的最小页面
先别急着接后端和构建工具,用纯静态 HTML 验证一下包有没有损坏、依赖是否齐全,是最省事的起步方式。在项目根目录建一个index.html,按下面的最小结构写:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>AdminLTE 3.1-rc 快速验证页</title> <!-- 依赖必须按顺序:Bootstrap 样式、AdminLTE 样式 --> <link rel="stylesheet" href="assets/vendor/plugins/fontawesome-free/css/all.min.css"> <link rel="stylesheet" href="assets/vendor/plugins/overlayScrollbars/css/OverlayScrollbars.min.css"> <link rel="stylesheet" href="assets/vendor/adminlte/dist/css/adminlte.min.css"> </head> <body class="hold-transition sidebar-mini"> <div class="wrapper"> <!-- 导航栏 --> <nav class="main-header navbar navbar-expand navbar-white navbar-light">…</nav> <!-- 侧边栏 --> <aside class="main-sidebar sidebar-dark-primary elevation-4">…</aside> <!-- 内容区 --> <div class="content-wrapper"> <div class="content"> <div class="container-fluid"> <div class="card"><div class="card-body">Hello AdminLTE</div></div> </div> </div> </div> <footer class="main-footer">…</footer> </div> <!-- 依赖脚本顺序:jQuery、Bootstrap、AdminLTE --> <script src="assets/vendor/plugins/jquery/jquery.min.js"></script> <script src="assets/vendor/plugins/bootstrap/js/bootstrap.bundle.min.js"></script> <script src="assets/vendor/plugins/overlayScrollbars/js/jquery.overlayScrollbars.min.js"></script> <script src="assets/vendor/adminlte/dist/js/adminlte.min.js"></script> </body> </html>这段代码里,body上的hold-transition sidebar-mini两个类不是装饰,hold-transition让侧边栏折叠时有过渡动画,sidebar-mini开启迷你侧边栏模式。wrapper是 AdminLTE 布局的根容器,所有区域必须在它里面。content-wrapper是内容区,自带上下内边距和背景色,不用自己再包一层div. 注意脚本顺序:jQuery 必须最先加载,Bootstrap 的 bundle 文件包含了 Popper,放在 jQuery 后面,最后才是adminlte.js。把顺序打乱,侧边栏的点击事件和卡片折叠功能就会失效。
验证方式是打开浏览器控制台,看有没有报错。没有红字,侧边栏能折叠,说明这个 rc 包本身是好的,可以继续往下做。如果这里就报错,先检查文件路径和控制台里的 404,多半是相对路径写错了,优先用浏览器开发者工具的 Network 面板确认四个 CSS 和四个 JS 是否都返回了 200。
2.3 引入方式选择:本地依赖还是 CDN 不可用时的离线方案
内部管理系统通常部署在隔离网络,线上 CDN 资源不可达,所以本地依赖永远是首选。AdminLTE 3.1-rc 的官方文档推荐的 CDN 路径可以作为比对基线,但实际部署时要把所有 CSS 和 JS 都下载到plugins目录里。需要下载的不止 AdminLTE 自己的两个文件,还有它依赖的 Bootstrap、jQuery、FontAwesome、OverlayScrollbars。Official 文档里列出来的这些依赖版本是固定的,不要随意升级,否则可能出现样式错位或 JS 报错。
有一种情况建议例外:项目本身是纯前端单页应用,且服务器能访问公网。这时候可以直接引用 CDN,减少服务器存储压力,加载速度也可能更快。但要注意,AdminLTE 3.1-rc 整体还是以 jQuery 为中心的,如果你后续要接 Vue 或 React,jQuery 依赖本身就会成为负担。在本地部署和 CDN 之间摇摆时,我给团队的默认原则是:先本地后 CDN,因为内网隔离环境的成本远高于节省的那点带宽。后面在构建整合里,我们还会进一步用打包工具把这些本地依赖管起来。
3. 基于 AdminLTE 3.1.0-rc 定制布局:侧边栏、顶部导航与卡片改造
3.1 侧边栏菜单折叠与多级菜单的配置要点
侧边栏是后台的骨架,AdminLTE 3.1-rc 的侧边栏结构由aside.main-sidebar和内部的.sidebar组成。最常见的需求是菜单分组、多级菜单、默认展开指定项。直接看片段:
<aside class="main-sidebar sidebar-dark-primary elevation-4"> <a href="#" class="brand-link"> <img src="assets/vendor/adminlte/dist/img/AdminLTELogo.png" alt="logo" class="brand-image img-circle elevation-3" style="opacity: .8"> <span class="brand-text font-weight-light">内部系统</span> </a> <div class="sidebar"> <nav class="mt-2"> <ul class="nav nav-pills nav-sidebar flex-column">/* 只固定顶部导航栏,侧边栏随页面滚动 */ .main-header.navbar { position: fixed; top: 0; left: 0; right: 0; z-index: 1030; } .content-wrapper { padding-top: 57px; /* 导航栏实际高度,按需调整 */ }这个覆盖方案在页面内容较长时很有用。默认情况下,AdminLTE 的导航栏高度约 57px,但会因内部元素边距不同而略有变化。我用开发工具实测后,直接量出.main-header的高度再填进去,比猜数字准。另外,顶部导航栏的响应式行为:在窄屏下,左上角会出现汉堡按钮,点击后侧边栏以抽屉方式滑出。这个行为由adminlte.js内置处理,不需要你写代码,但前提是navbar里有><div class="card card-primary card-outline"> <div class="card-header"> <h3 class="card-title">订单统计</h3> <div class="card-tools"> <button type="button" class="btn btn-tool">// 监听卡片折叠事件,用于记录用户操作或延迟加载内容 $(document).on('collapsed.lte.card', function(event) { // event.target 就是那卡片 DOM,可以在这里做数据回收 var card = event.target; console.log('卡片已折叠:', card.className); });
这段监听代码对># 在项目根目录初始化 package.json(已有则跳过) npm init -y # 安装 AdminLTE 的 rc 版本,注意包名是 admin-lte npm install admin-lte@3.1.0-rc --save-exact # 同时安装核心依赖,版本以 AdminLTE 官方文档为准 npm install jquery@3.6.0 bootstrap@4.6.1 --save-exact
--save-exact很关键。rc 版本意味着后续可能有 patch 更新,如果不锁定精确版本,npm install会把 AdminLTE 更新到同主版本的最新 rc,导致线上环境和本地不一致。我曾遇到过团队里有人跑了npm update后整个侧边栏皮肤变化的情况,排查半天才发现是 rc 小版本被自动升级了。所以在 package.json 里,admin-lte的版本号必须是"3.1.0-rc",不要带^或~前缀。
安装完成后,node_modules 里的admin-lte包和 zip 包结构类似,都是dist和plugins。构建时我们可以直接引用node_modules/admin-lte/dist/js/adminlte.min.js,但更推荐复制到自己的assets/vendor目录,避免 node_modules 里过深的路径增加 webpack 解析负担。复制用简单脚本即可:
# 将 AdminLTE 的 dist 和 plugins 复制到项目内的 vendor 目录 cp -r node_modules/admin-lte/dist assets/vendor/adminlte cp -r node_modules/admin-lte/plugins assets/vendor/plugins4.2 与 Vue/React 搭配时的取舍
AdminLTE 3.1-rc 是典型的 jQuery 生态产品,直接塞进 Vue 或 React 项目会引发双重事件绑定、组件卸载不干净等问题。常见做法有两个:一个是把 AdminLTE 当作纯静态布局壳,业务页面由框架组件渲染,两者互不干扰;另一个是用 vue-adminlte 这类适配封装,但封装的维护力度参差不齐,rc 版本很可能没跟上。
我经历过一个某跨平台系统的重构,管理层要求前端框架升级到 Vue,但设计稿不能变。当时没有继续沿用 jQuery 化的 AdminLTE,而是保留它的 CSS 作为设计语言基础,再手动用 Vue 重写侧边栏和顶栏的交互。这样做前期工作量增加了,但后续加页面、调交互都顺畅很多。如果你的项目是传统多页面应用,每个页面独立加载,那 AdminLTE 原封不动接入完全没问题;如果是 SPA,务必想清楚:菜单展开收起、卡片折叠这些交互是否能接受用 jQuery 操作 DOM 的方式。能接受,就把它当全局脚本在入口文件引入;不能接受,就只提取它编译好的 CSS 和布局骨架,交互自己写。
在入口文件里引入 AdminLTE 时,Vue 项目要防止$全局变量污染。建议把 jQuery 显式挂到 window 上,但不建议在组件里直接使用$(...),而是封装成一组独立的 DOM 操作函数,方便后续替换。React 同理,避免在 render 函数里直接操作 DOM,把 AdminLTE 的初始化动作放在componentDidMount之后执行。
4.3 构建产物里如何剥离不需要的插件
plugins目录里插件多到让人眼花,但一个业务系统通常只需要 DataTables、Chart.js、Select2 这几个。webpack 场景下可以通过模块方式按需引入,比如在入口 JS 里:
// 引入本地化后的 AdminLTE 核心脚本 import 'assets/vendor/adminlte/js/adminlte.min.js'; // 只引入实际要用的插件 import 'assets/vendor/plugins/datatables/jquery.dataTables.min.js'; import 'assets/vendor/plugins/datatables-bs4/js/dataTables.bootstrap4.min.js'; import 'assets/vendor/plugins/chart.js/chart.min.js';但要注意,插件之间可能有内部依赖。比如 DataTables 的 bs4 样式版,除了 jQuery 之外还依赖 Bootstrap 的样式类。剥离插件时不能只看插件自身的文件,还要看它的样式文件是否引用了字体或图片资源。最常见的坑是 FontAwesome 的webfonts目录必须保持相对路径,否则打包后图标全部变成方框。我处理这类问题的方法是:在 webpack 里对assets目录关闭强制 hash 文件名,保持字体文件路径不变,只对 JS/CSS 做内容 hash。
另外,AdminLTE 自己提供的adminlte.js里包含了对所有内置>// webpack.config.js 片段 const webpack = require('webpack'); module.exports = { plugins: [ new webpack.ProvidePlugin({ $: 'jquery', jQuery: 'jquery' }) ] };
5.2 图标不显示:离线环境缺字体文件
现象:页面上 FontAwesome 图标全部显示为一个小方框,或者 X 形状,但 CSS 文件加载正常。
原因:FontAwesome 的 CSS 里通过@font-face引用了webfonts目录下的fa-solid-900.woff2等字体文件。如果只复制了 CSS 而没复制字体文件,或者字体路径因为构建工具加了 hash 并且目录结构变了,浏览器就找不到字体。
解决:把plugins/fontawesome-free整个目录原样复制,且保持css和webfonts是兄弟目录。如果你的构建工具会改写资源路径,就在 CSS 内部引用的 url() 路径上使用相对路径,不要用绝对路径。我在某公司内网部署时遇到过更隐蔽的情况:部署目录带中文名,某些旧版浏览器解析 woff2 失败,后来统一成英文目录名解决。另外,AdminLTE 3.1-rc 用到图标还不止 FontAwesome,还有一部分内置图标是 SVGadminlte.min.js里通过 data URI 注入的,这部分不会受影响,所以会出现「一部分图标正常、一部分是方框」的情况,排查方向就锁定在 FontAwesome 字体文件上。
5.3 侧边栏高度错乱:Body 类与 wrapper 结构不匹配
现象:侧边栏背景色只覆盖了页面可视区的一半,或者折叠后内容区没有自动撑开,滚动条出现在内部区域而不是窗口上。
原因:AdminLTE 的布局依赖body上的 CSS 类与wrapper内部结构配合。比如body上同时有sidebar-mini和sidebar-collapse,两者会冲突,导致侧边栏宽度计算异常。另外,wrapper外面如果还包了其他div,会导致layout-fixed等类找不到正确的父级,高度计算失败。
解决:先检查body上的类,同一时刻只保留hold-transition和sidebar-mini或sidebar-collapse之一。再检查wrapper是否是body的直接子元素,中间不要插入其他标签。如果页面是通过后端模板渲染,注意母版页和子模板可能各自输出了body属性,合并后变成class="hold-transition sidebar-mini hold-transition sidebar-mini",同名类不会报错但会混乱。用浏览器元素面板查看body的实际类名,快速确认。对于滚动条问题,给content-wrapper加一个overflow-x-hidden类,能解决 AdminLTE 在窄屏下内容溢出导致的横向伪滚动条。
5.4 页面样式被覆盖:自定义 CSS 的加载时机与优先级
现象:自己写的样式总是被 AdminLTE 的样式覆盖,改了类名也不生效,或者某个元素在开发环境正常、打包后却变形。
原因:AdminLTE 的 CSS 选择器优先级并不低,特别是adminlte.css里大量使用了后代选择器和!important。如果自定义 CSS 在adminlte.min.css之前加载,那么同优先级下后加载的 AdminLTE 样式会赢。打包后顺序也可能因为代码分割而改变。
解决:把自定义 CSS 强制放到adminlte.min.css之后。如果项目用 webpack,可以使用 MiniCssExtractPlugin 的chunkFilename控制输出顺序,或者单独用<link>在页面头部最后引入。另外,不要试图用!important去硬碰,因为 AdminLTE 里也大量使用!important,谁在后谁赢,反而更难排查。更好的做法是给业务页面包一层独立的类,比如.page-order-list,所有业务样式都写在这个作用域下,利用后代选择器提高优先级:
.content-wrapper .page-order-list .card { border-radius: 0; /* 覆盖 AdminLTE 默认的圆角 */ }5.5 升级到 3.x 后布局 JS 失效:Bootstrap 5 与 jQuery 插件的兼容边界
现象:项目原本用的是 AdminLTE 2.x,某天升级到 3.1-rc,发现侧边栏的树形菜单不能展开,或者 DataTables 渲染出来的分页按钮样式不对。
原因:AdminLTE 3.x 从 Bootstrap 3 升级到了 Bootstrap 4(后续 3.2 才兼容 Bootstrap 5),很多 jQuery 插件的类名和事件名都变了。比如treeview的展开状态从.open变成了.menu-open,折叠方案从collapse变成了.collapsed。如果直接从旧项目复制页面结构,插件脚本还在监听旧类名,自然不工作。
解决:别把 2.x 的页面片段直接拷到 3.x。先跑一个官方pages目录里的示例页面,对比侧边栏结构和卡片的 data 属性。升级时重点关注三个地方:><!-- 通用查询卡片 --> <div class="card card-default"> <div class="card-header"> <h3 class="card-title">查询条件</h3> <div class="card-tools"> <button type="button" class="btn btn-tool">/* 内部主题变量:把 AdminLTE 关键色提取到根节点 */ :root { --lte-primary: #007bff; --lte-danger: #dc3545; --lte-success: #28a745; --lte-warning: #ffc107; --lte-info: #17a2b8; --lte-sidebar-dark-bg: #343a40; }
然后你在自己的业务样式里用var(--lte-primary),换肤时只改根节点的值,比全局替换字符串快得多。这里有个淬炼过的教训:我曾想统一把--lte-*变量直接替换 AdminLTE 源码,发现它的样式表里很多地方用的是具体色值而非变量,直接改源码会导致编译链复杂。后来改走「新样式用变量,旧样式不动」的渐进路线,才避免了大量回归。这个习惯我沿用至今:模板骨架可以激进换代,主题定制永远渐进。
综上所述都是过时的写法。我自己的习惯是,每接手一个新后台项目,先解压一份AdminLTE-3.1.0-rc.zip,跑通页面、定好骨架、封掉常见的坑,再交给团队填充业务。这套流程帮我用最少的时间交付过多个管理后台,也希望帮到你。
本文还有配套的精品资源,点击获取