seekPage.vue 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. <template>
  2. <div class="index_box">
  3. <el-form label-width="90px" :inline="true">
  4. <el-form-item v-for="(item, i) in seekList" :key="i">
  5. <el-form-item
  6. :label="item.label"
  7. :label-width="item.labelWidth + 'px'"
  8. v-if="i <= 2"
  9. >
  10. <!-- input 输入 -->
  11. <div>
  12. <div v-if="item.type == 'input'">
  13. <el-input
  14. clearable
  15. v-model="defaultWhere[item.value]"
  16. :placeholder="item.placeholder || '请输入内容'"
  17. :style="{ width: item.width ? item.width + 'px' : '220px' }"
  18. />
  19. </div>
  20. <div v-if="item.type == 'select'">
  21. <el-select
  22. clearable
  23. v-model="defaultWhere[item.value]"
  24. :placeholder="item.placeholder || '请输入内容'"
  25. :multiple="item.multiple ? item.multiple : false"
  26. :filterable="item.filterable ? item.filterable : true"
  27. :style="{ width: item.width ? item.width + 'px' : '220px' }"
  28. >
  29. <el-option
  30. v-for="(op, i) in item.planList"
  31. :label="op.label"
  32. :value="op.value"
  33. :key="i"
  34. ></el-option>
  35. </el-select>
  36. </div>
  37. <div v-if="item.type == 'date'">
  38. <el-date-picker
  39. v-model="defaultWhere[item.value]"
  40. @visible-change="change"
  41. :type="item.dateType || 'daterange'"
  42. range-separator="至"
  43. start-placeholder="开始日期"
  44. end-placeholder="结束日期"
  45. value-format="yyyy-MM-dd HH:mm:ss"
  46. :style="{ width: item.width ? item.width + 'px' : '220px' }"
  47. >
  48. </el-date-picker>
  49. </div>
  50. </div>
  51. </el-form-item>
  52. </el-form-item>
  53. <el-form-item v-show="seekList.length > 3">
  54. <el-dropdown
  55. ref="dropdownref"
  56. trigger="click"
  57. :hide-on-click="false"
  58. v-model="dropdownVisible"
  59. >
  60. <div>
  61. <span class="el-dropdown-link">
  62. 更多选项<i class="el-icon-arrow-down el-icon--right"></i>
  63. </span>
  64. <el-dropdown-menu slot="dropdown">
  65. <div class="padding">
  66. <el-form label-position="left">
  67. <el-form-item
  68. v-for="(item, i) in deboListRow"
  69. :key="i"
  70. :inline="true"
  71. label-position="left"
  72. >
  73. <el-form-item
  74. :label-width="
  75. item.labelWidth ? item.labelWidth : '90' + 'px'
  76. "
  77. :inline="true"
  78. :label="item.label"
  79. >
  80. <div v-if="item.type == 'input'">
  81. <el-input
  82. clearable
  83. v-model="defaultWhere[item.value]"
  84. :placeholder="item.placeholder || '请输入内容'"
  85. :style="{
  86. width: item.width ? item.width + 'px' : '220px'
  87. }"
  88. />
  89. </div>
  90. <div v-if="item.type == 'select'">
  91. <el-select
  92. clearable
  93. v-model="defaultWhere[item.value]"
  94. :multiple="item.multiple ? item.multiple : false"
  95. :filterable="item.filterable ? item.filterable : true"
  96. :placeholder="item.placeholder || '请输入内容'"
  97. :style="{
  98. width: item.width ? item.width + 'px' : '220px'
  99. }"
  100. @visible-change="change"
  101. @change="handerChange"
  102. >
  103. <el-option
  104. v-for="(op, i) in item.planList"
  105. :label="op.label"
  106. :value="op.value"
  107. :key="i"
  108. ></el-option>
  109. </el-select>
  110. </div>
  111. <div v-if="item.type == 'date'">
  112. <el-date-picker
  113. v-model="defaultWhere[item.value]"
  114. @blur="change"
  115. :type="item.dateType || 'daterange'"
  116. range-separator="至"
  117. start-placeholder="开始日期"
  118. end-placeholder="结束日期"
  119. value-format="yyyy-MM-dd HH:mm:ss"
  120. :style="{
  121. width: item.width ? item.width + 'px' : '220px'
  122. }"
  123. >
  124. </el-date-picker>
  125. </div>
  126. </el-form-item>
  127. </el-form-item>
  128. </el-form>
  129. </div>
  130. </el-dropdown-menu>
  131. </div>
  132. </el-dropdown>
  133. </el-form-item>
  134. <el-form-item>
  135. <el-button
  136. type="primary"
  137. icon="el-icon-search"
  138. class="ele-btn-icon"
  139. @click="search"
  140. >
  141. 查询
  142. </el-button>
  143. <el-button @click="reset" icon="el-icon-refresh-left" type="primary"
  144. >重置</el-button
  145. >
  146. </el-form-item>
  147. </el-form>
  148. </div>
  149. </template>
  150. <script>
  151. let defaultWhere = {};
  152. export default {
  153. props: {
  154. seekList: {
  155. type: Array,
  156. default: () => []
  157. }
  158. },
  159. components: {},
  160. watch: {
  161. seekList: {
  162. handler(val) {
  163. val.forEach((item) => {
  164. defaultWhere[item.value] = null;
  165. });
  166. this.$nextTick(() => {
  167. if (Array.isArray(val) && val.length <= 3) {
  168. this.seekListRow = val;
  169. } else if (Array.isArray(val) && val.length >= 3) {
  170. this.seekListRow = val.slice(0, 3);
  171. this.deboListRow = val.slice(3);
  172. }
  173. });
  174. },
  175. deep: true,
  176. immediate: true
  177. }
  178. },
  179. data() {
  180. return {
  181. defaultWhere: {},
  182. dropdownVisible: true,
  183. deboListRow: [],
  184. seekListRow: []
  185. };
  186. },
  187. computed: {
  188. info() {
  189. return this.$store.state.user.info;
  190. }
  191. },
  192. created() {},
  193. methods: {
  194. change(visible) {
  195. this.dropdownVisible = visible;
  196. this.$refs.dropdownref.show();
  197. },
  198. handerChange() {
  199. this.$refs.dropdownref.show();
  200. },
  201. search() {
  202. this.$emit('search', this.defaultWhere);
  203. },
  204. // 重置
  205. reset() {
  206. this.defaultWhere = {};
  207. this.search();
  208. }
  209. // 折叠悬浮中样式调整
  210. }
  211. };
  212. </script>
  213. <style scoped>
  214. .index_box {
  215. display: flex;
  216. }
  217. .padding {
  218. padding: 20px;
  219. }
  220. </style>