Vue2项目练手——通用后台管理项目 知识补充yarn和npm区别npm的缺点:yarn的优点 npm查看镜像和设置镜像 项目介绍项目的技术栈 项目搭建文件目录 创建路由,引入element-uirouter/in
“5.0.3” 安装指定的5.0.3版本
“~5.0.3” 表示安装5.0.X中最新的版本
“^5.0.3” 表示安装5.X.X中最新的版本
有时候会出现版本不一致不能运行的情况。
npm config get reGIStry
npm config set registry https://registry.npmmirror.com/
yarn global add @vue/cli
先vue create创建一个项目,然后安装element-ui组件和vue-router,less等组件
import VueRouter from "vue-router";import Login from "@/pages/Login.vue";import Users from "@/pages/Users.vue";import Main from '@/pages/Main.vue'import Home from "@/pages/Home.vue";const router= new VueRouter({ // 浏览器模式设置,设置为history模式 mode:'history', routes:[ { path:"/login", component:Login, meta:{title:"登录"}, }, { // 主路由 name:"main", path:'/', component:Main, children:[ //子路由 { name:"users", path:"users", component:Users, meta:{title:"用户"} }, { name:"home", path:"home", component:Home, meta:{title:"主页"} } ] } ]})// 后置路由守卫router.afterEach((to,from)=>{ document.title=to.meta.title||"通用后台管理系统"})export default router
import Vue from 'vue'import App from './App.vue'import VueRouter from "vue-router";import router from "@/router";import ElementUI from 'element-ui';import 'element-ui/lib/theme-chalk/index.CSS'Vue.config.productionTip = falseVue.use(VueRouter)Vue.use(ElementUI)new Vue({ router, render: h => h(App),}).$mount('#app')
<template> <div> 我是Users组件 div>template><script>export default { name: "Users",}script><style scoped>style>
<template> <div> <h1>mainh1> <router-view>router-view> div>template><script>export default { name: "Main",}script><style scoped>style>
<template> <div> home内容 div>template><script>export default { name: "Home",}script><style scoped>style>
<template> <div id="app"> <div class="main-content"> <div class="title">系统登录div> <div class="content"> <el-fORM :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm"> <el-form-item label="用户名" prop="name"> <el-input v-model="ruleForm.name" >el-input> el-form-item> <el-form-item label="密码" prop="passWord"> <el-input v-model="ruleForm.password" type="password" autocomplete="off">el-input> el-form-item> <el-form-item> <el-row :gutter="20"> <el-col :span="12" :offset="4"><router-link to="/login"><el-button type="primary" @click="submitForm('ruleForm')">登录el-button>router-link>el-col> el-row> el-form-item> el-form> div> div> div>template><script>export default { name: "login", data(){ return{ ruleForm: { name: '', password:"" }, rules: { name: [ {required: true, message: '请输入用户名', trigger: 'blur'}, {min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur'} ], password: [ {required:true,message:"请输入密码",trigger:"blur"} ] } } }, methods:{ submitForm(formName) { this.$refs[formName].validate((valid) => { if (valid) { // alert('submit!'); } else { console.log('error submit!!'); return false; } }); }, }}script><style lang="less" scoped>*{ padding: 0; margin: 0;}#app { display: flex; background-color: #333; height: 800px; .main-content{ height: 300px; width: 400px; background-color: #fff; margin: 200px auto; border-radius: 10px; padding: 30px; box-sizing: border-box; box-shadow: 5px 5px 10px rgba(0,0,0,0.5),-5px -5px 10px rgba(0,0,0,0.5); .title{ font-size: 20px; text-align: center; //margin-top: 30px; font-weight: 300; } .content{ margin-top: 30px; } }}style>
<template> <div id="app"> <router-view>router-view> div>template><script>export default { name: 'App',}script><style lang="less">*{ padding: 0; margin: 0;}style>
<template> <div> <el-container> <el-aside width="200px">Asideel-aside> <el-container> <el-header>Headerel-header> <el-main> <router-view>router-view> el-main> el-container> el-container> div>template><script>export default { name: "Main",}script><style scoped>style>
<template> <div> <el-container> <el-aside width="200px"> <CommonAside>CommonAside> el-aside> <el-container> <el-header>Headerel-header> <el-main> <router-view>router-view> el-main> el-container> el-container> div>template><script>import CommonAside from "@/components/CommonAside.vue";export default { name: "Main", components:{CommonAside}}script><style scoped>style>
<template> <div id="app"> <router-view>router-view> div>template><script>export default { name: 'App',}script><style lang="less">html,body,h3{ padding: 0; margin: 0;}style>
<template> <el-menu default-active="1-4-1" class="el-menu-vertical-demo" @open="handleOpen" @close="handleClose" :collapse="isCollapse" background-color="#545c64" text-color="#fff" active-text-color="#ffd04b"> <h3>通用后台管理系统h3> <el-menu-item index="2" v-for="item in noChildren" :key="item.name" :index="item.name"> <i :class="`el-icon-${item.icon}`">i> <span slot="title">{{item.label}}span> el-menu-item> <el-submenu :index="item.label" v-for="item in hasChildren" :key="item.label"> <template slot="title"> <i :class="`el-icon-${item.icon}`">i> <span slot="title">{{item.label}}span> template> <el-menu-item-group> <el-menu-item :index="subItem.path" :key="subItem.path" v-for="subItem in item.children"> {{subItem.label}} el-menu-item> el-menu-item-group> el-submenu> el-menu>template><style lang="less" scoped>.el-menu-vertical-demo:not(.el-menu--collapse) { width: 200px; min-height: 400px;}.el-menu{ height: 100vh; //占据页面高度100% h3{ color: #fff; text-align: center; line-height: 48px; font-size: 16px; font-weight: 400; }}style><script>export default { data() { return { isCollapse: false, menuData:[ { path:'/', name:"home", label:"首页", icon:"s-home", url:'Home/Home' }, { path:'/mail', name:"mall", label:"商品管理", icon:"video-play", url:'MallManage/MallManage' }, { path:'/user', name:"user", label:"用户管理", icon:"user", url:'userManage/userManage' }, { label:"其他", icon:"location", children:[ { path:'/page1', name:"page1", label:"页面1", icon:"setting", url:'Other/PageOne' }, { path:'/page2', name:"page2", label:"页面2", icon:"setting", url:'Other/PageTwo' }, ] }, ] }; }, methods: { handleOpen(key, keyPath) { console.log(key, keyPath); }, handleClose(key, keyPath) { console.log(key, keyPath); } }, computed:{ //没有子菜单的数据 noChildren(){ return this.menuData.filter(item=>!item.children) }, hasChildren(){ return this.menuData.filter(item=>item.children) } //有子菜单数组 }}script>
import VueRouter from "vue-router";import Login from "@/pages/Login.vue";import Users from "@/pages/Users.vue";import Main from '@/pages/Main.vue'import Home from "@/pages/Home.vue";import Mall from "@/pages/Mall.vue";import PageOne from "@/pages/PageOne.vue";import PageTwo from "@/pages/PageTwo.vue";const router= new VueRouter({ // 浏览器模式设置,设置为history模式 // mode:'history', routes:[ { path:"/login", component:Login, meta:{title:"登录"}, }, { // 子路由 name:"main", path:'/', redirect:"/home", //重定向 当路径为/,则重定向home component:Main, children:[ { name:"user", path:"user", component:Users, meta:{title:"用户管理"} }, { name:"home", path:"home", component:Home, meta:{title:"首页"} }, { name:"mall", path:"mall", component:Mall, meta:{title:"商品管理"} }, { name:"page1", path:"page1", component:PageOne, meta:{title:"页面1"} }, { name:"page2", path:"page2", component:PageTwo, meta:{title:"页面2"} } ] } ]})// 后置路由守卫router.afterEach((to,from)=>{ document.title=to.meta.title||"通用后台管理系统"})export default router
<template> <div> 我是mall div>template><script>export default { name: "Mall",}script><style scoped>style>
<template> <div> 我是PageOne div>template><script>export default { name: "PageOne",}script><style scoped>style>
<template> <div> 我是PageTwo div>template><script>export default { name: "PageTwo",}script><style scoped>style>
<template> <el-menu default-active="1-4-1" class="el-menu-vertical-demo" @open="handleOpen" @close="handleClose" :collapse="isCollapse" background-color="#545c64" text-color="#fff" active-text-color="#ffd04b"> <h3>通用后台管理系统h3> <el-menu-item @click="clickMenu(item)" v-for="item in noChildren" :key="item.name" :index="item.name"> <i :class="`el-icon-${item.icon}`">i> <span slot="title">{{item.label}}span> el-menu-item> <el-submenu :index="item.label" v-for="item in hasChildren" :key="item.label"> <template slot="title"> <i :class="`el-icon-${item.icon}`">i> <span slot="title">{{item.label}}span> template> <el-menu-item-group> <el-menu-item @click="clickMenu(subItem)" :index="subItem.path" :key="subItem.path" v-for="subItem in item.children"> {{subItem.label}} el-menu-item> el-menu-item-group> el-submenu> el-menu>template><style lang="less" scoped>.el-menu-vertical-demo:not(.el-menu--collapse) { width: 200px; min-height: 400px;}.el-menu{ height: 100vh; //占据页面高度100% h3{ color: #fff; text-align: center; line-height: 48px; font-size: 16px; font-weight: 400; }}style><script>export default { data() { return { isCollapse: false, menuData:[ { path:'/', name:"home", label:"首页", icon:"s-home", url:'Home/Home' }, { path:'/mall', name:"mall", label:"商品管理", icon:"video-play", url:'MallManage/MallManage' }, { path:'/user', name:"user", label:"用户管理", icon:"user", url:'userManage/userManage' }, { label:"其他", icon:"location", children:[ { path:'/page1', name:"page1", label:"页面1", icon:"setting", url:'Other/PageOne' }, { path:'/page2', name:"page2", label:"页面2", icon:"setting", url:'Other/PageTwo' }, ] }, ] }; }, methods: { handleOpen(key, keyPath) { console.log(key, keyPath); }, handleClose(key, keyPath) { console.log(key, keyPath); }, clickMenu(item){ // console.log(item) this.$router.push(item.path) } }, computed:{ //没有子菜单的数据 noChildren(){ return this.menuData.filter(item=>!item.children) }, //有子菜单数组 hasChildren(){ return this.menuData.filter(item=>item.children) } }}script>
来源地址:https://blog.csdn.net/qq_34306228/article/details/132458711
--结束END--
本文标题: Vue2项目练手——通用后台管理项目第一节
本文链接: https://www.lsjlt.com/news/383147.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0