filterBar.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <template>
  2. <el-main>
  3. <el-card shadow="never" header="过滤器">
  4. <scFilterBar filterName="filterName" :options="options" @filterChange="change">
  5. <template #default="{filterLength, openFilter}">
  6. <el-badge :value="filterLength" type="danger" :hidden="filterLength<=0">
  7. <el-button icon="el-icon-filter" @click="openFilter"></el-button>
  8. </el-badge>
  9. </template>
  10. </scFilterBar>
  11. </el-card>
  12. <el-alert title="SCUI 独创的过滤条Filterbar,可配置不同类型的过滤字段,以及异步获取数据,在@/config/filterBar.js中可以更改运算符以及其他配置,操作上方过滤条查看下方change事件的回调,在表格查询的场景下非常合适" type="success" style="margin:20px 0;"></el-alert>
  13. <el-card shadow="never" header="返回值">
  14. <pre>{{ filterData }}</pre>
  15. </el-card>
  16. </el-main>
  17. </template>
  18. <script>
  19. import scFilterBar from '@/components/scFilterBar';
  20. export default {
  21. name: 'filterBar',
  22. components: {
  23. scFilterBar
  24. },
  25. data() {
  26. return {
  27. filterData : {},
  28. defaultFilter : [],
  29. options: [
  30. {
  31. label: '订单号',
  32. value: 'id',
  33. type: 'text',
  34. selected: true,
  35. placeholder: '请输入订单号'
  36. },
  37. {
  38. label: '类型',
  39. value: 'type',
  40. type: 'select',
  41. operator: '=',
  42. selected: true,
  43. placeholder: '请选择类型',
  44. extend: {
  45. data:[
  46. {
  47. label: "选项1",
  48. value: "1"
  49. },
  50. {
  51. label: "选项2",
  52. value: "2"
  53. }
  54. ]
  55. }
  56. },
  57. {
  58. label: '类型(多选)',
  59. value: 'type2',
  60. type: 'select',
  61. operator: '=',
  62. placeholder: '请选择类型',
  63. extend: {
  64. multiple: true,
  65. data:[
  66. {
  67. label: "选项1",
  68. value: "1"
  69. },
  70. {
  71. label: "选项2",
  72. value: "2"
  73. }
  74. ]
  75. }
  76. },
  77. {
  78. label: '通知(异步)',
  79. value: 'noticeType',
  80. type: 'select',
  81. operator: '=',
  82. placeholder: '请选择通知类型',
  83. extend: {
  84. request: async () => {
  85. var list = await this.$API.system.dic.get.get()
  86. return list.data.map(item => {
  87. return {
  88. label: item.label,
  89. value: item.value
  90. }
  91. })
  92. }
  93. }
  94. },
  95. {
  96. label: '通知(远程搜索)',
  97. value: 'noticeType2',
  98. type: 'select',
  99. operator: '=',
  100. placeholder: '请输入关键词后检索',
  101. extend: {
  102. remote: true,
  103. request: async (query) => {
  104. var data = {
  105. keyword: query,
  106. }
  107. var list = await this.$API.system.dic.get.get(data)
  108. return list.data.map(item => {
  109. return {
  110. label: item.label,
  111. value: item.value
  112. }
  113. })
  114. }
  115. }
  116. },
  117. {
  118. label: '关键词(标签)',
  119. value: 'tags',
  120. type: 'tags',
  121. operator: 'include',
  122. operators: [
  123. {
  124. label: '包含',
  125. value: 'include',
  126. },
  127. {
  128. label: '不包含',
  129. value: 'notinclude',
  130. }
  131. ]
  132. },
  133. {
  134. label: '开关(可重复)',
  135. value: 'switch',
  136. type: 'switch',
  137. repeat: true,
  138. operator: '='
  139. },
  140. {
  141. label: '日期单选',
  142. value: 'date',
  143. type: 'date',
  144. operator: '=',
  145. operators: [
  146. {
  147. label: '等于',
  148. value: '=',
  149. },
  150. {
  151. label: '不等于',
  152. value: '!=',
  153. }
  154. ]
  155. },
  156. {
  157. label: '日期范围',
  158. value: 'date2',
  159. type: 'daterange'
  160. },
  161. {
  162. label: '自定义日期',
  163. value: 'date3',
  164. type: 'customDate',
  165. placeholder: '请选择月份',
  166. extend: {
  167. dateType: 'month',
  168. valueFormat: 'YYYY-MM'
  169. }
  170. }
  171. ]
  172. }
  173. },
  174. methods: {
  175. change(data){
  176. this.filterData = data;
  177. }
  178. }
  179. }
  180. </script>
  181. <style>
  182. </style>