Vue 快速开发模板
Vue 快速开发模板 - 项目说明书一、环境准备1.1 安装 nvmNode.js 版本管理工具nvm 用于管理多个 Node.js 版本方便切换。下载地址https://github.com/coreybutler/nvm-windows/releases 下载 nvm-setup.exe 安装即可1.2 使用 nvm 安装 Node.js# 查看可安装的版本 nvm list available 安装 Node.js 22.x LTS 版本 nvm install 22 切换到 22.x 版本 nvm use 22.x.x具体版本号 验证安装 node -v # 应显示 v22.x.x npm -v # 应显示 10.x.x1.3 常见问题nvm use 后 node -v 还是旧版本原因PATH 环境变量中有写死的旧版本路径。解决方法 1. 右键此电脑 → 属性 → 高级系统设置 → 环境变量 2. 在 Path 中找到类似 D:\xxx\nvm\nvm\v14.21.3\ 的路径 3. 删除这一行 4. 确认 NVM_HOME 和 NVM_SYMLINK 环境变量存在 5. 关闭所有命令行窗口重新打开 6. 执行 nvm use 22.x.x再执行 node -v 验证1.4 常见问题npm 命令报安全策略错误错误信息无法加载文件 npm.ps1因为在此系统上禁止运行脚本。解决方法以管理员身份运行 PowerShell Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser 输入 Y 回车确认1.5 设置 npm 镜像国内加速npm config set registry https://registry.npmmirror.com1.6 安装 yarnnpm install -g yarn二、创建 Vue 项目2.1 安装 Vue 脚手架yarn global add vue/cli vue --version # 应显示 vue/cli 5.x.x2.2 创建项目# 切换到你想放项目的目录 cd D:\你的目录 创建项目 vue create quick-dev-template2.3 创建时的选项配置第1步选择 Manually select features手动选择功能 第2步勾选以下功能空格键选中回车确认 ✅ Babel ✅ Router ✅ Vuex ✅ CSS Pre-processors ✅ Linter / Formatter 第3步Vue 版本选择 3.x 第4步Use history mode for router? → Yes 第5步CSS 预处理器 → Sass/SCSS (with dart-sass) 第6步ESLint → ESLint Prettier 第7步Lint on save保存时检查 第8步配置文件位置 → In dedicated config files 第9步Save as preset? → No 第10步包管理器 → Use Yarn三、安装依赖cd quick-dev-template 安装 Element PlusUI 组件库 yarn add element-plus 安装 axiosHTTP 请求库 yarn add axios 安装 js-cookieCookie 管理库 yarn add js-cookie四、项目配置4.1 入口文件 src/main.jsimport { createApp } from vue; import App from ./App.vue; import router from ./router; import store from ./store; // Element Plus import ElementPlus from element-plus; import element-plus/dist/index.css; import zhCn from element-plus/dist/locale/zh-cn.mjs; const app createApp(App); app.use(store); app.use(router); app.use(ElementPlus, { locale: zhCn }); app.mount(#app);4.2 路由配置 src/router/index.jsimport { createRouter, createWebHashHistory } from vue-router; import Cookies from js-cookie; const routes [ { path: /login, name: Login, component: () import(/views/login/index.vue), }, { path: /, name: Layout, component: () import(/views/layout/index.vue), redirect: /home, children: [ { path: home, name: Home, component: () import(/views/home/index.vue), }, { path: center, name: Center, component: () import(/views/center/index.vue), }, // ↓↓↓ 以后新增的页面路由写在这里 ↓↓↓ ], }, { path: /:pathMatch(.), name: NotFound, component: () import(/views/404/index.vue), }, ]; const router createRouter({ history: createWebHashHistory(), routes, }); // 路由守卫每次跳转前检查是否登录 router.beforeEach((to, from, next) { const token Cookies.get(token); if (to.path /login) { next(); } else if (!token) { next(/login); } else { next(); } }); export default router;4.3 状态管理 src/store/index.jsimport { createStore } from vuex; import Cookies from js-cookie; export default createStore({ state: { user: {}, token: Cookies.get(token) || , }, getters: { getUser(state) { return state.user; }, getToken(state) { return state.token; }, }, mutations: { setUser(state, user) { state.user user; }, setToken(state, token) { state.token token; Cookies.set(token, token); }, logout(state) { state.user {}; state.token ; Cookies.remove(token); }, }, actions: {}, modules: {}, });4.4 HTTP 请求工具 src/utils/request.jsimport axios from axios; import { ElMessage } from element-plus; import router from /router; import Cookies from js-cookie; const service axios.create({ baseURL: http://localhost:8080/springboot, // 后端接口地址根据实际情况修改 timeout: 30000, }); // 请求拦截器自动带上 token service.interceptors.request.use( (config) { const token Cookies.get(token); if (token) { config.headers[Token] token; } return config; }, (error) { return Promise.reject(error); } ); // 响应拦截器统一处理错误 service.interceptors.response.use( (response) { const res response.data; if (res.code 401) { ElMessage.error(请先登录); router.push(/login); return Promise.reject(new Error(未登录)); } return res; }, (error) { ElMessage.error(error.message || 请求失败); return Promise.reject(error); } ); export default service;4.5 根组件 src/App.vuetemplate router-view / /template style langscss { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, 微软雅黑, Arial, sans-serif; } /style4.6 ESLint 配置 .eslintrc.jsmodule.exports { root: true, env: { node: true, }, extends: [plugin:vue/vue3-essential, eslint:recommended], parserOptions: { parser: babel/eslint-parser, }, rules: { no-console: process.env.NODE_ENV production ? warn : off, no-debugger: process.env.NODE_ENV production ? warn : off, vue/multi-word-component-names: off, no-unused-vars: off, }, };五、基础页面5.1 登录页 src/views/login/index.vuetemplate div classlogin-container div classlogin-box h2 classlogin-title系统登录/h2 el-form :modelloginForm :rulesrules refloginFormRef el-form-item propusername el-input v-modelloginForm.username placeholder请输入账号 prefix-iconUser / /el-form-item el-form-item proppassword el-input v-modelloginForm.password typepassword placeholder请输入密码 prefix-iconLock show-password / /el-form-item el-form-item el-radio-group v-modelloginForm.role el-radio labeladmin管理员/el-radio el-radio labeluser普通用户/el-radio /el-radio-group /el-form-item el-form-item el-button typeprimary stylewidth: 100% clickhandleLogin登 录/el-button /el-form-item /el-form /div /div /template script import Cookies from js-cookie; export default { name: Login, data() { return { loginForm: { username: , password: , role: admin, }, rules: { username: [{ required: true, message: 请输入账号, trigger: blur }], password: [{ required: true, message: 请输入密码, trigger: blur }], }, }; }, methods: { handleLogin() { this.$refs.loginFormRef.validate((valid) { if (!valid) return; // TODO: 替换为实际的登录接口 Cookies.set(token, test-token); this.$store.commit(setToken, test-token); this.$store.commit(setUser, { username: this.loginForm.username }); this.$message.success(登录成功); this.$router.push(/); }); }, }, }; /script style langscss scoped .login-container { width: 100%; height: 100vh; display: flex; justify-content: center; align-items: center; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); } .login-box { width: 400px; padding: 40px; background: #fff; border-radius: 12px; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15); } .login-title { text-align: center; margin-bottom: 30px; color: #333; font-size: 24px; } /style5.2 主框架 src/views/layout/index.vuetemplate div classlayout div classheader div classlogo管理系统模板/div div classuser-info el-dropdown commandhandleCommand span classel-dropdown-link {{ $store.state.user.username || 管理员 }} el-iconarrow-down //el-icon /span template #dropdown el-dropdown-menu el-dropdown-item commandcenter个人中心/el-dropdown-item el-dropdown-item commandlogout divided退出登录/el-dropdown-item /el-dropdown-menu /template /el-dropdown /div /div div classcontainer div classsidebar el-menu :default-activeactiveMenu router el-menu-item index/home el-iconhome-filled //el-icon span首页/span /el-menu-item el-menu-item index/center el-iconuser //el-icon span个人中心/span /el-menu-item !-- ↓↓↓ 以后新增的菜单写在这里 ↓↓↓ -- /el-menu /div div classmain-content router-view / /div /div /div /template script import Cookies from js-cookie; export default { name: Layout, computed: { activeMenu() { return this.$route.path; }, }, methods: { handleCommand(command) { if (command center) { this.$router.push(/center); } else if (command logout) { this.$store.commit(logout); Cookies.remove(token); this.$router.push(/login); this.$message.success(已退出登录); } }, }, }; /script style langscss scoped .layout { height: 100vh; display: flex; flex-direction: column; } .header { height: 60px; background: #409eff; color: #fff; display: flex; align-items: center; justify-content: space-between; padding: 0 20px; } .logo { font-size: 20px; font-weight: bold; } .user-info { cursor: pointer; } .el-dropdown-link { color: #fff; display: flex; align-items: center; } .container { flex: 1; display: flex; overflow: hidden; } .sidebar { width: 200px; background: #fff; border-right: 1px solid #e6e6e6; overflow-y: auto; } .main-content { flex: 1; padding: 20px; background: #f5f5f5; overflow-y: auto; } /style5.3 首页 src/views/home/index.vuetemplate div classhome h1欢迎使用管理系统/h1 p这是首页你可以在这里放统计信息、图表等/p /div l

相关新闻

英雄联盟Akari助手:基于LCU API的终极游戏效率工具,快速提升你的操作水平

英雄联盟Akari助手:基于LCU API的终极游戏效率工具,快速提升你的操作水平

英雄联盟Akari助手:基于LCU API的终极游戏效率工具,快速提升你的操作水平 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit …

2026/7/25 20:16:42 阅读更多 →
智能体技术演进与核心架构解析

智能体技术演进与核心架构解析

1. 智能体技术发展脉络 2006年斯坦福大学首次提出"软件智能体"概念时,可能没想到这个概念会在20年后引发全球科技竞赛。智能体技术经历了三个关键发展阶段: 第一阶段(2006-2015)的规则型智能体,就像严格按照…

2026/7/25 20:16:42 阅读更多 →
2026年考试系统选购指南:功能、部署与避坑全解析

2026年考试系统选购指南:功能、部署与避坑全解析

随着企业、学校和部队培训需求的多样化,考试系统成为信息化管理和培训考核的重要工具。面对市场上众多系统选择,IT和培训负责人如何科学选购,确保功能、部署、安全与易用性兼顾,成为关键问题。本文将从专业视角提供2026年考试系统…

2026/7/25 20:15:41 阅读更多 →

最新新闻

Windows 11本地部署GLM-5.2大模型:集成知识库与智能体的低成本实战指南

Windows 11本地部署GLM-5.2大模型:集成知识库与智能体的低成本实战指南

最近在尝试本地部署大语言模型时,很多开发者都被复杂的Linux环境、CUDA配置和动辄数万元的硬件成本劝退。特别是对于希望集成智能体(Agent)和知识库(Claw)功能,实现私有化AI应用的团队或个人来说,门槛显得尤其高。本文将分享一套完全在Windows 11系统上,以极具性价比的…

2026/7/25 20:26:46 阅读更多 →
FAISS(Facebook AI Similarity Search)完整入门介绍

FAISS(Facebook AI Similarity Search)完整入门介绍

FAISS(Facebook AI Similarity Search)完整入门介绍一、什么是 FAISSFAISS Facebook AI Similarity Search Meta(原 Facebook)开源的向量相似度检索库,核心用途: 在海量高维向量中快速搜索与目标向量最相似…

2026/7/25 20:26:46 阅读更多 →
学习Flutter跨平台移动应用开发与性能优化技巧

学习Flutter跨平台移动应用开发与性能优化技巧

学习Flutter跨平台移动应用开发与性能优化技巧在当今移动应用开发领域,跨平台解决方案已成为提升开发效率、降低成本和加速产品上市的关键。Google推出的Flutter框架,凭借其独特的架构和出色的性能,迅速从众多工具中脱颖而出,成为…

2026/7/25 20:26:46 阅读更多 →
Unity Animator状态机驱动2D动画:实现平滑移动、旋转与缩放

Unity Animator状态机驱动2D动画:实现平滑移动、旋转与缩放

1. 项目概述:为什么Animator是2D动画的“导演”而非“放映员”在Unity里做2D精灵动画,很多朋友的第一反应可能是:“这不就是拖几个帧图,用Animation窗口录一下位置和旋转吗?” 确实,早期的Unity 2D动画&…

2026/7/25 20:26:46 阅读更多 →
AI 双向赋能网络安全:攻防演化、风险短板与全域智能防御体系构建

AI 双向赋能网络安全:攻防演化、风险短板与全域智能防御体系构建

摘要 生成式 AI 与自主智能体技术同步重塑网络攻击与防御全链路,DeXpose 平台 2026 年行业报告完整呈现 AI 在安全运营、威胁狩猎、暗网情报监测、钓鱼识别领域的落地价值,同时揭露攻击者利用同类 AI 技术规模化发起高仿钓鱼、供应链渗透、凭据窃取的新型…

2026/7/25 20:26:46 阅读更多 →
防刷单与风控体系构建:电商返利平台的核心算法逻辑解析

防刷单与风控体系构建:电商返利平台的核心算法逻辑解析

防刷单与风控体系构建:电商返利平台的核心算法逻辑解析 又见面了,我是高佣返利省赚客APP研发者微赚! 在电商返利行业,黑产刷单、虚假交易和羊毛党攻击是悬在平台头顶的达摩克利斯之剑。一旦风控失守,不仅会导致巨额佣金…

2026/7/25 20:25:46 阅读更多 →

日新闻

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:00:35 阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:00:35 阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:00:35 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/25 5:08:22 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/25 5:13:53 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻