Vue3 + Element Plus + Pinia 学生管理系统(完整步骤)

定制开发 承接各种代码任务

📌 Vue3 + Element Plus + Pinia 学生管理系统(完整步骤)

🎯 1. 创建 Vue3 + Vite 项目

首先,使用 Vite 初始化 Vue3 项目。

# 创建 Vue 3 + Vite 项目
npm create vite@latest student-management --template vue

# 进入项目目录
cd student-management

# 安装依赖
npm install

# 安装 Vue Router、Pinia 和 Element Plus
npm install vue-router@4 pinia element-plus axios

# 启动开发服务器
npm run dev

📌 2. 配置 main.js

路径:src/main.js

import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
import { createPinia } from 'pinia';
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';
import './style.css'; // 全局样式

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

📌 3. 配置 Vue Router

路径:src/router/index.js

import { createRouter, createWebHistory } from 'vue-router';
import HomeView from '../views/HomeView.vue';
import StudentList from '../views/StudentList.vue';
import StudentAdd from '../views/StudentAdd.vue';

const routes = [
    { path: '/', component: HomeView },
    { path: '/students', component: StudentList },
    { path: '/add-student', component: StudentAdd }
];

const router = createRouter({
    history: createWebHistory(),
    routes
});

export default router;

📌 4. 配置 Pinia 全局状态管理

路径:src/store/studentStore.js

import { defineStore } from 'pinia';

export const useStudentStore = defineStore('studentStore', {
    state: () => ({
        students: [
            { id: 1, name: '张三', age: 18, class: '高一(1)班' },
            { id: 2, name: '李四', age: 17, class: '高一(2)班' }
        ]
    }),
    actions: {
        addStudent(student) {
            this.students.push({ id: Date.now(), ...student });
        },
        deleteStudent(id) {
            this.students = this.students.filter(student => student.id !== id);
        }
    }
});

📌 5. 创建组件

5.1 轮播图组件

路径:src/components/Carousel.vue

<template>
  <el-carousel height="300px">
    <el-carousel-item v-for="(item, index) in images" :key="index">
      <img :src="item" alt="轮播图" class="carousel-image" />
    </el-carousel-item>
  </el-carousel>
</template>

<script setup>
const images = [
  '图片url',
  '图片url',
  '图片url',
];
</script>

<style scoped>
.carousel-image {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
</style>

5.2 侧边栏组件

路径:src/components/Sidebar.vue

<template>
  <el-menu router>
    <el-menu-item index="/">首页</el-menu-item>
    <el-menu-item index="/students">学生列表</el-menu-item>
    <el-menu-item index="/add-student">添加学生</el-menu-item>
  </el-menu>
</template>

<style scoped>
.el-menu {
  width: 200px;
  height: 100vh;
  position: fixed;
}
</style>

5.3 学生表单组件

路径:src/components/StudentForm.vue

<template>
  <el-form :model="student" label-width="80px">
    <el-form-item label="姓名">
      <el-input v-model="student.name" placeholder="请输入姓名"></el-input>
    </el-form-item>
    <el-form-item label="年龄">
      <el-input type="number" v-model="student.age" placeholder="请输入年龄"></el-input>
    </el-form-item>
    <el-form-item label="班级">
      <el-input v-model="student.class" placeholder="请输入班级"></el-input>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submitForm">提交</el-button>
    </el-form-item>
  </el-form>
</template>

<script setup>
import { ref } from 'vue';

const student = ref({ name: '', age: '', class: '' });

const emit = defineEmits(['submit']);

const submitForm = () => {
  emit('submit', student.value);
  student.value = { name: '', age: '', class: '' }; // 清空表单
};
</script>

📌 6. 创建页面

6.1 首页

路径:src/views/HomeView.vue

<template>
  <div>
    <h2>学生管理系统</h2>
    <Carousel />
    <el-button type="primary" @click="$router.push('/students')">查看学生列表</el-button>
    <el-button type="success" @click="$router.push('/add-student')">添加学生</el-button>
  </div>
</template>

<script setup>
import Carousel from '../components/Carousel.vue';
</script>

6.2 学生列表页

路径:src/views/StudentList.vue

<template>
  <div>
    <h2>学生列表</h2>
    <el-table :data="students" border style="width: 100%">
      <el-table-column prop="id" label="ID" width="50"></el-table-column>
      <el-table-column prop="name" label="姓名"></el-table-column>
      <el-table-column prop="age" label="年龄"></el-table-column>
      <el-table-column prop="class" label="班级"></el-table-column>
      <el-table-column label="操作" width="150">
        <template #default="{ row }">
          <el-button type="danger" size="small" @click="deleteStudent(row.id)">删除</el-button>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>

<script setup>
import { storeToRefs } from 'pinia';
import { useStudentStore } from '../store/studentStore';

const studentStore = useStudentStore();
const { students } = storeToRefs(studentStore);
const deleteStudent = (id) => studentStore.deleteStudent(id);
</script>

6.3 学生添加页

路径:src/views/StudentAdd.vue

<template>
  <div>
    <h2>添加学生</h2>
    <StudentForm @submit="addStudent" />
  </div>
</template>

<script setup>
import { useStudentStore } from '../store/studentStore';
import StudentForm from '../components/StudentForm.vue';
import { useRouter } from 'vue-router';

const studentStore = useStudentStore();
const router = useRouter();

const addStudent = (student) => {
  studentStore.addStudent(student);
  router.push('/students');
};
</script>

📌 7. 运行项目

npm run dev

浏览器访问 http://localhost:5173/


✅ 主要功能

1、 Vue3 + Element Plus 组件化开发
2、 支持学生列表、添加学生、删除学生
3、 Vue Router 页面跳转
4、 Pinia 全局状态管理
5、 首页轮播图(el-carousel)

这样,一个完整的 Vue3 + Element Plus + Pinia 学生管理系统前端就完成了!🚀🚀🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

终将老去的穷苦程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值