vue 集成Element-ui、Vant 实现表单提交、单文件上传

Vant Uploader上传文件 + 提交按钮上传(前后端) 安卓版PDA对设备故障进行报修。①在提交表单的时候需要同时提交故障照片,②图片单选。 上传组件使用了 `Vant v2.12.47` 中的 Uploader 组件,但是官方文档只是对单个组件的前端说明。最近才开始用 Vant,不太熟悉,在网上找了些使用方法,感觉零零碎碎的,而且不知道后端代码如何承接参数。在此做一下使用方面的代码总结。 阅读详情

效果图

 

vue代码

<template>
  <div class="feedback-wrap">
    <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
      <div class="feedback-title">
        <span>(必选)请选择您想反馈的问题点</span>
      </div>

      <div class="feedback-radio" >
        <el-form-item prop="radio">
          <el-radio v-model="ruleForm.radio" label="1">备选项</el-radio>
          <el-radio v-model="ruleForm.radio" label="2">备选项</el-radio>
          <el-radio v-model="ruleForm.radio" label="3">备选项</el-radio>
          <el-radio v-model="ruleForm.radio" label="4">备选项</el-radio>
          <el-radio v-model="ruleForm.radio" label="5">备选项</el-radio>
        </el-form-item>
      </div>
      <div class="feedback-title">
        <span>请补充详细问题很意见</span>
      </div>
      <div class="feedback-detail">
        <el-form-item prop="desc">
          <el-input type="textarea" placeholder="请输入15字以上描述" v-model="ruleForm.desc"></el-input>
        </el-form-item>
      </div>
      <div class="feedback-title">
        <div>请提供问题相关截图或照片</div>
        <div>{{fileList.length}}/3</div>
      </div>

      <div class="feedback-img">

        <van-uploader v-model="fileList"
                      :max-count="3"
                      :multiple="true"
                      :before-read="beforeRead"
                      :after-read="afterRead"
                      :before-delete="delUploadImg"
                      upload-icon="plus"
        />

      </div>

      <div class="activity-button" @click="submitForm('ruleForm')">
        <span>提交</span>
      </div>

    </el-form>


  </div>


</template>

<script>
    import axios from 'axios'
    import Vue from 'vue';
    import { Uploader } from 'vant';
    import {getLocal} from "../../../../assets/service/auth";
    import {uploadImgs} from "../../../../assets/api/v3";
    Vue.use(Uploader);
    export default {
        name: "feedback",
        data () {
            return {

                ruleForm: {
                    desc: '',
                    radio:'',
                },
                rules: {
                    radio: [
                        { required: true, message: '请至少选择反馈的问题点', trigger: 'change' }
                    ],
                    desc: [
                        { required: true, min: 15, max: 240, message: '请填写至少15字以上问题描述', trigger: 'blur' }
                    ]
                },
                fileList: [
                  /*  { url: 'https://img01.yzcdn.cn/vant/leaf.jpg' },
                    // Uploader 根据文件后缀来判断是否为图片文件
                    // 如果图片 URL 中不包含类型信息,可以添加 isImage 标记来声明
                    { url: 'http://www.itdream.site/upload/202004/03.jpg', isImage: true },*/
                ],
                uploadUrl: "/zz//upload/file",
                headers: {
                    token: getLocal('token'),
                },
            }


        },
        methods: {
            submitForm(formName) {
                this.$refs[formName].validate((valid) => {
                    if (valid) {
                        this.ruleForm.fileList = this.fileList;
                        if(this.fileList.length == 0){
                            this.$message("请至少上传一张照片!")
                            return false;
                        }
                        // 提交逻辑
                        this.$message("完成后台接口")

                    } else {
                        return false;
                    }
                });



            },

            /*图片上传*/
            // 返回布尔值
            beforeRead(file) {
                if (file instanceof Array) {
                    //判断是否是数组
                    file.forEach((v) => {
                        this.checkFile(v);
                    });
                } else {
                    this.checkFile(file);
                }
                return true;
            },
            //图片类型检查
            checkFile(file) {
                const format = ["jpg", "png", "jpeg"];
                const index = file.name.lastIndexOf(".");
                const finalName = file.name.substr(index + 1);
                if (!format.includes(finalName.toLowerCase())) {
                    this.$message("请上传" + format.join(",") + "格式图片")
                    return false;
                }
            },
            // 添加图片回调
            afterRead(file) {
                let that = this;
                file.status = "uploading";
                file.message = "上传中...";
                this.uploadImg(file, that);
            },
            //上传
            uploadImg(file, that) {
                const formData = new FormData();
                formData.append('file', file.file );
                console.log(that.fileList);
                axios
                    .post(this.uploadUrl, formData, )
                    .then((res) => {
                        /**
                         * {
	"code": 200,
	"originalUrl": "/imgs/20210516/a27c023d-1a2a-4a5e-9cde-9d662ff751b5.jpg",
	"error": null,
	"thumbnailUrl": "/imgs/20210516/a27c023d-1a2a-4a5e-9cde-9d662ff751b5_small.jpg"
}
                         */
                        if (res.data.code) {
                            file.status = "success";
                            file.message = "上传成功";
                            file.url = res.data.originalUrl;
                        }
                    })
                    .catch((err) => {
                        this.$notify({
                            type: "warning",
                            message: "上传失败",
                        });
                    });

            },
            //删除
            delUploadImg(item) {
                this.fileList = this.fileList.filter((v) => v.url != item.url);
            }

        }
    }
</script>

<style lang="less" scoped>

  .feedback-wrap{
    width: 90%;
    margin: auto;
    .feedback-title{
      font-weight: 400;
      font-size: .6rem;
      color: rgba(157, 158, 157, 1);
      margin: 10px 0;
      display: flex;
      justify-content: space-between;
    }

    .feedback-radio{
      border-radius: 10px;
      font-size: 0.6rem;
      padding: 5px 10px;
      background-color: rgb(255, 255, 255);
      .el-radio{
        display: block;
        margin: 15px 0;
      }
      /deep/ .el-form-item__content{
        margin-left: 0px !important;
      }
    }

    .feedback-detail{

      /deep/ .el-textarea__inner{
        height: 7rem;
      }
      /deep/ .el-form-item__content{
        margin-left: 0px !important;
      }
    }

    .feedback-img{
      height: 5rem;
      border-radius: 10px;
      font-size: 0.6rem;
      padding: 5px 10px;
      background-color: rgb(255, 255, 255);

      /deep/ .el-upload--picture-card{
        width: 80px;
        height: 80px;
        line-height: 6rem;
      }
      /deep/ .el-upload-list__item{
        width: 80px;
        height: 80px;
      }

    }



    .activity-button{
      width: 85%;
      height: 2.5rem;
      z-index: 13;
      background-color: #259b24;
      color: #ffffff;
      border-radius: 25px;
      font-size: 1rem;
      text-align: center;
      opacity: 1;
      margin: 25px auto;
      display: flex;
      justify-content: center;
      align-items: center;
    }
  }


</style>

java代码

	/**
	 *
	 * @param file
	 * @return
	 */
	@RequestMapping(value = "/file")
	@ResponseBody
	public Map<String, Object> doUploadFiles(@RequestParam("file") MultipartFile file) {
		log.debug("Upload form save with: " + file);
		Map<String, Object> map = new HashMap<String, Object>();

		map = ImageCommonUtils.uploadFileAndCreateThumbnail(file);

		return map;
	}

 

 

 

漂亮的js图片播放器上一页、下一页,可以通过后台修改获取数据库内容 css+js制作的图片播放器! 是一个简单而又谦恭的用来把图片覆盖在当前页面上的脚本. 它能被快速安装并且运作于所有流行的浏览器. 立即下载

相关推荐

【调试记录】GT ip跑aurora 64b66b协议

如果不用,会出现这种情况:自回环测试,数据收发ok.一旦和对方通信,对方接收的就是一堆乱码,因为GT链路发送数据不能是全1或全0,或者长时间的1或0.否则线路容易受到干扰,毕竟线速率10多G,用了加扰和解扰,就可以提高抗干扰能力。64B66B编码,数据输入是64bit,输出是66bit,所以这之间存在着2bit的带宽差,Gearbox 就是用来解决这种差异的,实现方式是:将66bit数据拿出来2bit先存入Gearbox,然后输出64bit.发送同步码或控制数据时,配置成2.2.4 加扰和解扰!

weixin_41246509的博客 1607

vue+vant使用formdata上传数据给后台

vue+vant使用formdata上传数据给后台

qq1154667112的博客 1422

【3D目标检测】激光雷达和相机联合标定(一)——ROS同步解包

激光雷达和相机联合标定(一)——ROS同步解包

qq_44703886的博客 4239

vant 表单验证

标签:van Vant form 验证 验证码 表单 message 一 、使用方法 表单校验 1.1 用 van-form 包住 1.2 在 van-field 上要有 v-model=“变量” 和 绑定rules属性 :rules=“rules变量” rules变量:[ { // 是否必填 required:true, message:错误信息, trigger:"onBlur/onChange"}, { // 自定义表单校验 validator: value =&

蓝胖子的博客 1万+

WRF替换静态地理数据中的土地利用数据(WRF替换下垫面数据)

   在进行自己的WRF项目模拟的时候,因为需要用中国土地利用数据替换WRF内嵌老旧的土地利用数据,故需要将土地利用进行替换。我使用的中国的土地利用数据是来自中国土地利用数据(1980-2015)。其中我以下载的lucc1980为例进行演示。 1、坐标转换    (1)下载的lucc1980数据如下图所示:    (2)在ArcMap中打开如下图所示: 打开属性表可以看到,lucc1980的坐标系为投影坐标系Krasovsky_1940_Albers,数据格式为GRID。这里需要将投影坐标系转换成地理坐

GIS 1万+

利用eds editor生成CANOPEN 设备eds文件

通过以上步骤,您可以根据实际设备的功能特性,自动生成一份符合CANopen协议标准的电子数据表(EDS文件),该文件可以被上位机软件或其他CANopen主站设备用于识别、配置和控制您的CANopen从站设备。使用CANopen EDS Editor生成CANOPEN设备的EDS文件是一个系统化的过程,它涉及将设备的具体技术参数和功能映射到CANopen规范定义的对象字典中。

weixin_38604759的博客 6460

小程序开发-获取vant中表单提交的数据

1.首先,不得不说vant中没有表单(form)这一组件,因为它的每一个输入框都可以实现数据的提交,这点与input有着本质上的区别. 2.相信有许多同学都和我一样遇到过使用vant中的表单组件后,不知道如何获取输入框中输入的数据.因为它不像传统的form表单一样,只需要给form的bindsubmit属性绑定个函数,然后在该函数中进行input输入数据的读取. 3.这里教大家一个使用数组来获取表单中输入数据的的方法. 该方法分以下三步: (1)在vant输入框组件中,给bind:blur属性绑定个函数(此

Conan_edogawa的博客 5271

apollo-慢速车向左绕行

当主车前方出现其他车辆时,通过左侧车道对前车绕行。

是菜鸟o的博客 313

vue相关UI组件库及实用案例

UI组件 element - 饿了么出品的Vue2的web UI工具套件 vant - vue的移动ui组件 vant-weapp - vue的微信小程序组件 iview - vue webUI组件(适用pc端和后台系统界面开发 ) iview weapp - vue的微信小程序组件 Vux - 基于Vue和WeUI的组件库 mint-ui - Vue 2的移动UI元素...

marendu的博客 1万+

Flink Gauss CDC:深度剖析存量与增量同步的创新设计

开发Flink Gauss CDC是为了适配华为自研GaussDB的特殊日志格式和逻辑复制机制,解决Flink CDC无法直接支持的问题,同时优化存量与增量同步的效率和一体化读取能力,满足GaussDB复合主键处理、数据落库等定制化需求,以实现高效、准确的数据同步。

数据与算法架构提升之路专栏 1985

详解AUTOSAR:DaVinci Configurator导入ARXML配置(拓展篇—2)

DaVinci Configurator导入ARXML配置。

不脱发的程序猿 3336

vue2.0——vue-cropper结合element、vant

由于是内网限制了复制的功能 所以只能是图片了 vue-cropper配置——element vue-cropper页面——element vue-cropper页面绑定——element vue-cropper上传的两个函数——element elementUI上传部分——element vue-cropper结合vant vue-cropper——vant上传功能 vant图片上传 vue-cropper裁剪页面——vant vue-cropper配置data(option)——v

HarryHY的博客 654

基于STM32的智能手环心率血氧体温监测系统(完整设计)

本文设计了一款基于STM32单片机的多功能智能手环系统,集成心率、血氧、体温实时监测功能,并支持运动数据管理与健康预警。系统采用MAX30102传感器实现心率血氧监测,DS18B20检测体温,ADXL345进行步数统计,通过OLED屏幕显示数据。研究通过低功耗硬件选型与模块化软件架构设计,实现了多参数同步采集、阈值预警及蓝牙数据传输功能。测试结果表明,系统在健康监测精度、续航能力及用户交互体验上均达到预期目标,为个人健康管理提供了实用解决方案。

3254968421的博客 703

Element ui、Vant ui 动态循环批量上传文件

Element ui、Vant ui 批量文件上传,组件动态绑定

絮落锦乡的博客 480

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

解决element-ui和 vant两个组件库上传组件,上传图片后无法显示图片的问题

组件库上传图片显示问题

haogemr的博客 2621

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

基于ThinkPHP8 + Vue3 + element-ui-plus + 微信小程序(原生) + Vant2 的 BBS论坛系统设计【PHP课设】

我做的是一个论坛类的网页项目,每个用户可以登录注册查看并发布文章,以及对文章的点赞和评论,还有文件上传和个人签名发布和基础信息修改,管理员对网站的数据进行统计,对文章和文件的上传以及评论进行审核,以及对普通的用户的权限提升账号封停等等,以及对应的crud。然后做的是三端(PC端,小程序端)并且采用前后端分离以及JWT技术和RestFull风格API,后端使用ThinkPHP8,PC端使用vue3+element-ui-plus,Axios异步通信以及诸多扩展,微信小程序端使用原生的微信小程序技术+van

m0_63622279的博客 9940

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

vue UI 框架使用总结

记录自己用过的一些Vue UI框架使用感受,供后来者选型时做参考(后续随自身实践会陆续补充,另外,随时间推移,下面总结对最新版本不一定正确) 1、element ui 在后台管理系统中使用,适合做PC端,组件较为齐全。 a、感觉loading组件可定制性较差 b、table 初始化的时候估计有bug,遇到在本地开发ok,但部署到开发环境,初始化时高度不正常,后面用了v-if 判断是否有数据,...

supming1的专栏 436

vue实现图片上传

实现思路: 1.通过点击事件打开文件夹,选取需要上传的图片 2.拿到图片数据,将其添加到FromData实例对象中 3.将图片数据上传至服务器 vant组件实现上传 组件安装及引入 //安装 npm i vant -S //引入 import Vue from 'vue'; import { Uploader } from 'vant'; Vue.use(Uploader); vue组件内使用 //点击即可调用 <van-uploader v-model="fileList" //上传的文

weixin_51198863的博客 803

可视化表单设计终极指南:form-create-designer让拖拽式开发更简单

form-create-designer是一个基于Vue.js和Element UI实现的可视化表单设计器,通过拖拽方式快速构建专业级表单界面。无论你是前端新手还是资深开发者,这款工具都能显著提升你的开发效率。 ## 🚀 为什么选择form-create-designer? ### 可视化设计体验 告别繁琐的代码编写,通过直观的拖拽操作构建表单。form-create-designer提供所

gitblog_00306的博客 1063

FormCreate Designer:革命性Vue可视化表单设计器完全指南

FormCreate Designer是一款基于Vue的低代码可视化AI表单设计器,通过拖拽方式即可快速创建表单,显著提升开发者的表单开发效率。该工具支持PC端和移动端,已在政务系统、OA系统、ERP系统、电商系统、流程管理等多种系统中稳定应用。 ## 🌟 为什么选择FormCreate Designer? 作为一款功能强大的表单设计工具,FormCreate Designer具有以下核心优

gitblog_00282的博客 418

springboot+mybatis-plus+vue+element+vant2实现短视频网站,模拟西瓜视频移动端

项目功能完整,后续可能将不断升级。关注作者,及时了解更多好项目!作者主页也有更多好项目分享!获取源码或如需帮助,可通过博客后面名片+作者即可!其他作品集合《vue+vant2完美实现香奈儿移动端商城网站》《vue+elementui实现联想购物商城,样式美观大方》《vue+elementui实现英雄联盟道具城》《vue+elementui实现app布局小米商城,样式美观大方,功能完整》《vue完美模拟pc版快手,实现短视频,含短视频详情播放》

lucky_fang的博客 3503

vue核心知识概述

vue核心知识概述(包含跨域问题的解决、文件上传、和相关前端框架的基本使用)

一个很懒的人 1061

Vue 开源项目低代码表单设计器 FcDesigner v3.3 版本发布!兼容Element Plus/Ant Design/Vant,支持PC/移动端

FcDesigner 是一款基于 Vue 的低代码可视化表单设计器工具,通过数据驱动表单渲染。可以通过拖拽的方式快速创建表单,提高开发者对表单的开发效率,节省开发者的时间。并广泛应用于在政务系统、OA 系统、ERP 系统、电商系统、流程管理等领域。源码地址: Github | Gitee | 文档 | 在线演示操作权限控制增加手写签名组件和标题组件左右两侧板块增加展开收齐按钮 增加标题和手写签名组件远程请求支持前置处理回调完善表格表单组件,新增最小行,是否可删除开关,是否可新增开关和标题位置的配置项增加

weixin_29343187的博客 152

vue3+cli+js上传图片实现自动裁剪+压缩,封装js,vant或者element-ui的上传图片组件可以直接使用

vue3+cli+js上传图片实现自动裁剪+压缩,封装的js,直接使用即可,无需修改

weixin_69924839的博客 505

如何用form-create-designer快速构建可视化表单:终极指南

form-create-designer是一款强大的Vue低代码可视化AI表单设计器,支持通过拖拽方式快速创建表单,显著提升开发者的表单开发效率。该工具适用于PC端和移动端,已在政务系统、OA系统、ERP系统、电商系统、流程管理等多种场景中稳定应用。 ## 🌟 为什么选择form-create-designer? ### ✅ 核心优势 - **多UI框架支持**:提供Element Plus

gitblog_00409的博客 481
上一篇: vue【一】 实现 @scroll
下一篇: vue 实现qrcode二维码功能 并实现htmlCanvas页面截图
宁漂打工仔
博客等级 码龄9年 1万+粉丝 153原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁漂打工仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值