@netang/quasar 0.2.32 → 0.2.34

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 (289) hide show
  1. package/.editorconfig +12 -12
  2. package/_docs/docs/components/field-table.md +58 -58
  3. package/_docs/docs/components/field-tree.md +21 -21
  4. package/_docs/docs/components/table.md +24 -24
  5. package/_docs/docs/utils/table.md +196 -196
  6. package/components/column-title/index.vue +38 -38
  7. package/components/data/index.vue +20 -20
  8. package/components/dialog/img-viewer/index.vue +697 -697
  9. package/components/dialog/index.vue +387 -387
  10. package/components/dragger/index.vue +203 -203
  11. package/components/drawer/index.vue +303 -303
  12. package/components/editor-code/index.vue +328 -328
  13. package/components/empty/index.vue +82 -82
  14. package/components/field-date/index.vue +860 -860
  15. package/components/field-date/methods.js +100 -100
  16. package/components/field-table/index.vue +1483 -1483
  17. package/components/field-text/index.vue +166 -166
  18. package/components/field-tree/index.vue +755 -755
  19. package/components/img/index.vue +279 -279
  20. package/components/input-number/index.vue +560 -560
  21. package/components/list-menu/index.vue +149 -149
  22. package/components/list-menu-item/index.vue +79 -79
  23. package/components/mixed-table/index.vue +532 -532
  24. package/components/mixed-table-splitter/index.vue +377 -377
  25. package/components/power-page/index.vue +96 -96
  26. package/components/price/index.vue +188 -188
  27. package/components/private/components/index.js +11 -11
  28. package/components/private/components/move-to-tree/index.vue +154 -154
  29. package/components/private/edit-power-data/index.vue +846 -846
  30. package/components/private/table-visible-columns-button/index.vue +114 -114
  31. package/components/render/index.vue +123 -123
  32. package/components/search/index.vue +231 -231
  33. package/components/search-item/index.vue +210 -210
  34. package/components/select/index.vue +177 -177
  35. package/components/splitter/index.vue +422 -422
  36. package/components/table/index.vue +513 -513
  37. package/components/table-column-fixed/index.vue +110 -110
  38. package/components/table-pagination/index.vue +192 -192
  39. package/components/table-summary/index.vue +107 -107
  40. package/components/thumbnail/index.vue +72 -72
  41. package/components/toolbar/index.vue +150 -150
  42. package/components/tree/index.vue +1728 -1728
  43. package/components/tree/virtual-scroll.vue +41 -41
  44. package/components/uploader/index.vue +196 -196
  45. package/components/uploader-query/index.vue +945 -945
  46. package/components/value-format/index.vue +274 -274
  47. package/components/virtual-scroll/index.vue +136 -136
  48. package/configs/area3.js +1 -1
  49. package/docs/404.html +33 -33
  50. package/docs/assets/404.html-60b35caa.js +1 -1
  51. package/docs/assets/404.html-d1e63d77.js +1 -1
  52. package/docs/assets/alert.html-b2a2a72f.js +5 -5
  53. package/docs/assets/alert.html-ba46d137.js +1 -1
  54. package/docs/assets/app-9f30aa4b.js +6 -6
  55. package/docs/assets/area.html-01b9b58d.js +42 -42
  56. package/docs/assets/area.html-9a4fce6a.js +1 -1
  57. package/docs/assets/arr.html-145d27e7.js +1 -1
  58. package/docs/assets/arr.html-674e65ab.js +11 -11
  59. package/docs/assets/auth.html-579fa830.js +1 -1
  60. package/docs/assets/auth.html-8544ed95.js +8 -8
  61. package/docs/assets/bus.html-c71254aa.js +1 -1
  62. package/docs/assets/bus.html-dc7d3d19.js +6 -6
  63. package/docs/assets/column-title.html-c735cb5a.js +3 -3
  64. package/docs/assets/column-title.html-e9316762.js +1 -1
  65. package/docs/assets/confirm.html-ddfdc27f.js +10 -10
  66. package/docs/assets/confirm.html-ef3e2bef.js +1 -1
  67. package/docs/assets/copy.html-d20345b6.js +1 -1
  68. package/docs/assets/copy.html-ef8c8571.js +13 -13
  69. package/docs/assets/data.html-6432175d.js +30 -30
  70. package/docs/assets/data.html-a3b05d5b.js +1 -1
  71. package/docs/assets/dialog.html-1f698e5a.js +1 -1
  72. package/docs/assets/dialog.html-62902b83.js +68 -68
  73. package/docs/assets/dialog.html-baea77c9.js +1 -1
  74. package/docs/assets/dialog.html-bb082fc4.js +1 -1
  75. package/docs/assets/dict.html-1311da3d.js +23 -23
  76. package/docs/assets/dict.html-b96fbf0c.js +1 -1
  77. package/docs/assets/dictOptions.html-7c4f40a5.js +1 -1
  78. package/docs/assets/dictOptions.html-fb99d175.js +5 -5
  79. package/docs/assets/dragger.html-668d3efa.js +1 -1
  80. package/docs/assets/dragger.html-749d585a.js +1 -1
  81. package/docs/assets/editor-code.html-6ab26ea9.js +1 -1
  82. package/docs/assets/editor-code.html-d196205d.js +1 -1
  83. package/docs/assets/empty.html-1c139131.js +1 -1
  84. package/docs/assets/empty.html-1e9c441d.js +1 -1
  85. package/docs/assets/field-date.html-069fdb13.js +1 -1
  86. package/docs/assets/field-date.html-ad204aa9.js +1 -1
  87. package/docs/assets/field-table.html-ce480f03.js +1 -1
  88. package/docs/assets/field-table.html-d9236160.js +1 -1
  89. package/docs/assets/field-text.html-7277c62f.js +1 -1
  90. package/docs/assets/field-text.html-ccb4cecf.js +1 -1
  91. package/docs/assets/field-tree.html-519bfb45.js +1 -1
  92. package/docs/assets/field-tree.html-fdc748d6.js +1 -1
  93. package/docs/assets/form.html-2b562c37.js +2 -2
  94. package/docs/assets/form.html-75104cd5.js +1 -1
  95. package/docs/assets/framework-204010b2.js +5 -5
  96. package/docs/assets/getData.html-990e3787.js +1 -1
  97. package/docs/assets/getData.html-bb72025f.js +34 -34
  98. package/docs/assets/getFile.html-42368004.js +1 -1
  99. package/docs/assets/getFile.html-99abd054.js +3 -3
  100. package/docs/assets/getImage.html-3429c5a1.js +1 -1
  101. package/docs/assets/getImage.html-4d886d83.js +3 -3
  102. package/docs/assets/getTime.html-7435f922.js +1 -1
  103. package/docs/assets/getTime.html-b37f49eb.js +20 -20
  104. package/docs/assets/img.html-7d1da657.js +1 -1
  105. package/docs/assets/img.html-fbea1105.js +1 -1
  106. package/docs/assets/index.html-1695dd7c.js +1 -1
  107. package/docs/assets/index.html-65a4aa67.js +1 -1
  108. package/docs/assets/index.html-7b98d5bd.js +1 -1
  109. package/docs/assets/index.html-c01f2648.js +1 -1
  110. package/docs/assets/input-number.html-0b250d2a.js +1 -1
  111. package/docs/assets/input-number.html-a8eb0378.js +1 -1
  112. package/docs/assets/list-menu-item.html-7f1b4611.js +1 -1
  113. package/docs/assets/list-menu-item.html-84ed5ab8.js +1 -1
  114. package/docs/assets/list-menu.html-28b4163f.js +1 -1
  115. package/docs/assets/list-menu.html-cb6ba95b.js +1 -1
  116. package/docs/assets/loading.html-dae9e39d.js +6 -6
  117. package/docs/assets/loading.html-dc74c9e6.js +1 -1
  118. package/docs/assets/notify.html-e6c4c514.js +1 -1
  119. package/docs/assets/notify.html-f2c4d914.js +8 -8
  120. package/docs/assets/power-page.html-32e02f82.js +1 -1
  121. package/docs/assets/power-page.html-485e77da.js +1 -1
  122. package/docs/assets/power.html-d258cc19.js +93 -93
  123. package/docs/assets/power.html-e490bd32.js +1 -1
  124. package/docs/assets/previewImage.html-6a6b4245.js +1 -1
  125. package/docs/assets/previewImage.html-c5b7e945.js +2 -2
  126. package/docs/assets/price.html-1882c548.js +19 -19
  127. package/docs/assets/price.html-94d3f5be.js +1 -1
  128. package/docs/assets/price.html-d213df0f.js +1 -1
  129. package/docs/assets/price.html-deaf880f.js +1 -1
  130. package/docs/assets/render.html-8efcbdd4.js +1 -1
  131. package/docs/assets/render.html-df228e38.js +1 -1
  132. package/docs/assets/rule.html-2cd57fc2.js +13 -13
  133. package/docs/assets/rule.html-61662001.js +1 -1
  134. package/docs/assets/ruleValid.html-04fe2552.js +1 -1
  135. package/docs/assets/ruleValid.html-e0a776af.js +14 -14
  136. package/docs/assets/search-0782d0d1.svg +1 -1
  137. package/docs/assets/search-item.html-3f75394c.js +1 -1
  138. package/docs/assets/search-item.html-4e942ecd.js +1 -1
  139. package/docs/assets/search.html-2807043e.js +1 -1
  140. package/docs/assets/search.html-c24f8806.js +1 -1
  141. package/docs/assets/select.html-00d0607c.js +1 -1
  142. package/docs/assets/select.html-de7731f5.js +1 -1
  143. package/docs/assets/splitter.html-56f51a70.js +1 -1
  144. package/docs/assets/splitter.html-f5c836d7.js +1 -1
  145. package/docs/assets/style-161e43ab.css +1 -1
  146. package/docs/assets/symbols.html-a6aea4bf.js +1 -1
  147. package/docs/assets/symbols.html-b1f65bad.js +21 -21
  148. package/docs/assets/table-column-fixed.html-3a69e7b2.js +1 -1
  149. package/docs/assets/table-column-fixed.html-e763c38b.js +1 -1
  150. package/docs/assets/table-pagination.html-236934d3.js +1 -1
  151. package/docs/assets/table-pagination.html-c37ee2ac.js +1 -1
  152. package/docs/assets/table-splitter.html-07eab15c.js +1 -1
  153. package/docs/assets/table-splitter.html-7670ee65.js +1 -1
  154. package/docs/assets/table-summary.html-04db434f.js +1 -1
  155. package/docs/assets/table-summary.html-943c65a0.js +1 -1
  156. package/docs/assets/table.html-36253ad7.js +1 -1
  157. package/docs/assets/table.html-7f9c5d1b.js +38 -38
  158. package/docs/assets/table.html-93d53dc8.js +1 -1
  159. package/docs/assets/table.html-ac99b9cb.js +1 -1
  160. package/docs/assets/thumbnail.html-bab1976b.js +1 -1
  161. package/docs/assets/thumbnail.html-eb64e5e8.js +1 -1
  162. package/docs/assets/timestamp.html-4e54f79b.js +13 -13
  163. package/docs/assets/timestamp.html-d0e1b88a.js +1 -1
  164. package/docs/assets/toast.html-58ecbe21.js +1 -1
  165. package/docs/assets/toast.html-c9b9d36b.js +6 -6
  166. package/docs/assets/toolbar.html-83d9f97c.js +1 -1
  167. package/docs/assets/toolbar.html-ff7b8c92.js +1 -1
  168. package/docs/assets/tree.html-d07cbe79.js +23 -23
  169. package/docs/assets/tree.html-ea04193e.js +1 -1
  170. package/docs/assets/uploader-query.html-05590718.js +1 -1
  171. package/docs/assets/uploader-query.html-3175bac5.js +1 -1
  172. package/docs/assets/uploader.html-36da4394.js +2 -2
  173. package/docs/assets/uploader.html-6b5f3079.js +1 -1
  174. package/docs/assets/uploader.html-b9340b57.js +1 -1
  175. package/docs/assets/uploader.html-bc1c22e3.js +1 -1
  176. package/docs/assets/value-format.html-8ae3d47d.js +1 -1
  177. package/docs/assets/value-format.html-afa99b3d.js +1 -1
  178. package/docs/components/column-title.html +35 -35
  179. package/docs/components/data.html +62 -62
  180. package/docs/components/dialog.html +33 -33
  181. package/docs/components/dragger.html +33 -33
  182. package/docs/components/editor-code.html +33 -33
  183. package/docs/components/empty.html +33 -33
  184. package/docs/components/field-date.html +33 -33
  185. package/docs/components/field-table.html +33 -33
  186. package/docs/components/field-text.html +33 -33
  187. package/docs/components/field-tree.html +33 -33
  188. package/docs/components/img.html +33 -33
  189. package/docs/components/input-number.html +33 -33
  190. package/docs/components/list-menu-item.html +33 -33
  191. package/docs/components/list-menu.html +33 -33
  192. package/docs/components/power-page.html +33 -33
  193. package/docs/components/price.html +33 -33
  194. package/docs/components/render.html +33 -33
  195. package/docs/components/search-item.html +33 -33
  196. package/docs/components/search.html +33 -33
  197. package/docs/components/select.html +33 -33
  198. package/docs/components/splitter.html +33 -33
  199. package/docs/components/table-column-fixed.html +33 -33
  200. package/docs/components/table-pagination.html +33 -33
  201. package/docs/components/table-splitter.html +33 -33
  202. package/docs/components/table-summary.html +33 -33
  203. package/docs/components/table.html +33 -33
  204. package/docs/components/thumbnail.html +33 -33
  205. package/docs/components/toolbar.html +33 -33
  206. package/docs/components/uploader-query.html +33 -33
  207. package/docs/components/uploader.html +33 -33
  208. package/docs/components/value-format.html +33 -33
  209. package/docs/css/index.css +3 -3
  210. package/docs/index.html +33 -33
  211. package/docs/utils/alert.html +37 -37
  212. package/docs/utils/area.html +74 -74
  213. package/docs/utils/arr.html +43 -43
  214. package/docs/utils/auth.html +40 -40
  215. package/docs/utils/bus.html +38 -38
  216. package/docs/utils/confirm.html +42 -42
  217. package/docs/utils/copy.html +45 -45
  218. package/docs/utils/dialog.html +100 -100
  219. package/docs/utils/dict.html +55 -55
  220. package/docs/utils/dictOptions.html +37 -37
  221. package/docs/utils/form.html +34 -34
  222. package/docs/utils/getData.html +66 -66
  223. package/docs/utils/getFile.html +35 -35
  224. package/docs/utils/getImage.html +35 -35
  225. package/docs/utils/getTime.html +52 -52
  226. package/docs/utils/index.html +33 -33
  227. package/docs/utils/loading.html +38 -38
  228. package/docs/utils/notify.html +40 -40
  229. package/docs/utils/power.html +125 -125
  230. package/docs/utils/previewImage.html +34 -34
  231. package/docs/utils/price.html +51 -51
  232. package/docs/utils/rule.html +45 -45
  233. package/docs/utils/ruleValid.html +46 -46
  234. package/docs/utils/symbols.html +53 -53
  235. package/docs/utils/table.html +70 -70
  236. package/docs/utils/timestamp.html +45 -45
  237. package/docs/utils/toast.html +38 -38
  238. package/docs/utils/tree.html +55 -55
  239. package/docs/utils/uploader.html +34 -34
  240. package/package.json +25 -25
  241. package/sass/common.scss +184 -184
  242. package/sass/index.scss +12 -12
  243. package/sass/line.scss +39 -39
  244. package/sass/quasar/btn.scss +46 -46
  245. package/sass/quasar/common.scss +3 -3
  246. package/sass/quasar/drawer.scss +6 -6
  247. package/sass/quasar/field.scss +259 -259
  248. package/sass/quasar/loading.scss +6 -6
  249. package/sass/quasar/table.scss +168 -168
  250. package/sass/quasar/toolbar.scss +22 -22
  251. package/sass/variables.scss +140 -140
  252. package/store/index.js +29 -29
  253. package/utils/$auth.js +128 -128
  254. package/utils/$form.js +72 -72
  255. package/utils/$power.js +1494 -1494
  256. package/utils/$render.js +75 -75
  257. package/utils/$rule.js +13 -13
  258. package/utils/$ruleValid.js +10 -10
  259. package/utils/$search.js +416 -416
  260. package/utils/$table.js +1349 -1348
  261. package/utils/$tree.js +682 -682
  262. package/utils/alert.js +12 -12
  263. package/utils/area.js +400 -400
  264. package/utils/arr.js +51 -51
  265. package/utils/bus.js +6 -6
  266. package/utils/config.js +66 -66
  267. package/utils/confirm.js +11 -11
  268. package/utils/copy.js +30 -30
  269. package/utils/dialog.js +36 -36
  270. package/utils/dict.js +21 -21
  271. package/utils/dictOptions.js +28 -28
  272. package/utils/getData.js +88 -88
  273. package/utils/getFile.js +67 -67
  274. package/utils/getImage.js +276 -276
  275. package/utils/getTime.js +113 -113
  276. package/utils/index.js +67 -67
  277. package/utils/loading.js +15 -15
  278. package/utils/notify.js +13 -13
  279. package/utils/play.js +40 -40
  280. package/utils/previewImage.js +14 -14
  281. package/utils/price.js +18 -18
  282. package/utils/symbols.js +18 -18
  283. package/utils/timestamp.js +18 -18
  284. package/utils/toast.js +13 -13
  285. package/utils/uploader.js +2114 -2114
  286. package/utils/useAuth.js +30 -30
  287. package/utils/useFileUrl.js +26 -26
  288. package/utils/useRouter.js +47 -47
  289. package/utils/useSearch.js +584 -562
@@ -1,562 +1,584 @@
1
- import $n_has from 'lodash/has'
2
- import $n_isArray from 'lodash/isArray'
3
- import $n_cloneDeep from 'lodash/cloneDeep'
4
- import $n_merge from 'lodash/merge'
5
- import $n_isFunction from 'lodash/isFunction'
6
- import $n_findIndex from 'lodash/findIndex'
7
-
8
- import $n_forEach from '@netang/utils/forEach'
9
- import $n_isValidArray from '@netang/utils/isValidArray'
10
- import $n_join from '@netang/utils/join'
11
- import $n_split from '@netang/utils/split'
12
- import $n_indexOf from '@netang/utils/indexOf'
13
-
14
- import $n_isRequired from '@netang/utils/isRequired'
15
- import $n_forIn from '@netang/utils/forIn'
16
- import $n_runAsync from '@netang/utils/runAsync'
17
- import $n_isValidObject from '@netang/utils/isValidObject'
18
- import $n_isValidValue from '@netang/utils/isValidValue'
19
- import $n_trimString from '@netang/utils/trimString'
20
- import $n_numberDeep from '@netang/utils/numberDeep'
21
- import $n_toDate from '@netang/utils/toDate'
22
- import $n_replaceAll from '@netang/utils/replaceAll'
23
-
24
- import { date as quasarDate } from 'quasar'
25
- import { getQuickRange, quickRange } from '../components/field-date/methods'
26
-
27
- import $n_dictOptions from './dictOptions'
28
- import { configs } from './config'
29
-
30
- const {
31
- // 字典常量
32
- dicts,
33
- } = configs
34
-
35
- /**
36
- * 比较类型默认值
37
- */
38
- const COMPARE_TYPE_MAPS = {
39
- // 数字
40
- number: dicts.SEARCH_COMPARE_TYPE__EQUAL,
41
- // 文字
42
- text: dicts.SEARCH_COMPARE_TYPE__LIKE,
43
- // 价格
44
- price: dicts.SEARCH_COMPARE_TYPE__EQUAL,
45
- // 日期
46
- date: dicts.SEARCH_COMPARE_TYPE__EQUAL,
47
- }
48
-
49
- /**
50
- * 设置单个比较条件
51
- */
52
- function setItemCompare(item) {
53
-
54
- // 初始比较条件数组
55
- let opts1 = item.type === 'text'
56
- // 如果类型为 文字
57
- ? [
58
- { label: '相同', value: dicts.SEARCH_COMPARE_TYPE__EQUAL },
59
- { label: '不同', value: dicts.SEARCH_COMPARE_TYPE__NOT_EQUAL },
60
- { label: '包含', value: dicts.SEARCH_COMPARE_TYPE__LIKE },
61
- { label: '不含', value: dicts.SEARCH_COMPARE_TYPE__NOT_LIKE },
62
- ]
63
- // 否则为数字
64
- : [
65
- { label: '=', value: dicts.SEARCH_COMPARE_TYPE__EQUAL },
66
- { label: '!=', value: dicts.SEARCH_COMPARE_TYPE__NOT_EQUAL },
67
- { label: '>', value: dicts.SEARCH_COMPARE_TYPE__GT },
68
- { label: '', value: dicts.SEARCH_COMPARE_TYPE__GTE },
69
- ]
70
-
71
- // 如果类型为日期
72
- if (item.type === 'date') {
73
- // 添加日期快捷选项
74
- $n_forEach(quickRange, function(label, key) {
75
- opts1.push({ label, value: key + 20 })
76
- })
77
-
78
- // 否则为其他
79
- } else {
80
- opts1.push(
81
- { label: 'IN', value: dicts.SEARCH_COMPARE_TYPE__IN },
82
- { label: 'NOT IN', value: dicts.SEARCH_COMPARE_TYPE__NOT_IN },
83
- )
84
- }
85
-
86
- // 如果有比较类型
87
- if (
88
- $n_has(item, 'compare')
89
- && $n_isValidArray(item.compare)
90
- ) {
91
- const {
92
- compare,
93
- compareIgnore
94
- } = item
95
-
96
- // 如果有筛选比较条件
97
- // 筛选比较条件
98
- opts1 = opts1.filter(
99
- compareIgnore === true
100
- // 如果为忽略比较条件
101
- ? e => compare.indexOf(e.value) === -1
102
- // 否则为限制比较条件
103
- : e => compare.indexOf(e.value) > -1
104
- )
105
- }
106
-
107
- // 如果没有比较选项, 则设置相同为默认
108
- if (! opts1.length) {
109
- opts1.push({ label: type === 'text' ? '相同' : '=', value: dicts.SEARCH_COMPARE_TYPE__EQUAL })
110
- }
111
-
112
- // 值1 比较类型条件
113
- item.compareOptions1 = opts1
114
- // 值2 比较类型条件
115
- item.compareOptions2 = []
116
-
117
- if (
118
- // 如果比较类型有 >
119
- $n_findIndex(opts1, { value: dicts.SEARCH_COMPARE_TYPE__GT }) > -1
120
- // 如果比较类型有 >=
121
- || $n_findIndex(opts1, { value: dicts.SEARCH_COMPARE_TYPE__GTE }) > -1
122
- ) {
123
- item.compareOptions2.push(
124
- { label: '<', value: dicts.SEARCH_COMPARE_TYPE__LT },
125
- { label: '≤', value: dicts.SEARCH_COMPARE_TYPE__LTE },
126
- )
127
- }
128
- }
129
-
130
- /**
131
- * 设置单个搜索值
132
- */
133
- export function setItemValue(value, val) {
134
-
135
- // 如果值为数组
136
- if (Array.isArray(val)) {
137
- // 比较类型为 in
138
- value[0].compare = dicts.SEARCH_COMPARE_TYPE__IN
139
- // 设置值为将数组转为逗号分隔的字符串
140
- value[0].value = $n_join(val, ',')
141
-
142
- // 如果值是逗号隔开
143
- } else if ($n_split(val, ',').length > 1) {
144
- // 比较类型为 in
145
- value[0].compare = dicts.SEARCH_COMPARE_TYPE__IN
146
- // 设置值为将数组转为逗号分隔的字符串
147
- value[0].value = val
148
-
149
- // 否则为单个值
150
- } else {
151
- // 比较类型为 ==
152
- value[0].compare = dicts.SEARCH_COMPARE_TYPE__EQUAL
153
- // 设置值为当前值
154
- value[0].value = val
155
- }
156
- }
157
-
158
- /**
159
- * 格式化单个比较条件
160
- */
161
- function formatItemValueCompare(value, { compareOptions1 }) {
162
-
163
- // 获取第一个值
164
- const value1 = value[0]
165
-
166
- // 如果值1 的比较条件不在值1 的限制范围内
167
- if ($n_findIndex(compareOptions1, { value: value1.compare }) === -1) {
168
- // 则取比较条件中的第一个
169
- value1.compare = compareOptions1[0].value
170
- }
171
-
172
- // 如果比较类型不为 in / not in
173
- if ($n_indexOf([ dicts.SEARCH_COMPARE_TYPE__IN, dicts.SEARCH_COMPARE_TYPE__NOT_IN ], value1.compare) === -1) {
174
- // 如果值中含有逗号
175
- const arr = $n_split(value1.value, ',')
176
- if (arr.length > 1) {
177
- value1.value = arr[0]
178
- }
179
- }
180
-
181
- // 如果值1 比较类型为 >
182
- if (value1.compare === dicts.SEARCH_COMPARE_TYPE__GT) {
183
- // 则修改值2 类型为 <
184
- value[1].compare = dicts.SEARCH_COMPARE_TYPE__LT
185
-
186
- // 如果值1 比较类型为 >=
187
- } else if (value1.compare === dicts.SEARCH_COMPARE_TYPE__GTE) {
188
- // 则修改值2 类型为 <=
189
- value[1].compare = dicts.SEARCH_COMPARE_TYPE__LTE
190
- }
191
- }
192
-
193
- /**
194
- * 从表格列获取原始值
195
- */
196
- export function getRawData(tableColumns, query, searchFromQuery = true) {
197
-
198
- // 原始参数
199
- const rawQuery = {}
200
- // 原始表格搜索参数
201
- const rawSearchOptions = []
202
- // 原始表格搜索值(空表格搜索值, 用于搜索重置)
203
- const rawTableSearchValue = []
204
- // 首次表格搜索值(如果表格搜索参数中带了初始值, 则设置初始值)
205
- const firstTableSearchValue = []
206
-
207
- // 搜索参数键值数组
208
- const searchQueryKey = []
209
-
210
- $n_forEach(tableColumns, function (item) {
211
- if ($n_has(item, 'search.type')) {
212
-
213
- // 【设置原始表格搜索参数】
214
- // --------------------------------------------------
215
-
216
- // 搜索参数
217
- const newItem = $n_merge({
218
- // 标签
219
- label: item.label,
220
- }, item.search)
221
-
222
- // 标识
223
- newItem.name = $n_has(newItem, 'name') ? newItem.name : item.name
224
-
225
- // 如果有字典标识
226
- if ($n_has(item, 'dict')) {
227
- newItem.dict = item.dict
228
- }
229
-
230
- // 设置单个比较条件
231
- setItemCompare(newItem)
232
-
233
- // 原始表格搜索参数
234
- rawSearchOptions.push(newItem)
235
-
236
- // 【原始表格搜索值】
237
- // --------------------------------------------------
238
-
239
- let value = [
240
- // 值1
241
- {
242
- // 比较类型
243
- compare: COMPARE_TYPE_MAPS[newItem.type],
244
- //
245
- value: '',
246
- },
247
- // 值2
248
- {
249
- // 比较类型
250
- compare: dicts.SEARCH_COMPARE_TYPE__LT,
251
- //
252
- value: '',
253
- },
254
- ]
255
-
256
- // 如果是日期
257
- if (newItem.type === 'date') {
258
- // 设置日期类型
259
- value[0].dateType = 'day'
260
- }
261
-
262
- // 添加原始表格搜索值
263
- rawTableSearchValue.push($n_cloneDeep(value))
264
-
265
- if (
266
- // 如果开启从参数中获取搜索值
267
- searchFromQuery
268
- // 如果在传参中有搜索参数
269
- && $n_has(query, newItem.name)
270
- ) {
271
- // 如果有值
272
- if ($n_isRequired(query[newItem.name])) {
273
- // 设置单个搜索值
274
- setItemValue(value, query[newItem.name])
275
- }
276
-
277
- // 设置参数中搜索的 key
278
- searchQueryKey.push(newItem.name)
279
-
280
- // 否则, 如果表格参数中有设置初始值
281
- } else if (
282
- $n_has(newItem, 'value')
283
- && $n_isValidArray(newItem.value)
284
- ) {
285
- value = $n_merge([], value, newItem.value)
286
- }
287
-
288
- // 格式化单个值的比较条件
289
- formatItemValueCompare(value, newItem)
290
-
291
- // 首次初始表格搜索值
292
- firstTableSearchValue.push(value)
293
- }
294
- })
295
-
296
- if (searchQueryKey.length) {
297
- $n_forIn(query, function(val, key) {
298
- if (searchQueryKey.indexOf(key) === -1) {
299
- rawQuery[key] = val
300
- }
301
- })
302
- } else {
303
- Object.assign(rawQuery, query)
304
- }
305
-
306
- return {
307
- // 原始参数
308
- rawQuery,
309
- // 原始表格搜索参数
310
- rawSearchOptions,
311
- // 原始表格搜索值(空表格搜索值, 用于搜索重置)
312
- rawTableSearchValue,
313
- // 首次表格搜索值(如果表格搜索参数中带了初始值, 则设置初始值)
314
- firstTableSearchValue,
315
- }
316
- }
317
-
318
- /**
319
- * 获取参数
320
- */
321
- export async function getOptions(rawSearchOptions, format) {
322
-
323
- const lists = []
324
-
325
- if ($n_isValidArray(rawSearchOptions)) {
326
- for (const item of rawSearchOptions) {
327
-
328
- const newItem = Object.assign({}, item)
329
-
330
- // 格式化单个参数
331
- if ($n_isFunction(format)) {
332
- const res = await $n_runAsync(format)(newItem)
333
- if ($n_isValidObject(res)) {
334
- $n_merge(newItem, res)
335
- }
336
- }
337
-
338
- // 如果有字典标识, 则一定是下拉菜单
339
- if ($n_has(newItem, 'dict')) {
340
- $n_merge(newItem, {
341
- searchType: 'select',
342
- select: {
343
- options: $n_dictOptions(newItem.dict)
344
- },
345
- })
346
-
347
- // 如果有下拉菜单选项
348
- } else if ($n_has(newItem, 'select')) {
349
- newItem.searchType = 'select'
350
- newItem.select = Object.assign({
351
- options: [],
352
- }, newItem.select)
353
-
354
- // 如果下拉选项是方法
355
- if ($n_isFunction(newItem.select.options)) {
356
- // 读取下拉选项
357
- newItem.select.options = await $n_runAsync(newItem.select.options)()
358
- }
359
-
360
- // 如果有树选项(调用的是 <n-field-tree> 组件)
361
- } else if ($n_has(newItem, 'tree')) {
362
- newItem.searchType = 'tree'
363
- newItem.tree = Object.assign({
364
- nodes: [],
365
- accordion: true,
366
- clearable: true,
367
- }, newItem.tree)
368
-
369
- // 如果有表格选项(调用的是 <n-field-table.md> 组件)
370
- } else if ($n_has(newItem, 'table')) {
371
- newItem.searchType = 'table'
372
- newItem.table = Object.assign({
373
- // 值字段(必填)
374
- valueKey: newItem.name,
375
- // 是否可清除
376
- clearable: true,
377
- // 是否开启筛选
378
- filter: true,
379
- }, newItem.table)
380
-
381
- // 否则为输入框
382
- } else {
383
- newItem.searchType = 'input'
384
- newItem.input = Object.assign({}, newItem.input)
385
- }
386
-
387
- lists.push(newItem)
388
- }
389
- }
390
-
391
- return lists
392
- }
393
-
394
- /**
395
- * 格式化值
396
- */
397
- export function formatValue(rawSearchOptions, searchValue) {
398
-
399
- const lists = []
400
-
401
- $n_forEach(rawSearchOptions, function ({ name, type }, itemIndex) {
402
-
403
- // 添加值1
404
- function addValue1(value1) {
405
-
406
- // 如果有值1
407
- if ($n_isRequired(value1.value)) {
408
-
409
- // 如果值1 类型为 in / not in
410
- if ($n_indexOf([dicts.SEARCH_COMPARE_TYPE__IN, dicts.SEARCH_COMPARE_TYPE__NOT_IN], value1.compare) > -1) {
411
-
412
- const vals = []
413
-
414
- const values = $n_isArray(value1.value) ? value1.value : $n_split($n_replaceAll($n_trimString(value1.value), ',', ','), ',')
415
- $n_forEach(values, function (item) {
416
- item = $n_numberDeep(item)
417
- if ($n_isValidValue(item)) {
418
- vals.push(item)
419
- }
420
- })
421
-
422
- if (vals.length) {
423
- lists.push({
424
- field: name,
425
- compare: value1.compare,
426
- value: vals,
427
- })
428
- }
429
- return
430
- }
431
-
432
- // 否则添加值1
433
- lists.push({
434
- field: name,
435
- compare: value1.compare,
436
- value: $n_numberDeep(value1.value),
437
- })
438
- }
439
- }
440
-
441
- // 第一个值
442
- const value1 = searchValue[itemIndex][0]
443
-
444
- // 如果是文字
445
- if (type === 'text') {
446
- // 添加值1
447
- addValue1(value1)
448
-
449
- // 否则为数字
450
- } else {
451
-
452
- // 如果是日期
453
- if (type === 'date') {
454
-
455
- // 如果 为 == || !=
456
- const isEqual = value1.compare === dicts.SEARCH_COMPARE_TYPE__EQUAL
457
- if (isEqual || value1.compare === dicts.SEARCH_COMPARE_TYPE__NOT_EQUAL) {
458
- const { value, dateType } = value1
459
- if ($n_isRequired(value)) {
460
-
461
- // 当前时间
462
- const now = $n_toDate(value)
463
-
464
- let end
465
- switch (dateType) {
466
- //
467
- case 'year':
468
- //
469
- case 'month':
470
- // 日
471
- case 'day':
472
- end = quasarDate.endOfDate(now, dateType)
473
- break
474
- //
475
- case 'datetime':
476
- end = $n_toDate(quasarDate.formatDate(now, 'YYYY/MM/DD HH:mm:59'))
477
- break
478
- }
479
-
480
- let compare1
481
- let compare2
482
-
483
- // 如果为 ==
484
- if (isEqual) {
485
- // ≥
486
- compare1 = dicts.SEARCH_COMPARE_TYPE__GTE
487
- //
488
- compare2 = dicts.SEARCH_COMPARE_TYPE__LTE
489
-
490
- // 否则为 !=
491
- } else {
492
- // <
493
- compare1 = dicts.SEARCH_COMPARE_TYPE__LT
494
- // >
495
- compare2 = dicts.SEARCH_COMPARE_TYPE__GT
496
- }
497
-
498
- lists.push(
499
- // 日期起
500
- {
501
- field: name,
502
- //
503
- compare: compare1,
504
- value,
505
- },
506
- // 日期止
507
- {
508
- field: name,
509
- // ≤
510
- compare: compare2,
511
- value: $n_numberDeep(quasarDate.formatDate(end, 'X')),
512
- }
513
- )
514
- }
515
- return
516
-
517
- // 如果类型为快捷日期
518
- } else if (value1.compare >= 20) {
519
-
520
- const res = getQuickRange(value1.compare - 20, true)
521
- if (res) {
522
-
523
- lists.push(
524
- // 日期起
525
- {
526
- field: name,
527
- // ≥
528
- compare: dicts.SEARCH_COMPARE_TYPE__GTE,
529
- value: $n_numberDeep(quasarDate.formatDate($n_toDate(`${res.date.from} ${res.time.from}`), 'X')),
530
- },
531
- // 日期止
532
- {
533
- field: name,
534
- // ≤
535
- compare: dicts.SEARCH_COMPARE_TYPE__LTE,
536
- value: $n_numberDeep(quasarDate.formatDate($n_toDate(`${res.date.to} ${res.time.to}`), 'X')),
537
- }
538
- )
539
- }
540
- return
541
- }
542
- }
543
-
544
- // 添加值1
545
- addValue1(value1)
546
-
547
- // 只有值1 类型为 > / ≥ 值2才有效
548
- if ($n_indexOf([dicts.SEARCH_COMPARE_TYPE__GT, dicts.SEARCH_COMPARE_TYPE__GTE], value1.compare) > -1) {
549
- const value2 = searchValue[itemIndex][1]
550
- if ($n_isValidValue(value2.value)) {
551
- lists.push({
552
- field: name,
553
- compare: value2.compare,
554
- value: $n_numberDeep(value2.value),
555
- })
556
- }
557
- }
558
- }
559
- })
560
-
561
- return lists
562
- }
1
+ import $n_has from 'lodash/has'
2
+ import $n_isArray from 'lodash/isArray'
3
+ import $n_cloneDeep from 'lodash/cloneDeep'
4
+ import $n_merge from 'lodash/merge'
5
+ import $n_isFunction from 'lodash/isFunction'
6
+ import $n_findIndex from 'lodash/findIndex'
7
+
8
+ import $n_forEach from '@netang/utils/forEach'
9
+ import $n_join from '@netang/utils/join'
10
+ import $n_split from '@netang/utils/split'
11
+ import $n_isJson from '@netang/utils/isJson'
12
+ import $n_json from '@netang/utils/json'
13
+ import $n_indexOf from '@netang/utils/indexOf'
14
+
15
+ import $n_isRequired from '@netang/utils/isRequired'
16
+ import $n_forIn from '@netang/utils/forIn'
17
+ import $n_runAsync from '@netang/utils/runAsync'
18
+ import $n_isValidObject from '@netang/utils/isValidObject'
19
+ import $n_isValidArray from '@netang/utils/isValidArray'
20
+ import $n_isValidValue from '@netang/utils/isValidValue'
21
+ import $n_trimString from '@netang/utils/trimString'
22
+ import $n_numberDeep from '@netang/utils/numberDeep'
23
+ import $n_toDate from '@netang/utils/toDate'
24
+ import $n_replaceAll from '@netang/utils/replaceAll'
25
+
26
+ import { date as quasarDate } from 'quasar'
27
+ import { getQuickRange, quickRange } from '../components/field-date/methods'
28
+
29
+ import $n_dictOptions from './dictOptions'
30
+ import { configs } from './config'
31
+
32
+ const {
33
+ // 字典常量
34
+ dicts,
35
+ } = configs
36
+
37
+ /**
38
+ * 比较类型默认值
39
+ */
40
+ const COMPARE_TYPE_MAPS = {
41
+ // 数字
42
+ number: dicts.SEARCH_COMPARE_TYPE__EQUAL,
43
+ // 文字
44
+ text: dicts.SEARCH_COMPARE_TYPE__LIKE,
45
+ // 价格
46
+ price: dicts.SEARCH_COMPARE_TYPE__EQUAL,
47
+ // 日期
48
+ date: dicts.SEARCH_COMPARE_TYPE__EQUAL,
49
+ }
50
+
51
+ /**
52
+ * 设置单个比较条件
53
+ */
54
+ function setItemCompare(item) {
55
+
56
+ // 初始比较条件数组
57
+ let opts1 = item.type === 'text'
58
+ // 如果类型为 文字
59
+ ? [
60
+ { label: '相同', value: dicts.SEARCH_COMPARE_TYPE__EQUAL },
61
+ { label: '不同', value: dicts.SEARCH_COMPARE_TYPE__NOT_EQUAL },
62
+ { label: '包含', value: dicts.SEARCH_COMPARE_TYPE__LIKE },
63
+ { label: '不含', value: dicts.SEARCH_COMPARE_TYPE__NOT_LIKE },
64
+ ]
65
+ // 否则为数字
66
+ : [
67
+ { label: '=', value: dicts.SEARCH_COMPARE_TYPE__EQUAL },
68
+ { label: '!=', value: dicts.SEARCH_COMPARE_TYPE__NOT_EQUAL },
69
+ { label: '>', value: dicts.SEARCH_COMPARE_TYPE__GT },
70
+ { label: '≥', value: dicts.SEARCH_COMPARE_TYPE__GTE },
71
+ ]
72
+
73
+ // 如果类型为日期
74
+ if (item.type === 'date') {
75
+ // 添加日期快捷选项
76
+ $n_forEach(quickRange, function(label, key) {
77
+ opts1.push({ label, value: key + 20 })
78
+ })
79
+
80
+ // 否则为其他
81
+ } else {
82
+ opts1.push(
83
+ { label: 'IN', value: dicts.SEARCH_COMPARE_TYPE__IN },
84
+ { label: 'NOT IN', value: dicts.SEARCH_COMPARE_TYPE__NOT_IN },
85
+ )
86
+ }
87
+
88
+ // 如果有比较类型
89
+ if (
90
+ $n_has(item, 'compare')
91
+ && $n_isValidArray(item.compare)
92
+ ) {
93
+ const {
94
+ compare,
95
+ compareIgnore
96
+ } = item
97
+
98
+ // 如果有筛选比较条件
99
+ // 筛选比较条件
100
+ opts1 = opts1.filter(
101
+ compareIgnore === true
102
+ // 如果为忽略比较条件
103
+ ? e => compare.indexOf(e.value) === -1
104
+ // 否则为限制比较条件
105
+ : e => compare.indexOf(e.value) > -1
106
+ )
107
+ }
108
+
109
+ // 如果没有比较选项, 则设置相同为默认
110
+ if (! opts1.length) {
111
+ opts1.push({ label: type === 'text' ? '相同' : '=', value: dicts.SEARCH_COMPARE_TYPE__EQUAL })
112
+ }
113
+
114
+ // 值1 比较类型条件
115
+ item.compareOptions1 = opts1
116
+ // 值2 比较类型条件
117
+ item.compareOptions2 = []
118
+
119
+ if (
120
+ // 如果比较类型有 >
121
+ $n_findIndex(opts1, { value: dicts.SEARCH_COMPARE_TYPE__GT }) > -1
122
+ // 如果比较类型有 >=
123
+ || $n_findIndex(opts1, { value: dicts.SEARCH_COMPARE_TYPE__GTE }) > -1
124
+ ) {
125
+ item.compareOptions2.push(
126
+ { label: '<', value: dicts.SEARCH_COMPARE_TYPE__LT },
127
+ { label: '≤', value: dicts.SEARCH_COMPARE_TYPE__LTE },
128
+ )
129
+ }
130
+ }
131
+
132
+ /**
133
+ * 设置单个搜索值
134
+ */
135
+ export function setItemValue(value, val) {
136
+
137
+ // 如果值为数组
138
+ if (Array.isArray(val)) {
139
+ // 比较类型为 in
140
+ value[0].compare = dicts.SEARCH_COMPARE_TYPE__IN
141
+ // 设置值为将数组转为逗号分隔的字符串
142
+ value[0].value = $n_join(val, ',')
143
+
144
+ // 如果值是逗号隔开
145
+ } else if ($n_split(val, ',').length > 1) {
146
+ // 比较类型为 in
147
+ value[0].compare = dicts.SEARCH_COMPARE_TYPE__IN
148
+ // 设置值为将数组转为逗号分隔的字符串
149
+ value[0].value = val
150
+
151
+ // 否则为单个值
152
+ } else {
153
+ // 比较类型为 ==
154
+ value[0].compare = dicts.SEARCH_COMPARE_TYPE__EQUAL
155
+ // 设置值为当前值
156
+ value[0].value = val
157
+ }
158
+ }
159
+
160
+ /**
161
+ * 格式化单个比较条件
162
+ */
163
+ function formatItemValueCompare(value, { compareOptions1 }) {
164
+
165
+ // 获取第一个值
166
+ const value1 = value[0]
167
+
168
+ // 如果值1 的比较条件不在值1 的限制范围内
169
+ if ($n_findIndex(compareOptions1, { value: value1.compare }) === -1) {
170
+ // 则取比较条件中的第一个
171
+ value1.compare = compareOptions1[0].value
172
+ }
173
+
174
+ // 如果比较类型不为 in / not in
175
+ if ($n_indexOf([ dicts.SEARCH_COMPARE_TYPE__IN, dicts.SEARCH_COMPARE_TYPE__NOT_IN ], value1.compare) === -1) {
176
+ // 如果值中含有逗号
177
+ const arr = $n_split(value1.value, ',')
178
+ if (arr.length > 1) {
179
+ value1.value = arr[0]
180
+ }
181
+ }
182
+
183
+ // 如果值1 比较类型为 >
184
+ if (value1.compare === dicts.SEARCH_COMPARE_TYPE__GT) {
185
+ // 则修改值2 类型为 <
186
+ value[1].compare = dicts.SEARCH_COMPARE_TYPE__LT
187
+
188
+ // 如果值1 比较类型为 >=
189
+ } else if (value1.compare === dicts.SEARCH_COMPARE_TYPE__GTE) {
190
+ // 则修改值2 类型为 <=
191
+ value[1].compare = dicts.SEARCH_COMPARE_TYPE__LTE
192
+ }
193
+ }
194
+
195
+ /**
196
+ * 从表格列获取原始值
197
+ */
198
+ export function getRawData(tableColumns, query, searchFromQuery = true) {
199
+
200
+ // 原始参数
201
+ const rawQuery = {}
202
+ // 原始表格搜索参数
203
+ const rawSearchOptions = []
204
+ // 原始表格搜索值(空表格搜索值, 用于搜索重置)
205
+ const rawTableSearchValue = []
206
+ // 首次表格搜索值(如果表格搜索参数中带了初始值, 则设置初始值)
207
+ const firstTableSearchValue = []
208
+
209
+ // 搜索参数键值数组
210
+ const searchQueryKey = []
211
+
212
+ $n_forEach(tableColumns, function (item) {
213
+ if ($n_has(item, 'search.type')) {
214
+
215
+ // 【设置原始表格搜索参数】
216
+ // --------------------------------------------------
217
+
218
+ // 搜索参数
219
+ const newItem = $n_merge({
220
+ // 标签
221
+ label: item.label,
222
+ }, item.search)
223
+
224
+ // 标识
225
+ newItem.name = $n_has(newItem, 'name') ? newItem.name : item.name
226
+
227
+ // 如果有字典标识
228
+ if ($n_has(item, 'dict')) {
229
+ newItem.dict = item.dict
230
+ }
231
+
232
+ // 设置单个比较条件
233
+ setItemCompare(newItem)
234
+
235
+ // 原始表格搜索参数
236
+ rawSearchOptions.push(newItem)
237
+
238
+ // 【原始表格搜索值】
239
+ // --------------------------------------------------
240
+
241
+ let value = [
242
+ // 值1
243
+ {
244
+ // 比较类型
245
+ compare: COMPARE_TYPE_MAPS[newItem.type],
246
+ // 值
247
+ value: '',
248
+ },
249
+ // 值2
250
+ {
251
+ // 比较类型
252
+ compare: dicts.SEARCH_COMPARE_TYPE__LT,
253
+ // 值
254
+ value: '',
255
+ },
256
+ ]
257
+
258
+ // 如果是日期
259
+ if (newItem.type === 'date') {
260
+ // 设置日期类型
261
+ value[0].dateType = 'day'
262
+ }
263
+
264
+ // 添加原始表格搜索值
265
+ rawTableSearchValue.push($n_cloneDeep(value))
266
+
267
+ if (
268
+ // 如果开启从参数中获取搜索值
269
+ searchFromQuery
270
+ // 如果在传参中有搜索参数
271
+ && $n_has(query, newItem.name)
272
+ ) {
273
+ let newVal = query[newItem.name]
274
+
275
+ // 如果有值
276
+ if ($n_isRequired(newVal)) {
277
+
278
+ newVal = decodeURIComponent(newVal)
279
+ if ($n_isJson(newVal)) {
280
+ $n_forEach($n_json.parse(newVal), function (v, i) {
281
+ if (
282
+ i <= 1
283
+ && $n_isValidArray(v)
284
+ && v.length >= 2
285
+ ) {
286
+ value[i] = {
287
+ compare: v[0],
288
+ value: $n_isRequired(v[1]) ? v[1] : '',
289
+ }
290
+ }
291
+ })
292
+
293
+ } else {
294
+ // 设置单个搜索值
295
+ setItemValue(value, newVal)
296
+ }
297
+ }
298
+
299
+ // 设置参数中搜索的 key
300
+ searchQueryKey.push(newItem.name)
301
+
302
+ // 否则, 如果表格参数中有设置初始值
303
+ } else if (
304
+ $n_has(newItem, 'value')
305
+ && $n_isValidArray(newItem.value)
306
+ ) {
307
+ value = $n_merge([], value, newItem.value)
308
+ }
309
+
310
+ // 格式化单个值的比较条件
311
+ formatItemValueCompare(value, newItem)
312
+
313
+ // 首次初始表格搜索值
314
+ firstTableSearchValue.push(value)
315
+ }
316
+ })
317
+
318
+ if (searchQueryKey.length) {
319
+ $n_forIn(query, function(val, key) {
320
+ if (searchQueryKey.indexOf(key) === -1) {
321
+ rawQuery[key] = val
322
+ }
323
+ })
324
+ } else {
325
+ Object.assign(rawQuery, query)
326
+ }
327
+
328
+ return {
329
+ // 原始参数
330
+ rawQuery,
331
+ // 原始表格搜索参数
332
+ rawSearchOptions,
333
+ // 原始表格搜索值(空表格搜索值, 用于搜索重置)
334
+ rawTableSearchValue,
335
+ // 首次表格搜索值(如果表格搜索参数中带了初始值, 则设置初始值)
336
+ firstTableSearchValue,
337
+ }
338
+ }
339
+
340
+ /**
341
+ * 获取参数
342
+ */
343
+ export async function getOptions(rawSearchOptions, format) {
344
+
345
+ const lists = []
346
+
347
+ if ($n_isValidArray(rawSearchOptions)) {
348
+ for (const item of rawSearchOptions) {
349
+
350
+ const newItem = Object.assign({}, item)
351
+
352
+ // 格式化单个参数
353
+ if ($n_isFunction(format)) {
354
+ const res = await $n_runAsync(format)(newItem)
355
+ if ($n_isValidObject(res)) {
356
+ $n_merge(newItem, res)
357
+ }
358
+ }
359
+
360
+ // 如果有字典标识, 则一定是下拉菜单
361
+ if ($n_has(newItem, 'dict')) {
362
+ $n_merge(newItem, {
363
+ searchType: 'select',
364
+ select: {
365
+ options: $n_dictOptions(newItem.dict)
366
+ },
367
+ })
368
+
369
+ // 如果有下拉菜单选项
370
+ } else if ($n_has(newItem, 'select')) {
371
+ newItem.searchType = 'select'
372
+ newItem.select = Object.assign({
373
+ options: [],
374
+ }, newItem.select)
375
+
376
+ // 如果下拉选项是方法
377
+ if ($n_isFunction(newItem.select.options)) {
378
+ // 读取下拉选项
379
+ newItem.select.options = await $n_runAsync(newItem.select.options)()
380
+ }
381
+
382
+ // 如果有树选项(调用的是 <n-field-tree> 组件)
383
+ } else if ($n_has(newItem, 'tree')) {
384
+ newItem.searchType = 'tree'
385
+ newItem.tree = Object.assign({
386
+ nodes: [],
387
+ accordion: true,
388
+ clearable: true,
389
+ }, newItem.tree)
390
+
391
+ // 如果有表格选项(调用的是 <n-field-table.md> 组件)
392
+ } else if ($n_has(newItem, 'table')) {
393
+ newItem.searchType = 'table'
394
+ newItem.table = Object.assign({
395
+ // 值字段(必填)
396
+ valueKey: newItem.name,
397
+ // 是否可清除
398
+ clearable: true,
399
+ // 是否开启筛选
400
+ filter: true,
401
+ }, newItem.table)
402
+
403
+ // 否则为输入框
404
+ } else {
405
+ newItem.searchType = 'input'
406
+ newItem.input = Object.assign({}, newItem.input)
407
+ }
408
+
409
+ lists.push(newItem)
410
+ }
411
+ }
412
+
413
+ return lists
414
+ }
415
+
416
+ /**
417
+ * 格式化值
418
+ */
419
+ export function formatValue(rawSearchOptions, searchValue) {
420
+
421
+ const lists = []
422
+
423
+ $n_forEach(rawSearchOptions, function ({ name, type }, itemIndex) {
424
+
425
+ // 添加值1
426
+ function addValue1(value1) {
427
+
428
+ // 如果有值1
429
+ if ($n_isRequired(value1.value)) {
430
+
431
+ // 如果值1 类型为 in / not in
432
+ if ($n_indexOf([dicts.SEARCH_COMPARE_TYPE__IN, dicts.SEARCH_COMPARE_TYPE__NOT_IN], value1.compare) > -1) {
433
+
434
+ const vals = []
435
+
436
+ const values = $n_isArray(value1.value) ? value1.value : $n_split($n_replaceAll($n_trimString(value1.value), ',', ','), ',')
437
+ $n_forEach(values, function (item) {
438
+ item = $n_numberDeep(item)
439
+ if ($n_isValidValue(item)) {
440
+ vals.push(item)
441
+ }
442
+ })
443
+
444
+ if (vals.length) {
445
+ lists.push({
446
+ field: name,
447
+ compare: value1.compare,
448
+ value: vals,
449
+ })
450
+ }
451
+ return
452
+ }
453
+
454
+ // 否则添加值1
455
+ lists.push({
456
+ field: name,
457
+ compare: value1.compare,
458
+ value: $n_numberDeep(value1.value),
459
+ })
460
+ }
461
+ }
462
+
463
+ // 第一个值
464
+ const value1 = searchValue[itemIndex][0]
465
+
466
+ // 如果是文字
467
+ if (type === 'text') {
468
+ // 添加值1
469
+ addValue1(value1)
470
+
471
+ // 否则为数字
472
+ } else {
473
+
474
+ // 如果是日期
475
+ if (type === 'date') {
476
+
477
+ // 如果 为 == || !=
478
+ const isEqual = value1.compare === dicts.SEARCH_COMPARE_TYPE__EQUAL
479
+ if (isEqual || value1.compare === dicts.SEARCH_COMPARE_TYPE__NOT_EQUAL) {
480
+ const { value, dateType } = value1
481
+ if ($n_isRequired(value)) {
482
+
483
+ // 当前时间
484
+ const now = $n_toDate(value)
485
+
486
+ let end
487
+ switch (dateType) {
488
+ //
489
+ case 'year':
490
+ //
491
+ case 'month':
492
+ //
493
+ case 'day':
494
+ end = quasarDate.endOfDate(now, dateType)
495
+ break
496
+ // 分
497
+ case 'datetime':
498
+ end = $n_toDate(quasarDate.formatDate(now, 'YYYY/MM/DD HH:mm:59'))
499
+ break
500
+ }
501
+
502
+ let compare1
503
+ let compare2
504
+
505
+ // 如果为 ==
506
+ if (isEqual) {
507
+ // ≥
508
+ compare1 = dicts.SEARCH_COMPARE_TYPE__GTE
509
+ // ≤
510
+ compare2 = dicts.SEARCH_COMPARE_TYPE__LTE
511
+
512
+ // 否则为 !=
513
+ } else {
514
+ // <
515
+ compare1 = dicts.SEARCH_COMPARE_TYPE__LT
516
+ // >
517
+ compare2 = dicts.SEARCH_COMPARE_TYPE__GT
518
+ }
519
+
520
+ lists.push(
521
+ // 日期起
522
+ {
523
+ field: name,
524
+ //
525
+ compare: compare1,
526
+ value,
527
+ },
528
+ // 日期止
529
+ {
530
+ field: name,
531
+ //
532
+ compare: compare2,
533
+ value: $n_numberDeep(quasarDate.formatDate(end, 'X')),
534
+ }
535
+ )
536
+ }
537
+ return
538
+
539
+ // 如果类型为快捷日期
540
+ } else if (value1.compare >= 20) {
541
+
542
+ const res = getQuickRange(value1.compare - 20, true)
543
+ if (res) {
544
+
545
+ lists.push(
546
+ // 日期起
547
+ {
548
+ field: name,
549
+ //
550
+ compare: dicts.SEARCH_COMPARE_TYPE__GTE,
551
+ value: $n_numberDeep(quasarDate.formatDate($n_toDate(`${res.date.from} ${res.time.from}`), 'X')),
552
+ },
553
+ // 日期止
554
+ {
555
+ field: name,
556
+ // ≤
557
+ compare: dicts.SEARCH_COMPARE_TYPE__LTE,
558
+ value: $n_numberDeep(quasarDate.formatDate($n_toDate(`${res.date.to} ${res.time.to}`), 'X')),
559
+ }
560
+ )
561
+ }
562
+ return
563
+ }
564
+ }
565
+
566
+ // 添加值1
567
+ addValue1(value1)
568
+
569
+ // 只有值1 类型为 > / ≥ 值2才有效
570
+ if ($n_indexOf([dicts.SEARCH_COMPARE_TYPE__GT, dicts.SEARCH_COMPARE_TYPE__GTE], value1.compare) > -1) {
571
+ const value2 = searchValue[itemIndex][1]
572
+ if ($n_isValidValue(value2.value)) {
573
+ lists.push({
574
+ field: name,
575
+ compare: value2.compare,
576
+ value: $n_numberDeep(value2.value),
577
+ })
578
+ }
579
+ }
580
+ }
581
+ })
582
+
583
+ return lists
584
+ }