springboot+vue+mybatisplus项目实战-学生成绩管理系统18

661 篇文章 3 订阅
112 篇文章 0 订阅

Student

addStudent.vue

<template>
    <div>
        <!-- 新增对话框       -->
        <!--
                title是标题
                width是宽度
                visible是否显示
                close-on-click-model,true表示单击框体外侧,自动关闭窗体,非模态 ,false框体一直显示,模态对话框
                before-close窗体关闭时事件
                -->
        <el-dialog
                title="新增学生"
                width="35%"
                :visible="addDialogVisible"
                :close-on-click-modal="false"
                :before-close="handleClose">
            <el-form
                    :model="formData"
                    :rules="rules"
                    ref="addForm"
                    label-width="100px"
                    label-position="left">
                <el-form-item label="学号" prop="number">
                    <el-input v-model="formData.number" clearable></el-input>
                </el-form-item>
                <el-form-item label="姓名" prop="realName">
                    <el-input v-model="formData.realName" clearable></el-input>
                </el-form-item>
                <!--
                              type date 是日期格式
                              v-model是数据双向绑定
                              editable开启可编辑模式
                              prefix-icon前置图标
                              value-format是数据格式化后的显示内容
                              -->
                <el-form-item label="入学时间" prop="enrollTime">
                    <el-date-picker
                            type="date"
                            v-model="formData.enrollTime"
                            editable
                            prefix-icon="el-icon-date"
                            value-format="yyyy-MM-dd">
                    </el-date-picker>
                </el-form-item>
            </el-form>
            <div slot="footer">
                <el-button type="primary" @click="onSubmit">确 定</el-button>
                <el-button @click="handleClose">取 消</el-button>
            </div>
        </el-dialog>
    </div>
</template>

<script>
    export default {
        name: "AddStudent",
        data(){
            return {
                //表单数据
                formData: {
                    number:'',
                    realName:'',
                    enrollTime:'',
                },
                //校验规则
                rules:{
                    number: [{ required: true, message: '请输入学号', trigger: 'blur'}],
                    realName: [{required: true, message: '请输入姓名', trigger: 'blur'}],
                    enrollTime: [{required: true, message: '请选择入学时间',trigger: 'blur'}]
                }
            }
        },
        props: {
            //组件接收参数,用户控制对话框显示
            addDialogVisible: {
                type : Boolean,  //类型
                default: false, //默认值
            }
        },
        methods: {
            //关闭之前
            handleClose(){
                //先清空
                this.$refs['addForm'].resetFields();
                //子传父,提示关闭对话框
                this.$emit('update:addDialogVisible',false);
            },
            //保存
            onSubmit(){
                this.$refs['addForm'].validate((valid)=>{
                    if(valid){
                        //校验通过
                        this.$appJsonPost({
                            url:'/student/add',
                            data: this.formData
                        }).then(res=>{
                            //清空
                            this.$refs['addForm'].resetFields();
                            //子传父,提示保存成功,刷新页面数据
                            this.$emit('addSuccess');
                            //提示
                            this.$message.success(res.msg);
                        }).catch(error=>{});
                    }
                })
            }
        }
    }
</script>

<style scoped>

</style>

StudentHome.vue

<template>
    <!-- 子路由,路由出口   -->
    <router-view/>
</template>

<script>
    export default {
        name: "StudentHome"
    }
</script>

<style scoped>

</style>

StudentManage.vue

<template>
    <div class="student">
        <section class="search-area">
            <el-row>
                <!--                布局,占2列-->
                <el-col :span="2">
                    <el-button type="primary" icon="el-icon-plus" @click="addBtn">新增</el-button>
                </el-col>
                <el-col :span="10">
                    <el-form :model="searchForm" ref="searchForm" :inline="true">
                        <el-form-item>
                            <el-input
                                    placeholder="请输入学生姓名模糊检索"
                                    v-model="searchForm.searchWord"
                                    @clear="doSearch"
                                    @keypress.native.enter="doSearch"
                                    clearable></el-input>
                        </el-form-item>
                        <el-form-item>
                            <el-button
                                    type="primary"
                                    icon="el-icon-search"
                                    @click="doSearch">搜索</el-button>
                        </el-form-item>
                    </el-form>
                </el-col>
            </el-row>
        </section>
        <!-- 新增学生       -->
        <!--
              addDialogVisible是控制对话框显示的变量,
              sync是简写方式
              addSuccess是保存成功的事件
              -->
        <add-student :addDialogVisible.sync ="addDialogVisible" @addSuccess="addSuccess"/>
        <!--编辑学生-->
        <!--
               :idToUpdate是修改项的id值

               -->
        <update-student :editDialogVisible.sync ="editDialogVisible" :idToUpdate="idToUpdate" @editSuccess="editSuccess"/>

        <!--  表格      -->
        <section>
            <!--
                      data是数据
                      border是边框
                      height是表格高度
                      size是控件尺寸

                      -->
            <el-table
                    :data="tableData.rows"
                    border
                    :height="tableHeight"
                    size="mini"
                    style="width: 100%">
                <el-table-column
                        prop="id"
                        label="ID"
                        show-overflow-tooltip>
                </el-table-column>
                <el-table-column
                        prop="number"
                        label="学号"
                        show-overflow-tooltip>
                </el-table-column>
                <el-table-column
                        prop="realName"
                        label="姓名"
                        show-overflow-tooltip>
                </el-table-column>
                <el-table-column
                        prop="enrollTime"
                        label="入学时间"
                        show-overflow-tooltip>
                </el-table-column>
                <el-table-column label="操作">
                    <template slot-scope="scope">
                        <el-button type="primary" icon="el-icon-edit" @click="handleEdit(scope.row)" size="mini">编辑</el-button>
                        <el-button type="danger" icon="el-icon-delete" @click="handleDelete(scope.row)" size="mini">删除</el-button>
                    </template>
                </el-table-column>
            </el-table>
        </section>

        <!-- 分页       -->
        <section>
            <!--  分页控件
                      size-change是页条数发生变化
                      current-change是当前页发生变化
                      current-page是当前页
                      page-size是页条数
                      layout是功能按钮
                      total是总条数
                      -->
            <el-pagination
                    @size-change="handleSizeChange"
                    @current-change="handleCurrentChange"
                    :current-page="searchForm.currentPage"
                    :page-sizes="[2, 5, 10, 20, 50, 100]"
                    :page-size="searchForm.pageSize"
                    layout="total, sizes, prev, pager, next, jumper"
                    :total="tableData.total">
            </el-pagination>
        </section>
    </div>
</template>

<script>
    import AddStudent from "@/views/Student/AddStudent";  //引入添加组件
    import UpdateStudent from "@/views/Student/UpdateStudent"; //引入修改组件
    import { TOP_HEIGHT} from "@/config/Constants"; //引入常量

    export default {
        name: "StudentManage",
        //局部注册
        components: {
            AddStudent,
            UpdateStudent,
        },
        data(){
            return {
                //表格数据
                tableData:{
                    rows:[],
                    total:0
                },
                //新增对话框
                addDialogVisible: false,
                //编辑对话框
                editDialogVisible: false,
                //表格查询条件
                searchForm: {
                    currentPage: 1, //当前页
                    pageSize: 10, //页条数
                    searchWord:''  //关键词
                },
                //编辑时,传递的id
                idToUpdate: -1,
                //表格高度
                tableHeight: '',
            }
        },
        methods: {
            //当前页变化
            handleCurrentChange(val){
                this.searchForm.currentPage = val;
                //刷新数据
                this.loadTable();
            },
            //页数量变化
            handleSizeChange(val){
                this.searchForm.pageSize = val;
                //刷新数据
                this.loadTable();
            },
            //删除
            handleDelete(row){
                //提示框
                this.$confirm(`您确定要删除【${row.realName}】吗?`,'删除提示',{
                    confirmButtonText:'删除',
                    cancelButtonText:'取消',
                    type:'warning'
                }).then(()=>{
                    //调用删除
                    this.$doGet({
                        url:'/student/delete',
                        params: {'id' : row.id},
                    }).then(res=>{
                        //提示
                        this.$message.success(res.msg);
                        //刷新数据
                        this.loadTable();
                    })
                }).catch(_=>{
                    //点击取消时
                    this.$message.warning('已取消删除');
                })
            },
            //编辑
            handleEdit(row){
                //传递id值
                this.idToUpdate = row.id;
                //打开对话框
                this.editDialogVisible = true;
            },
            //搜索
            doSearch(){
                //修复bug
                this.searchForm.currentPage = 1;
                //刷新数据
                this.loadTable();
            },
            //添加按钮
            addBtn(){
                //打开对话框
                this.addDialogVisible = true;
            },
            //新增成功
            addSuccess(){
                //关闭对话框
                this.addDialogVisible = false;
                //加载表格数据
                this.loadTable();
            },
            //更新成功
            editSuccess(){
                //关闭对话框
                this.editDialogVisible = false;
                //加载表格数据
                this.loadTable();
            },
            //加载数据
            loadTable(){
                this.$doGet({
                    url:'/student/pageList',
                    params: this.searchForm
                }).then(res => {
                    this.tableData.rows = res.data.content;  //数据
                    this.tableData.total = res.data.total; //总条数
                    this.searchForm.currentPage = res.data.currentPage; //当前页
                    this.searchForm.pageSize = res.data.pageSize; //页条数
                })
            }
        },
        created(){
            //计算表格高度
            this.$nextTick(()=>{
                this.tableHeight = window.innerHeight - TOP_HEIGHT;
            });
            //获取数据
            this.loadTable();
        }
    }
</script>

<style lang="scss" scoped>

</style>

UpdateStudent.vue

<template>
    <div>
        <!--  编辑对话框      -->
        <!--
              open是打开对话框的事件,可以加载数据
              -->
        <el-dialog
                title="编辑学生"
                width="35%"
                :visible="editDialogVisible"
                :close-on-click-modal="false"
                :before-close="handleClose"
                @open="getData">
            <el-form
                    :model="formData"
                    :rules="rules"
                    ref="editForm"
                    label-width="100px"
                    label-position="left">
                <!--   开启id,不可编辑             -->
                <el-form-item label="ID">
                    <el-input v-model="formData.id" disabled></el-input>
                </el-form-item>
                <el-form-item label="学号" prop="number">
                    <el-input v-model="formData.number" clearable></el-input>
                </el-form-item>
                <el-form-item label="姓名" prop="realName">
                    <el-input v-model="formData.realName" clearable></el-input>
                </el-form-item>
                <el-form-item label="入学时间" prop="enrollTime">
                    <el-date-picker
                            type="date"
                            v-model="formData.enrollTime"
                            editable
                            prefix-icon="el-icon-date"
                            value-format="yyyy-MM-dd">
                    </el-date-picker>
                </el-form-item>
            </el-form>
            <div slot="footer">
                <el-button type="primary" @click="onSubmit">确 定</el-button>
                <el-button @click="handleClose">取 消</el-button>
            </div>
        </el-dialog>
    </div>
</template>

<script>
    export default {
        name: "UpdateStudent",
        data(){
            return {
                //表单数据
                formData: {
                    id:'',
                    number:'',
                    realName:'',
                    enrollTime:'',
                },
                //校验规则
                rules:{
                    number: [{ required: true, message: '请输入学号', trigger: 'blur'}],
                    realName: [{required: true, message: '请输入姓名', trigger: 'blur'}],
                    enrollTime: [{required: true, message: '请选择入学时间',trigger: 'blur'}]
                }
            }
        },
        props: {
            //接收参数
            editDialogVisible: {
                type : Boolean, //类型
                default: false, //默认值
            },
            //接收参数
            idToUpdate: {
                type: Number, //类型
                required: true //必填
            }
        },
        methods: {
            //关闭之前
            handleClose(){
                //先清空
                this.$refs['editForm'].resetFields();
                //子传父,关闭对话框
                this.$emit('update:editDialogVisible',false);
            },
            //保存
            onSubmit(){
                this.$refs['editForm'].validate((valid)=>{
                    if(valid){
                        //校验通过
                        this.$appJsonPost({
                            url:'/student/update',
                            data: this.formData
                        }).then(res=>{
                            //清空
                            this.$refs['editForm'].resetFields();
                            //子传父,提示更新成功,刷新数据
                            this.$emit('editSuccess');
                            //提示
                            this.$message.success(res.msg);
                        }).catch(error=>{});
                    }
                })
            },
            //通过id获取学生数据
            getData(){
                this.$doGet({
                    url: '/student/findById',
                    params: { 'id' : this.idToUpdate }
                }).then(res => {
                    this.formData = res.data;
                });
            }
        }
    }
</script>

<style scoped>

</style>

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

虾米大王

有你的支持,我会更有动力

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

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

打赏作者

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

抵扣说明:

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

余额充值