vue悬浮表单复合组件开发详解

本文实例为大家分享了vue悬浮表单复合组件开发的具体代码,供大家参考,具体内容如下

组件样式

组件功能

卡片形式展示筛选条件
点击添加筛选后展示悬浮表单
表单内完成条件选择后点击保存,新增一个卡片

开发

<div class="form-label">筛选条件:</div>
<template v-for="(item, index) in fitter">
  <div :key="index" class="form-input-tab">
    <span :title="item">{{ item }}</span>
    <span @click="deleteTab(item)" class="form-input-close"><a-icon type="close" /></span>
  </div>
</template>
<a-popover
  trigger="click"
  placement="bottom"
  :visible="visible"
  @visibleChange="handleClickChange"
>
  <template slot="content">
    <div style="width: 420px; height: 220px; position: relative">
      <TipMes message="编辑筛选"></TipMes>
      <a-row>
        <a-col :span="12">
          <div class="select-title">字段</div>
          <a-select
            allowClear
            style="width: 189px"
            placeholder="请选择字段"
            v-model="selectField"
            @change="getQueryConditions"
          >
            <a-select-option
              v-for="(item, index) in editField"
              :value="item.fieldName + '//' + item.fieldType"
              :key="index"
              >{{ item.fieldName }}</a-select-option
            >
          </a-select>
        </a-col>
        <a-col :span="12">
          <div class="select-title">运算符</div>
          <a-select
            allowClear
            style="width: 189px"
            placeholder="请选择运算符"
            v-model="conditionName"
          >
            <a-select-option
              v-for="(item, index) in condition"
              :value="item.conditionName"
              :key="index"
            >
              {{ item.conditionDesc }}
            </a-select-option>
          </a-select>
        </a-col>
      </a-row>
      <div v-show="this.conditionName !== 'NotExists' && this.conditionName !== 'Exists'">
        <div class="select-title">值</div>
        <a-select
          allowClear
          style="width: 399px"
          placeholder="请选择值"
          v-model="conditionContent"
          v-show="selectField && selectField.split('//')[1] === 'boolean'"
        >
          <a-select-option value="true" :key="0">true</a-select-option>
          <a-select-option value="false" :key="1">false</a-select-option>
        </a-select>
        <a-input
          allowClear
          v-model="conditionContent"
          style="width: 399px"
          placeholder="请输入值"
          v-show="(selectField && selectField.split('//')[1] !== 'boolean') || !selectField"
        />
      </div>
      <div class="button-container">
        <a-button style="margin-right: 10px; width: 75px" @click="cancelSearch"
          >取消</a-button
        >
        <a-button type="primary" style="width: 75px" @click="saveSearch">保存</a-button>
      </div>
    </div>
  </template>
  <div class="add-text">
    <svg-icon class="add-svg" icon-class="topic-push" />
    <span style="margin-left: 22px">添加筛选</span>
  </div>
</a-popover>

JS:

//删除筛选条件
deleteTab(item) {
  this.fitter.splice(this.fitter.indexOf(item), 1);
  this.queryParams.conditionDeatils.splice(
    this.queryParams.conditionDeatils.indexOf(item.split(':')[0]),
    1
  );
  this.getSearchList();
},
//展示筛选框
handleClickChange(visible) {
  this.visible = visible;
},
//取消筛选条件的添加
cancelSearch() {
  this.visible = false;
  this.selectField = undefined;
  this.conditionName = undefined;
  this.conditionContent = undefined;
  this.condition = [];
},
//保存筛选条件
saveSearch() {},

CSS

.form-label {
  margin: 10px 0 15px 20px;
  display: inline-block;
  float: left;
  color: rgba(0, 0, 0, 0.85);
}
.form-input-tab {
  display: inline-block;
  float: left;
  height: 26px;
  margin: 10px 4px;
  padding: 0 5px 0 10px;
  line-height: 22px;
  color: #333333;
  border: 1px solid #c6d3e3;
  border-radius: 4px;
  cursor: default;
}
.form-input-close {
  color: #4f6785;
  cursor: pointer;
  margin-left: 1px;
  float: right;
}
.select-title {
  font-size: 14px;
  color: #333333;
  font-weight: 500;
  margin: 8px 0 6px 0;
}
.button-container {
  position: absolute;
  bottom: 10px;
  right: 20px;
}
.add-text {
  display: inline-block;
  position: relative;
  margin: 10px 0 15px 10px;
  color: #0f88ff;
  cursor: pointer;
}
.add-svg {
  width: 18px;
  height: 18px;
  position: absolute;
  top: 3px;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • vue动态绑定组件子父组件多表单验证功能的实现代码

    前端项目中经常会下拉或者选项卡,如果通过if,else或者switch去判断加载的话会产生大量冗余代码和变量定义,而且都写在一起后人很难维护. Vue核心在于组件,如果有内容通过选项卡或者下拉框切换用动态加载子组件最好不过. 如图: selects文件夹中,index只负责公共数据(当然公共数据也可以写在其他文件,只留一个入口文件),而comp文件夹中的几个组件则通过动态加载. 动态加载子组件:component // 给下拉框绑定下拉列表的索引 <el-select v-model="v

  • vue使用Element组件时v-for循环里的表单项验证方法

    标题描述看起来有些复杂,有vue,Element,又有表单验证,还有v-for循环?是不是有点乱?不过我相信开发中遇到过此问题的同学,一看就明白我说的意思了. 首先Element组件有一套完善的表单验证方法,官方文档写的也很清楚:Element表单验证API,正常按照官方文档添加rules规则,需要验证的表单项设置prop,然后提交表单时通过form的validate方法验证表单项就可以了. 然鹅问题来了,如果表单项里有通过v-for动态生成的表单项,如何设置验证呢?这个官方文档并没有明确的说法

  • Vue form表单动态添加组件实战案例

    今天我们来给大家介绍下在Vue开发中我们经常会碰到的一种需求场景,就是在form中我们需要动态的增加组件模块,效果如下: 这种效果实现其实就是对 v-for 指令的一种使用,组件不是必须的,只是为了将这部门的代码我们单独的拎出来,便于查看,好了,话不多说,我们来看下具体怎么来实现. 案例效果的实现 1.创建组件 首先我们创建一个单独的组件,同时在 template 中定义我们的表单元素,此处使用的是 element UI 来实现效果. 2.import组件 我们需要在父组件中引入创建的组件,并通

  • Vue2.0表单校验组件vee-validate的使用详解

    vee-validate使用教程 本文适合有一定Vue2.0基础的同学参考,根据项目的实际情况来使用,关于Vue的使用不做多余解释.本人也是一边学习一边使用,如果错误之处敬请批评指出* 一.安装 npm install vee-validate@next --save 注意:@next,不然是Vue1.0版本 bower install vee-validate#2.0.0-beta.13 --save 二.引用 import Vue from 'vue'; import VeeValidate

  • 利用Vue v-model实现一个自定义的表单组件

    功能描述: 通过点击按钮,可以增减购物数量 组件名称是 CouterBtn 最终效果如下 我们使用 vue-cli搭建基本的开发环境,这也是最快的进行 .vue组件开发的方式 对于入口组件  App.vue (可以暂时忽略其他细节,我们的重点是如何写组件) App.vue <template> <div id="app"> <h4>这是一个利用 v-model实现的自定义的表单组件</h4> <h6>CouterBtn组件的值

  • vue2.0数据双向绑定与表单bootstrap+vue组件

    最近一直在用vue,觉得确实是好用. 一,拿数据的双向绑定来说吧 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>demo1</title> </head> <body> <div id="app"> {{ name }} <input typ

  • vue组件表单数据回显验证及提交的实例代码

    最近项目需要到vue开发单页面,所以就研究一下表单数据的回显,验证及提交如何用vue组件的方式实现. 代码如下: <template> <div class="index"> <!--header-bar></header-bar--> <div style="margin:20px;"> <div class="item"> <p>住户名称:</p>

  • 详解vue表单验证组件 v-verify-plugin

    verify github:https://github.com/liuyinglong/verify npm:https://www.npmjs.com/package/vue-verify-plugin install npm install vue-verify-plugin use html <div> <div> <input type="text" placeholder="姓名" v-verify.grow1="

  • Vue表单类的父子组件数据传递示例

    使用Vue.js进行项目开发,那必然会使用基于组件的开发方式,这种方式的确给开发和维护带来的一定的便利性,但如果涉及到组件之间的数据与状态传递交互,就是一件麻烦事了,特别是面对有一大堆表单的页面. 在这里记录一下我平时常用的处理方式,这篇文章主要记录父子组件间的数据传递,非父子组件主要通过Vuex处理,这篇文章暂时不作说明. 与文档里给的方案一样,父组件向子组件传递数据主要通过 props,子组件向父组件传递数据主要通过触发器 $emit(),只是在用法上会有些不同. 1.传递基本类型数据 当子

  • 使用form-create动态生成vue自定义组件和嵌套表单组件

    使用form-create动态生成vue自定义组件和嵌套表单组件 [github]| [说明文档] maker.create 通过建立一个虚拟 DOM的方式生成自定义组件 生成 Maker let rule = [ formCreate.maker.create('i-button').props({ type:'primary', field:'btn' loading:true }) ] $f = formCreate.create(rule); 上面的代码是通过maker生成器动态生成一个

随机推荐