首页 > 其他分享 >构建一个功能强大的个人资料编辑页面:Vue + Element UI 完整实战” “Vue + Element UI:创建可编辑、可保存的个人资料管理系统” “实战教程:如何使用 Vue 和 Elem

构建一个功能强大的个人资料编辑页面:Vue + Element UI 完整实战” “Vue + Element UI:创建可编辑、可保存的个人资料管理系统” “实战教程:如何使用 Vue 和 Elem

时间:2024-12-08 12:56:57浏览次数:5  
标签:index Vue 个人资料 color formData Element padding UI

效果图:

在这里插入图片描述

完整代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>个人资料编辑 - Vue + Element UI</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
  <script src="https://unpkg.com/element-ui/lib/index.js"></script>
  <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
  <style>
    body {
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 0;
      background-color: #f4f7fc;
    }
    header {
      background-color: #4CAF50;
      color: white;
      text-align: center;
      padding: 15px;
      font-size: 24px;
    }
    .container {
      width: 80%;
      margin: 30px auto;
      padding: 30px;
      background-color: white;
      border-radius: 10px;
      box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
    }
    .form-group {
      margin-bottom: 20px;
    }
    .form-group label {
      font-weight: bold;
    }
    .footer-buttons {
      display: flex;
      justify-content: flex-end;
      gap: 20px;
    }
    .footer-buttons button {
      padding: 10px 20px;
    }
  </style>
</head>
<body>

<header>
  个人资料编辑
</header>

<div id="app" class="container">
  <el-form ref="form" :model="formData" label-width="120px" @submit.prevent="handleSubmit">
    <!-- 个人基本信息 -->
    <el-form-item label="姓名" prop="name">
      <el-input v-model="formData.name" placeholder="请输入姓名"></el-input>
    </el-form-item>
    <el-form-item label="性别" prop="gender">
      <el-radio-group v-model="formData.gender">
        <el-radio label="male">男</el-radio>
        <el-radio label="female">女</el-radio>
      </el-radio-group>
    </el-form-item>
    <el-form-item label="出生日期" prop="dob">
      <el-date-picker v-model="formData.dob" type="date" placeholder="选择出生日期"></el-date-picker>
    </el-form-item>
    <el-form-item label="头像" prop="avatar">
      <el-upload
        class="avatar-uploader"
        action="#"
        list-type="picture-card"
        :file-list="avatarList"
        :on-preview="handlePreview"
        :on-remove="handleRemove"
      >
        <i class="el-icon-plus"></i>
      </el-upload>
    </el-form-item>

    <!-- 联系方式管理 -->
    <el-form-item label="联系方式">
      <div v-for="(contact, index) in formData.contacts" :key="index" class="form-group">
        <el-input v-model="contact.value" :placeholder="'请输入联系方式 ' + (index + 1)" style="width: 80%; margin-right: 10px;"></el-input>
        <el-button type="danger" icon="el-icon-delete" @click="removeContact(index)">删除</el-button>
      </div>
      <el-button type="primary" icon="el-icon-plus" @click="addContact">添加联系方式</el-button>
    </el-form-item>

    <!-- 地址管理 -->
    <el-form-item label="地址">
      <div v-for="(address, index) in formData.addresses" :key="index" class="form-group">
        <el-input v-model="address.value" :placeholder="'请输入地址 ' + (index + 1)" style="width: 80%; margin-right: 10px;"></el-input>
        <el-button type="danger" icon="el-icon-delete" @click="removeAddress(index)">删除</el-button>
      </div>
      <el-button type="primary" icon="el-icon-plus" @click="addAddress">添加地址</el-button>
    </el-form-item>

    <!-- 兴趣爱好 -->
    <el-form-item label="兴趣爱好">
      <el-checkbox-group v-model="formData.interests">
        <el-checkbox label="游泳"></el-checkbox>
        <el-checkbox label="读书"></el-checkbox>
        <el-checkbox label="旅游"></el-checkbox>
        <el-checkbox label="编程"></el-checkbox>
      </el-checkbox-group>
    </el-form-item>

    <!-- 底部按钮 -->
    <div class="footer-buttons">
      <el-button type="primary" @click="saveProfile">保存</el-button>
      <el-button type="default" @click="resetForm">重置</el-button>
    </div>
  </el-form>
</div>

<script>
new Vue({
  el: "#app",
  data() {
    return {
      formData: {
        name: '',
        gender: 'male',
        dob: '',
        avatar: '',
        contacts: [],
        addresses: [],
        interests: []
      },
      avatarList: []
    };
  },
  methods: {
    // 添加联系方式
    addContact() {
      this.formData.contacts.push({ value: '' });
    },
    // 删除联系方式
    removeContact(index) {
      this.formData.contacts.splice(index, 1);
    },
    // 添加地址
    addAddress() {
      this.formData.addresses.push({ value: '' });
    },
    // 删除地址
    removeAddress(index) {
      this.formData.addresses.splice(index, 1);
    },
    // 处理头像上传
    handlePreview(file) {
      console.log("Preview:", file);
    },
    handleRemove(file, fileList) {
      console.log("Remove:", file, fileList);
    },
    // 保存资料
    saveProfile() {
      this.$message({
        message: '个人资料已保存!',
        type: 'success'
      });
      console.log('保存的个人资料:', this.formData);
    },
    // 重置表单
    resetForm() {
      this.$confirm('确认重置所有内容吗?', '提示', {
        confirmButtonText: '确认',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.$refs.form.resetFields();
      }).catch(() => {
        this.$message.info('取消重置');
      });
    }
  }
});
</script>

</body>
</html>

标签:index,Vue,个人资料,color,formData,Element,padding,UI
From: https://blog.csdn.net/sky10100100/article/details/144308628

相关文章

  • buildadmin总结
    关于filter函数过滤会把非字符串类型(如布尔型,整型)转为字符串类型的bug/***修复后的输入过滤*富文本反XSS请使用clean_xss,也就不需要及不能再filter了*@paramstring|bool|int$string要过滤的字符串*@returnstring|bool|int*/......
  • 鸿蒙UI开发快速入门 —— part02: 组件开发
    1.组件基本介绍在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件。在进行UI界面开发时,通常不是简单的将系统组件进行组合使用,而是需要考虑代码可复用性、业务逻辑与UI分离,后续版本演进等因素。因此,将UI和部分业务逻辑封装成自定义组件......
  • 鸿蒙UI开发快速入门 —— part03: 组件的生命周期
    1. 什么是组件的生命周期组件的生命周期是我们开发一个组件必须要关注的内容,组件的生命周期,指的是组件的创建、渲染、销毁等过程。因为这个过程就类似于人从出生到离世的过程,从而称为:组件的生命周期。只有了解了组件的生命周期,我们才能开发出一个流畅的用户界面。2. 页面&......
  • 网上报名管理系统|Java|SSM|VUE| 前后端分离
     【一】项目提供非常完整的源码注释【二】相关技术栈文档【三】源码讲解视频(收费)                     【其它服务】【一】可以提供远程部署安装,包扩环境【二】提供软件相关的安装包【三】如果需要提供java入门资料可咨询 ......
  • Vue3项目搭建
    转载:https://blog.csdn.net/rong09_13/article/details/132661168https://blog.csdn.net/shanghai597/article/details/1308856361.安装nvm//nodejs版本管理工具#显示可以安装的所有nodejs版本nvmlistavailable#安装指定版本的nodejsnvminstall<version>#显示......
  • Vue-智慧城市
    项目搭建创建项目npmcreatevite安装依赖package.json:{"name":"smartcity_wuhan","version":"0.0.0","private":true,"type":"module","scripts":{"dev"......
  • AutoConsis:UI内容一致性智能检测14
    可参考美团技术团队1.背景目前,移动App上的业务页面愈发复杂,技术团队常会以页面为单位来拆解团队开发分工,同一类业务元素信息分散在不同团队负责的页面内。在具体的实践中,存在一类不易检出但又影响用户体验的异常:页面中的UI信息相互矛盾(如下图中同一个商品在多个页面上的实际......
  • AutoConsis:UI内容一致性智能检测7
    可参考美团技术团队1.背景目前,移动App上的业务页面愈发复杂,技术团队常会以页面为单位来拆解团队开发分工,同一类业务元素信息分散在不同团队负责的页面内。在具体的实践中,存在一类不易检出但又影响用户体验的异常:页面中的UI信息相互矛盾(如下图中同一个商品在多个页面上的实际......
  • Vue组件化编程1:模块与组件、模块化与组件化
    欢迎来到“雪碧聊技术”CSDN博客!在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将不断探索Java的深邃世界,分享最新的技术动态、实战经验以及项目......
  • JAVA开源毕业设计 课程作业管理系统 Vue.JS+SpringBoot+MySQL
    本文项目编号T023,文末自助获取源码\color{red}{T023,文末自助获取源码}......