zoukankan      html  css  js  c++  java
  • 使用element-ui二次封装一个可复用查询搜索组件

    源码链接:查询表单组件

    组件源码:searchForm.vue

    <!-- 搜索表单 -->
    <template>
    <div class="ces-search">
        <el-form :size="size" inline :label-width="labelWidth">
            <el-form-item v-for='item in searchForm' :label="item.label" :key='item.prop'>
                <!-- 输入框 -->
                <el-input v-if="item.type==='Input'" v-model="searchData[item.prop]" size="mini" ></el-input>
                <!-- 下拉框 -->
                <el-select v-if="item.type==='Select'" v-model="searchData[item.prop]" size="mini" @change="item.change(searchData[item.prop])">
                    <el-option v-for="op in item.options" :label="op.label" :value="op.value" :key="op.value"></el-option>
                </el-select>
                <!-- 单选 -->
                <el-radio-group v-if="item.type==='Radio'" v-model="searchData[item.prop]">
                    <el-radio v-for="ra in item.radios" :label="ra.value" :key="ra.value">{{ra.label}}</el-radio>
                </el-radio-group>
                <!-- 单选按钮 -->
                <el-radio-group v-if="item.type==='RadioButton'" v-model="searchData[item.prop]" @change="item.change && item.change(searchData[item.prop])">
                    <el-radio-button v-for="ra in item.radios" :label="ra.value" :key="ra.value">{{ra.label}}</el-radio-button>
                </el-radio-group>
                <!-- 复选框 -->
                <el-checkbox-group v-if="item.type==='Checkbox'" v-model="searchData[item.prop]" >
                    <el-checkbox v-for="ch in item.checkboxs" :label="ch.value" :key="ch.value">{{ch.label}}</el-checkbox>
                </el-checkbox-group>
                <!-- 日期 -->
                <el-date-picker v-if="item.type==='Date'" v-model="searchData[item.prop]" ></el-date-picker>
                <!-- 时间 -->
                <el-time-select v-if="item.type==='Time'" v-model="searchData[item.prop]" type=''></el-time-select>
                <!-- 日期时间 -->
                <el-date-picker v-if="item.type==='DateTime'" type='datetime' v-model="searchData[item.prop]" :disabled="item.disable && item.disable(searchData[item.prop])"></el-date-picker>
                <!-- 滑块 -->
                <!-- <el-slider v-if="item.type==='Slider'" v-model="searchData[item.prop]"></el-slider> -->
                <!-- 开关 -->
                <el-switch v-if="item.type==='Switch'" v-model="searchData[item.prop]" ></el-switch>
            </el-form-item>
        </el-form>
        <el-form inline v-if='isHandle'>
            <el-form-item v-for='item in searchHandle' :key="item.label">
                <el-button :type="item.type" :size="item.size || size" @click='item.handle()'>{{item.label}}</el-button>
            </el-form-item>
        </el-form>
    </div>
    </template>
    
    <script>
    export default {
        props:{
            isHandle:{
                type:Boolean,
                default:true
            },
            labelWidth:{
                type:String,
                default:'100px'
            },
            size:{
                type:String,
                default:'mini'
            },
            searchForm:{
                type:Array,
                default:[]
            },
            searchHandle:{
                type:Array,
                default:()=>[]
            },
            searchData:{
                type:Object,
                default:{}
            }
        },
        data () {
            return {
            };
        },
    
    }
    
    </script>
    <style>
    
    </style>
    View Code

    组件调用:index.vue,组合table

    <template>
      <div class="ces-main">
        <search-form 
          size='mini'
          labelWidth = '80px' 
          :searchData = "searchData"
          :searchForm = "searchForm"
          :searchHandle="searchHandle"></search-form>
        <ces-table 
          size='mini'
          :isSelection='true'
          :isIndex='true'
          :isPagination='true'
          :isHandle='true'
          :tableData='tableData' 
          :tableCols='tableCols' 
          :tableHandles='tableHandles'
          :pagination='pagination'
          >
          </ces-table>
      </div>
    </template>
    
    <script>
    import SearchForm from '@/components/common/Form/searchForm'
    import cesTable from '@/components/common/Table/Table'
    export default {
      data () {
    
        let sexs=[{label:'男',value:'M'},{label:'女',value:'F'}]
        let sexProps={label:'label',value:'value'}
        let intersts=[{label:'羽毛球',value:'badminton'},{label:'篮球',value:'basketball'}]
        let interstProps={label:'label',value:'value'}
        return {
    // 查询表单
          searchData:{
            name:null,
            age:null,
            sex:null,
            interst:null
          },
          searchForm:[
            {type:'Input',label:'姓名',prop:'name','180px',placeholder:'请输入姓名...'},
            {type:'Input',label:'年龄',prop:'age','180px',placeholder:'请输入年龄...'},
            {type:'Select',label:'性别',prop:'sex','180px',options:sexs,props:sexProps,change:row=>'',placeholder:'请选择性别...'},
            {type:'Checkbox',label:'爱好','180px',prop:'interst',checkboxs:intersts,props:interstProps}
          ],
          searchHandle:[
            {label:'查询',type:'primary',handle:()=>''},
            {label:'重置',type:'primary',handle:()=>''}
          ],
    
    // 表格
          tableData:[
            {name:'张三',age:'12',sex:'男',interst:'女'},
            {name:'筱华',age:'27',sex:'女',interst:'羽毛球'},
            {name:'张三',age:'12',sex:'男',interst:'女'},
            {name:'筱华',age:'27',sex:'女',interst:'羽毛球'},
            {name:'筱华',age:'27',sex:'女',interst:'羽毛球'},
            {name:'筱华',age:'27',sex:'女',interst:'羽毛球'},
            {name:'筱华',age:'27',sex:'女',interst:'羽毛球'}
            
          ],
          tableCols:[
            {label:'姓名',prop:'name'},
            {label:'年龄',prop:'age'},
            {label:'性别',prop:'sex'},
            {label:'爱好',prop:'interst'},
            {label:'操作',type:'Button',btnList:[
              {type:'primary',label:'编辑',handle:row=>''},
              {type:'danger',label:'删除',handle:row=>''}
            ]}
          ],
          tableHandles:[
            {label:'新增',type:'primary',handle:row=>''}
          ],
          pagination:{
            pageSize:10,
            pageNum:1,
            total:7
          }
        }
      },
      components:{
        cesTable,
        SearchForm
      }
    }
    </script>
    
    <style>
    
    </style>

    运行效果:

  • 相关阅读:
    JAVA面试题
    Oracle入门笔记 ——启动进阶
    SQL 基础
    BZOJ 1507 Editor(块状链表)
    BZOJ 1018 堵塞的交通traffic(线段树)
    SPOJ 422 Transposing is Even More Fun(polay计数)
    BZOJ 2754 喵星球上的点名(后缀数组)
    POJ 1568 Find the Winning Move(极大极小搜索)
    Miller-Rabin素数测试学习小计
    Lucas定理学习小记
  • 原文地址:https://www.cnblogs.com/xingguozhiming/p/10674104.html
Copyright © 2011-2022 走看看