首页 > 其他分享 >vue2 二次封装 element --- el-form 表单自定义组件

vue2 二次封装 element --- el-form 表单自定义组件

时间:2022-11-08 18:00:40浏览次数:43  
标签:el 00 自定义 form default param key type

一、form组件

<template>
    <div ref="searchHeader" class="div_search search_title" style="padding-right: 10px">
      <el-form ref="dataForm" :model="formObj" label-position="left" label-width="84px">
        <el-row v-for="(rows,i) in conf.fromItems" :key="rows[i].key">
          <el-col v-for="cols in rows" :key="cols.key" :span="cols.colspan">
            <el-form-item :label="cols.label" :label-width="cols.labelWidth" class="div_item input_search">
         <!--  TODO    slot      -->
              <slot :name="cols.type"></slot>
              <!--  TODO    el-input      -->
              <el-input v-if="cols.type==='input' || cols.type=== 'text'"
                        style="width: 200px;"
                        :type="cols.type"
                        v-model="formObj[cols.key]"
                        :placeholder="cols.placeholder"
                        :maxlength="cols.maxlength"
                        show-word-limit>
              </el-input>
              <!--   TODO   el-select       -->
              <el-select v-else-if="cols.type==='select'"
                         style="width: 200px;"
                         clearable v-model="formObj[cols.key]">
                <el-option value label="全部"></el-option>
                <el-option v-for="[key, value] of cols.option" :value="key" :label="value" :key="key"></el-option>
              </el-select>
              <!--  TODO   el-date-picker      -->
              <el-date-picker
                v-if="cols.type==='year'|| cols.type==='date'||  cols.type==='datetime'|| cols.type === 'daterange'"
                class="input_search"
                v-model="formObj[cols.key]"
                :value-format="cols.valueFormat"
                :format="cols.format"
                :type="cols.type"
                placeholder="开始日期"
              ></el-date-picker>
            </el-form-item>
          </el-col>
          <el-col :span="2">
            <div class="left">
              <el-button @click="getList" class="button_search" size="medium" type="primary">查询</el-button>
            </div>
          </el-col>
          <slot></slot>
        </el-row>
      </el-form>
    </div>
</template>

<script>
  import OrgTree from "@/views/components/OrgTree/index.vue";
  export default {
    name: 'meQueryForm',
    components: {
      OrgTree
    },
    data(){
      return {
        formObj:{},
        rules:''
      }
    },
    props:{
      conf:{
        type:Object
      }
    },
    watch:{
      conf: {
        handler(newVal, oldVal) {
          newVal.fromItems.forEach( rows =>{
            rows.forEach( item => {
              this.$set(this.formObj,item.key,item.default)
            })
          })
        },
        immediate: true,
      }
    },
    methods:{
      getList(){
        this.$emit('getList',this.formObj)
      }
    }
  };
</script>

<style lang="scss" scoped>
  @import "~@/assets/fourth/common.css";
</style>

 

二、form 自定义数据

import { WORKFLOW_DELAY_STATUS_TYPE_MAP } from "@/utils/dic.js";
import moment from "moment";

/**
 * @param {string} label 标题
 * @param {number,string,Array,Object,Boolean} default 默认值
 * @param {string} key  v-model 绑定字段 字段不能重复
 * @param {string} string
 * @param {string} type
 * @param {string} colspan
 * @param {Array} option  select 下拉的数据
 * @param {Boolean}
 * @param  插槽slot  必须需要加key
 */
let datalist =  new Map([
  ['0', '正常'],
  ['1', '停用'],
])
export default {
  title : '查询',
  fromItems: [
    [
      {colspan:4.5,label:'所属机构', labelWidth:'80px', default:'', key:'orgId', placeholder:'', type:'org'},
      {colspan:4.5,label:'所属部门', labelWidth:'80px', default:'', key:'department', placeholder:'', type:'department'},
      {colspan:4.5, label:'开始日期', labelWidth:'80px', default:moment(new Date()).format("YYYY-01-01 00:00:00"), key:'startTime', placeholder:'', type:'date',valueFormat:'yyyy-MM-dd 00:00:00',format:'yyyy-MM-dd'},
      { colspan:4.5,label:'结束日期', labelWidth:'80px', default:moment(new Date()).format("YYYY-MM-DD 23:59:59"), key:'endTime', placeholder:'', type:'date', valueFormat:'yyyy-MM-dd 00:00:00',format:'yyyy-MM-dd'},
      {colspan:4.5,label:'审批状态', labelWidth:'100px', default:'', key:'approvalStatus',  placeholder:'',  type:'select', maxlength:'14', option:WORKFLOW_DELAY_STATUS_TYPE_MAP },
      {colspan:4.5,label:'状态', labelWidth:'100px', default:'0', key:'status',  placeholder:'',  type:'select', maxlength:'14', option:datalist },
    ]
  ]
}

三、引入form组件

 <me-query-form ref="form" :conf="conform" @getList="getLists">
          <template v-slot:org>
               <org-tree @get-orgid="changeOrg"></org-tree>
          </template>
          <template v-slot:department>
            <department-options-tree
              :appendToBody="true"
              :departmentId.sync="searchQuery.departmentIds"
              :multiple="true"
              :isAll="true"
              :flat="true"
              :treeDepartmentId="searchQuery.departmentid"
              :orgId="searchQuery.orgId"
            ></department-options-tree>
          </template>
  </me-query-form>
import MeQueryForm from '../../../../components/meForm/meQueryForm'; // form自定义组件 import conform from './formData'; // form自定义数据
 export default {
    components: {
      MeQueryForm,
      OrgTree,
      DialogFlowDetail,
      DialogEdit
    },
    data() {
        return {
            conform
        }
    },
    methods: {
       getLists(form){
            let {startTime,endTime,status,approvalStatus} = form
            this.searchQuery.startTime = startTime
            this.searchQuery.endTime = endTime
            this.searchQuery.status = status
            this.searchQuery.approvalStatus = approvalStatus
            this.getList(1) //列表
      },
    }
 }

 

标签:el,00,自定义,form,default,param,key,type
From: https://www.cnblogs.com/Jishuyang/p/16870592.html

相关文章

  • Shell脚本入门全套教程
    1、> 输出正确的输出 -覆盖  2> 输出错误的输出 -覆盖  &> 输出正常和错误的信息-覆盖  >> 追加   grep过滤数据  clear清频幕  vim ......
  • vue+element ui <el-tabs>中刷新页面不要回到初始页面
    公司新加了一个需求,每个tab栏下的页面里面有查看详情的接口,查看后返回到查看前的tab页面。刚开始每次返回都返回到待处理的页面,显然不符合需求。思路:每次点击tab栏,将当前页......
  • Elastaticsearch 集群部署
    系统Ubuntu16.04Elastaticsearch5.6.9Kibana5.6.9官网地址https://www.elastic.co/products/elasticsearch主机名称IPes-n1192.168.175.76......
  • Kubelet源码分析(一):工作原理以及启动流程分析
    一、概要kubelet是运行在每个节点上的主要的“节点代理”,每个节点都会启动kubelet进程,用来处理Master节点下发到本节点的任务,按照PodSpec描述来管理Pod和其中的容......
  • 自定义指令
    vue3自定义指令typeDir={background:string}constvMove:Directive={created(){},beforeMount(){},mounted(el:HTMLElement,dir:DirectiveBind......
  • thinkphp6 非法请求:index/hello
    搭建好tp6后Thinkphp6  Index控制器下面建立的hello()方法,不能访问,总是提示非法请求,换成其它方法名都没问题,就是hello不能用.http://xxx/index.php/index/hello提示#0[......
  • 微信小程序wx.request POST请求,请求参数需要form-data形式
    正常情况下,我们的请求参数一般都默认在RequestPayload中但是有些时候,你的后端就需要在FormData中,解决方案:只要将wx.request的header改为‘content-type’:‘ap......
  • 自定义注解及使用
    自定义注解及使用定义一个自定义注解importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy......
  • vue中使用Element
    官网https://element.eleme.cn/#/zh-CN/component/installation安装npm安装elementnpmielement-ui-S快速上手引入Element在main.js中写入以下内容:importVu......
  • 关闭el-date-picker时间选择
    关闭el-date-picker时间选择功能问题:下拉滚动条,el-date-picker还是展开状态期望:下拉滚顶条让el-date-picker关闭。解决方案:监控滚动高度,当滚动条高度大于0,调用th......