vue入门项目:快递收件管理---登陆+主页面

软件安装,js配置,网上一大堆,我就不写啦,很简单的。

Vue开发实例目录总索引_编程界小明哥的博客-CSDN博客_vue 索引列表

这个是我之前参考得大佬的项目,虽然这个是vue2的,我用的vue3,但是,大佬步骤写的非常详细,包括常见错误都有,对新手很是友好,大家可以学习。而且,大佬还在不定时更新更正的,膜拜。

跟随大佬的脚步,我用的element-plus

一步步太麻烦,因为该系统已经应用上,所以我直接贴全部代码了,注释当时标注的也比较明确。

画面使用的控件样式,都参考官方就好了~链接在这里

Layout 布局 | Element Plus (gitee.io)

一, main.js注册内容

import { createApp } from 'vue'
import App from './App.vue'
import router from './router/index.js'
import 'normalize.css/normalize.css'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import zhCn from 'element-plus/es/locale/lang/zh-cn'

//全局引入css
import '../style/headtap.css'
const app = createApp(App)
app.use(ElementPlus,{locale:zhCn})
app.use(router)
app.mount('#app')

其中:

router:路由器

zhCn:中文包

二,页面

我们肯定是不用Vue 的Hello World页面啦,所以APP.VUE页面内容就该删删啦

app.vue

<template>
  <router-view />
</template>
<script>
export default{}
</script>
<style>
</style>

 第一个画面,肯定是登陆界面啦,login.vue

<template>
  <div class="loginBody">
    <el-form class="loginRoot">
      <div class="loginTitle"></div>
      <el-form-item >
        用户:<el-input type="text" v-model="account" auto-complete="off" placeholder="请输入用户名" style="width:260px;"/>
      </el-form-item>
      <el-form-item >
        密码:<el-input type="password" v-model="password" auto-complete="off" placeholder="请输入密码" style="width:260px;"/>
      </el-form-item>
      <el-button type="primary" style="width: 100%" @click="loginIn">登陆</el-button>
    </el-form>
  </div>
</template>

<script>
import { reactive,toRefs } from 'vue'
import {useRouter} from 'vue-router'
import { $msg_e, $msg_s } from '@/utils/msg.js'
export default{
  name:"Login",
  setup(){
    //获取当前项目中的路由器对象
    let $router = useRouter()
    const user = reactive({
      account:'admin',
      password:''
    })
    //login
    const loginIn = async ()=>{
      //因为系统只有快递室使用,所以这里设定了固定登陆账户密码, 没有链接数据库
      if(user.account==="admin"&&user.password==="123456"){
        $msg_s('登陆成功')
        $router.push('/layout')  //登陆成功,转到主页面
      }else{
        $msg_e('账号密码有误,请联系管理员')
        $router.push('/')  //登陆不成功,继续在登陆界面
      }      
    }
    return {...toRefs(user),loginIn}
  }
}
</script>

<style>
</style>

这里引用了router中的页面设定,还有message提醒设定

router/index.js

import { createRouter, createWebHashHistory  } from "vue-router";

const routes= [
  {//登陆界面
    path: '/',
    name:'Login', 
    component: ()=>import(/*webpackChunkName:'login'*/'@/views/login.vue') 
  },
  {//首页
    path: '/layout',
    name:'Layout', 
    component: ()=>import(/*webpackChunkName:'Layout'*/'@/views/Layout.vue') ,
    children:[
      //收件
      {
        path:'acp',
        name:'Acp',
        component:()=>import('../views/Acp.vue')
      },
      //取件
      {
        path:'rev',
        name:'Rev',
        component:()=>import('../views/Rev.vue')
      },
      //参数维护
      {
        path:'pamc',
        name:'Pamc',
        component:()=>import('../views/Pamc.vue')
      },{
        path:'pamt',
        name:'Pamt',
        component:()=>import('../views/Pamt.vue')
      },{
        path:'pamp',
        name:'Pamp',
        component:()=>import('../views/Pamp.vue')
      }
    ]
  }
]
//创建一个路由器对象
const router = createRouter({
  history:createWebHashHistory(),
  routes
})
//页面转换变动条
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
//定义路由导航前置守卫
router.beforeEach((to, from, next) => {
  NProgress.start();
  next()  
})
//定义路由导航后置守卫
router.afterEach( route => {
  NProgress.done();
})
export default router

自定义消息提示,utils/msg.js

//封装消息框

import {ElMessage,ElMessageBox} from 'element-plus'
//成功的消息框
export let $msg_s = (message,duration=2000)=>{
  ElMessage({
    showClose:true,
    message,
    duration,
    type:'success',
  })
}
//警告的消息框
export let $msg_w = (message,duration=2000)=>{
  ElMessage({
    showClose:true,
    message,
    duration,
    type:'warning',
  })
}
//错误的消息框
export let $msg_e = (message,duration=2000)=>{
  ElMessage({
    showClose:true,
    message,
    duration,
    type:'error',
  })
}
//确定取消框
export let $confirm = (message,title='提示',type='warning')=>{
  return new Promise((resolve,reject)=>{
    ElMessageBox.confirm(
      message,
      title,
      {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type,
      }
    )
      .then(() => {        
        resolve()
      })
      .catch(() => {
      })
  })
}
//封装返回值
export let $msg_return=(status,statusText)=>{
  if(status===200||status===201){
    $msg_s(statusText)
  }else{
    $msg_e(statusText)
  }
}
//封装返回布尔值
export let $bool_return=(status)=>{
  if(status===200||status===201){
    return true
  }else{
    return false
  }
}

跳转到主页面,Layout.vue

<template>
  <div class="container" >
    <el-container>
      <div class="left" :width="isCollapse ? '30px':'160px'"  :style="'height:'+rightHeight+'px'">
        <div class="logo">
          <h3 v-show="!isCollapse">快递管理系统</h3>
          <h3 v-show="isCollapse">Exp</h3>
        </div>        
        <div class="aside"> 
          <el-menu class="el-menu-certical-demo"
              default-active="/layout/acp"
              background-color="#545c64"
              text-color="#FFFFFF"
              active-text-color="#409EFF"
              :collapse="isCollapse"
              router
          >
            <el-menu-item index="/layout/acp">
              <el-icon><edit /></el-icon>
              <span>快递入库</span>
            </el-menu-item>
            <el-menu-item index="/layout/rev">
              <el-icon><briefcase /></el-icon>
              <span>取件出库</span>
            </el-menu-item>
            <el-menu-item index="/layout/pamc"><el-icon><aim /></el-icon><span>快递公司</span></el-menu-item>
            <el-menu-item index="/layout/pamt"><el-icon><aim /></el-icon><span>快递类别</span></el-menu-item>
            <el-menu-item index="/layout/pamp"><el-icon><aim /></el-icon><span>特殊收件人</span></el-menu-item>
          </el-menu>
        </div>
      </div>
      <div class="right" >
        <div class="top" ref="rightHeight1">
          <div class="toggle-button" @click="isCollapse = !isCollapse">
            <el-icon size="20" v-show="!isCollapse"><fold /></el-icon>
            <el-icon size="20" v-show="isCollapse"><expand /></el-icon>
          </div>
          <div class="menu">
            <el-menu class="el-menu-demo"
                model="horizontal"
                default-active="1"
                background-color="#545c64"
                text-color="#FFFFFF"
                active-text-color="#409EFF"
              >
              <el-menu-item index="1-1" @click="exit"><el-icon><location /></el-icon>退出登录</el-menu-item>
            </el-menu>
          </div>
        </div>
        <div class="bottom" ref="rightHeight2" >
          <el-container> 
            <el-main> <router-view /> </el-main>
          </el-container>
        </div>
      </div>
    </el-container>
  </div>
</template>

<script>
import { reactive,toRefs,ref } from '@vue/reactivity'
import {Aim,Edit,Briefcase,Fold,Expand,Location} from '@element-plus/icons'
import {onMounted} from 'vue'
import {useRouter} from 'vue-router'
export default {
  name: 'Layout',
  components:{
    Aim,Edit,Briefcase,Fold,Expand,Location
  },
  setup(){    
    let $router  = useRouter()
    let data = reactive({
      isCollapse:false,
      rightHeight:0
    })
    const rightHeight1 = ref()
    const rightHeight2 = ref()
    onMounted(()=>{ 
      let h1 = rightHeight1.value.clientHeight
      let h2 = rightHeight2.value.clientHeight     
      data.rightHeight = h1+h2
    })
    let isMobile = ()=> {
      let flag = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i)
      if(flag){
        data.isCollapse=true
      }else{
        data.isCollapse=false
      }
    }
    isMobile()
    //退出系统
    let exit = ()=>{
      //清楚所有的浏览器缓存
      sessionStorage.clear()
      localStorage.clear()
      //跳转到登陆页面
      $router.push('/')
    }
    return {
      ...toRefs(data),exit,isMobile,rightHeight1,rightHeight2
    }
  }
}
</script>
<style>
  .container{
    width: 100vw;
    height:100vh;
    display: flex;  
  }
  .left{    
    background-color: #545c64;
  }
  .logo{
    height: 60px;
    display: flex;
    justify-content: center;
    align-items: center;
  }
  .logo h3{
    color: white;
    font-size: 16px;
    border: 1px solid #eee;
    padding: 4px 1px;
    border-radius: 4px;
  }
  
  .right{
    flex: 1;
    display: flex;
    flex-direction: column;    
  }
  .top{
    height: 60px;
    background-color: #545c64; 
    display: flex;
    align-items: center;
    justify-content: space-between;
  }
  .toggle-button{
    color:white;
    padding-left: 10px;
  }
  .bottom{
    flex: 1;
    padding: 1px;
  }

 
</style>

这个页面中:

1.CSS写出了页面样式

        主要结构分左右两部分,左边就是菜单栏,右边分上下两部分结构,上部分是导航的位置,下部分就是主体部分

2.对手机平板等做了适配

        因为快递室将来都会配置专用手机来做管理,所以提前做了手机适配(只用来查看),可以搜索flexible参考。

3.使用了图标,这个比较简单,包括菜单折叠,直接参考官方文档就好。

        Menu 菜单 | Element Plus (gitee.io)

这次就这样吧,下一篇,我们开始说主体部分的各个画面。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Spring Boot + Vue.js 物资仓储物流管理系统源码 该源码是一个基于Spring Boot和Vue.js开发的物资仓储物流管理系统。它提供了完整的前后端代码,包括用户管理、物资管理、订单管理和统计报表等功能。该系统采用了模块化的设计思想,使得各个功能模块之间相互独立,易于维护和扩展。同时,该系统还使用了Spring Boot和Vue.js的优秀特性,如自动配置、组件化开发等,提高了系统的可维护性和可扩展性。 该源码适合有一定Java和前端开发经验的开发人员使用。如果你想学习Spring Boot和Vue.js的开发,或者想快速搭建一个物资仓储物流管理系统,那么这个源码是非常不错的选择。 Spring Boot + Vue.js 物资仓储物流管理系统部署说明 该部署说明详细介绍了如何将Spring Boot + Vue.js开发的物资仓储物流管理系统部署到生产环境中。它包括了环境准备、数据库配置、代码打包、容器化部署等多个步骤。通过阅读该部署说明,你可以快速了解如何将你的系统部署到生产环境中,并且可以避免一些常见的错误和问题。 该部署说明适合有一定Linux和Docker开发经验的开发人员使用。如果你想将你的系统部署到生产环境中,或者想学习如何使用Docker进行容器化部署,那么这个部署说明是非常有用的参考资料。 Spring Boot + Vue.js 物资仓储物流管理系统系统介绍 该系统介绍详细介绍了Spring Boot + Vue.js开发的物资仓储物流管理系统的功能和特点。它包括了用户管理、物资管理、订单管理和统计报表等多个功能模块,以及系统的架构设计和性能优化等方面的内容。通过阅读该系统介绍,你可以全面了解该系统的实现细节和技术特点,从而更好地理解和使用该系统。 该系统介绍适合对Spring Boot和Vue.js开发有一定了解的开发人员使用。如果你想深入了解Spring Boot和Vue.js的开发,或者想学习如何设计和实现一个复杂的Web应用程序,那么这个系统介绍是非常有价值的参考资料。 MySQL 物资仓储物流管理系统数据库设计文档 该数据库设计文档详细介绍了Spring Boot + Vue.js开发的物资仓储物流管理系统所需的数据库结构和表设计。它包括了用户表、物资表、订单表和统计报表表等多个表的设计和字段说明。通过阅读该数据库设计文档,你可以了解该系统的数据库结构和数据存储方式,从而更好地理解和使用该系统。 该数据库设计文档适合对MySQL数据库设计有一定了解的开发人员使用。如果你想学习如何设计和管理一个大型数据库,或者想在Spring Boot和Vue.js项目中使用MySQL数据库,那么这个数据库设计文档是非常有用的参考资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘子爱作

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值