vue.js微商城后台管理系统

一.需要运行的效果

20240701-231456

二.代码(解析)

首先,为项目添加依赖:

 yarn add element-plus --save

 yarn vue-router@4 --save

新建一个项目包,然后命名为商品管理,在components中新建几个vue文件。

新建一个文件包命名为public,将所需要的图片素材放入其中:

(1)我的“登录”界面

登录项目的验证:

a) 用户名和密码是必须输入项目。

b) 用户名和密码的检查: 用户名: '用户名长度为 3~12 个字符'

密码: '密码长度为 6~24 个字符'

登录按钮的功能的实现:

点击【登录】按钮,跳转到后台管理系统的首页 点击【重置】按钮,清空用户名和密码的输入内容

使用导航守卫实现登录页面的功能:

访问后台主页时,需要用户处于登录状态,如果没有登录就跳转到登录页面。 用户在登录页面进行登录操作,若登录成功,则跳转到后台主页;若登录失败,则返回 登录页面。

效果:

Dl.vue代码如下:

<template><el-card class="zon"><!-- el-card白框 --><div class="wei"><h2>"微商城"后台管理系统</h2><hr size="1px" color="gainsboro"/></div><el-form :model="form" class="yh" :rules="rules" ref="formRef"><el-form-item label="用户名:" prop="loginName"><el-input v-model="form.loginName" placeholder="请输入用户名" style="width: 500px; height: 40px;"/></el-form-item><el-form-item label="密&nbsp;&nbsp;&nbsp;码:" prop="pass"><el-input show-password v-model="form.pass" placeholder="请输入密码"  style="width: 500px; height: 40px;"/></el-form-item><el-form-item class="deng"><el-button type="primary" @click="gologin" style="width: 100px;">登录</el-button><el-button type="info" class="cz" @click="reset" style="width: 100px;">重置</el-button></el-form-item></el-form></el-card>
</template><script setup>import {reactive,ref} from 'vue';const form = reactive({loginName: '',pass: ''})const formRef = ref(null)import {useRouter} from 'vue-router'import {ElMessage} from 'element-plus';const router = useRouter()const rules = {loginName: [{required: true,message: '请输入用户名',trigger: 'blur'}, {min: 3,max: 12,message: "用户名长度为 3~12 个字符",trigger: "blur"}],pass: [{required: true,message: "请输入密码",trigger: "blur"}, {min: 2,max: 24,message: "密码长度为 6~24 个字符",trigger: "blur"}],}const gologin = () => {if (form.loginName === '苏冷大大' && form.pass === '123456') {router.push('/Dh')ElMessage.success('提交成功')return localStorage.setItem('token', 'Bearer xxx');} else {ElMessage.error('用户名或密码错误!')localStorage.removeItem('token')return false;}}const reset = () => {formRef.value.resetFields();};
</script>
<style scoped>.zon{margin-left: 260px;width: 900px;height: 400px;}.wei h2 {text-align: center;color: darkred;size: 28px;}.yh{position: absolute;left: 450px;top: 150px;}.deng{position: absolute;top: 150px;left: 90px;}</style>

(2)我的“导航”模块

登录首页分为头部和主体区域,如图 2-1 所示

头部区域:

a) 头部区域分别是导航栏标题和用户信息

b)点击【退出】按钮,跳转到登录页面

主体区域:

a) 主体区域分别是左侧导航栏和右侧内容区域

效果:

Dh.vue代码:

<template><el-menu :default-active="activeIndex" mode="vertical" class="hehe" style="width: 200px;height: 700px;"><el-menu-item index="1"><router-link to="/Dh/Sy"><el-icon ><HomeFilled/></el-icon>首页</router-link></el-menu-item><el-menu-item index="2"><router-link to="/Dh/Xz"><el-icon ><List/></el-icon>新增分类</router-link></el-menu-item><el-menu-item index="3"><router-link to="/Dh/Fl"><el-icon ><Briefcase/></el-icon>分类管理</router-link></el-menu-item><el-menu-item index="4"><router-link to="/Dh/Sp"><el-icon ><GoodsFilled/></el-icon>商品管理</router-link></el-menu-item><el-menu-item index="5"><router-link to="/Dh/Zh"><el-icon ><UserFilled/></el-icon>个人中心</router-link></el-menu-item></el-menu>
</template><script setup>
</script><style scoped>a:link,a:visited {color: #000;text-decoration: none;}a:hover {color: darkred;}</style>

Al.vue代码:

<template><el-container><el-header class="header">“微商城”后台管理系统<el-button type="primary" @click="goback" class="goback">退出</el-button></el-header><el-container><el-aside width="200px"><Dh/></el-aside><el-main><router-view class="view"></router-view></el-main></el-container></el-container></template><script setup>import {useRouter} from 'vue-router'import Dh from './Dh.vue'const router = useRouter()const goback = () => {localStorage.removeItem('token')// 使用localStorage.removeItem()方法删除token这个键名所对应的值router.push('/Dl')}
</script><style scoped>.el-header {background-color: #B3C0D1;color: #333;}.el-aside {background-color: #fff;color: #333;}.el-main {background-color: #E9EEF3;color: #333;}.header {height: 60px;width: 1400px;padding-top: 20px;padding-left: -10px;font-size: 19px;font-weight: bold;font-family: "楷体";color: #fff;background-color: darkred;}.goback {position: absolute;left: 240px;top: 25px;font-family: "楷体";} 
</style>

 (3)我的“新增分类”模块

新增分类页面 页面中是新增分类的页面,页面中包含分类名称、分类级别(一级分类和二级分类)、 产品大类、供货方式、备注信息和及时生效等项目。页面中有提交按钮和重置按钮。

效果:

Xz.vue代码如下:
 

<template><div class="di"><h3 style="text-align: center;">新增分类</h3><el-form :model="categoryForm" :rules="rules" label-width="100px"><!-- :model用于保存表单的数据对象,:rules用于对表单数据对象的校验,ref指定表单对象名称 --><el-form-item label="分类名称" prop="name"><el-input v-model="categoryForm.name"></el-input></el-form-item><el-form-item label="分类级别" prop="name"><el-select v-model="categoryForm.level" placeholder="请选择分类级别"><el-option label="一级分类" value="一级"></el-option><!-- el-option下拉绑定 --><el-option label="二级分类" value="二级"></el-option></el-select></el-form-item><el-form-item label="产品大类" prop="name"><el-checkbox>潮流服饰</el-checkbox><el-checkbox>食品</el-checkbox><el-checkbox>珠宝配饰</el-checkbox><el-checkbox>日用百货</el-checkbox></el-form-item><el-form-item @click="useRouter" label="供货方式" prop="name"><el-radio-group v-model="categoryForm.remark"><el-radio label="线上供货" ></el-radio><el-radio label="线下供货"></el-radio></el-radio-group></el-form-item><el-form-item label="备注信息" prop="prow"><el-input v-model="categoryForm.remark"></el-input></el-form-item><el-form-item label="及时生效"><el-switch v-model="value1" :active-icon="Check" :inactive-icon="Close"/><!-- el-switch开关 --></el-form-item><el-form-item><el-button type="primary" @click="handleSubmit">提交</el-button><el-button @click="info">重置</el-button></el-form-item></el-form></div>
</template><script setup>import {ref} from 'vue';import {useRouter} from 'vue-router'const value1 = ref(true)// 使用 ref 创建响应式数据const categoryForm = ref({name: '',level: '',category: '',supply: '',remark: ''});const handleSubmit = () => {router.push('/Fl');}// 重置表单数据const info = () => {categoryForm.value = {name: '',level: '',category: '',supply: '',remark: ''};};const router = useRouter()const rules = {name: [{required: true,message: '请输入分类名称',trigger: 'blur'}],prow: [{required: true,message: '请输入备注信息',trigger: 'blur'}],}
</script><style scoped></style>

(4)我的“分类管理”页面

a) 页面采用表单布局的方式,页面中展示关于分类的相关信息,包含分类名称、分类级 别(一级分类和二级分类)、产品大类、供货方式、备注信息等项目。

b) 单击页面中的【新增分类】按钮,可以新增分类信息,跳转到新增分类页面。 

效果:

Fl.vue代码如下:

<template><div><div class="ya"><el-button type="primary" @click="fenlei" class="oo">新增分类</el-button></div><div class="ti"><el-table :data="categories"  stripe border style="width: 100%"><el-table-column  label="分类名称"></el-table-column><el-table-column  label="分类级别"></el-table-column><el-table-column label="产品大类"></el-table-column><el-table-column label="供货方式"></el-table-column><el-table-column label="备注信息"></el-table-column></el-table></div></div></template><script setup>
import {ref} from 'vue';import {useRouter} from 'vue-router';const router = useRouter();
const fenlei = () => {router.push('/dh/xz');}
</script><style scoped>.oo{margin-left: 500px;}.ti{margin-top: 20px;}</style>

 (5)我的“商品管理”界面

商品管理页面中展示关于商品的相关信息,包含商品编号、商品名称、商品价格、 商品分类、商品库存、商品简介和商品图片等项目。

单击“后退”按钮,跳转到后台管理系统首页页面。

点击“详情”按钮,跳转到商品详情信息页面。

效果:

Sp.vue代码如下:

<template><div ><div class="yio"><el-button @click="goBack" class="h">后退</el-button><div class="pl"><el-table :data="products" stripe border style="width: 1500px" height="850px"><el-table-column prop="id" label="商品编号"></el-table-column><!-- prop属性绑定字段名 --><el-table-column prop="name" label="商品名称"></el-table-column><el-table-column prop="price" label="商品价格"></el-table-column><el-table-column prop="stock" label="商品库存"></el-table-column><el-table-column prop="description" label="商品简介"></el-table-column><el-table-column prop="image" label="商品图片"><template #default="scope"><img :src="scope.row.image" alt="商品图片" width="120px" height="120px"></template></el-table-column><el-table-column label="操作"><template #default="scope"><el-button @click="handleDetail(scope.row)" style="background-color: orange;color: white; margin-left: 30px;">详情</el-button></template></el-table-column></el-table></div></div></div>
</template><script setup>import {ref} from 'vue';import {useRouter} from 'vue-router';const router = useRouter();const products = ref([{id: '1',name: '葡萄柚',price: '10.00',stock: '10',description: '葡萄柚含有丰富的蛋白质、维生素、叶酸、无机盐、纤维素等等。',image: '../images/grapefruit.png'},{id: '2',name: '葡萄',price: '10.00',stock: '20',description: '葡萄含有大量的维生素C,丰富的矿物质,日常食用,可以抗氧化、起到美容养作用,并且还能提高机体抵抗力、辅助降血压、降血糖、预防心脑血管疾病。',image: '../images/grape.png'},{id: '3',name: '西红柿',price: '3.00',stock: '10',description: '西红柿属于常见的水果,不仅美味,还营养丰富,具有美容养颜、保护视力等习生菜可生食,脆嫩爽口,略甜,具有改善睡眠、减肥瘦身、保护视力等功效',image: '../images/tomatoes.png'},{id: '4',name: '生菜',price: '6.00',stock: '50',description: '生菜可生食,脆嫩爽口,略甜,具有改善睡眠、减肥瘦身、保护视力等功效。',image: '../images/lettuce.png'},{id: '5',name: '葡萄柚',price: '10.00',stock: '10',description: '葡萄柚含有丰富的蛋白质、维生素、叶酸、无机盐、纤维素等等。',image: '../images/tomatoes.png'},{id: '6',name: '葡萄柚',price: '10.00',stock: '10',description: '葡萄柚含有丰富的蛋白质、维生素、叶酸、无机盐、纤维素等等。',image: '../images/grape.png'},{id: '7',name: '葡萄柚',price: '10.00',stock: '10',description: '葡萄柚含有丰富的蛋白质、维生素、叶酸、无机盐、纤维素等等。',image: '../images/grapefruit.png'},]);const handleDetail = (product) => {alert("确定要跳转吗?")router.push('/Tc/:id')return localStorage.setItem('token', 'Bearer xxx');// 跳转到详情页逻辑,可以在此处添加路由跳转逻辑};
// import request from './axios/request.js'
const goBack = () => {router.push('/Dh');};
</script><style scoped>.pl{margin-top: 20px;}.h{background-color: blue; color: aliceblue;margin-left: 470px;}
</style>


 (6)我的“个人账户”界面

个人中心页面是对个人账户信息进行修改,可以对用户名和密码进行修改,单击【提交】 按钮,可以完成对用户名和密码的修改,单击页面中的【重置】按钮,可以清空页面中需要 修改的用户名和密码。

效果:

Zh.vue代码如下:

<template><el-card class="w"><div ><div class="mm"><h2>个人中心</h2><hr size="1px" color="gainsboro"/></div><el-form :model="userForm" label-width="100px"><el-form-item label="用户名:"><span>刘丽珍</span></el-form-item><el-form-item label="原密码"><el-input type="password" v-model="userForm.pass"></el-input></el-form-item><el-form-item label="新密码"><el-input type="password" v-model="userForm.word"></el-input></el-form-item><el-form-item label="再次输入密码"><el-input type="  " v-model="userForm.vue"></el-input></el-form-item><el-form-item><el-button type="primary" @click="handleSubmit">提交</el-button><el-button @click="resetForm">重置</el-button></el-form-item></el-form></div></el-card>
</template><script setup>import {ref} from 'vue';import {useRouter} from 'vue-router';const router = useRouter();// 定义响应式数据const userForm = ref({pass: '',word: '',vue:'',password: ''});// 重置表单的方法const resetForm = () => {userForm.value = {password: ''};};const handleSubmit = () => {alert("提交成功")router.push('/Tc/:id');}</script><style scoped>.mm h2 {text-align: center;}</style>

最后,要新建一个router.js路由进行界面的跳转实现

router.js代码:

 

// 导入相关函数
import {createRouter,createWebHashHistory
} from "vue-router"
// 导入需要的组件
import Al from "./components/Al.vue";
import Dl from "./components/Dl.vue";
import Fl from "./components/Fl.vue";
import Sp from "./components/Sp.vue";
import Sy from "./components/Sy.vue";
import Xz from "./components/Xz.vue";
import Tc from "./components/Tc.vue";
import Bt from "./components/Bt.vue";
import Zh from "./components/Zh.vue";
// 创建路由对象router
const router=createRouter({// 指定路由工作模式history:createWebHashHistory(),// 声明路由规则routes:[// 路由重定向{path:'/',redirect:'/dl'},// 路由匹配规则{path:'/dl',component:Dl},{path:'/dh',component: Al,children:[{path:'fl',component:Fl},{path:'sp',component:Sp},{path:'sy',component:Sy},{path:'xz',component:Xz},{path:'zh',component:Zh},{path:'/Tc/:id',component:Tc, props:true},{path:'/Bt/:id',component:Bt, props:true}]}]
})
// 全局前置导航守卫
router.beforeEach((to,from,next)=>{if(to.path!='/dl'){const token=localStorage.getItem('token')if(token){next()}else{next('/dl')}}else{next()}
})
// 导出实例对象router
export default router;

今天就分享到此,感谢预览~ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/40498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++新特性

C新特性主要体现在语法改进和标准库扩充两个方面。以下是一些主要的C新特性&#xff1a; 语法改进 统一的初始化方法&#xff1a;C11扩大了用大括号括起的列表&#xff08;初始化列表&#xff09;的使用范围&#xff0c;使其可用于所有的内置类型和用户自定义的类型。这种定义…

【C语言】指针(1)--入门理解

目录 一、内存和地址 二、指针变量和地址 三、指针变量类型的意义 一、内存和地址 只要讲指针就离不开内存 因为指针就是访问内存的 计算上CPU&#xff08;中央处理器&#xff09;在处理数据的时候&#xff0c;需要的数据是在内存中读取的&#xff0c;处理后的数 据也会放…

PY32F030高性能单片机,主频高达48M,最大64 KB 闪存,8 KB SRAM

PY32F030是普冉的一颗32位高性能MCU&#xff0c;采用32 位 ARM Cortex-M0 内核&#xff0c;高达16~64 Kbytes Flash 和 2~8 Kbytes SRAM 存储器&#xff0c;最高 48 MHz 工作频率。PY32F030 单片机的工作温度范围为 -40 ~ 105 C&#xff0c;工作电压范围为1.7 ~ 5.5 V&#xff…

多语言版在线出租车预订完整源码+用户应用程序+管理员 Laravel 面板+ 司机应用程序最新版源码

源码带PHP后台客户端源码 Flutter 是 Google 开发的一款开源移动应用开发 SDK。它用于开发 Android 和 iOS 应用&#xff0c;也是为 Google Fuchsia 创建应用的主要方法。Flutter 小部件整合了所有关键的平台差异&#xff0c;例如滚动、导航、图标和字体&#xff0c;可在 iOS 和…

DevOps实战:使用GitLab+Jenkins+Kubernetes(k8s)建立CI_CD解决方案

一.系统环境 本文主要基于Kubernetes1.21.9和Linux操作系统CentOS7.4。 服务器版本docker软件版本Kubernetes(k8s)集群版本CPU架构CentOS Linux release 7.4.1708 (Core)Docker version 20.10.12v1.21.9x86_64CI/CD解决方案架构图:CI/CD解决方案架构图描述:程序员写好代码之…

ASP.NET MVC-razor编写-2-svg中使用js+添加事件监听

环境&#xff1a;win10 效果 初始状态&#xff1a; 鼠标移入某个text&#xff08;比如KS primer&#xff09;时&#xff0c;text和连接的线条与箭头都变色&#xff1a; 鼠标移出时回复正常。 如果是移入另一种红色的text&#xff08;比如Cell Sceening Tag&#xff09;&…

创建本地仓库

一、新建挂载目录 二、将挂载本地镜像挂载到目录 三、配置yum仓库 一、新建挂载目录 mkdir /BenDiCangKu 二、将挂载本地镜像挂载到目录 1、先连接本地光盘 2、挂载光盘 mount /dev/sr0 /BenDiCangKu 3、查看挂载 由此可见挂载成功 三、配置yum仓库 1、新建yum仓库文件…

php简单商城小程序系统源码

&#x1f6cd;️【简单商城小程序】&#x1f6cd;️ &#x1f680;一键开启&#xff0c;商城搭建新体验&#x1f680; 你还在为繁琐的商城搭建流程头疼吗&#xff1f;现在&#xff0c;有了简单商城系统小程序&#xff0c;一切变得轻松又快捷&#xff01;无需复杂的编程知识&a…

构建Android studio版的CarSystemUI工程时因为包名一致导致BuildConfig问题

项目场景&#xff1a; 公司计划开发杰发AC8025-Android 12版本车载平台&#xff0c;前期预研需要构建Android studio版的CarSystemUI工程 问题描述 AAOS车载项目里面的CarSystemUI源码默认无Android studio版本&#xff0c;为了后期快速开发调试需要构建Android studio能直接…

STM32基础知识

一.STM32概述 第一款STM32单片机发布的时间为2007年6月11日。由意法半导体&#xff08;ST&#xff09;公司推出&#xff0c;是STM32系列中的首款产品&#xff0c;具体型号为STM32F1&#xff0c;它是一款基于Cortex-M内核的32位微控制器&#xff08;MCU&#xff09;。 STM32F1…

2024年【湖北省安全员-C证】考试资料及湖北省安全员-C证考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 湖北省安全员-C证考试资料是安全生产模拟考试一点通生成的&#xff0c;湖北省安全员-C证证模拟考试题库是根据湖北省安全员-C证最新版教材汇编出湖北省安全员-C证仿真模拟考试。2024年【湖北省安全员-C证】考试资料及…

JS+CSS+HTML项目-中国国家图书馆

页面做的不多&#xff0c;CSS效果请看哔哩哔哩

英智玲珑一体机在律所能做什么

只要不开庭&#xff0c;学习就不能停 好的律师是法律知识的百科全书 要精通、全面理解各类型的法律 还要不断学习更新的条例释义 一天即使工作24小时 也有忙不完的文书起草&#xff0c;资料核对&#xff0c;案情分析整理 有了英智玲珑一体机&#xff0c;这些都不是难题&am…

一键式创建GTest测试平台

适用于C GTest测试平台搭建。直接上python脚本。 #!/usr/bin/env python3 # -*- coding: utf-8 -*-import argparse import os import platform import subprocess from xml.etree import ElementTree as ETdefault_root_path "d:\\test\\UTtest"class DeveloperTe…

四款主流电脑监控软件(电脑监控软件主要优势)

在现代企业环境中&#xff0c;确保员工的工作效率和企业信息的安全成为了管理者的重要任务。电脑监控软件作为一种有效的管理工具&#xff0c;能够帮助企业实现这些目标。固信电脑监控软件在这方面表现尤为出色&#xff0c;本文将详细介绍固信电脑监控软件的优势及其主要功能&a…

《NATURE丨使用 AlphaFold 3 准确预测生物分子相互作用的结构》

NATURE丨使用 AlphaFold 3 准确预测生物分子相互作用的结构 注意&#xff01;&#xff1a;本文创作仅根据个人理解和网络信息&#xff0c;如有错误恳请指正&#xff01;谢谢&#xff01; 大家好&#xff0c;今天分享的文献是2024年5月发表在Nature上的“ Accurate structure …

(仿真+报告+源码)基于51单片机的温湿度监测系统

&#xff08;仿真报告源码&#xff09;基于51单片机的温湿度监测系统 付费后获得百度网盘链接&#xff0c;网盘链接在最后&#xff0c;有问题私信哦~~~ 一.系统简介 该系统由单片机、温湿度传感器器、液晶显示器以及浇水控制电路组成。该系统使用AT89C51单片机作为控制核心&…

windows上安装Frida环境

python安装 下载地址 Python Release Python 3.12.4 | Python.org python安装好后&#xff0c;使用如下命令安装frida客户端 pip install frida-tools 使用frida --version 查看frida版本 安装手机模拟器&#xff08;雷电模拟器&#xff09; 我的版本是4.0.61 查看CPU架构 adb …

一文了解常见DNS结构

很多企业忽略DNS这个关键的组件&#xff0c;而当DNS出现问题是&#xff0c;就会导致网站无法访问、电子邮件无法发送和接收&#xff0c;从而影响到企业的正常运行。而网络团队成员如果想要处理DNS问题就必须对所在网络的DNS架构有一定的理解。 主DNS服务器&#xff1a; 主DNS服…

设计模式探索:单例模式

1. 什么是单例模式? 定义: 单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一种全局访问点以访问该实例。常见的场景包括身份证号码、政府等需要唯一实例的情况。 单例模式通常用于那些需要在应用程序中仅存在一个实例的情况,例如配置管理器、线程池、数据…