美食杰项目 -- 编辑个人资料(六)

简介: 美食杰项目 -- 编辑个人资料(六)

前言:

本文给大家讲解,美食杰项目中 实现编辑个人资料页的效果,和具体代码。


具体实现思路:

在个人主页中点击编辑个人资料进入当前页

引入element-ui进行图片的上传

修改完所有信息后

点击保存会对个人资料进行更改

并跳转至个人主页

步骤:

1. 展示美食杰编辑个人资料效果

image.png

image.png

美食杰编辑个人资料


2. 引入element-ui


点击跳转至 element-ui 中 Upload 上传使用方法:https://element.eleme.cn/#/zh-CN/component/upload


点击跳转至 element-ui 中 MessageBox 弹框使用方法:https://element.eleme.cn/#/zh-CN/component/message-box


3. 代码

element-ui 中 Upload 上传 功能要单独封装一个组件,因为它需要在发布菜谱页面中使用

其他的在代码中写有注释,按注释理解即可,不了解的也可以在评论区里问我,或者私聊我询问

  • 修改个人资料页
<template>
  <div class="box">
    <div class="one">
      <p>修改头像</p>
      <!-- action 图片上传的地址 :imageUrl 显示图片传递到子组件 @res-url 子传父-->
      <upload-img
        action="/api/upload/?type=user"
        :imageUrl="avatar"
        @res-url="image"
        :imgMaxWidth="210"
      ></upload-img>
    </div>
    <div class="two">
      <p>修改名称</p>
      <input type="text" v-model="name" />
    </div>
    <div class="three">
      <p>个人简介</p>
      <el-input
        type="textarea"
        :rows="5"
        :cols="500"
        placeholder="请输入内容"
        v-model="sign"
        class="textarea"
        v-if="$store.getters.islogin"
      >
      </el-input>
    </div>
    <button class="btn" @click="save">保存</button>
  </div>
</template>
<script>
// 引入修改个人资料接口
import { userEdit } from "@/connector/api";
import UploadImg from "@/views/uploadImg/upload_img.vue";
export default {
  components: {
    // 子组件
    UploadImg,
  },
  data() {
    return {
      // 显示图片
      avatar: "",
      // 账号名称
      name: "",
      // 个人简介
      sign: "",
    };
  },
  // 事件监听,跳转页面时触发
  watch: {
    $route: {
      handler() {
        // 获取到内容并进行赋值
        this.avatar = this.$store.state.userInfo.avatar;
        this.name = this.$store.state.userInfo.name;
        this.sign = this.$store.state.userInfo.sign;
      },
      immediate: true,
    },
  },
  methods: {
    // 点击修改
    async save() {
      // 修改个人资料接口
      const data = await userEdit({
        avatar: this.avatar,
        name: this.name,
        sign: this.sign,
      });
      // console.log(data);
      if (data.code === 0) {
        // 跳转至个人主页
        window.location.href = "/MyHomepage";
      }
    },
    image(data) {
      // 子传父,触发的事件,改变显示的图片
      this.$nextTick(function () {
        this.avatar = data.resImgUrl;
        // console.log(this.avatar);
        this.$forceUpdate();
      });
    },
  },
};
</script>
<style lang="scss" scoped>
.box {
  width: 990px;
  background-color: #fff;
  margin: 20px auto 0;
  padding: 20px;
  div {
    display: flex;
    margin: 10px 0;
    p {
      margin-right: 20px;
    }
    .textarea {
      width: 200px;
      height: 70px;
    }
  }
  .btn {
    padding: 10px 20px;
    background-color: rgb(77, 145, 247);
    border: none;
  }
}
</style>
  • 上传图片页
<template>
  <el-upload
    class="avatar-uploader"
    :action="action"
    :show-file-list="false"
    :on-success="handleAvatarSuccess"
    :before-upload="beforeAvatarUpload"
  >
    <img
      v-if="url"
      :src="url"
      class="avatar"
      :style="{ maxWidth: imgMaxWidth + 'px' }"
    />
    <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  </el-upload>
</template>
<script>
export default {
  props: {
    // 接收父组件传递过来的事件
    action: String, // 图片上传的地址
    imageUrl: {
      // 显示的图片
      type: String,
      default: "",
    },
    imgMaxWidth: {
      //图片的宽
      type: [Number, String],
      default: "auto",
    },
    maxSize: {
      //图片格式的大小
      type: Number,
      default: 2,
    },
  },
  data() {
    return {
      // 把显示的图片赋值给 url
      url: this.imageUrl,
    };
  },
  mounted() {
    // 把显示的图片赋值给 url
    this.url = this.imageUrl;
  },
  methods: {
    // 上传成功时执行的事件
    handleAvatarSuccess(res, file) {
      // console.log(res, file);
      if (res.code === 1) {
        // 返回失败的结果
        this.$message({
          message: res.mes,
          type: "warning",
        });
        return;
      }
      // 获取上传成功后的图片地址
      this.url = URL.createObjectURL(file.raw);
      this.$emit("res-url", {
        // 子传父,触发
        // resImgUrl:res.data.url
        resImgUrl: res.data.url,
      });
    },
    // 上传文件前
    beforeAvatarUpload(file) {
      // 图片上传的格式
      const isJPG = file.type === "image/jpeg" || "image/gif";
      // 图片上传的大小
      const isLt2M = file.size / 1024 / 1024 < this.maxSize;
      // 判断
      if (!isJPG) {
        this.$message.error("上传头像图片只能是 JPG 格式!");
      }
      if (!isLt2M) {
        this.$message.error("上传头像图片大小不能超过 2MB!");
      }
      // 返回
      return isJPG && isLt2M;
    },
  },
};
</script>
<style lang="scss" scoped>
.avatar-uploader .el-upload {
  border: 1px dashed #d9d9d9;
  border-radius: 6px;
  cursor: pointer;
  position: relative;
  overflow: hidden;
}
.avatar-uploader .el-upload:hover {
  border-color: #409eff;
}
.avatar-uploader-icon {
  font-size: 28px;
  color: #8c939d;
  width: 178px;
  height: 178px;
  line-height: 178px;
  text-align: center;
}
.avatar {
  width: 178px;
  height: 178px;
  display: block;
}
</style>

总结:

以上就是 美食杰项目 中 编辑个人资料页的具体实现方法,不懂得也可以在评论区里问我或私聊我询问,以后会持续发布一些新的功能,敬请关注。


相关文章
|
1天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
11天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
5天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
460 198
|
3天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
521 157
|
3天前
|
数据采集 消息中间件 人工智能
跨系统数据搬运的全方位解析,包括定义、痛点、技术、方法及智能体解决方案
跨系统数据搬运打通企业数据孤岛,实现CRM、ERP等系统高效互通。伴随数字化转型,全球市场规模超150亿美元,中国年增速达30%。本文详解其定义、痛点、技术原理、主流方法及智能体新范式,结合实在Agent等案例,揭示从数据割裂到智能流通的实践路径,助力企业降本增效,释放数据价值。
|
9天前
|
人工智能 自然语言处理 安全
国内主流Agent工具功能全维度对比:从技术内核到场景落地,一篇读懂所有选择
2024年全球AI Agent市场规模达52.9亿美元,预计2030年将增长至471亿美元,亚太地区增速领先。国内Agent工具呈现“百花齐放”格局,涵盖政务、金融、电商等多场景。本文深入解析实在智能实在Agent等主流产品,在技术架构、任务规划、多模态交互、工具集成等方面进行全维度对比,结合市场反馈与行业趋势,为企业及个人用户提供科学选型指南,助力高效落地AI智能体应用。
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
549 43

热门文章

最新文章