search.vue 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <template>
  2. <el-form :inline="true" :model="form" class="demo-form-inline" size="mini">
  3. <el-form-item v-for="(item, index) in simpleFields" :key="index" :label="item.title">
  4. <el-select class="prepend" v-if="item.formatter" v-model="form[item.name]" :placeholder="item.placeholder || '请选择'">
  5. <el-option
  6. v-for="i in $dict(item.formatter)"
  7. :key="i.value"
  8. :label="i.title"
  9. :value="i.value">
  10. </el-option>
  11. </el-select>
  12. <el-input v-else v-model="form[item.name]" :placeholder="item.placeholder || ''"></el-input>
  13. </el-form-item>
  14. <el-form-item>
  15. <el-button type="primary" @click="onSubmit">查询</el-button>
  16. <el-button type="primary" @click="reset">重置</el-button>
  17. <el-button type="primary" v-if="filterList.length > 4" @click="more = !more">{{ !more ? '更多' : '收起' }}</el-button>
  18. </el-form-item>
  19. <slot v-if="more">
  20. <el-form :inline="true" :model="form" size="mini">
  21. <el-form-item v-for="(item, index) in moreFields" :key="index" :label="item.title">
  22. <el-input v-model="form[item.name]" :placeholder="item.placeholder || ''"></el-input>
  23. </el-form-item>
  24. </el-form>
  25. </slot>
  26. </el-form>
  27. </template>
  28. <script>
  29. export default {
  30. props: {
  31. filterList: Array,
  32. maxFields: { type: Number, default: 4 }
  33. },
  34. computed: {
  35. simpleFields () {
  36. return this.filterList.slice(0, this.maxFields)
  37. },
  38. moreFields () {
  39. return this.filterList.slice(this.maxFields) || []
  40. }
  41. },
  42. data () {
  43. return {
  44. form: {},
  45. more: false
  46. }
  47. },
  48. methods: {
  49. onSubmit () {
  50. this.$emit('handlefilter', this.form)
  51. },
  52. reset () {
  53. this.form = {}
  54. this.$emit('handlefilter', this.form)
  55. }
  56. },
  57. mounted () {}
  58. }
  59. </script>
  60. <style lang="less" scoped>
  61. .demo-form-inline {
  62. margin-left: 1%;
  63. margin-top: 10px;
  64. }
  65. .prepend.el-select {
  66. width: 100px;
  67. }
  68. </style>