以下是完善后的代码,包括功能实现和样式调整。我们将为 `saveSettings` 方法添加逻辑,并确保组件的功能完整。
### 完善后的代码:
```vue
<template>
<div class="personal-settings-container">
<h2>个人设置</h2>
<!-- 表单 -->
<el-form :model="form" :rules="rules" ref="settingsForm" label-width="100px">
<el-form-item label="用户名" prop="username">
<el-input v-model="form.username"></el-input>
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="form.email"></el-input>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input type="password" v-model="form.password"></el-input>
</el-form-item>
<!-- 提交按钮 -->
<el-form-item>
<el-button type="primary" @click="saveSettings">保存</el-button>
<el-button @click="resetForm">重置</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
export default {
data() {
return {
form: {
username: '',
email: '',
password: ''
},
rules: {
username: [
{ required: true, message: '请输入用户名', trigger: 'blur' },
{ min: 3, max: 20, message: '长度在 3 到 20 个字符', trigger: 'blur' }
],
email: [
{ required: true, message: '请输入邮箱地址', trigger: 'blur' },
{ type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }
],
password: [
{ required: true, message: '请输入密码', trigger: 'blur' },
{ min: 6, max: 20, message: '长度在 6 到 20 个字符', trigger: 'blur' }
]
}
};
},
methods: {
saveSettings() {
this.$refs.settingsForm.validate((valid) => {
if (valid) {
alert('保存成功!');
// 可以在这里调用 API 提交表单数据
console.log(this.form);
} else {
console.log('表单验证失败');
return false;
}
});
},
resetForm() {
this.$refs.settingsForm.resetFields();
}
}
};
</script>
<style scoped>
.personal-settings-container {
width: 50%;
margin: 50px auto;
padding: 20px;
border: 1px solid #ccc;
border-radius: 8px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
}
h2 {
text-align: center;
margin-bottom: 20px;
}
</style>
```
---
### 给出解释:
1. **模板部分 (`<template>`)**:
- 添加了三个输入字段:用户名、邮箱和密码。
- 使用了 `el-form` 和 `el-form-item` 来创建表单,并通过 `v-model` 实现双向绑定。
- 添加了两个按钮:一个是“保存”按钮,用于提交表单;另一个是“重置”按钮,用于清空表单。
2. **脚本部分 (`<script>`)**:
- 在 `data` 中定义了表单数据模型 `form` 和校验规则 `rules`。
- 校验规则使用了 Element UI 的内置校验器,例如 `required`(必填)、`min`(最小长度)和 `type`(类型校验)。
- `saveSettings` 方法通过 `$refs.settingsForm.validate` 对表单进行校验,如果校验通过则弹出提示框并打印表单数据。
- `resetForm` 方法通过 `$refs.settingsForm.resetFields` 清空表单。
3. **样式部分 (`<style scoped>`)**:
- 设置了容器的宽度、边距、内边距和边框样式,使其居中显示且具有阴影效果。
- 调整了标题的样式,使其居中对齐。
---
###