fit2cloud-ui-plus 0.0.1-beta.9 → 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/README.md +61 -9
  2. package/lib/fit2cloud-ui-plus.es.js +1847 -370
  3. package/lib/fit2cloud-ui-plus.umd.js +1 -1
  4. package/package.json +8 -5
  5. package/src/components/filter-bar/FuFilter.vue +40 -31
  6. package/src/components/filter-bar/FuFilterBar.vue +27 -16
  7. package/src/components/filter-bar/FuFilterInput.vue +48 -0
  8. package/src/components/filter-bar/filter-components/FuFilterDate.vue +17 -13
  9. package/src/components/filter-bar/filter-components/FuFilterDateTime.vue +4 -4
  10. package/src/components/filter-bar/filter-components/FuFilterSelect.vue +5 -4
  11. package/src/components/filter-bar/index.ts +4 -4
  12. package/src/components/icon-button/FuIconButton.vue +54 -0
  13. package/src/components/icon-button/index.ts +9 -0
  14. package/src/components/read-write-switch/FuSelectRwSwitch.vue +23 -10
  15. package/src/components/search-bar/FuComplexSearch.vue +104 -0
  16. package/src/components/search-bar/FuQuickSearch.vue +64 -0
  17. package/src/components/search-bar/FuSearchBar.vue +153 -0
  18. package/src/components/search-bar/FuSearchBarButton.vue +23 -0
  19. package/src/components/search-bar/FuSearchContions.vue +40 -0
  20. package/src/components/search-bar/complex-components/FuComplexDate.vue +70 -0
  21. package/src/components/search-bar/complex-components/FuComplexDateTime.vue +74 -0
  22. package/src/components/search-bar/complex-components/FuComplexInput.vue +57 -0
  23. package/src/components/search-bar/complex-components/FuComplexSelect.vue +93 -0
  24. package/src/components/search-bar/index.ts +20 -0
  25. package/src/components/search-bar/types.ts +23 -0
  26. package/src/components/speed-dial/FuSpeedDial.vue +289 -0
  27. package/src/components/speed-dial/FuSpeedDialActionButton.vue +88 -0
  28. package/src/components/speed-dial/FuSpeedDialButton.vue +45 -0
  29. package/src/components/speed-dial/FuSpeedDialItem.vue +82 -0
  30. package/src/components/speed-dial/index.ts +11 -0
  31. package/src/components/speed-dial/types.ts +12 -0
  32. package/src/components/table/FuTable.vue +3 -3
  33. package/src/components/table/table-column-select/FuTableColumnSelectPopover.vue +22 -24
  34. package/src/components/tabs/FuTabs.vue +4 -3
  35. package/src/hooks/index.ts +0 -1
  36. package/src/hooks/use-global-config/index.ts +26 -8
  37. package/src/hooks/use-locale/index.ts +1 -1
  38. package/src/hooks/use-size/index.ts +11 -5
  39. package/src/index.ts +5 -2
  40. package/src/styles/common/function.scss +14 -4
  41. package/src/styles/common/mixins.scss +9 -4
  42. package/src/styles/common/variables.scss +55 -18
  43. package/src/styles/components/filter-bar.scss +16 -16
  44. package/src/styles/components/icon-button.scss +66 -0
  45. package/src/styles/components/search-bar.scss +240 -0
  46. package/src/styles/components/speed-dial.scss +1 -51
  47. package/src/styles/components/table.scss +7 -9
  48. package/src/styles/index.scss +2 -0
  49. package/src/styles/themes/default.scss +91 -0
  50. package/types/examples/App.vue.d.ts +2 -0
  51. package/types/examples/components/CodeExample.vue.d.ts +29 -0
  52. package/types/examples/components/DocumentTable.vue.d.ts +14 -0
  53. package/types/examples/components/Markdown.vue.d.ts +12 -0
  54. package/types/examples/layout/components/AppHeader.vue.d.ts +2 -0
  55. package/types/examples/layout/components/Sidebar.vue.d.ts +2 -0
  56. package/types/examples/layout/index.vue.d.ts +2 -0
  57. package/types/examples/main.d.ts +2 -0
  58. package/types/examples/pages/filter-bar/attributes.d.ts +63 -0
  59. package/types/examples/pages/filter-bar/demo/BaseFilterBar.vue.d.ts +2 -0
  60. package/types/examples/pages/filter-bar/demo/SetConditionsDemo.vue.d.ts +2 -0
  61. package/types/examples/pages/filter-bar/demo/SlotDemo.vue.d.ts +2 -0
  62. package/types/examples/pages/filter-bar/index.vue.d.ts +2 -0
  63. package/types/examples/pages/icon-button/attributes.d.ts +45 -0
  64. package/types/examples/pages/icon-button/demo/BaseIconButton.vue.d.ts +2 -0
  65. package/types/examples/pages/icon-button/demo/SlotDemo.vue.d.ts +2 -0
  66. package/types/examples/pages/icon-button/index.vue.d.ts +2 -0
  67. package/types/examples/pages/index.d.ts +3 -0
  68. package/types/examples/pages/read-write-switch/attributes.d.ts +63 -0
  69. package/types/examples/pages/read-write-switch/demo/BaseDemo.vue.d.ts +2 -0
  70. package/types/examples/pages/read-write-switch/demo/CustomContentDemo.vue.d.ts +2 -0
  71. package/types/examples/pages/read-write-switch/demo/InputRwSwitchDemo.vue.d.ts +2 -0
  72. package/types/examples/pages/read-write-switch/demo/ReadSwitchDemo.vue.d.ts +2 -0
  73. package/types/examples/pages/read-write-switch/demo/SelectRwSwitchDemo.vue.d.ts +2 -0
  74. package/types/examples/pages/read-write-switch/demo/TableInnerEditDemo.vue.d.ts +2 -0
  75. package/types/examples/pages/read-write-switch/demo/WriteSwitchDemo.vue.d.ts +2 -0
  76. package/types/examples/pages/read-write-switch/index.vue.d.ts +2 -0
  77. package/types/examples/pages/search/attributes.d.ts +57 -0
  78. package/types/examples/pages/search/demo/BaseSearchbar.vue.d.ts +66 -0
  79. package/types/examples/pages/search/demo/ComplexComponentsDemo.vue.d.ts +60 -0
  80. package/types/examples/pages/search/demo/ComplexSearchDemo.vue.d.ts +84 -0
  81. package/types/examples/pages/search/demo/CustomComponentsDemo.vue.d.ts +50 -0
  82. package/types/examples/pages/search/demo/EchoConditionsDemo.vue.d.ts +52 -0
  83. package/types/examples/pages/search/demo/QuickSearchDemo.vue.d.ts +18 -0
  84. package/types/examples/pages/search/demo/SearchBarButtonDemo.vue.d.ts +54 -0
  85. package/types/examples/pages/search/index.vue.d.ts +150 -0
  86. package/types/examples/pages/search-bar/attributes.d.ts +63 -0
  87. package/types/examples/pages/search-bar/demo/BaseSearchbar.vue.d.ts +31 -0
  88. package/types/examples/pages/search-bar/demo/ComplexSearchDemo.vue.d.ts +40 -0
  89. package/types/examples/pages/search-bar/demo/EchoConditionsDemo.vue.d.ts +32 -0
  90. package/types/examples/pages/search-bar/demo/QuickSearchDemo.vue.d.ts +7 -0
  91. package/types/examples/pages/search-bar/demo/SearchBarButtonDemo.vue.d.ts +32 -0
  92. package/types/examples/pages/search-bar/index.vue.d.ts +2 -0
  93. package/types/examples/pages/speed-dial/attributes.d.ts +63 -0
  94. package/types/examples/pages/speed-dial/demo/BaseSpeedDial.vue.d.ts +2 -0
  95. package/types/examples/pages/speed-dial/demo/SpeedDialCustom.vue.d.ts +2 -0
  96. package/types/examples/pages/speed-dial/demo/SpeedDialPosition.vue.d.ts +2 -0
  97. package/types/examples/pages/speed-dial/demo/SpeedDialTrigger.vue.d.ts +2 -0
  98. package/types/examples/pages/speed-dial/index.vue.d.ts +2 -0
  99. package/types/examples/pages/split-pane/attributes.d.ts +63 -0
  100. package/types/examples/pages/split-pane/demo/BaseSplit.vue.d.ts +2 -0
  101. package/types/examples/pages/split-pane/demo/CustomResizer.vue.d.ts +2 -0
  102. package/types/examples/pages/split-pane/demo/NestSplit.vue.d.ts +2 -0
  103. package/types/examples/pages/split-pane/demo/ResizerType.vue.d.ts +2 -0
  104. package/types/examples/pages/split-pane/index.vue.d.ts +2 -0
  105. package/types/examples/pages/table/attributes.d.ts +121 -0
  106. package/types/examples/pages/table/demo/BaseTable.vue.d.ts +2 -0
  107. package/types/examples/pages/table/demo/DropdownColumn.vue.d.ts +2 -0
  108. package/types/examples/pages/table/demo/DropdownColumnSlot.vue.d.ts +2 -0
  109. package/types/examples/pages/table/demo/SaveSelectColumn.vue.d.ts +2 -0
  110. package/types/examples/pages/table/demo/SelectColumn.vue.d.ts +2 -0
  111. package/types/examples/pages/table/demo/TableOperations.vue.d.ts +2 -0
  112. package/types/examples/pages/table/demo/TablePagination.vue.d.ts +2 -0
  113. package/types/examples/pages/table/index.vue.d.ts +2 -0
  114. package/types/examples/pages/tabs/attributes.d.ts +63 -0
  115. package/types/examples/pages/tabs/demo/AddCloseTab.vue.d.ts +2 -0
  116. package/types/examples/pages/tabs/index.vue.d.ts +2 -0
  117. package/types/examples/router/doc-routes.d.ts +12 -0
  118. package/types/examples/router/index.d.ts +4 -0
  119. package/types/examples/router/styles-routes.d.ts +12 -0
  120. package/types/examples/style-guide/button/BaseButton.vue.d.ts +2 -0
  121. package/types/examples/style-guide/button/IconButton.vue.d.ts +2 -0
  122. package/types/examples/style-guide/button/PlainButton.vue.d.ts +2 -0
  123. package/types/examples/style-guide/button/TextButton.vue.d.ts +2 -0
  124. package/types/examples/style-guide/button/index.vue.d.ts +2 -0
  125. package/types/examples/style-guide/input/BaseInput.vue.d.ts +2 -0
  126. package/types/examples/style-guide/input/SearchInput.vue.d.ts +2 -0
  127. package/types/examples/style-guide/input/Textarea.vue.d.ts +2 -0
  128. package/types/examples/style-guide/input/index.vue.d.ts +2 -0
  129. package/types/examples/style-guide/select/BaseSelect.vue.d.ts +2 -0
  130. package/types/examples/style-guide/select/index.vue.d.ts +2 -0
  131. package/types/plugins/example-transform.d.ts +5 -0
  132. package/types/src/components/filter-bar/FuFilter.vue.d.ts +42 -0
  133. package/types/src/components/filter-bar/FuFilterBar.vue.d.ts +33 -0
  134. package/types/src/components/filter-bar/FuFilterConditions.vue.d.ts +8 -0
  135. package/types/src/components/filter-bar/FuFilterInput.vue.d.ts +17 -0
  136. package/types/src/components/filter-bar/FuSearchInput.vue.d.ts +17 -0
  137. package/types/src/components/filter-bar/filter-components/FuFilterDate.vue.d.ts +36 -0
  138. package/types/src/components/filter-bar/filter-components/FuFilterDateTime.vue.d.ts +36 -0
  139. package/types/src/components/filter-bar/filter-components/FuFilterOption.vue.d.ts +24 -0
  140. package/types/src/components/filter-bar/filter-components/FuFilterSelect.vue.d.ts +66 -0
  141. package/types/src/components/filter-bar/index.d.ts +2 -0
  142. package/types/src/components/filter-bar/types.d.ts +22 -0
  143. package/types/src/components/icon-button/FuIconButton.vue.d.ts +43 -0
  144. package/types/src/components/icon-button/index.d.ts +2 -0
  145. package/types/src/components/read-write-switch/FuInputRwSwitch.vue.d.ts +21 -0
  146. package/types/src/components/read-write-switch/FuReadWriteSwitch.vue.d.ts +23 -0
  147. package/types/src/components/read-write-switch/FuSelectRwSwitch.vue.d.ts +43 -0
  148. package/types/src/components/read-write-switch/index.d.ts +2 -0
  149. package/types/src/components/read-write-switch/types.d.ts +4 -0
  150. package/types/src/components/search-bar/FuComplexSearch.vue.d.ts +22 -0
  151. package/types/src/components/search-bar/FuQuickSearch.vue.d.ts +29 -0
  152. package/types/src/components/search-bar/FuSearchBar.vue.d.ts +58 -0
  153. package/types/src/components/search-bar/FuSearchBarButton.vue.d.ts +14 -0
  154. package/types/src/components/search-bar/FuSearchContions.vue.d.ts +26 -0
  155. package/types/src/components/search-bar/complex-components/FuComplexDate.vue.d.ts +36 -0
  156. package/types/src/components/search-bar/complex-components/FuComplexDateTime.vue.d.ts +36 -0
  157. package/types/src/components/search-bar/complex-components/FuComplexInput.vue.d.ts +26 -0
  158. package/types/src/components/search-bar/complex-components/FuComplexSelect.vue.d.ts +50 -0
  159. package/types/src/components/search-bar/complex-components/index.d.ts +0 -0
  160. package/types/src/components/search-bar/complex-components/mixins.d.ts +6 -0
  161. package/types/src/components/search-bar/index.d.ts +2 -0
  162. package/types/src/components/search-bar/types.d.ts +17 -0
  163. package/types/src/components/speed-dial/FuSpeedDial.vue.d.ts +218 -0
  164. package/types/src/components/speed-dial/FuSpeedDialActionButton.vue.d.ts +32 -0
  165. package/types/src/components/speed-dial/FuSpeedDialButton.vue.d.ts +42 -0
  166. package/types/src/components/speed-dial/FuSpeedDialItem.vue.d.ts +12 -0
  167. package/types/src/components/speed-dial/index.d.ts +2 -0
  168. package/types/src/components/speed-dial/types.d.ts +8 -0
  169. package/types/src/components/split-pane/FuSplitPane.vue.d.ts +59 -0
  170. package/types/src/components/split-pane/index.d.ts +2 -0
  171. package/types/src/components/table/FuTable.vue.d.ts +18 -0
  172. package/types/src/components/table/FuTableBody.d.ts +3 -0
  173. package/types/src/components/table/FuTableColumnDropdown.vue.d.ts +50 -0
  174. package/types/src/components/table/FuTablePagination.vue.d.ts +47 -0
  175. package/types/src/components/table/index.d.ts +2 -0
  176. package/types/src/components/table/table-column-select/FuTableColumnSelect.vue.d.ts +10 -0
  177. package/types/src/components/table/table-column-select/FuTableColumnSelectDialog.vue.d.ts +23 -0
  178. package/types/src/components/table/table-column-select/FuTableColumnSelectPopover.vue.d.ts +34 -0
  179. package/types/src/components/table/table-column-select/utils.d.ts +8 -0
  180. package/types/src/components/table/table-operations/FuTableButton.vue.d.ts +13 -0
  181. package/types/src/components/table/table-operations/FuTableMoreButton.vue.d.ts +37 -0
  182. package/types/src/components/table/table-operations/FuTableOperations.vue.d.ts +46 -0
  183. package/types/src/components/table/types.d.ts +2 -0
  184. package/types/src/components/tabs/FuTabs.vue.d.ts +54 -0
  185. package/types/src/components/tabs/index.d.ts +2 -0
  186. package/types/src/hooks/index.d.ts +3 -0
  187. package/types/src/hooks/use-global-config/index.d.ts +9 -0
  188. package/types/src/hooks/use-locale/index.d.ts +14 -0
  189. package/types/src/hooks/use-size/index.d.ts +9 -0
  190. package/types/src/index.d.ts +8 -0
  191. package/types/src/locale/index.d.ts +10 -0
  192. package/types/src/locale/lang/en.d.ts +59 -0
  193. package/types/src/locale/lang/zh-cn.d.ts +59 -0
  194. package/types/src/locale/lang/zh-tw.d.ts +59 -0
  195. package/types/src/tools/size.d.ts +4 -0
  196. package/types/src/tools/theme.d.ts +1 -0
  197. package/types/src/tools/time.d.ts +2 -0
  198. package/types/src/tools/types.d.ts +8 -0
  199. package/types/src/tools/utils.d.ts +2 -0
  200. package/types/src/tools/vnode.d.ts +9 -0
  201. package/src/.DS_Store +0 -0
  202. package/src/components/.DS_Store +0 -0
  203. package/src/components/filter-bar/FuSearchInput.vue +0 -37
@@ -5,17 +5,19 @@
5
5
  <slot name="tl"></slot>
6
6
  </div>
7
7
  <div class="top_right">
8
- <slot name="tr">
9
- <fu-search-input :size="size" v-model="quick" :placeholder="quickPlaceholder" @change="change" />
10
- <el-button @click="open" icon="Filter" :size="size">{{ t('fu.filter_bar.filter') }}
11
- <span v-if="conditions.length > 0">({{ conditions.length }})</span>
12
- </el-button>
8
+ <slot name="tr" :condition="conditionObj">
9
+ <fu-filter-input :size="configSize" v-model="quick" :placeholder="quickPlaceholder" @change="change"/>
13
10
  </slot>
11
+ <el-button class="fu-filter-button" @click="open" icon="Filter" :size="configSize">{{ t('fu.filter_bar.filter') }}
12
+ <span v-if="conditions.length > 0">({{ conditions.length }})</span>
13
+ </el-button>
14
+
14
15
  <slot name="buttons"></slot>
15
16
  </div>
16
17
  </div>
17
18
  <div class="fu-filter-bar__bottom">
18
- <fu-filter ref="filterRef" @filter="filter" :count="resultCount" :components="components" :size="size">
19
+ <fu-filter ref="filterRef" @filter="filter" :count="resultCount" :components="components" :size="configSize"
20
+ :show-empty="showEmpty">
19
21
  <slot></slot>
20
22
  </fu-filter>
21
23
  </div>
@@ -23,13 +25,14 @@
23
25
  </template>
24
26
 
25
27
  <script setup lang="ts">
26
- import { ref, computed } from "vue";
27
- import { useLocale } from "@/hooks"
28
- import { validateSize } from "@/tools/size";
29
- import FuSearchInput from "@/components/filter-bar/FuSearchInput.vue";
28
+ import {ref, computed} from "vue";
29
+ import {useLocale, useSize} from "@/hooks"
30
+ import {validateSize} from "@/tools/size";
31
+ import FuFilterInput from "@/components/filter-bar/FuFilterInput.vue";
30
32
  import FuFilter from "@/components/filter-bar/FuFilter.vue";
31
- defineOptions({ name: "FuFilterBar" });
32
- const { t } = useLocale()
33
+
34
+ defineOptions({name: "FuFilterBar"});
35
+ const {t} = useLocale()
33
36
  defineProps({
34
37
  size: {
35
38
  type: String,
@@ -37,14 +40,18 @@ defineProps({
37
40
  },
38
41
  resultCount: Number,
39
42
  quickPlaceholder: String,
40
- components: Array
43
+ components: Array,
44
+ showEmpty: {
45
+ type: Boolean,
46
+ default: false
47
+ }
41
48
  })
42
49
 
43
50
  const emit = defineEmits(["exec"])
44
51
 
52
+ const configSize = useSize()
45
53
  const quick = ref("")
46
54
  const conditions = ref([])
47
-
48
55
  const filterRef = ref()
49
56
 
50
57
  function open() {
@@ -65,7 +72,10 @@ function setConditions(conditionObj: any) {
65
72
  }
66
73
 
67
74
  const conditionObj = computed(() => {
68
- let obj: any = { quick: quick.value }
75
+ let obj: any = {}
76
+ if (quick.value) {
77
+ obj.quick = quick.value
78
+ }
69
79
  conditions.value.forEach((c: any) => {
70
80
  obj[c.field] = c
71
81
  })
@@ -73,6 +83,7 @@ const conditionObj = computed(() => {
73
83
  });
74
84
 
75
85
  defineExpose({
76
- setConditions
86
+ setConditions,
87
+ open
77
88
  })
78
89
  </script>
@@ -0,0 +1,48 @@
1
+ <template>
2
+ <el-input class="fu-filter-input" prefix-icon="Search" v-model="quick" @input="input" @blur="blur" @keydown="keydown"
3
+ @clear="clear" v-bind="$attrs" clearable :size="configSize"/>
4
+ </template>
5
+
6
+ <script setup lang="ts">
7
+ import {ref, watch} from "vue";
8
+ import {validateSize} from "@/tools/size";
9
+ import {useSize} from "@/hooks";
10
+
11
+ defineOptions({name: "FuFilterInput"});
12
+
13
+ const props = defineProps({
14
+ size: {
15
+ type: String,
16
+ validator: validateSize
17
+ },
18
+ modelValue: String,
19
+ })
20
+
21
+ const emit = defineEmits(["update:modelValue", "change"])
22
+ const quick = ref("")
23
+ const configSize = useSize()
24
+
25
+ watch(() => props.modelValue, (val: any) => {
26
+ quick.value = val
27
+ })
28
+
29
+ function input(e: Event) {
30
+ emit("update:modelValue", quick.value, e)
31
+ }
32
+
33
+ function blur(e: Event) {
34
+ emit("change", quick.value, e)
35
+ }
36
+
37
+ function clear() {
38
+ emit("update:modelValue", quick.value)
39
+ emit("change", quick.value)
40
+ }
41
+
42
+ function keydown(e: Event) {
43
+ const event = e as KeyboardEvent
44
+ if (event.key === "Enter") {
45
+ emit("change", quick.value, e)
46
+ }
47
+ }
48
+ </script>
@@ -3,22 +3,23 @@
3
3
  <div class="fu-filter-component__label">{{ label }}</div>
4
4
  <div class="fu-filter-component__content">
5
5
  <!--configSize-->
6
- <el-date-picker class="fu-filter-date" v-model="value" v-bind="$attrs" :size="size"
7
- :placeholder="t('fu.search_bar.select_date')" type="daterange" :value-format="valueFormat"
8
- :start-placeholder="t('fu.search_bar.start_date')" :end-placeholder="t('fu.search_bar.end_date')">
6
+ <el-date-picker class="fu-filter-date" v-model="value" v-bind="$attrs" :size="configSize"
7
+ :placeholder="t('fu.search_bar.select_date')" type="daterange" :value-format="valueFormat"
8
+ :start-placeholder="t('fu.search_bar.start_date')" :end-placeholder="t('fu.search_bar.end_date')">
9
9
  </el-date-picker>
10
10
  </div>
11
11
  </div>
12
12
  </template>
13
13
 
14
14
  <script setup lang="ts">
15
- import { ref, computed, inject } from "vue";
16
- import { FilterCondition, ReferenceContext, referenceKey } from "../types";
17
- import { dateFormat } from "@/tools/time";
18
- import { useLocale } from "@/hooks"
19
- import { validateSize } from "@/tools/size";
20
- defineOptions({ name: "FuFilterDate" });
21
- const { t } = useLocale()
15
+ import {ref, computed, inject} from "vue";
16
+ import {FilterCondition, ReferenceContext, referenceKey} from "../types";
17
+ import {dateFormat} from "@/tools/time";
18
+ import {useLocale, useSize} from "@/hooks"
19
+ import {validateSize} from "@/tools/size";
20
+
21
+ defineOptions({name: "FuFilterDate"});
22
+
22
23
  const props = defineProps({
23
24
  size: {
24
25
  type: String,
@@ -35,6 +36,7 @@ const props = defineProps({
35
36
  },
36
37
  })
37
38
  const value = ref('')
39
+ const configSize = useSize()
38
40
 
39
41
  const valueLabel = computed(() => {
40
42
  return (
@@ -44,10 +46,12 @@ const valueLabel = computed(() => {
44
46
  );
45
47
  })
46
48
 
49
+ const {t} = useLocale()
50
+
47
51
  function getCondition(): FilterCondition | undefined {
48
52
  if (!String(value.value)) return;
49
- let { field, label } = props
50
- return { field, label, value: value.value, valueLabel: valueLabel.value }
53
+ let {field, label} = props
54
+ return {field, label, value: value.value, valueLabel: valueLabel.value}
51
55
  }
52
56
 
53
57
  function init(v: any) {
@@ -56,7 +60,7 @@ function init(v: any) {
56
60
 
57
61
  const references = inject(referenceKey)
58
62
  const field = props.field
59
- const reference: ReferenceContext = { field, init, getCondition }
63
+ const reference: ReferenceContext = {field, init, getCondition}
60
64
  references?.value.push(reference)
61
65
 
62
66
  defineExpose({
@@ -3,7 +3,7 @@
3
3
  <div class="fu-filter-component__label">{{ label }}</div>
4
4
  <div class="fu-filter-component__content">
5
5
  <!-- :size="configSize" -->
6
- <el-date-picker class="fu-filter-date" v-model="value" v-bind="$attrs" :size="size"
6
+ <el-date-picker class="fu-filter-date" v-model="value" v-bind="$attrs" :size="configSize"
7
7
  :placeholder="t('fu.search_bar.select_date_time')" type="datetimerange" :value-format="valueFormat"
8
8
  :start-placeholder="t('fu.search_bar.start_date_time')" :end-placeholder="t('fu.search_bar.end_date_time')">
9
9
  </el-date-picker>
@@ -15,10 +15,9 @@
15
15
  import { ref, computed, inject } from "vue";
16
16
  import { FilterCondition, ReferenceContext, referenceKey } from "../types";
17
17
  import { datetimeFormat } from "@/tools/time";
18
- import { useLocale } from "@/hooks"
18
+ import {useLocale, useSize} from "@/hooks"
19
19
  import { validateSize } from "@/tools/size";
20
20
  defineOptions({ name: "FuFilterDateTime" });
21
- const { t } = useLocale()
22
21
 
23
22
  const props = defineProps({
24
23
  size: {
@@ -37,7 +36,7 @@ const props = defineProps({
37
36
  })
38
37
 
39
38
  const value = ref('')
40
-
39
+ const configSize = useSize()
41
40
  const valueLabel = computed(() => {
42
41
  return (
43
42
  datetimeFormat(value.value[0]) +
@@ -45,6 +44,7 @@ const valueLabel = computed(() => {
45
44
  datetimeFormat(value.value[1])
46
45
  );
47
46
  })
47
+ const { t } = useLocale()
48
48
 
49
49
  function getCondition(): FilterCondition | undefined {
50
50
  if (!String(value.value)) return;
@@ -6,7 +6,7 @@
6
6
  <el-popover popper-class="fu-filter-component-popover" :show-arrow="false" placement="bottom-start"
7
7
  trigger="click" width="240">
8
8
  <el-select v-model="selection" v-bind="$attrs" :multiple="multiple" @change="change" :teleported="false"
9
- :size="size" :placeholder="t('fu.search_bar.please_select')">
9
+ :size="configSize" :placeholder="t('fu.search_bar.please_select')">
10
10
  <el-option value="" v-if="useSelectAll && multiple">
11
11
  <div @click="selectAll">{{ t('fu.filter_bar.select_all') }}</div>
12
12
  </el-option>
@@ -30,10 +30,9 @@ import { ref, provide, computed, PropType, Ref, inject } from "vue";
30
30
  import FuFilterOption from "./FuFilterOption.vue";
31
31
  import { FilterCondition, OptionProps, ReferenceContext, referenceKey, selectKey } from "../types";
32
32
 
33
- import { useLocale } from "@/hooks"
33
+ import {useLocale, useSize} from "@/hooks"
34
34
  import { validateSize } from "@/tools/size";
35
35
  defineOptions({ name: "FuFilterSelect" });
36
- const { t } = useLocale()
37
36
 
38
37
  const props = defineProps({
39
38
  size: {
@@ -65,7 +64,7 @@ const props = defineProps({
65
64
  const emit = defineEmits(["change"])
66
65
 
67
66
  const selection: Ref<Array<string | number> | string | number> = ref(props.multiple ? [] : '')
68
-
67
+ const configSize = useSize()
69
68
  const showOptions = computed(() => {
70
69
  return props.options.filter((o, i) => {
71
70
  let show = props.showLimit < 0 ? true : i < props.showLimit
@@ -88,6 +87,8 @@ const valueLabel = computed(() => {
88
87
  return getValueLabel(selection.value);
89
88
  })
90
89
 
90
+ const { t } = useLocale()
91
+
91
92
  function change(v: string) {
92
93
  if (v.includes("")) {
93
94
  selection.value = props.options.map(o => o.value)
@@ -1,4 +1,4 @@
1
- import FuSearchInput from "./FuSearchInput.vue";
1
+ import FuFilterInput from "./FuFilterInput.vue";
2
2
  import FuFilterBar from "./FuFilterBar.vue";
3
3
  import FuFilter from "./FuFilter.vue";
4
4
  import FuFilterSelect from "./filter-components/FuFilterSelect.vue";
@@ -6,13 +6,13 @@ import FuFilterDate from "./filter-components/FuFilterDate.vue";
6
6
  import FuFilterDateTime from "./filter-components/FuFilterDateTime.vue";
7
7
  import type { App } from "vue";
8
8
 
9
- FuSearchInput.install = (app: App): void => {
9
+ FuFilterBar.install = (app: App): void => {
10
10
  app.component(FuFilterBar.name, FuFilterBar);
11
11
  app.component(FuFilter.name, FuFilter);
12
- app.component(FuSearchInput.name, FuSearchInput);
12
+ app.component(FuFilterInput.name, FuFilterInput);
13
13
  app.component(FuFilterSelect.name, FuFilterSelect);
14
14
  app.component(FuFilterDate.name, FuFilterDate);
15
15
  app.component(FuFilterDateTime.name, FuFilterDateTime);
16
16
  };
17
17
 
18
- export default FuSearchInput;
18
+ export default FuFilterBar;
@@ -0,0 +1,54 @@
1
+ <template>
2
+ <div class="fu-icon-button" :class="[{'is-disabled':disabled}, typeClass]" :tabindex="tabindex" @click="click">
3
+ <slot>
4
+ <el-icon :color="color" :size="size" :class="{'is-loading': loading}">
5
+ <component :is="name"/>
6
+ </el-icon>
7
+ </slot>
8
+ </div>
9
+ </template>
10
+
11
+
12
+ <script setup lang="ts">
13
+
14
+ import {computed} from "vue";
15
+ import {validateType} from "@/tools/theme";
16
+
17
+ defineOptions({name: "FuIconButton"});
18
+
19
+ const props = defineProps({
20
+ name: String,
21
+ size: {
22
+ type: [Number, String],
23
+ default: 20,
24
+ },
25
+ color: String,
26
+ loading: Boolean,
27
+ disabled: Boolean,
28
+ type: {
29
+ type: String,
30
+ validator: validateType
31
+ },
32
+ tabindex: {
33
+ type: [String, Number],
34
+ default: 0,
35
+ },
36
+ })
37
+
38
+ const typeClass = computed(() => {
39
+ return props.type ? `fu-icon-button--${props.type}` : ""
40
+ })
41
+
42
+ const emit = defineEmits(["click"])
43
+
44
+ function click(e: MouseEvent) {
45
+ if (!props.disabled) {
46
+ emit("click", e)
47
+ }
48
+ }
49
+
50
+ </script>
51
+
52
+ <style scoped>
53
+
54
+ </style>
@@ -0,0 +1,9 @@
1
+ import FuIconButton from "./FuIconButton.vue"
2
+
3
+ import type {App} from 'vue'
4
+
5
+ FuIconButton.install = (app: App): void => {
6
+ app.component(FuIconButton.name, FuIconButton)
7
+ }
8
+
9
+ export default FuIconButton;
@@ -7,9 +7,9 @@
7
7
  </template>
8
8
  <template #default="{ read }">
9
9
  <el-select v-model="data" v-bind="$attrs" @input="input" @blur="blur(read, $event)"
10
- @change="change(read, $event)">
10
+ @change="change(read, $event)">
11
11
  <slot>
12
- <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
12
+ <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"/>
13
13
  </slot>
14
14
  </el-select>
15
15
  </template>
@@ -17,15 +17,22 @@
17
17
  </template>
18
18
 
19
19
  <script setup lang="ts">
20
- import { ref, watch, PropType } from "vue";
21
- import { OptionProps } from "./types";
22
- defineOptions({ name: "FuSelectRwSwitch" });
20
+ import FuReadWriteSwitch from "./FuReadWriteSwitch.vue";
21
+ import {watch, ref, PropType} from "vue";
22
+ import {OptionProps} from "./types";
23
+
24
+ defineOptions({name: "FuSelectRwSwitch"});
25
+
23
26
  const props = defineProps({
24
27
  modelValue: [String, Number],
25
28
  options: {
26
29
  type: Array as PropType<OptionProps[]>,
27
30
  default: []
28
31
  },
32
+ blurTime: {
33
+ type: Number,
34
+ default: 150
35
+ },
29
36
  writeTrigger: {
30
37
  type: String,
31
38
  default: "onClick",
@@ -34,22 +41,28 @@ const props = defineProps({
34
41
  }
35
42
  }
36
43
  })
37
- const emit = defineEmits(["input", "blur", "change"])
44
+ const emit = defineEmits(["input", "blur", "change", "update:modelValue"])
38
45
  const data = ref(props.modelValue)
39
46
 
40
47
  watch(() => props.modelValue, (v) => {
41
48
  data.value = v
42
49
  })
50
+
43
51
  function input(e: Event) {
44
52
  emit("input", data.value, e)
45
53
  }
54
+
46
55
  function blur(read: Function, e: Event) {
47
- setTimeout(() => {
48
- read()
49
- }, 100)
50
- emit("blur", data.value, e)
56
+ if (props.blurTime > 0) {
57
+ setTimeout(() => {
58
+ read()
59
+ }, props.blurTime)
60
+ emit("blur", e)
61
+ }
51
62
  }
63
+
52
64
  function change(read: Function, e: Event) {
65
+ emit("update:modelValue", data.value, e)
53
66
  emit("change", data.value, e)
54
67
  read()
55
68
  }
@@ -0,0 +1,104 @@
1
+ <template>
2
+ <el-popover :visible="active" :show-arrow="false" @hide="hide" width="auto" popper-class="fu-complex-components">
3
+ <div class="fu-complex-components">
4
+ <div class="fu-complex-components__body">
5
+ <slot>
6
+ <component v-for="c in components" :is="c.component" v-bind="c" :size="configSize"/>
7
+ </slot>
8
+ </div>
9
+ <div class="fu-complex-components__footer">
10
+ <el-button @click="close" :size="configSize">{{ t('fu.search_bar.cancel') }}</el-button>
11
+ <el-button type="primary" @click="ok" :size="configSize">{{ t('fu.search_bar.ok') }}</el-button>
12
+ </div>
13
+ </div>
14
+ <template #reference>
15
+ <el-button circle icon="ArrowRightBold" @click="toggle" :size="configSize" v-show="showComplex"
16
+ :class="['fu-complex-components-trigger', {'is-active':active}]"/>
17
+ </template>
18
+ </el-popover>
19
+ </template>
20
+
21
+ <script setup lang="ts">
22
+ import {ref, inject, computed, PropType} from "vue";
23
+ import {useLocale, useSize} from "@/hooks"
24
+ import {validateSize} from "@/tools/size";
25
+ import {ComplexCondition, referenceKey} from "./types";
26
+
27
+ defineOptions({name: "FuComplexSearch"});
28
+
29
+ const props = defineProps({
30
+ size: {
31
+ type: String,
32
+ validator: validateSize
33
+ },
34
+ components: Array as PropType<any[]>,
35
+ })
36
+
37
+ const emit = defineEmits(["close", "change"])
38
+
39
+ const active = ref(false)
40
+ const references = inject(referenceKey)
41
+
42
+ const configSize = useSize()
43
+
44
+ const showComplex = computed(() => {
45
+ return references ? references.value.length > 0 : false
46
+ })
47
+
48
+ const {t} = useLocale()
49
+
50
+ function hide() {
51
+ emit("close")
52
+ }
53
+
54
+ function toggle() {
55
+ active.value = !active.value
56
+ if (active.value) {
57
+ references?.value.forEach(r => r.init())
58
+ }
59
+ }
60
+
61
+ function close() {
62
+ active.value = false
63
+ }
64
+
65
+ function ok() {
66
+ close()
67
+ exec()
68
+ }
69
+
70
+ function exec() {
71
+ let conditions: any = [];
72
+ references?.value.forEach(r => {
73
+ let condition = r.getCondition()
74
+ if (condition && condition.value !== undefined) {
75
+ conditions.push(condition)
76
+ }
77
+ })
78
+ emit("change", conditions)
79
+ }
80
+
81
+ function setConditions(conditionObj: any): ComplexCondition[] {
82
+ let result: ComplexCondition[] = []
83
+ if (conditionObj) {
84
+ Object.keys(conditionObj).forEach(key => {
85
+ let c = conditionObj[key]
86
+ references?.value.forEach(r => {
87
+ if (r.field === key) {
88
+ r.init(c.value)
89
+ const condition = r.getCondition()
90
+ if (condition) {
91
+ result.push(condition)
92
+ }
93
+ }
94
+ })
95
+ })
96
+ }
97
+ return result
98
+ }
99
+
100
+ defineExpose({
101
+ setConditions,
102
+ close
103
+ })
104
+ </script>
@@ -0,0 +1,64 @@
1
+ <template>
2
+ <div :class="['fu-quick-search', 'fu-quick-search--' + configSize]">
3
+ <el-icon v-if="useIcon">
4
+ <Search/>
5
+ </el-icon>
6
+ <label>
7
+ <input :placeholder="placeholder" v-model="value" @blur="blur" @focus="focus" @keydown="keydown"/>
8
+ </label>
9
+ </div>
10
+ </template>
11
+
12
+
13
+ <script setup lang="ts">
14
+ import {computed, ref, watch} from "vue";
15
+ import {validateSize} from "@/tools/size";
16
+ import {useSize} from "@/hooks";
17
+
18
+ defineOptions({name: "FuQuickSearch"});
19
+
20
+ const props = defineProps({
21
+ size: {
22
+ type: String,
23
+ validator: validateSize
24
+ },
25
+ modelValue: String,
26
+ placeholder: String,
27
+ useIcon: {
28
+ type: Boolean,
29
+ default: true
30
+ }
31
+ })
32
+
33
+ const focused = ref(false)
34
+
35
+ const emit = defineEmits(["update:modelValue", "change"])
36
+
37
+ const configSize = useSize()
38
+
39
+ const value = computed({
40
+ get: () => props.modelValue,
41
+ set: (val) => {
42
+ emit("update:modelValue", val as string)
43
+ }
44
+ })
45
+
46
+ function focus() {
47
+ focused.value = true
48
+ }
49
+
50
+ function blur(e: Event) {
51
+ if (focused.value) {
52
+ emit("change", value.value, e)
53
+ }
54
+ focused.value = false
55
+ }
56
+
57
+ function keydown(e: KeyboardEvent) {
58
+ const {code} = e
59
+ if (code === "Enter") {
60
+ focused.value = false
61
+ emit("change", value.value, e)
62
+ }
63
+ }
64
+ </script>