第63篇【终极整合巨作】从零手写原生中后台管理系统|整合62篇全部前端知识点|从头到尾完整架构+全功能逻辑
前言为什么写这一篇前面62篇我们从零学完了布局、CSS、原生JS、ES6、异步、事件循环、网络协议、浏览器原理、工程化、Vue3、TS、WebSocket、权限系统、Git、微前端、性能优化、手写源码、BUG排查、面试话术。但是知识点是分散的。这一篇我把全部前端能力从头到尾串联成一个完整可上线的企业级项目。不用Vue、不用框架、不用脚手架。纯 HTML CSS 原生JS 手写全套中后台系统包含架构设计、工具封装、网络层、权限层、路由层、状态层、业务层、组件层、全局拦截、异常处理、性能优化、团队规范。学完这一篇你就真正拥有「完整前端工程思维」一、项目整体架构设计工程化思维落地1.1 项目技术栈原生 HTML5 CSS3 JavaScriptES6少量 jQuery 简化DOM操作不影响原生思想全程手写架构、手写路由、手写权限、手写状态管理、手写工具库1.2 项目包含所有核心业务能力用户登录、Token 鉴权、过期拦截、本地持久化全局请求拦截器、响应拦截器、统一报错处理前端权限体系角色权限、动态菜单、按钮权限原生 Hash 路由系统手写无框架路由全局状态管理手写简易Pinia/Vuex思想工具库防抖、节流、深拷贝、时间格式化、数据处理通用组件弹窗、提示、分页、表单校验、图片上传预览业务页面首页看板、用户管理、新增编辑删除、分页查询全局BUG处理、空数据处理、重排重绘优化、内存优化完整团队Git规范、项目目录规范、代码规范1.3 标准工程化目录结构企业级admin-project/ ├─ login.html # 登录页 ├─ index.html # 主布局框架 ├─ css/ │ └─ global.css # 全局样式、重置、布局、组件样式 ├─ js/ │ ├─ router.js # 手写路由系统 │ ├─ permission.js # 权限系统 │ ├─ store.js # 全局状态管理 │ ├─ request.js # 网络请求拦截层 │ ├─ utils.js # 工具函数库 │ ├─ components.js # 通用组件 │ └─ pages/ # 所有业务页面逻辑 └─ lib/ # 第三方库二、全局工具库封装整合ES6、性能优化、手写源码所有项目高频工具统一封装全局复用。包含高阶防抖、高阶节流、深拷贝、时间格式化、空值处理、数据格式化// js/utils.js const Utils { // 高阶防抖支持立即执行、手动取消 debounce(fn, delay 300, immediate false) { let timer null const handler function(...args) { if (timer) clearTimeout(timer) if (immediate !timer) { fn.apply(this, args) } timer setTimeout(() { if (!immediate) fn.apply(this, args) timer null }, delay) } // 手动取消防止内存泄漏 handler.cancel () { clearTimeout(timer) timer null } return handler }, // 高阶节流固定频率执行 throttle(fn, delay 300) { let lastTime 0 let timer null const handler function(...args) { const now Date.now() if (now - lastTime delay) { lastTime now fn.apply(this, args) } else if (!timer) { timer setTimeout(() { lastTime Date.now() fn.apply(this, args) timer null }, delay) } } handler.cancel () { clearTimeout(timer) timer null lastTime 0 } return handler }, // 深拷贝解决引用类型赋值问题 deepClone(obj) { if (obj null || typeof obj ! object) return obj const res Array.isArray(obj) ? [] : {} for (let key in obj) { if (obj.hasOwnProperty(key)) { res[key] this.deepClone(obj[key]) } } return res }, // 时间格式化 formatTime(time) { const d new Date(time) const y d.getFullYear() const m String(d.getMonth() 1).padStart(2, 0) const day String(d.getDate()).padStart(2, 0) return ${y}-${m}-${day} } } window.Utils Utils三、本地存储封装持久化解决方案解决页面刷新数据丢失、Pinia/Vuex持久化原理手写实现。// js/storage.js const Storage { // 普通存储 set(key, value) { localStorage.setItem(key, JSON.stringify(value)) }, get(key) { const val localStorage.getItem(key) return val ? JSON.parse(val) : null }, // 敏感数据加密存储简单base64 setToken(key, value) { const encodeStr btoa(JSON.stringify(value)) localStorage.setItem(key, encodeStr) }, getToken(key) { const val localStorage.getItem(key) if (!val) return null return JSON.parse(atob(val)) }, remove(key) { localStorage.removeItem(key) }, clear() { localStorage.clear() } } window.Storage Storage四、全局状态管理手写简易Pinia整合全局用户信息、Token、角色、权限、全局数据。原理和Pinia完全一致集中式状态、初始化、持久化、统一修改// js/store.js const Store { // 全局状态 state: { token: , role: , permission: [], userInfo: {} }, // 页面刷新初始化数据 init() { const cache Storage.getToken(userState) if (cache) { this.state.token cache.token this.state.role cache.role this.state.permission cache.permission this.state.userInfo cache.userInfo } }, // 登录后设置用户信息 setUserState(data) { this.state.token data.token this.state.role data.role this.state.permission data.permission this.state.userInfo data.userInfo Storage.setToken(userState, this.state) }, // 退出登录清空状态 logout() { this.state { token: , role: , permission: [], userInfo: {} } Storage.clear() window.location.href login.html }, // 判断是否登录 isLogin() { return !!this.state.token } } // 初始化 Store.init() window.Store Store五、网络请求封装整合HTTP/HTTPS原理、拦截器、全局异常整合前面HTTP协议、状态码、跨域、401过期、全局请求统一处理。// js/request.js const Request { baseUrl: , // 统一请求入口 async fetch(options) { const { url, method GET, data {} } options const header { Content-Type: application/json } // 携带Token if (Store.state.token) { header.Authorization Bearer ${Store.state.token} } try { const res await fetch(this.baseUrl url, { method, headers: header, body: method GET ? null : JSON.stringify(data) }) const result await res.json() // 401 Token过期拦截 if (result.code 401) { alert(登录已过期请重新登录) Store.logout() return } return result } catch (err) { alert(网络请求异常) console.error(请求错误, err) } }, get(url, data) { return this.fetch({ url, method: GET, data }) }, post(url, data) { return this.fetch({ url, method: POST, data }) } } window.Request Request六、权限系统完整实现页面权限 按钮权限整合前面企业级权限体系、动态路由、角色判断原理。// js/permission.js const Permission { // 判断页面权限 hasPagePermission(role) { const myRole Store.state.role return myRole admin || myRole role }, // 判断按钮权限 hasBtnPermission(key) { const list Store.state.permission return list.includes(key) }, // 动态渲染按钮权限 initBtnPermission() { // 所有带权限标识的按钮 const btns document.querySelectorAll([data-perm]) btns.forEach(btn { const perm btn.getAttribute(data-perm) if (!this.hasBtnPermission(perm)) { btn.style.display none } }) } } window.Permission Permission七、手写原生路由系统Hash路由不用Vue Router原生手写路由理解前端路由底层原理。// js/router.js const Router { routes: { /home: pages/home.html, /user: pages/user.html }, // 初始化路由监听 init() { window.addEventListener(hashchange, () this.render()) this.render() }, // 渲染页面 render() { let hash window.location.hash.slice(1) || /home if (!this.routes[hash]) { hash /home } // 权限拦截 if (!Store.isLogin()) { window.location.hash /login return } // 加载页面 this.loadPage(this.routes[hash]) }, // 加载html页面 async loadPage(path) { const res await fetch(path) const html await res.text() document.getElementById(mainContent).innerHTML html // 每次页面渲染后重新初始化按钮权限 Permission.initBtnPermission() } } Router.init() window.Router Router

相关新闻

三年没人维护的 AI 派蒙,我把它重新救活了

三年没人维护的 AI 派蒙,我把它重新救活了

Digital Life Server Refactored:让 AI 派蒙重新运行,并支持现代 LLM 项目简介 Digital Life Server Refactored 是一个基于原版 Digital Life Server 的重构与维护项目,目标是在保留原有功能的基础上,使整个项目重新适配现代 A…

2026/8/6 4:56:59 阅读更多 →
使用.tcl脚本文件仿真代码

使用.tcl脚本文件仿真代码

前提是要先对modelsim进行编译仿真库。使用.tcl编译仿真代码需要一下文件:1.代码文件(.v);2.代码仿真文件(.v);3.glbl.v(赛灵思官方 为 Verilog 仿真专门提供的全局信号定义文件);4.…

2026/8/6 4:56:59 阅读更多 →
工商业光伏防逆流装置选型指南:从工业厂房到商业楼宇的适配方案

工商业光伏防逆流装置选型指南:从工业厂房到商业楼宇的适配方案

随着分布式光伏、储能等新能源并网项目规模持续扩大,防逆流装置作为保障电网安全、满足并网合规要求的核心设备,其选型直接影响项目验收通过率与长期运行稳定性。不少用户因对产品属性、选型标准认知不足,导致项目延误、运维成本增加甚至产生…

2026/8/6 4:56:59 阅读更多 →

最新新闻

DeepSeek 4 Flash 模型部署指南:从环境配置到 API 集成实战

DeepSeek 4 Flash 模型部署指南:从环境配置到 API 集成实战

这次我们来看一个在开源社区引发热议的模型:DeepSeek 4 Flash。它并非一个全新的图像或语音生成工具,而是一个在推理能力、代码能力和性价比上取得显著突破的大型语言模型。简单来说,它最大的吸引力在于,用更低的计算成本&#xf…

2026/8/6 23:57:18 阅读更多 →
如何高效使用AutoRemesher:3D建模的完整四边形网格重划分指南

如何高效使用AutoRemesher:3D建模的完整四边形网格重划分指南

如何高效使用AutoRemesher:3D建模的完整四边形网格重划分指南 【免费下载链接】autoremesher Automatic quad remeshing tool 项目地址: https://gitcode.com/GitHub_Trending/au/autoremesher 还在为3D建模中的复杂网格优化而烦恼吗?&#x1f91…

2026/8/6 23:57:18 阅读更多 →
计算机留学生的冲刺之路:技术底子好,为何仍在大厂面试中卡壳?

计算机留学生的冲刺之路:技术底子好,为何仍在大厂面试中卡壳?

摘要: 许多在海外名校就读计算机科学的留学生,虽然算法基础扎实、学术背景优异,但在面对全球科技大厂(如亚马逊)时,常因缺乏对企业独特文化(如 LP 领导力准则)的表达重构及系统设计实…

2026/8/6 23:57:18 阅读更多 →
深入解析Newelle虚拟助手的高性能模块化架构设计

深入解析Newelle虚拟助手的高性能模块化架构设计

深入解析Newelle虚拟助手的高性能模块化架构设计 【免费下载链接】Newelle Newelle - Your Ultimate Virtual Assistant 项目地址: https://gitcode.com/gh_mirrors/ne/Newelle Newelle是一款基于GNOME桌面环境的开源虚拟助手,采用模块化架构设计&#xff0c…

2026/8/6 23:57:18 阅读更多 →
留学生冲刺顶级资管:如何突破语言优势与偏好壁垒?

留学生冲刺顶级资管:如何突破语言优势与偏好壁垒?

摘要: 许多在海外名校就读金融双学位的中国留学生,即使成绩优异、实习丰富,在冲刺顶级资产管理公司(如 PIMCO)时仍常因投递石沉大海而受阻。破局的关键在于跳出机械的知识复习,深度对齐资管巨头的核心价值观…

2026/8/6 23:57:18 阅读更多 →
BingMaps.dll丢失的解决方案与系统文件修复指南

BingMaps.dll丢失的解决方案与系统文件修复指南

1. 问题背景:BingMaps.dll文件丢失的典型场景BingMaps.dll是微软Bing地图服务相关的动态链接库文件,常见于以下三类软件环境:使用Bing地图API开发的第三方应用程序(如物流管理系统、GIS工具)某些预装Windows组件的旧版…

2026/8/6 23:56:18 阅读更多 →

日新闻

深入解析LimboAI C++内核:架构设计与性能优化实战

深入解析LimboAI C++内核:架构设计与性能优化实战

1. 项目概述:为什么我们需要深入LimboAI的C内核?如果你是一名使用Godot引擎的游戏开发者,尤其是对AI行为逻辑有较高要求的项目,那么LimboAI这个名字你大概率不会陌生。它作为Godot 4生态中一个备受瞩目的行为树与状态机插件&#…

2026/8/6 0:00:06 阅读更多 →
Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

1. 项目概述与核心思路大家好,我是老张,一个在游戏开发一线摸爬滚打了十多年的老码农。今天咱们接着聊《空洞骑士》风格2D动作游戏的Demo制作。上一期我们搭好了基础框架,处理了角色移动和碰撞,这一期,我们要让游戏世界…

2026/8/6 0:00:06 阅读更多 →
被动防火门市场前景发展趋势

被动防火门市场前景发展趋势

被动防火门依靠材质结构、密闭构造阻隔烟火蔓延,无需电控启动,是建筑被动消防系统核心构件,行业依托新规管控、城市更新、工业安全升级迎来稳定扩容,整体朝着合规化、专项化、低碳化、智能化方向发展。现阶段 GB12955‑2024 新版国…

2026/8/6 0:00:06 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →