element-plus学习 -2025/3/18
{ ...this.form } 是 JavaScript 中的 扩展运算符(Spread Operator),它的作用是将 this.form 对象的所有属性“展开”到一个新的对象中
例如
form :{
name : '',
score:''
}
简易学生分数管理系统 element-plus实现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/element-plus/dist/index.css" />
<script src="https://cdn.jsdelivr.net/npm/vue@3"></script>
<script src="https://cdn.jsdelivr.net/npm/element-plus"></script>
<title>学生成绩管理系统</title>
<style>
.red-score {
color: red;
font-weight: bold;
}
</style>
</head>
<body>
<div id="app">
<!-- 添加学生表单 -->
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="姓名" prop="name">
<el-input placeholder="请填写姓名" :maxlength="20" v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="分数" prop="score">
<el-input placeholder="请填写分数" v-model.number="form.score"></el-input>
</el-form-item>
</el-form>
<el-button type="primary" @click="addStudent">添加学生</el-button>
<!-- 分割线 -->
<el-divider direction="horizontal" content-position="center"></el-divider>
<div>
<!-- 搜索框 -->
<el-form ref="searchForm" :model="searchForm" label-width="80px">
<el-form-item label="姓名" prop="name">
<el-input placeholder="请输入姓名" v-model="searchForm.name" style="width: 240px"></el-input>
</el-form-item>
</el-form>
<!-- 成绩大于 60 的筛选 -->
<el-checkbox v-model="filterByScore">成绩大于 60</el-checkbox>
<div>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item>
<el-input v-model.number="minScore" placeholder="最低分" type="number" :min="0" :max="100"
style="width: 100px;"></el-input>
<el-input v-model.number="maxScore" placeholder="最高分" type="number" :min="0" :max="100"
style="width: 100px;"></el-input>
<el-button type="text" @click="resetScoreFilter">清除</el-button>
</el-form-item>
</el-form>
</div>
</div>
<!-- 学生表格 -->
<el-table :data="filteredStudentList" border style="margin-top: 20px">
<el-table-column type="index" label="序号"></el-table-column>
<el-table-column label="姓名" prop="name"></el-table-column>
<el-table-column label="分数">
<template #default="{ row }">
<span :class="{ 'red-score': row.score < 60 }">{{ row.score }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="120">
<template #default="{ $index }">
<el-button type="danger" size="small" @click="deleteStudent($index)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
<script>
const { ElMessage } = ElementPlus;
const { createApp } = Vue;
const app = createApp({
data() {
return {
studentList: [
{ name: '张三', score: 100 },
{ name: '李四', score: 90 },
{ name: '王五', score: 80 },
{ name: '赵六', score: 50 },
{ name: '钱七', score: 40 }
],
form: {
name: '',
score: ''
},
searchForm: {
name: ''
},
minScore: 0, // 默认值 0
maxScore: 100, // 默认值 100
filterByScore: false,
rules: {
name: [
{ required: true, message: '请输入姓名', trigger: 'blur' },
],
score: [
{ required: true, message: '请输入分数', trigger: 'blur' },
{ type: 'number', message: '分数必须为数字值' },
{
validator: (rule, value, callback) => {
if (value < 0 || value > 100) {
callback(new Error('分数必须在 0-100 之间'));
} else {
callback();
}
}, trigger: 'blur'
}
]
}
};
},
computed: {
filteredStudentList() {
let list = this.studentList;
// 姓名筛选
if (this.searchForm.name) {
list = list.filter(student =>
student.name.includes(this.searchForm.name)
);
}
// 分数区间筛选
if (this.minScore != null || this.maxScore != null) {
list = list.filter(student => {
const minMatch = this.minScore == null || student.score >= this.minScore;
const maxMatch = this.maxScore == null || student.score <= this.maxScore;
return minMatch && maxMatch;
});
}
// 成绩大于 60 的筛选
if (this.filterByScore) {
list = list.filter(student => student.score > 60);
}
return list;
}
},
methods: {
addStudent() {
this.$refs.form.validate((valid) => {
if (valid) {
this.studentList.push({ ...this.form });
this.$refs.form.resetFields();
ElMessage.success('添加成功');
} else {
ElMessage.error('添加失败');
}
});
},
query() {
ElMessage.info(`找到 ${this.filteredStudentList.length} 条记录`);
},
deleteStudent(index) {
this.studentList.splice(index, 1);
ElMessage.success('删除成功');
},
// 重置分数筛选
resetScoreFilter() {
this.minScore = 0; // 恢复默认值
this.maxScore = 100; // 恢复默认值
ElMessage.success('分数筛选已重置');
}
}
});
app.use(ElementPlus);
app.mount('#app');
</script>
</body>
</html>


浙公网安备 33010602011771号