Vue3.0项目实战(五)——大事件管理系统个人中心页面实现

发布于:2024-09-18 ⋅ 阅读:(147) ⋅ 点赞:(0)

目录

1. ChatGPT & Copilot

1.1 工具 Github Copilot 智能生成代码的使用

2. 个人中心项目实战 - 基本资料

2.1 静态结构

2.2 校验处理

2.3 封装接口,更新个人信息

3. 个人中心项目实战 - 更换头像

3.1 静态结构

3.2 选择预览图片

3.3 上传头像

4. 个人中心项目实战 - 重置密码

4.1 静态结构

4.2 校验处理

4.3 封装接口,更新密码信息

4.4 表单重置


1. ChatGPT & Copilot

两个工具:

  • ChatGPT 3.5 的使用 (4.0 使用方式一致,回答准确度更高,但付费,且每3小时,有次数限制)

  • 工具 Github Copilot 智能生成代码(付费,免费使用30天)

1.1 工具 Github Copilot 智能生成代码的使用

① 安装步骤

  • 登录 github,试用 Copilot

  • 打开 vscode, 搜索并安装插件 Copilot

② 使用说明

  • 删除键:不接受

  • Tab键:接收

  • Ctrl + enter: 查看更多方案

说明:

  • 提高开发效率,但是还是多写多练。(免费试用30天)

2. 个人中心项目实战 - 基本资料

82beb0a9638645fcb082525e7d7653ad.png

2.1 静态结构

<template>
  <PageContainer title="基本资料" style="height: 80%">
    <template #default>
      <el-form
        :model="formData"
        :rules="rules"
        label-width="100px"
        ref="formRef"
      >
        <el-form-item label="登录名称" prop="username">
          <el-input
            style="width: 30%"
            disabled
            v-model="formData.username"
          ></el-input>
        </el-form-item>
        <el-form-item label="用户昵称" prop="nickname">
          <el-input style="width: 30%" v-model="formData.nickname"></el-input>
        </el-form-item>
        <el-form-item label="用户邮箱" prop="email">
          <el-input style="width: 30%" v-model="formData.email"></el-input>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="onSubmit">提交修改</el-button>
        </el-form-item>
      </el-form>
    </template>
  </PageContainer>
</template>

2.2 校验处理

import { ref } from 'vue'
import { useUserStore } from '@/stores'
const rules = {
  nickname: [
    {
      required: true,
      message: '请输入用户昵称',
      trigger: 'blur'
    },
    {
      pattern: /^\S{2,10}$/,
      message: '昵称必须是2-10位的非空字符串',
      trigger: 'blur'
    }
  ],
  email: [
    {
      required: true,
      message: '请输入邮箱地址',
      trigger: 'blur'
    },
    {
      type: 'email',
      message: '邮箱格式不正确',
      trigger: ['blur', 'change']
    }
  ]
}
const userStore = useUserStore()
const userInfo = userStore.userInfo

const formData = ref({ ...userInfo })

2.3 封装接口,更新个人信息

① 封装接口

0af8eefb9ece4723adba3c95a29ff564.png

② 页面中校验后,封装调用

cfbd4574907047f2b889fe5c48f3b214.png

3. 个人中心项目实战 - 更换头像

bbd74caa728a41d69b1cffe220f77087.png

3.1 静态结构

<template>
  <PageContainer title="更换头像" style="height: 80%">
    <template #default>
      <el-upload
        ref="uploadRef"
        class="avatar-uploader"
        :show-file-list="false"
        :on-change="onUploadFile"
        :auto-upload="false"
      >
        <img v-if="imageUrl" :src="imageUrl" class="avatar" />
        <el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
      </el-upload>
      <br />
      <el-button type="primary" :icon="Plus" @click="selectImage"
        >选择图片</el-button
      >
      <el-button type="success" :icon="Upload" @click="onSubmit"
        >上传头像</el-button
      >
    </template>
  </PageContainer>
</template>

3.2 选择预览图片

d2cf1c2f5b1c4eb19ecb235396f44350.png

3.3 上传头像

① 封装接口

ef2e0739696f4b3c814463e8831038b0.png

② 接口调用

5b959a931245431c96a0b10df9cdaa76.png

③ 视图更新

987a71a4052a49a1a81352e7b1f9dcad.png

  • 调用之前 pinia 里面获取用户信息的方法,存入仓库

054b3317c33d4875a52d570f1c6eee25.png

4. 个人中心项目实战 - 重置密码

8151d4818baf4974947dc2f19f1b283c.png

4.1 静态结构

<template>
  <PageContainer title="重置密码" style="height: 80%">
    <template #default>
      <el-form
        :model="formData"
        :rules="rules"
        label-width="100px"
        ref="formRef"
      >
        <el-form-item label="原密码" prop="old_pwd">
          <el-input
            style="width: 30%"
            v-model="formData.old_pwd"
            type="password"
          ></el-input>
        </el-form-item>
        <el-form-item label="新密码" prop="new_pwd">
          <el-input
            style="width: 30%"
            type="password"
            v-model="formData.new_pwd"
          ></el-input>
        </el-form-item>
        <el-form-item label="确认新密码" prop="re_pwd">
          <el-input
            style="width: 30%"
            type="password"
            v-model="formData.re_pwd"
          ></el-input>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="onSubmit">修改密码</el-button>
          <el-button @click="onReset">重置</el-button>
        </el-form-item>
      </el-form>
    </template>
  </PageContainer>
</template>

4.2 校验处理

const formData = ref({
  old_pwd: '',
  new_pwd: '',
  re_pwd: ''
})

// 自定义新密码校验规则函数
const checkOldSame = (rule, value, cb) => {
  if (value === formData.value.old_pwd) {
    cb(new Error('原密码和新密码不能一样。'))
  } else {
    cb()
  }
}
// 自定义再次输入新密码校验规则函数
const checkNewSame = (rule, value, cb) => {
  if (value !== formData.value.new_pwd) {
    cb(new Error('新密码和再次确认输入的密码不一致。'))
  } else {
    cb()
  }
}
// 校验规则
const rules = {
  old_pwd: [
    {
      required: true,
      message: '请输入密码',
      trigger: 'blur'
    },
    {
      pattern: /^\S{6,15}$/,
      message: '密码长度必须是6-15位的非空字符串',
      trigger: 'blur'
    }
  ],
  new_pwd: [
    { required: true, message: '请输入新密码', trigger: 'blur' },
    {
      pattern: /^\S{6,15}$/,
      message: '密码长度必须是6-15位的非空字符串',
      trigger: 'blur'
    },
    {
      validator: checkOldSame,
      trigger: 'blur'
    }
  ],
  re_pwd: [
    {
      required: true,
      message: '请再次确认新密码',
      trigger: 'blur'
    },
    {
      pattern: /^\S{6,15}$/,
      message: '密码长度必须是6-15位的非空字符串',
      trigger: 'blur'
    },
    {
      validator: checkNewSame,
      trigger: 'blur'
    }
  ]
}

4.3 封装接口,更新密码信息

① 封装接口

337571b7486a44edb53626e3f45eaccf.png

② 页面中调用

740651b04ae145269da5326e30b05cb0.png

4.4 表单重置

6ff07178aaab4550aaec92cd72d46c2c.png

 


网站公告

今日签到

点亮在社区的每一天
去签到