index.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <template>
  2. <m-card>
  3. <el-form :inline="true" :model="form" ref="form" label-width="80px" size="small" :show-message="false" inline-message>
  4. <el-form-item
  5. v-for="(item, index) in items"
  6. :key="index"
  7. v-bind="item"
  8. >
  9. <!-- 输入框 -->
  10. <el-input
  11. v-if="item.type === 'input'"
  12. v-model="form[item.prop]"
  13. v-bind="item.option"
  14. ></el-input>
  15. <!-- 下拉框 -->
  16. <el-select
  17. v-if="item.type === 'select'"
  18. v-model="form[item.prop]"
  19. v-bind="item.option"
  20. >
  21. <el-option
  22. v-for="option in item.options"
  23. :key="option.value"
  24. :label="option.label"
  25. :value="option.value"
  26. ></el-option>
  27. </el-select>
  28. <!-- 时间选择器 -->
  29. <el-date-picker
  30. v-if="item.type === 'date'"
  31. v-model="form[item.prop]"
  32. v-bind="item.option"
  33. ></el-date-picker>
  34. <!-- 其他类型可以根据需要扩展 -->
  35. </el-form-item>
  36. <el-form-item>
  37. <el-button class="ml-3" icon="el-icon-search" @click="onSubmit">查询</el-button>
  38. <el-button class="ml-3" icon="el-icon-refresh" @click="onReset">重置</el-button>
  39. <slot name="button"></slot>
  40. </el-form-item>
  41. </el-form>
  42. </m-card>
  43. </template>
  44. <script>
  45. export default {
  46. name: 'm-search',
  47. props: {
  48. items: {
  49. type: Array,
  50. default: () => []
  51. },
  52. value: {
  53. type: Object,
  54. default: () => ({})
  55. }
  56. },
  57. data () {
  58. return {
  59. form: { ...this.value }
  60. }
  61. },
  62. watch: {
  63. value: {
  64. handler (newVal) {
  65. this.form = newVal
  66. },
  67. deep: true
  68. },
  69. form: {
  70. handler (newVal) {
  71. this.$emit('input', newVal)
  72. },
  73. deep: true
  74. }
  75. },
  76. methods: {
  77. onSubmit () {
  78. this.$emit('search', this.form)
  79. },
  80. onReset () {
  81. this.$refs.form.resetFields()
  82. this.$emit('reset', this.form)
  83. }
  84. }
  85. }
  86. </script>
  87. <style lang="scss" scoped>
  88. ::v-deep .el-form-item {
  89. margin: 0 !important;
  90. }
  91. </style>