美文网首页
ElementUI-From表单实现添加功能

ElementUI-From表单实现添加功能

作者: 笑该动人d | 来源:发表于2020-09-29 10:35 被阅读0次

话不多说,直接上代码

<template>
<div class="adduser-wrap">
    <el-form @submit.prevent :label-position="right" label-width="80px" :rules="rules">
        <el-form-item label="用户名">
            <el-input v-model="user.username" name="username" placeholder="请输入用户名"></el-input>
        </el-form-item>

        <el-form-item label="性别">
            <el-radio-group v-model="user.sex">
                <el-radio label="1">男</el-radio>
                <el-radio label="2">女</el-radio>
            </el-radio-group>
        </el-form-item>

        <el-form-item label="年龄">
            <el-input v-model="user.age" name="age" type="number" placeholder="请输入年龄"></el-input>
        </el-form-item>

        <!-- 
          1. type 显示的类型
          2. format 指定输入框的格式
          3. value-format 绑定值的格式。不指定则绑定值为 Date 对象
        -->
        <el-form-item label="到访时间">
            <el-date-picker v-model="user.visittime" type="datetime" placeholder="选择日期时间" format="yyyy 年 MM 月 dd 日 hh时:mm分:ss秒" value-format="yyyy-MM-dd hh:mm:ss"></el-date-picker>
        </el-form-item>

        <el-form-item label="学历">
            <el-select v-model="user.education" placeholder="请选择">
                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
            </el-select>
        </el-form-item>

        <el-form-item label="单位">
            <el-input v-model="user.company" name="company" placeholder="请输入单位"></el-input>
        </el-form-item>

        <el-form-item label="到访原因">
            <el-input type="textarea" v-model="user.visitgoal" name="visitgoal" placeholder="请输入原因"></el-input>
        </el-form-item>

        <el-form-item label="头像图片">
            <!-- 
          el-upload 上传文件组件
            :action 将添加进来的图片上传到一个空的地址
            list-type: "picture-card" 设置图片的预览效果为图片的预览效果
            :show-file-list="false|true"   设置是否显示选中图片地址列表
            :auto-upload="false|true"   设置自动提交图片到action空的一个url地址去
            :on-change="onChangeFile"
                文件改变事件,当文件上传时,执行该事件 
                文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用
            :before-upload 文件上传前的钩子函数
        -->
            <el-upload action="/" list-type="picture-card" :show-file-list="false" :auto-upload="true" :on-change="onChangeFile" :before-upload="onBeforeUploadb" :headers="headers" class="avatar-uploader">
                <!-- 
            v-if="imageUrl" 判断imageUrl是否存在
            :src="imageUrl" 图片地址存在则将图片地址赋值src显示出来
          -->
                <el-image v-if="imageUrl" :src="imageUrl" class="avatar"></el-image>
                <i v-else class="el-icon-plus avatar-uploader-icon"></i>
            </el-upload>
        </el-form-item>
        <el-form-item>
            <!-- type="primary"设置按钮类型为主要按钮 -->
            <el-button @click="onAddUser" type="primary" style="width:150px; height: 50px;">添加</el-button>
        </el-form-item>
    </el-form>
</div>
</template>

<script>
import {
    baseURL
} from "@/api/request.js";
import {
    RequestUserAdd
} from "@/api/UserApi.js";
import {
    GetToken
} from "@/common/tokenCookie.js";
// import DateUtils from "@/utils/util_date.js"

export default {
    data: function () {
        return {
            user: {
                username: "",
                sex: "1",
                age: "",
                visittime: "", // 到访时间
                education: "", // 学历
                visitgoal: "", // 访问目的
                company: "", // 单位
                fileHeader: ""
            },
            baseURL,
            imageUrl: "",
            label: "1",
            headers: {
                Authorization: "Bear" + GetToken()
            },
            options: [{
                    value: "高中",
                    label: "高中"
                },
                {
                    value: "大专",
                    label: "大专"
                },
                {
                    value: "本科",
                    label: "本科"
                },
                {
                    value: "硕士",
                    label: "硕士"
                },
                {
                    value: "博士",
                    label: "博士"
                },
                {
                    value: "其他",
                    label: "其他"
                }
            ]
        };
    },
    methods: {
        onChangeFile(file) {
            // 获取将要上传的图片的地址,赋值给imageUrl
            this.imageUrl = URL.createObjectURL(file.raw);
            console.log("图片地址》》》》》》", this.imageUrl);
        },
        onBeforeUploadb(file) {
            console.log("onbeforeUpload file >>>>  ", file);
            // 上传的文件对象赋值给user.fileHeader
            this.user.fileHeader = file;
        },
        onAddUser() {
            console.log("this.user>>>>>>>>>>>>", this.user);
            let username = this.user.username;
            let sex = this.user.sex;
            let age = this.user.age;
            let visittime = this.user.visittime;
            // let visittime = DateUtils.formatDate.format(this.user.visittime, 'yyyy-MM-dd hh:mm:ss');
            console.log("visittime<<<<<<<<<<<<", visittime);
            let education = this.user.education;
            let visitgoal = this.user.visitgoal;
            let company = this.user.company;
            let fileHeader = this.user.fileHeader; // 上传的文件对象
            console.log("fileHeader>>>>>>>>>>>", fileHeader);

            let fromData = new FormData(); // 创建FromDate对象
            // 将表单信息username,sex,age等信息和上传的文件全追加到fromDate对象中
            fromData.append("username", username);
            fromData.append("sex", sex);
            fromData.append("age", age);
            fromData.append("visittime", visittime);
            fromData.append("education", education);
            fromData.append("visitgoal", visitgoal);
            fromData.append("company", company);
            fromData.append("fileHeader", fileHeader);

            // 调用请求接口数据的方法
            RequestUserAdd(fromData)
                .then(res => {
                    this.$router.replace({
                        path: "/user/list"
                    });
                })
                .catch(err => {
                    console.log(err);
                });
        }
    }
};
</script>

<style lang="scss" scoped>
</style>

在这里有实现图片上传功能,我们用到的组件是el-upload组件,我们如何将图片和from表单输入的信息一并提交到服务器呢?有下面两种解决方案

  1. 将form表单的数据绑定到el-upload组件上,el-upload组件有个action属性实现自动提交,可以将数据提交到action绑定的路径去
  2. 关闭el-upload组件的action自动提交,设置action='/',然后获取所有的表单数据,用fromData对象去接收数据,然后进行请求数据库

相关文章

  • vue学习之做事列表todoList

    这次用vue实现简单的做事列表单。包含事件添加、统计、删除、标记(已完成/未完成)。 一、功能实现 做事列表也是通...

  • JS实现表单延伸以及数据预存功能

    JS实现表单延伸以及数据预存功能 需求:在后台添加分类是涉及到的二级分类添加时非常繁琐,可以通过js来实现一次上传...

  • [FE] 用 FormData 上传多个文件到 Multipar

    背景 最近有一个场景,在提交表单的时候,需要实现添加附件的功能,表单内容要先提交到服务端,创建一个 issue,然...

  • fastadmin相关知识

    字段禁用搜索 绑定事件 自定义表单实现 多级联动 下拉框添加搜索功能 添加新的表格页面,需要初始化,不然即便获取到...

  • 店长宝微信小程序后台功能简介(六)——万能表单

    继续为大家介绍店长宝微信小程序的后台功能,今天介绍后台中的万能表单功能。 万能表单功能:添加表单、表单列表等两个小...

  • nodejs数据的删除

    现在假设有这么一个页面,要实现的功能如下:标题、描述、链接都输入内容,点添加后,下方表单中会出现添加的内容,点击删...

  • 3.HTML表单-第一章表单基本机构

    语法: 注意:表单本身不可见 Form标签中,以下标签实现表单元素添加: 标签

  • 2018-09-05

    今天制作了添加失物信息功能的页面。主要用到了weui 样式和表单提交功能。

  • 添加 “表单提交时检查” 功能-遇到的问题及解决

    实现 “点击表单外的按钮提交表单” 功能 问题描述 老师给的 注册 html 文件里 提交按钮 是放在表单 ...

  • Bootstrap - 表单

    Bootstrap 给HTML大部分表单都设置了默认样式,我们可以给表单添加相应类名,以实现表单的水平排列,个性化...

网友评论

      本文标题:ElementUI-From表单实现添加功能

      本文链接:https://www.haomeiwen.com/subject/gfbhqktx.html