searchBox.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <template>
  2. <div id="searchBox">
  3. <div class="inputListBox">
  4. <el-form :inline="true" :model="formData" class="demo-form-inline">
  5. <el-form-item
  6. v-for="(item, index) in formList"
  7. :key="index"
  8. :label="item.label"
  9. >
  10. <el-select
  11. v-if="item.scope === 'select'"
  12. v-model="formData[item.prop]"
  13. :placeholder="item.placeholder"
  14. :size="size"
  15. >
  16. <el-option
  17. v-for="(items, indexs) in item.options"
  18. :key="indexs"
  19. :label="items.label"
  20. :value="items.value"
  21. ></el-option>
  22. </el-select>
  23. <el-cascader
  24. v-else-if="item.scope === 'cascader'"
  25. v-model="formData[item.prop]"
  26. :options="item.options"
  27. :size="size"
  28. :props="{
  29. label: item.props.label,
  30. value: item.props.value,
  31. checkStrictly: true,
  32. emitPath: false,
  33. }"
  34. ></el-cascader>
  35. <el-date-picker
  36. v-else-if="item.scope === 'datePicker'"
  37. v-model="formData[item.prop]"
  38. type="datetimerange"
  39. :picker-options="pickerOptions"
  40. range-separator="至"
  41. start-placeholder="开始日期"
  42. end-placeholder="结束日期"
  43. align="right"
  44. :size="size"
  45. value-format="timestamp"
  46. >
  47. </el-date-picker>
  48. <el-date-picker
  49. v-else-if="item.scope === 'datePickerA'"
  50. v-model="formData[item.prop]"
  51. type="datetime"
  52. :size="size"
  53. placeholder="选择日期时间"
  54. value-format="timestamp"
  55. >
  56. </el-date-picker>
  57. <el-input
  58. v-else
  59. v-model="formData[item.prop]"
  60. :placeholder="item.placeholder"
  61. :size="size"
  62. ></el-input>
  63. </el-form-item>
  64. </el-form>
  65. </div>
  66. <el-form :inline="true" class="btnListBox">
  67. <el-form-item>
  68. <el-button :size="size" type="primary" @click="search">查询</el-button>
  69. <el-button :size="size" @click="init">重置</el-button>
  70. </el-form-item></el-form
  71. >
  72. </div>
  73. </template>
  74. <script>
  75. export default {
  76. props: ["formList"], //参考文档 component.md
  77. data() {
  78. return {
  79. size: "medium", //输入框尺寸类型
  80. formData: {}, //表单数据收集
  81. pickerOptions: {
  82. //日期选择器近期功能
  83. shortcuts: [
  84. {
  85. text: "最近一周",
  86. onClick(picker) {
  87. const end = new Date();
  88. const start = new Date();
  89. start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
  90. picker.$emit("pick", [start, end]);
  91. },
  92. },
  93. {
  94. text: "最近一个月",
  95. onClick(picker) {
  96. const end = new Date();
  97. const start = new Date();
  98. start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
  99. picker.$emit("pick", [start, end]);
  100. },
  101. },
  102. {
  103. text: "最近三个月",
  104. onClick(picker) {
  105. const end = new Date();
  106. const start = new Date();
  107. start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
  108. picker.$emit("pick", [start, end]);
  109. },
  110. },
  111. ],
  112. },
  113. };
  114. },
  115. methods: {
  116. //搜索
  117. search() {
  118. this.$emit("search", this.formData);
  119. },
  120. //重置
  121. init() {
  122. this.formData = {};
  123. this.$emit("init");
  124. },
  125. },
  126. };
  127. </script>
  128. <style lang="less" scoped>
  129. #searchBox {
  130. display: flex;
  131. .inputListBox {
  132. flex: 1;
  133. }
  134. }
  135. </style>