10用户管理(Vue3+Spring Boot)

目录

  • [1. 功能描述](#1. 功能描述)
  • [2. 接口地址](#2. 接口地址)
  • 3.后台Java代码
  • 4.前端框架搭建:views/user添加UserManageVue组件
  • [5. api/user.js中写请求接口代码](#5. api/user.js中写请求接口代码)
  • [6 获取用户信息](#6 获取用户信息)
  • [7 删除用户](#7 删除用户)
  • [8 修改状态](#8 修改状态)
  • [9 效果演示](#9 效果演示)

1. 功能描述

复制代码
用户管理界面,对用户进行查询、状态变更、删除。

2. 接口地址

复制代码
### 获取用户列表
GET http://localhost:8082/user/allUser
### 修改用户状态
PUT http://localhost:8082/user/updateStatus
### 删除用户
DELETE http://localhost:8082/user/deleteUser

3.后台Java代码

java 复制代码
//   获取用户列表
    @GetMapping("/allUser")
    public Result getAllUser(){
//      查询所有用户角色为USER的用户信息
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("user_role","USER");
//        条件查询
        List<User> users = iUserService.list(queryWrapper);
        return Result.success(users);
    }
java 复制代码
    //删除用户
    @DeleteMapping("/deleteUser")
    public Result removeUser(@RequestParam("userId") Integer userId){
            boolean result = iUserService.removeById(userId);
            if (result) {
                return Result.success("删除用户成功!");
            } else {
                return Result.error("删除失败,用户可能不存在!");
            }
    }
java 复制代码
 //管理员修改用户状态
    @PutMapping("/updateStatus")
    public Result updataUserStatus(@RequestBody User user) {
        UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("user_id", user.getUserId()) // 使用目标用户 ID
                .set("user_status",user.getUserStatus());
        boolean result = iUserService.update(updateWrapper); // 调用 update 方法
        if (result) {
            return Result.success("状态重置");
        } else {
            return Result.error("修改失败,可能是其他问题!");
        }
    }

4.前端框架搭建:views/user添加UserManageVue组件

html 复制代码
<script setup>
import { ref, computed } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { Delete, RefreshRight } from '@element-plus/icons-vue'

// 用户表单数据模型
const userModel = ref({
    userId: '',
    userName: '',
    userEmail: '',
    userStatus: ''
})

// 表单引用
const formRef = ref(null)

// 用户列表数据模型
const users = ref([
    {
        "userId": 1,
        "userName": "张三",
        "userEmail": "zhangsan@example.com",
        "userStatus": '0'
    },
    {
        "userId": 2,
        "userName": "李四",
        "userEmail": "lisi@example.com",
        "userStatus": '1'
    },
    // 其他用户项...
])

// 搜索关键词
const searchKeyword = ref('')

// 表单验证规则
const rules = {
    userName: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
    userEmail: [{ required: true, message: '请输入邮箱', trigger: 'blur' }, { type: 'email', message: '请输入正确的邮箱地址', trigger: 'blur' }]
}

// 控制抽屉是否显示
const visibleDrawer = ref(false)



// 获取用户列表
const getUsers = async () => {

}

// 初始化时获取用户列表
getUsers()

// 搜索用户
const searchUsers = () => {
    if (searchKeyword.value.trim() === '') {
        // 如果搜索关键词为空,则显示所有用户
        getUsers()
    } else {
        // 根据关键词筛选用户
        users.value = users.value.filter(user =>
            user.userName.includes(searchKeyword.value) ||
            user.userEmail.includes(searchKeyword.value)
        )
    }
}

// 重置搜索
const resetSearch = () => {
    searchKeyword.value = ''
    getUsers()
}


// 2、实现删除功能
const deleteUser = (userId) => {
    console.log("删除");
}

// 切换用户状态
const toggleUserStatus = (userId) => {
    console.log("切换状态");
}

</script>


<template>
    <el-card class="page-container">
        <!-- 搜索表单 -->
        <el-form inline>
            <el-form-item label="用户名/邮箱:">
                <el-input v-model="searchKeyword" placeholder="请输入用户名或邮箱"></el-input>
            </el-form-item>
            <el-form-item>
                <el-button type="primary" @click="searchUsers">搜索</el-button>
                <el-button @click="resetSearch">重置</el-button>
            </el-form-item>
        </el-form>
        <!-- 用户列表 -->
        <el-table :data="users" style="width: 100%" :default-sort="{ prop: 'userName', order: 'ascending' }">
            <el-table-column label="用户名" prop="userName" sortable></el-table-column>
            <el-table-column label="邮箱" prop="userEmail"></el-table-column>
            <el-table-column label="状态" prop="userStatus" sortable>
                <template #default="{ row }">
                    <el-switch v-model="row.userStatus" active-value="0" inactive-value="1" active-color="#13ce66"
                        inactive-color="#ff4949" @change="toggleUserStatus(row.userId)">
                        <template #active-value>已启用</template>
                        <template #inactive-value>已禁用</template>
                    </el-switch>
                </template>
            </el-table-column>
            <el-table-column label="操作" width="300">
                <template #default="{ row }">
                    <el-button :icon="Delete" circle plain type="danger" @click="deleteUser(row.userId)"></el-button>
                </template>
            </el-table-column>
        </el-table>
    </el-card>
</template>

<style scoped>
.page-container {
    padding: 20px;
}

.header {
    display: flex;
    justify-content: space-between;
    align-items: center;
}
</style>

初始效果如下:

5. api/user.js中写请求接口代码

javascript 复制代码
// 获取所有普通用户数据
export const userListService = () => {
    return request.get('/user/allUser')
}

// 修改用户状态
export const userStatusUpdateService = (usersDatas) => {
    return request.put('/user/updateStatus', usersDatas)
}

// 删除用户
export const userDeleteService = (userId) => {
    return request.delete('/user/deleteUser', { params: { userId: userId } })
}

6 获取用户信息

javascript 复制代码
// 导入userListService
import { userListService } from '@/api/user'
// 获取用户列表
const getUsers = async () => {
    // 这里可以调用后端API获取用户列表
    // 假设这里有一个返回用户列表的模拟函数
    const result = await userListService()
    users.value = result.data
}

// 初始化时获取用户列表
getUsers()

7 删除用户

javascript 复制代码
// 1、导入userDeleteService
import { userDeleteService } from '@/api/user'
// 2、实现删除功能
const deleteUser = async (userId) => {
    await ElMessageBox.confirm('确定要删除该用户吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
    }).then(() => {
        // 用户点击了确定
        // 提交删除请求
        userDeleteService(userId).then(result => {
            ElMessage.success(result.message ? result.message : '删除成功')
            getUsers()
        })
    })
}

8 修改状态

javascript 复制代码
// 调用接口
import { userStatusUpdateService } from '@/api/user'
// 切换用户状态
const toggleUserStatus = (userId) => {
    const user = users.value.find(u => u.userId == userId)
    // 这里可以调用后端API更新用户状态
    userStatusUpdateService(user).then(result => {
        ElMessage.success(result.message ? result.message : '状态更新成功')
        getUsers()
    }).catch(error => {
        ElMessage.error(error.message)
    });
}

9 效果演示


用户管理操作视频

相关推荐
程序猿DD16 分钟前
OctaFuse Gateway 2.15.0:MCP 聚合、向量 Embeddings 与官方目录同步
后端·agent
蛋蛋的就会顺顺的3 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
余槐i3 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
需要8263 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小 黄 鸡3 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
凤山老林4 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
伯恩bourne5 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
张彦峰ZYF5 小时前
停顿短不等于延迟低:G1、ZGC 与低延迟服务的目标分野、代价账本与选型标定
后端·回收暂停、应用停止总时长·到达安全点、分配停滞·屏障吃吞吐、并发线程吃核心·并发窗口吃堆余量·分区式靠挑回收集兑现目标·染色指针式不支持压缩引用
silvamux_5 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
pride.li6 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉