【愚公系列】《循序渐进Vue.js 3.x前端开发实践》067-商业项目:电商后台管理系统实战(用户登录模块开发)

举报
愚公搬代码 发表于 2025/03/30 17:33:23 2025/03/30
【摘要】 标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳...
标题 详情
作者简介 愚公搬代码
头衔 华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
近期荣誉 2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳博主等。
博客内容 .NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
欢迎 👍点赞、✍评论、⭐收藏

🚀前言

在当今的数字经济时代,电子商务已成为商业运营的重要组成部分。一个高效、稳定的电商后台管理系统是确保企业顺利运营的关键。作为电商系统的核心组成部分,用户登录模块不仅关乎系统的安全性,还直接影响到用户的体验和满意度。

本文将带你深入探讨电商后台管理系统中用户登录模块的开发实战。我们将从项目需求分析入手,逐步引导你实现一个功能齐全的用户登录模块,包括用户注册、登录验证、密码重置等功能。通过使用现代前端技术(如 Vue.js)和后端框架(如 Node.js 或 Express),我们将展示如何实现安全、高效的用户认证机制。

🚀一、用户登录模块开发

🔎1. 项目搭建

首先,我们需要创建一个新的 Vue 项目并安装必要的依赖模块。

🦋1.1 创建 Vue 项目

在终端中执行以下命令来创建一个新的 Vue 项目:

npm create vite@latest

在创建过程中设置项目名称为 shop-admin

🦋1.2 安装依赖

进入项目目录后,安装 Vue Router 和 Pinia:

npm install vue-router@4 --save
npm install pinia --save

确保 package.json 文件中包含了 vue-routerpinia 模块。

🦋1.3 项目结构

删除默认的 HelloWorld.vue 文件。在 components 文件夹下新建 homelogin 两个子文件夹,并分别创建 Home.vueLogin.vue 文件。

components/
  home/
    Home.vue
  login/
    Login.vue

示例代码:

<!-- Home.vue -->
<template>
  主页
</template>

<!-- Login.vue -->
<template>
  登录页面
</template>

🔎2. 全局状态管理

src 文件夹下新建一个 tools 文件夹,并在其中创建 Storage.js 文件。

src/
  tools/
    Storage.js

🦋2.1 Storage.js

// src/tools/Storage.js
import { defineStore } from 'pinia';
import { ref, computed } from 'vue';

const Store = defineStore("UserStore", () => {
  // 全局存储用户名和密码
  const userName = ref("");
  const userPassword = ref("");

  // 进行是否登录的判断
  const isLogin = computed(() => {
    return userName.value.length > 0;
  });

  // 清除缓存的用户信息,登出使用
  const clearUserInfo = () => {
    userName.value = "";
    userPassword.value = "";
  };

  // 注册用户信息,登录使用
  const registUserInfo = (name, password) => {
    userName.value = name;
    userPassword.value = password;
  };

  return { userName, userPassword, isLogin, clearUserInfo, registUserInfo };
});

export default Store;

🔎3. 路由配置

tools 文件夹下新建 Router.js 文件,用于路由配置。

// src/tools/Router.js
import { createRouter, createWebHashHistory } from 'vue-router';
import Login from '../components/login/Login.vue';
import Home from '../components/home/Home.vue';
import store from '../tools/Storage';

// 创建路由实例
const Router = createRouter({
  history: createWebHashHistory(),
  routes: [
    { path: '/login', component: Login, name: "login" },
    { path: '/home', component: Home, name: "home" }
  ]
});

// 路由守卫,当未登录时,非登录页面的任何页面都不允许跳转
Router.beforeEach((to, from, next) => {
  const userStore = store();
  let isLogin = userStore.isLogin;
  if (isLogin || to.name === "login") {
    next();
  } else {
    next({ name: "login" });
  }
});

export default Router;

🔎4. 修改 App.vue

App.vue 文件添加路由渲染出口:

// src/App.vue
<template>
  <router-view></router-view>
</template>

🔎5. 初始化项目

main.js 文件中完成基础的初始化工作:

// src/main.js
import { createApp } from 'vue';
import { createPinia } from 'pinia';
import Router from './tools/Router';
import App from './App.vue';

const app = createApp(App);
app.use(createPinia());
app.use(Router);
app.mount('#app');

🔎6. 用户登录页面开发

🦋6.1 安装 Element Plus

npm install element-plus --save
npm install element-plus/icons-vue --save

🦋6.2 引入 Element Plus

main.js 文件中添加 Element Plus 模块的相关初始化代码:

// src/main.js
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';
import * as ElementPlusIconsVue from '@element-plus/icons-vue';
import { createApp } from 'vue';
import { createPinia } from 'pinia';
import Router from './tools/Router';
import App from './App.vue';

const app = createApp(App);

// 遍历 ElementPlusIconsVue 中的所有组件进行注册
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  app.component(key, component);
}

app.use(ElementPlus);
app.use(createPinia());
app.use(Router);
app.mount('#app');

🦋6.3 修改 Storage.js

Storage.js 文件添加两个修改用户状态的方法:

// src/tools/Storage.js
const Store = defineStore("UserStore", () => {
  const userName = ref("");
  const userPassword = ref("");

  const isLogin = computed(() => {
    return userName.value.length > 0;
  });

  const clearUserInfo = () => {
    userName.value = "";
    userPassword.value = "";
  };

  const registUserInfo = (name, password) => {
    userName.value = name;
    userPassword.value = password;
  };

  return { userName, userPassword, isLogin, clearUserInfo, registUserInfo };
});

export default Store;

🦋6.4 完善 Login.vue

<!-- src/components/login/Login.vue -->
<script setup>
import Storage from "../../tools/Storage";
import { ElMessage } from 'element-plus';
import { ref, computed } from 'vue';
import { useRouter } from 'vue-router';

const store = Storage();
const router = useRouter();

const name = ref("");
const password = ref("");

const disabled = computed(() => {
  return name.value.length == 0 || password.value.length == 0;
});

function login() {
  store.registUserInfo(name.value, password.value);
  ElMessage({
    message: '登录成功',
    type: 'success',
    duration: 3000,
  });
  setTimeout(() => {
    router.push({ name: "home" });
  }, 3000);
}
</script>

<template>
  <div id="container">
    <div id="title">
      <h1>电商后台管理系统</h1>
    </div>
    <div class="input">
      <el-input v-model="name" prefix-icon="user" placeholder="请输入用户名"></el-input>
    </div>
    <div class="input">
      <el-input v-model="password" prefix-icon="lock" placeholder="请输入密码" auto-complete="new-password" show-password></el-input>
    </div>
    <div class="input">
      <el-button @click="login" style="width:500px" type="primary" :disabled="disabled">登录</el-button>
    </div>
  </div>
</template>

<style scoped>
#container {
  background: #595959;
  background-image: url("/public/login_bg.jpg");
  height: 100vh;
  width: 100vw;
  position: absolute;
}
#title {
  text-align: center;
  color: azure;
  margin-top: 200px;
}
.input {
  margin: 20px auto;
  width: 500px;
}
</style>

在这里插入图片描述

🔎7.总结

以上就是一个简单的 Vue 后台管理系统的基础搭建和用户登录模块的实现。运行代码后,无论输入怎样的页面路径,页面都会被重定向到登录页面。在登录成功后,页面会跳转到后台管理系统的主页。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。