首页 > 其他分享 >element+vue2的查询form表单封装成组件复用

element+vue2的查询form表单封装成组件复用

时间:2023-03-30 14:04:02浏览次数:40  
标签:picker const form element start vue2 new type emit

<template>
  <el-form
    :inline="true"
    style="display:  flex; flex-direction: row; flex-wrap: wrap;flex: 1;"
    class="formClass"
    label-width="90px"
  >
    <el-form-item
      v-for="(item, index) in this.selectInline"
      :key="index"
      :label="item.label"
      style="margin:10px 10px 0 0;"
    >
      <el-input
        size="small"
        v-model="item.value"
        v-if="item.type == 'input'"
        :placeholder="item.label"
      ></el-input>
      <el-select
        v-else-if="item.type == 'select'"
        size="small"
        v-model="item.value"
        :placeholder="item.label"
        collapse-tags
        @change="SelectHandle(index)"
        filterable
        :multiple="item.multi"
      >
        <el-option
          v-for="(option, optionIndex) in item.options"
          :key="optionIndex"
          :label="option.ITEM_NAME"
          :value="option.ITEM_NAME"
        ></el-option>
      </el-select>
      <el-date-picker
        v-else-if="item.type == 'time'"
        v-model="item.value"
        type="datetimerange"
        style="width:350px;"
        :picker-options="timeOptions"
        value-format="yyyy-MM-dd HH:mm:ss"
        range-separator="至"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        size="small"
        align="right"
      ></el-date-picker>
    </el-form-item>
    <!-- <el-form-item label="子设备类型:" style="margin:10px 8px 0 0;">
      <el-select
        v-model="selectInline[2].plcType"
        size="small"
        :placeholder="'请选择'"
        autocomplete="off"
      >
        <el-option label="Pump" value="0" />
        <el-option label="Heater" value="1" />
        <el-option label="Scrubber" value="2" />
      </el-select>
    </el-form-item>-->
    <!-- <el-form-item label="厂商名称:" style="margin:10px 8px 0 0;">
      <el-select
        v-model="selectInline[2].factoryName"
        size="small"
        :placeholder="'请选择'"
        autocomplete="off"
      >
        <el-option label="Pump" value="0" />
        <el-option label="Heater" value="1" />
        <el-option label="Scrubber" value="2" />
      </el-select>
    </el-form-item>-->
    <!-- <el-form-item label="部门:" style="margin:10px 8px 0 0;">
      <el-select
        v-model="selectInline[2].factoryName"
        size="small"
        :placeholder="'请选择'"
        autocomplete="off"
      >
        <el-option label="Pump" value="0" />
        <el-option label="Heater" value="1" />
        <el-option label="Scrubber" value="2" />
      </el-select>
    </el-form-item>-->
    <!-- <el-form-item label="科室:" style="margin:10px 20px 0 0;">
      <el-select
        v-model="selectInline[2].factoryName"
        size="small"
        :placeholder="'请选择'"
        autocomplete="off"
      >
        <el-option label="Pump" value="0" />
        <el-option label="Heater" value="1" />
        <el-option label="Scrubber" value="2" />
      </el-select>
    </el-form-item>-->
    <el-form-item style="margin:10px 0 0 90px;">
      <el-button
        v-if="isaddWork"
        type="primary"
        icon="el-icon-plus"
        @click="addWorkFn"
        size="small"
        v-has="{name:'子设备v-has管理',value:'添v-has加'}"
      >添加</el-button>
      <el-button type="primary" @click="onSubmit" size="small" icon="el-icon-search">查询</el-button>
      <el-button type="primary" @click="onReset" size="small" icon="el-icon-refresh">重置</el-button>
      <el-button v-if="isdownload" type="primary" @click="onSubmit" size="small">下载</el-button>
    </el-form-item>
  </el-form>
</template>
<script>
export default {
  name: "toolbar",
  props: {
    selectInline: {
      type: Array
    },
    inline: {
      type: Boolean
    },
    isdownload: {
      default: false,
      type: Boolean
    },
    isaddWork: {
      default: false,
      type: Boolean
    },
    data_fields: {
      type: Object
    },
    data_execl: {
      type: Array
    },
    excel_Alltitle: {
      type: String
    }
  },
  data () {
    return {
      timeOptions: {
        shortcuts: [
          {
            text: "最近一周",
            onClick (picker) {
              const end = new Date()
              const start = new Date()
              start.setTime(
                start.getTime() - 3600 * 1000 * 24 * 7
              )
              picker.$emit("pick", [start, end])
            }
          },
          {
            text: "最近一个月",
            onClick (picker) {
              const end = new Date()
              const start = new Date()
              start.setTime(
                start.getTime() - 3600 * 1000 * 24 * 30
              )
              picker.$emit("pick", [start, end])
            }
          },
          {
            text: "最近三个月",
            onClick (picker) {
              const end = new Date()
              const start = new Date()
              start.setTime(
                start.getTime() - 3600 * 1000 * 24 * 90
              )
              picker.$emit("pick", [start, end])
            }
          }
        ]
      }
    }
  },
  watch: {
    data_fields (s1, s2) {
      console.log("s1", s1)
      console.log("s2", s2)
    },
    immediate: true,
    deep: true
  },
  methods: {
    // 添加工单
    addWorkFn () {
      this.$emit("addWorkFn", this.selectInline)
    },
    onSubmit () {
      this.$emit("onSubmit", this.selectInline)
    },
    SelectHandle (index) {
      this.$emit("SelectHandle", index)
    },
    downLoadAllData () {
      this.$emit("downLoadAllData")
    },
    onReset () {
      this.$emit("onReset")
    }
  }
};
</script>


<style scoped>
.formClass {
  /* display: flex; */
  /* flex-direction: column; */
  /* justify-content: space-between; */
}
</style>

使用组件的时候:

   <tool-bar
          :isaddWork="true"
          :inline="true"
          :selectInline="this.selectInline"
          @onSubmit="OnSubmit"
          @SelectHandle="SelectHandle"
          @onReset="onReset"
          @addWorkFn="addHandle"
        ></tool-bar>
selectInline 的数据格式:
   selectInline: [
        {
          field: "eqpName",
          label: "部门",
          type: "select",
          value: "",
          options: [],
        },
        {
          field: "chamberName",
          label: "科室",
          type: "select",
          value: "",
          multi: false,
          options: [],
        },
        {
          field: "plcName",
          label: "设备类型",
          type: "select",
          value: "",
          options: [],
          plcType: '',
          factoryName: '',
        },
        {
          field: "plcName",
          label: "厂商",
          type: "select",
          value: "",
          options: [],
          plcType: '',
          factoryName: '',
        },
        {
          field: "plcName",
          label: "子设备名称",
          type: "select",
          value: "",
          options: [],
          plcType: '',
          factoryName: '',
        },
      ],

 

标签:picker,const,form,element,start,vue2,new,type,emit
From: https://www.cnblogs.com/zhulongxu/p/17272427.html

相关文章

  • IDEA插件google-java-format代码格式化保存时自动格式化
    安装google-java-format启用google-java-format安装saveactions启用saveactions,保存时自动格式化,将没用的import语句删除自动优化导包如果用的是2022......
  • winform串口控件serialPort1的使用
    serialPort1控件使用的关键点主要有三:1、配置串口号2、配置数据接收事件3、打开串口关键代码如下:1privatevoidForm1_Load(objectsender,EventArgse)2{3......
  • 云存储继续火 Symform获1100万美元融资
    今年云储存火了,雷锋网昨天刚介绍一家云储存公司Terascala获1400万美元融资,今天一家云存储公司Symform也宣布融资1100万美元,由WestRiverCapital领头,已有投资人OVP及Longwo......
  • element ui Table 自定义头部样式
    <el-table-column><templateslot="header"><divclass="Stakedrow-center"><imgsrc="../image/caret-down.png"alt=""><span>Date&T......
  • element 新增表单中自定义表格
    自定义表格<divclass="formtable"><divclass="row"><divclass="col1">序号</div><divclass="col2">数值</div><divclass="col3">温度</div>......
  • FormData
    FormData使用Ajax提交表单<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>FormData</title></head><......
  • Element.getBoundingClientRect()
    Element.getBoundingClientRect() 方法返回一个 DOMRect 对象,其提供了元素的大小及其相对于视口的位置。参考:https://developer.mozilla.org/zh-CN/docs/Web/API/Elem......
  • 对于使用element-ui中的日期时间选择器产生的json数据转换格式报错
    对于使用element-ui中的日期时间选择器产生的json数据转换格式报错报错如下所示JSONparseerror:Cannotdeserializevalueoftypejava.time.LocalDateTimefromStr......
  • test3-with-formulas
    Advertisement:)pica-highqualityandfastimageresizeinbrowser.babelfish-developerfriendlyi18nwithpluralssupportandeasysyntax.Youwil......
  • Vue2使用setup、ref、reactive等Vue3的组合式api
    有些同学想在当前项目中体验Vue3组合式api,setup、ref、reactive等,而且一步就可以升级到Vue3,但是vue确实2.x版本,不改变当前版本怎么办呢?vue2.7.0开始自带composition-api可......