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:47阅读更多 →
智能体技术演进与核心架构解析

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

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

2026/7/25 20:16:47阅读更多 →
信息系统项目管理师教程(第4版)笔记——第 7 章 项目立项管理

信息系统项目管理师教程(第4版)笔记——第 7 章 项目立项管理

第 7 章 项目立项管理 项目立项管理是对拟实施项目的技术先进性、经济合理性、实施可能性、社会价值等进行全面科学分析,为项目决策提供客观依据的技术经济研究活动,核心流程包括项目建议与立项申请、项目可行性研究、项目评估与决策三个核心阶段。其中&…

2026/7/25 20:14:46阅读更多 →
SpringBoot+微信小程序充电桩管理系统毕业设计实战指南

SpringBoot+微信小程序充电桩管理系统毕业设计实战指南

如果你正在为计算机毕业设计发愁,不知道选什么项目既能体现技术实力又符合市场需求,那么充电桩管理系统可能正是你需要的选择。这个项目不仅紧贴新能源汽车行业的发展趋势,还涵盖了SpringBoot后端开发、微信小程序前端、数据库设计、支付集成…

2026/7/25 22:49:17阅读更多 →
突破Cloudflare Turnstile:使用2captcha-python实现自动验证的完整指南

突破Cloudflare Turnstile:使用2captcha-python实现自动验证的完整指南

突破Cloudflare Turnstile:使用2captcha-python实现自动验证的完整指南 【免费下载链接】2captcha-python Python 3 package for easy integration with the API of 2captcha captcha solving service to bypass recaptcha, сloudflare turnstile, funcaptcha, gee…

2026/7/25 22:49:17阅读更多 →
机器人逆运动学(IK)到底在算什么?五个关键点从数学本质到工程落地

机器人逆运动学(IK)到底在算什么?五个关键点从数学本质到工程落地

一个"反着问"的问题,为何如此难? 本文出自《具身智能基础》专栏,是本栏目下的第九篇文章,聚焦于逆运动学。 全文 5000 余字,建议收藏阅读。 目录 01 位姿的数学空间:为什么 IK 天然就难 末端…

2026/7/25 22:49:17阅读更多 →
Kimi K3编程实力远超GLM5.2:一个Trae复赛证据

Kimi K3编程实力远超GLM5.2:一个Trae复赛证据

我要把字帖部署成跨平台的,电脑能用、手机能用、Pad等也都能用; 最核心的就是不同终端看到的是否一致:渲染到屏幕上的、打印到纸面或PDF文件的 为了解决这个问题,我已经把Fast Pass用掉了不少,而且每次都极致发挥GLM…

2026/7/25 22:49:17阅读更多 →
SpringBoot+Vue仓库管理系统实战:从零部署到二次开发指南

SpringBoot+Vue仓库管理系统实战:从零部署到二次开发指南

这次我们来看一个基于 SpringBoot 的仓库管理系统(WMS)项目。对于正在寻找毕业设计选题、学习企业级前后端分离开发,或者需要一套现成的仓库管理解决方案的 Java 开发者来说,这个项目提供了一个非常完整的参考实现。它涵盖了从用户…

2026/7/25 22:49:17阅读更多 →
Jellium Desktop界面字体安装指南:添加新字体到系统

Jellium Desktop界面字体安装指南:添加新字体到系统

Jellium Desktop界面字体安装指南:添加新字体到系统 【免费下载链接】jellium-desktop An unofficial desktop client for Jellyfin 项目地址: https://gitcode.com/GitHub_Trending/je/jellium-desktop Jellium Desktop是一款非官方的Jellyfin桌面客户端&am…

2026/7/25 22:47:17阅读更多 →
Go语言静态资源打包方案对比与实践指南

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

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

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

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

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

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

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

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

2026/7/25 1:01:14阅读更多 →
突破文档下载限制:kill-doc让你看到的都能保存

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

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

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

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

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

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

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

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

2026/7/25 0:01:16阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/24 23:01:03阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/25 19:03:04阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/25 19:03:04阅读更多 →