cloud-b2b 1.1.50 → 1.1.51

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 (309) hide show
  1. package/package.json +44 -22
  2. package/src/Area/Area.js +94 -0
  3. package/src/Card/Card.js +16 -0
  4. package/src/CodeInput/CodeInput.js +76 -0
  5. package/src/Control/Control.js +338 -0
  6. package/src/Control/event.js +45 -0
  7. package/src/Enhance/Dialogs.js +24 -0
  8. package/src/Enhance/Loading.js +83 -0
  9. package/{es → src}/Enhance/index.js +8 -8
  10. package/src/Header/Header.js +149 -0
  11. package/src/Header/Vertical.js +74 -0
  12. package/src/ImageView/ImageView.js +62 -0
  13. package/src/Indent/Indent.js +12 -0
  14. package/src/InpurCascader/InputCascader.js +83 -0
  15. package/src/InputEditor/InputEditor.js +93 -0
  16. package/src/InputSearch/InputSearch.js +186 -0
  17. package/src/InputSelect/InputSelect.js +103 -0
  18. package/src/InputTreeSelect/InputTreeSelect.js +87 -0
  19. package/src/InputWriting/InputWriting.js +65 -0
  20. package/src/Layout/Layout.js +121 -0
  21. package/src/LayoutLink/LayoutLink.js +59 -0
  22. package/src/Link/Link.js +57 -0
  23. package/src/Loading/Loading.js +15 -0
  24. package/src/Loading2/Loading2.js +15 -0
  25. package/src/ModalWithDrag/ModalWithDrag.js +17 -0
  26. package/src/ModalWithDrag/drag.js +128 -0
  27. package/src/NumberInput/NumberInput.js +137 -0
  28. package/src/Search/Search.js +368 -0
  29. package/src/Sidebar/Sidebar.js +111 -0
  30. package/src/Sidebar2/Sidebar.js +143 -0
  31. package/src/SuperForm/SuperForm.js +516 -0
  32. package/src/SuperForm2/SuperForm.js +588 -0
  33. package/src/SuperIcon/SuperIcon.js +14 -0
  34. package/src/SuperPagination/SuperPagination.js +65 -0
  35. package/src/SuperTab/SuperTab.js +84 -0
  36. package/src/SuperTab2/SuperTab2.js +94 -0
  37. package/src/SuperTable/DragSortRow.js +62 -0
  38. package/src/SuperTable/FilterDropDown.js +111 -0
  39. package/src/SuperTable/SuperTable.js +590 -0
  40. package/src/SuperTable/fixed.js +34 -0
  41. package/src/SuperTable2/SuperTable2.js +600 -0
  42. package/src/SuperTable2/SuperTableCell.js +144 -0
  43. package/src/SuperTable3/FilterDropDown.js +111 -0
  44. package/src/SuperTable3/SuperTable.js +498 -0
  45. package/src/SuperTable3/fixed.js +34 -0
  46. package/src/SuperToolbar/SuperToolbar.js +128 -0
  47. package/src/SuperUpload/SuperUpload.js +137 -0
  48. package/src/Title/Title.js +18 -0
  49. package/src/Viewer/ImageViews.js +220 -0
  50. package/src/Viewer/Viewer.js +97 -0
  51. package/src/WingBlank/WingBlank.js +14 -0
  52. package/src/helper.js +185 -0
  53. package/src/history.js +6 -0
  54. package/src/index.js +38 -0
  55. package/src/variables.js +5 -0
  56. package/test/index.html +10 -0
  57. package/test/test.js +16 -0
  58. package/test/test.less +12 -0
  59. package/test/webpack.config.js +71 -0
  60. package/tools/babel.config.js +14 -0
  61. package/tools/build.js +70 -0
  62. package/tools/publish.js +9 -0
  63. package/tools/util.js +53 -0
  64. package/es/Area/Area.js +0 -170
  65. package/es/Card/Card.js +0 -20
  66. package/es/CodeInput/CodeInput.js +0 -152
  67. package/es/Control/Control.js +0 -496
  68. package/es/Control/event.js +0 -57
  69. package/es/Enhance/Dialogs.js +0 -67
  70. package/es/Enhance/Loading.js +0 -151
  71. package/es/Header/Header.js +0 -194
  72. package/es/Header/Vertical.js +0 -129
  73. package/es/ImageView/ImageView.js +0 -117
  74. package/es/Indent/Indent.js +0 -23
  75. package/es/InpurCascader/InputCascader.js +0 -135
  76. package/es/InputEditor/InputEditor.js +0 -113
  77. package/es/InputSearch/InputSearch.js +0 -311
  78. package/es/InputSelect/InputSelect.js +0 -191
  79. package/es/InputTreeSelect/InputTreeSelect.js +0 -147
  80. package/es/InputWriting/InputWriting.js +0 -107
  81. package/es/Layout/Layout.js +0 -232
  82. package/es/LayoutLink/LayoutLink.js +0 -82
  83. package/es/Link/Link.js +0 -108
  84. package/es/Loading/Loading.js +0 -15
  85. package/es/Loading2/Loading2.js +0 -11
  86. package/es/ModalWithDrag/ModalWithDrag.js +0 -34
  87. package/es/ModalWithDrag/drag.js +0 -133
  88. package/es/NumberInput/NumberInput.js +0 -240
  89. package/es/Search/Search.js +0 -595
  90. package/es/Sidebar/Sidebar.js +0 -165
  91. package/es/Sidebar2/Sidebar.js +0 -192
  92. package/es/SuperForm/SuperForm.js +0 -720
  93. package/es/SuperForm2/SuperForm.js +0 -828
  94. package/es/SuperIcon/SuperIcon.js +0 -30
  95. package/es/SuperPagination/SuperPagination.js +0 -126
  96. package/es/SuperTab/SuperTab.js +0 -130
  97. package/es/SuperTab2/SuperTab2.js +0 -167
  98. package/es/SuperTable/DragSortRow.js +0 -125
  99. package/es/SuperTable/FilterDropDown.js +0 -188
  100. package/es/SuperTable/SuperTable.js +0 -940
  101. package/es/SuperTable/fixed.js +0 -42
  102. package/es/SuperTable2/SuperTable2.js +0 -1019
  103. package/es/SuperTable2/SuperTableCell.js +0 -242
  104. package/es/SuperTable3/FilterDropDown.js +0 -188
  105. package/es/SuperTable3/SuperTable.js +0 -790
  106. package/es/SuperTable3/fixed.js +0 -42
  107. package/es/SuperToolbar/SuperToolbar.js +0 -223
  108. package/es/SuperUpload/SuperUpload.js +0 -434
  109. package/es/Title/Title.js +0 -36
  110. package/es/Viewer/ImageViews.js +0 -311
  111. package/es/Viewer/Viewer.js +0 -149
  112. package/es/WingBlank/WingBlank.js +0 -20
  113. package/es/helper.js +0 -169
  114. package/es/history.js +0 -5
  115. package/es/index.js +0 -37
  116. package/es/variables.js +0 -4
  117. package/lib/Area/Area.js +0 -198
  118. package/lib/Area/package.json +0 -6
  119. package/lib/Card/Card.js +0 -38
  120. package/lib/Card/package.json +0 -6
  121. package/lib/CodeInput/CodeInput.js +0 -179
  122. package/lib/CodeInput/package.json +0 -6
  123. package/lib/Control/Control.js +0 -548
  124. package/lib/Control/event.js +0 -68
  125. package/lib/Control/package.json +0 -6
  126. package/lib/Enhance/Dialogs.js +0 -87
  127. package/lib/Enhance/Loading.js +0 -175
  128. package/lib/Enhance/index.js +0 -35
  129. package/lib/Enhance/package.json +0 -6
  130. package/lib/Header/Header.js +0 -215
  131. package/lib/Header/Header.less +0 -95
  132. package/lib/Header/Vertical.js +0 -150
  133. package/lib/Header/Vertical.less +0 -60
  134. package/lib/Header/package.json +0 -6
  135. package/lib/ImageView/ImageView.js +0 -134
  136. package/lib/ImageView/ImageView.less +0 -14
  137. package/lib/ImageView/package.json +0 -6
  138. package/lib/Indent/Indent.js +0 -38
  139. package/lib/Indent/package.json +0 -6
  140. package/lib/InpurCascader/InputCascader.js +0 -156
  141. package/lib/InpurCascader/package.json +0 -6
  142. package/lib/InputEditor/InputEditor.js +0 -131
  143. package/lib/InputEditor/inputEditor.less +0 -8
  144. package/lib/InputEditor/package.json +0 -6
  145. package/lib/InputSearch/InputSearch.js +0 -327
  146. package/lib/InputSearch/package.json +0 -6
  147. package/lib/InputSelect/InputSelect.js +0 -214
  148. package/lib/InputSelect/package.json +0 -6
  149. package/lib/InputTreeSelect/InputTreeSelect.js +0 -169
  150. package/lib/InputTreeSelect/package.json +0 -6
  151. package/lib/InputWriting/InputWriting.js +0 -123
  152. package/lib/InputWriting/package.json +0 -6
  153. package/lib/Layout/Layout.js +0 -258
  154. package/lib/Layout/Layout.less +0 -28
  155. package/lib/Layout/package.json +0 -6
  156. package/lib/LayoutLink/LayoutLink.js +0 -114
  157. package/lib/LayoutLink/LayoutLink.less +0 -53
  158. package/lib/LayoutLink/package.json +0 -6
  159. package/lib/Link/Link.js +0 -130
  160. package/lib/Link/package.json +0 -6
  161. package/lib/Loading/Loading.js +0 -30
  162. package/lib/Loading/Loading.less +0 -13
  163. package/lib/Loading/package.json +0 -6
  164. package/lib/Loading2/Loading2.js +0 -26
  165. package/lib/Loading2/Loading2.less +0 -19
  166. package/lib/Loading2/package.json +0 -6
  167. package/lib/ModalWithDrag/ModalWithDrag.js +0 -53
  168. package/lib/ModalWithDrag/ModalWithDrag.less +0 -6
  169. package/lib/ModalWithDrag/drag.js +0 -147
  170. package/lib/ModalWithDrag/package.json +0 -6
  171. package/lib/NumberInput/NumberInput.js +0 -262
  172. package/lib/NumberInput/package.json +0 -6
  173. package/lib/Search/Search.js +0 -616
  174. package/lib/Search/Search.less +0 -63
  175. package/lib/Search/package.json +0 -6
  176. package/lib/Sidebar/Sidebar.js +0 -186
  177. package/lib/Sidebar/Sidebar.less +0 -78
  178. package/lib/Sidebar/package.json +0 -6
  179. package/lib/Sidebar2/Sidebar.js +0 -213
  180. package/lib/Sidebar2/Sidebar.less +0 -153
  181. package/lib/Sidebar2/package.json +0 -6
  182. package/lib/SuperForm/SuperForm.js +0 -731
  183. package/lib/SuperForm/SuperForm.less +0 -52
  184. package/lib/SuperForm/package.json +0 -6
  185. package/lib/SuperForm2/SuperForm.js +0 -834
  186. package/lib/SuperForm2/SuperForm.less +0 -52
  187. package/lib/SuperForm2/package.json +0 -6
  188. package/lib/SuperIcon/SuperIcon.js +0 -47
  189. package/lib/SuperIcon/package.json +0 -6
  190. package/lib/SuperPagination/SuperPagination.js +0 -145
  191. package/lib/SuperPagination/package.json +0 -6
  192. package/lib/SuperTab/SuperTab.js +0 -146
  193. package/lib/SuperTab/SuperTab.less +0 -43
  194. package/lib/SuperTab/package.json +0 -6
  195. package/lib/SuperTab2/SuperTab2.js +0 -191
  196. package/lib/SuperTab2/SuperTab2.less +0 -18
  197. package/lib/SuperTab2/package.json +0 -6
  198. package/lib/SuperTable/DragSortRow.js +0 -142
  199. package/lib/SuperTable/DragSortRow.less +0 -17
  200. package/lib/SuperTable/FilterDropDown.js +0 -205
  201. package/lib/SuperTable/FilterDropDown.less +0 -30
  202. package/lib/SuperTable/SuperTable.js +0 -945
  203. package/lib/SuperTable/SuperTable.less +0 -132
  204. package/lib/SuperTable/fixed.js +0 -55
  205. package/lib/SuperTable/package.json +0 -6
  206. package/lib/SuperTable2/SuperTable2.js +0 -1047
  207. package/lib/SuperTable2/SuperTable2.less +0 -118
  208. package/lib/SuperTable2/SuperTableCell.js +0 -258
  209. package/lib/SuperTable2/package.json +0 -6
  210. package/lib/SuperTable3/FilterDropDown.js +0 -205
  211. package/lib/SuperTable3/FilterDropDown.less +0 -29
  212. package/lib/SuperTable3/SuperTable.js +0 -795
  213. package/lib/SuperTable3/SuperTable.less +0 -99
  214. package/lib/SuperTable3/fixed.js +0 -55
  215. package/lib/SuperTable3/package.json +0 -6
  216. package/lib/SuperToolbar/SuperToolbar.js +0 -248
  217. package/lib/SuperToolbar/SuperToolbar.less +0 -17
  218. package/lib/SuperToolbar/package.json +0 -6
  219. package/lib/SuperUpload/SuperUpload.js +0 -481
  220. package/lib/SuperUpload/SuperUpload.less +0 -28
  221. package/lib/SuperUpload/package.json +0 -6
  222. package/lib/Title/Title.js +0 -54
  223. package/lib/Title/Title.less +0 -35
  224. package/lib/Title/package.json +0 -6
  225. package/lib/Viewer/ImageViews.js +0 -323
  226. package/lib/Viewer/Viewer.js +0 -167
  227. package/lib/Viewer/Viewer.less +0 -67
  228. package/lib/Viewer/imgView.less +0 -59
  229. package/lib/Viewer/package.json +0 -7
  230. package/lib/WingBlank/WingBlank.js +0 -37
  231. package/lib/WingBlank/WingBlank.less +0 -12
  232. package/lib/WingBlank/package.json +0 -6
  233. package/lib/adjust.less +0 -89
  234. package/lib/helper.js +0 -204
  235. package/lib/history.js +0 -18
  236. package/lib/index.js +0 -347
  237. package/lib/index.less +0 -31
  238. package/lib/style.less +0 -30
  239. package/lib/variables.js +0 -16
  240. package/lib/variables.less +0 -73
  241. /package/{es → src}/Area/package.json +0 -0
  242. /package/{es → src}/Card/package.json +0 -0
  243. /package/{es → src}/CodeInput/package.json +0 -0
  244. /package/{es → src}/Control/package.json +0 -0
  245. /package/{es → src}/Enhance/package.json +0 -0
  246. /package/{es → src}/Header/Header.less +0 -0
  247. /package/{es → src}/Header/Vertical.less +0 -0
  248. /package/{es → src}/Header/package.json +0 -0
  249. /package/{es → src}/ImageView/ImageView.less +0 -0
  250. /package/{es → src}/ImageView/package.json +0 -0
  251. /package/{es → src}/Indent/package.json +0 -0
  252. /package/{es → src}/InpurCascader/package.json +0 -0
  253. /package/{es → src}/InputEditor/inputEditor.less +0 -0
  254. /package/{es → src}/InputEditor/package.json +0 -0
  255. /package/{es → src}/InputSearch/package.json +0 -0
  256. /package/{es → src}/InputSelect/package.json +0 -0
  257. /package/{es → src}/InputTreeSelect/package.json +0 -0
  258. /package/{es → src}/InputWriting/package.json +0 -0
  259. /package/{es → src}/Layout/Layout.less +0 -0
  260. /package/{es → src}/Layout/package.json +0 -0
  261. /package/{es → src}/LayoutLink/LayoutLink.less +0 -0
  262. /package/{es → src}/LayoutLink/package.json +0 -0
  263. /package/{es → src}/Link/package.json +0 -0
  264. /package/{es → src}/Loading/Loading.less +0 -0
  265. /package/{es → src}/Loading/package.json +0 -0
  266. /package/{es → src}/Loading2/Loading2.less +0 -0
  267. /package/{es → src}/Loading2/package.json +0 -0
  268. /package/{es → src}/ModalWithDrag/ModalWithDrag.less +0 -0
  269. /package/{es → src}/ModalWithDrag/package.json +0 -0
  270. /package/{es → src}/NumberInput/package.json +0 -0
  271. /package/{es → src}/Search/Search.less +0 -0
  272. /package/{es → src}/Search/package.json +0 -0
  273. /package/{es → src}/Sidebar/Sidebar.less +0 -0
  274. /package/{es → src}/Sidebar/package.json +0 -0
  275. /package/{es → src}/Sidebar2/Sidebar.less +0 -0
  276. /package/{es → src}/Sidebar2/package.json +0 -0
  277. /package/{es → src}/SuperForm/SuperForm.less +0 -0
  278. /package/{es → src}/SuperForm/package.json +0 -0
  279. /package/{es → src}/SuperForm2/SuperForm.less +0 -0
  280. /package/{es → src}/SuperForm2/package.json +0 -0
  281. /package/{es → src}/SuperIcon/package.json +0 -0
  282. /package/{es → src}/SuperPagination/package.json +0 -0
  283. /package/{es → src}/SuperTab/SuperTab.less +0 -0
  284. /package/{es → src}/SuperTab/package.json +0 -0
  285. /package/{es → src}/SuperTab2/SuperTab2.less +0 -0
  286. /package/{es → src}/SuperTab2/package.json +0 -0
  287. /package/{es → src}/SuperTable/DragSortRow.less +0 -0
  288. /package/{es → src}/SuperTable/FilterDropDown.less +0 -0
  289. /package/{es → src}/SuperTable/SuperTable.less +0 -0
  290. /package/{es → src}/SuperTable/package.json +0 -0
  291. /package/{es → src}/SuperTable2/SuperTable2.less +0 -0
  292. /package/{es → src}/SuperTable2/package.json +0 -0
  293. /package/{es → src}/SuperTable3/FilterDropDown.less +0 -0
  294. /package/{es → src}/SuperTable3/SuperTable.less +0 -0
  295. /package/{es → src}/SuperTable3/package.json +0 -0
  296. /package/{es → src}/SuperToolbar/SuperToolbar.less +0 -0
  297. /package/{es → src}/SuperToolbar/package.json +0 -0
  298. /package/{es → src}/SuperUpload/SuperUpload.less +0 -0
  299. /package/{es → src}/SuperUpload/package.json +0 -0
  300. /package/{es → src}/Title/Title.less +0 -0
  301. /package/{es → src}/Title/package.json +0 -0
  302. /package/{es → src}/Viewer/Viewer.less +0 -0
  303. /package/{es → src}/Viewer/imgView.less +0 -0
  304. /package/{es → src}/Viewer/package.json +0 -0
  305. /package/{es → src}/WingBlank/WingBlank.less +0 -0
  306. /package/{es → src}/WingBlank/package.json +0 -0
  307. /package/{es → src}/adjust.less +0 -0
  308. /package/{es → src}/style.less +0 -0
  309. /package/{es → src}/variables.less +0 -0
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import {Spin} from 'antd';
3
+ import variables from '../variables';
4
+
5
+ function Loading() {
6
+ return (
7
+ <div className={variables('Loading2')}>
8
+ <div>
9
+ <Spin />
10
+ </div>
11
+ </div>
12
+ );
13
+ }
14
+
15
+ export default Loading;
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import {Modal} from 'antd';
3
+ import drag from './drag';
4
+ import variables from '../variables';
5
+
6
+ const onLoad = (e) => {
7
+ const dragElement = e.parentNode.parentNode;
8
+ const targetElement = dragElement.parentNode.parentNode;
9
+ drag(dragElement, targetElement);
10
+ };
11
+
12
+ const ModalWithDrag = ({className, children, title, ...props}) => {
13
+ props.title = <div ref={(e) => e && onLoad(e)}>{title}</div>;
14
+ return <Modal className={`${className} ${variables('ModalWithDrag')}`} {...props}>{children}</Modal>;
15
+ };
16
+
17
+ export default ModalWithDrag;
@@ -0,0 +1,128 @@
1
+
2
+ // 依据CSS3的transform属性进行移动
3
+ const dragByTransform = (dragElement, targetElement) => {
4
+ let mouseMove = null;
5
+ let mouseUp = null;
6
+ let active = false;
7
+ let offsetX = 0;
8
+ let offsetY = 0;
9
+ let x = 0;
10
+ let y = 0;
11
+
12
+ dragElement.style.cursor = 'move';
13
+
14
+ dragElement.onmousedown = (e) => {
15
+ mouseMove = document.onmousemove;
16
+ mouseUp = document.onmouseup;
17
+ x = e.clientX;
18
+ y = e.clientY;
19
+ active = true;
20
+
21
+ // 如果下拉框拥有焦点,通过使其失去焦点来关闭掉下拉框
22
+ if (document.activeElement && document.activeElement !== dragElement) {
23
+ document.activeElement.blur();
24
+ }
25
+
26
+ document.onmousemove = (e) => {
27
+ if (active) {
28
+ const x2 = offsetX + e.clientX - x;
29
+ const y2 = offsetY + e.clientY - y;
30
+ targetElement.style.transform = `translate(${x2}px, ${y2}px)`;
31
+ }
32
+ mouseMove && mouseMove(e);
33
+ };
34
+
35
+ document.onmouseup = (e) => {
36
+ if (active) {
37
+ document.onmousemove = mouseMove;
38
+ document.onmouseup = mouseUp;
39
+ offsetX += e.clientX - x;
40
+ offsetY += e.clientY - y;
41
+ active = false;
42
+ }
43
+ mouseUp && mouseUp(e);
44
+ };
45
+
46
+ return false;
47
+ };
48
+ };
49
+
50
+ // 获取相关CSS属性
51
+ const getCss = (o, key) => {
52
+ return o.currentStyle ? o.currentStyle[key] : document.defaultView.getComputedStyle(o)[key];
53
+ };
54
+
55
+ // 依据position属性进行移动
56
+ const dragByPosition = (dragElement, targetElement) => {
57
+ let mouseMove = null;
58
+ let mouseUp = null;
59
+ let active = false;
60
+ let left = 0;
61
+ let top = 0;
62
+ let x = 0;
63
+ let y = 0;
64
+
65
+ dragElement.style.cursor = 'move';
66
+
67
+ dragElement.onmousedown = (e) => {
68
+ mouseMove = document.onmousemove;
69
+ mouseUp = document.onmouseup;
70
+ x = e.clientX;
71
+ y = e.clientY;
72
+ active = true;
73
+
74
+ if (getCss(targetElement, 'left') !== 'auto'){
75
+ left = parseInt(getCss(targetElement, "left"));
76
+ }
77
+
78
+ if (getCss(targetElement, 'top') !== 'auto'){
79
+ top = parseInt(getCss(targetElement, 'top'));
80
+ }
81
+
82
+ // 如果下拉框拥有焦点,通过使其失去焦点来关闭掉下拉框
83
+ if (document.activeElement && document.activeElement !== dragElement) {
84
+ document.activeElement.blur();
85
+ }
86
+
87
+ document.onmousemove = (e) => {
88
+ if (active) {
89
+ const top2 = top + e.clientY - y;
90
+ targetElement.style.left = `${left + e.clientX - x}px`;
91
+ targetElement.style.top = `${top2 > 0 ? top2 : 0}px`;
92
+ }
93
+ mouseMove && mouseMove(e);
94
+ };
95
+
96
+ document.onmouseup = (e) => {
97
+ if (active) {
98
+ document.onmousemove = mouseMove;
99
+ document.onmouseup = mouseUp;
100
+ active = false;
101
+ }
102
+ mouseUp && mouseUp(e);
103
+ };
104
+
105
+ return false;
106
+ };
107
+ };
108
+
109
+ const drag = (dragElement, targetElement) => {
110
+ if (!dragElement || !targetElement) {
111
+ console.error('请传入有效的HTML元素对象');
112
+ return;
113
+ }
114
+
115
+ // 已经绑定过,不需要再次绑定
116
+ if (dragElement.onmousedown) {
117
+ return;
118
+ }
119
+
120
+ // 如果目标元素是非定位元素采用transform属性进行移动
121
+ if (getCss(targetElement, 'position') === 'static') {
122
+ dragByTransform(dragElement, targetElement);
123
+ } else {
124
+ dragByPosition(dragElement, targetElement);
125
+ }
126
+ };
127
+
128
+ export default drag;
@@ -0,0 +1,137 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import {Input} from 'antd';
4
+ import {getObjectExclude} from '../helper';
5
+
6
+ const parseNumber = (value, {real, sign, zero, precision, fixed, big}) => {
7
+ const invalid = {invalid: true, value: ''};
8
+
9
+ if (value === '') {
10
+ return {value};
11
+ }
12
+
13
+ // 非数字
14
+ value = big ? value : Number(value);
15
+ if (isNaN(value)) {
16
+ return invalid;
17
+ }
18
+
19
+ // 不能为实数,却包含小数点
20
+ if (!real && String(value).includes('.')) {
21
+ return invalid;
22
+ }
23
+
24
+ // 不能为负数,却小于0
25
+ if (!sign && (value < 0)) {
26
+ return invalid;
27
+ }
28
+
29
+ // 不能为0,却为0
30
+ if (!zero && (value === 0)) {
31
+ return invalid;
32
+ }
33
+
34
+ if (real) {
35
+ precision = Number(precision);
36
+ if (precision) {
37
+ value = value.toFixed(precision);
38
+ value = value.toString(); // 将数值转换为字符串
39
+ value = value.replace(/(\.\d*?[1-9])0+$|\.0*$/, "$1"); // 去除小数点后无意义的零
40
+ if (!fixed) {
41
+ value = Number(value);
42
+ }
43
+ }
44
+ }
45
+
46
+ return {value};
47
+ };
48
+
49
+ /**
50
+ * real: true表示带小数点,默认为false
51
+ * sign: true表示带正负号,默认为false
52
+ * precision: real为true时,小数的精度;否则无效
53
+ * zero:true表示可以输入0,默认为false
54
+ * fixed: real为true时生效; true表示固定显示指定精度的小数,精度由precision确定,默认值为false
55
+ * big: big为ture时生效; true标识为大数值,与上面所有属性互斥
56
+ */
57
+ const PROPS = {
58
+ defaultValue: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
59
+ real: PropTypes.bool,
60
+ sign: PropTypes.bool,
61
+ precision: PropTypes.any,
62
+ zero: PropTypes.bool,
63
+ fixed: PropTypes.bool,
64
+ big:PropTypes.bool,
65
+ inputRef: PropTypes.func,
66
+ onChange: PropTypes.func,
67
+ onBlur: PropTypes.func
68
+ };
69
+
70
+ const PROPS_KEYS = Object.keys(PROPS);
71
+
72
+ class NumberInput extends React.Component {
73
+ static propTypes = PROPS;
74
+ state = {typo: false, value: ''};
75
+
76
+ onChange = (event) => {
77
+ const value = event.target.value;
78
+ if (!this.hasSpecialChar(value)) {
79
+ this.setState({value, typo: true});
80
+ }
81
+ };
82
+
83
+ onBlur = (event) => {
84
+ const {onBlur, onChange, fixed} = this.props;
85
+ if (this.state.typo) {
86
+ const {invalid, value} = this.format(this.state.value, fixed);
87
+ this.setState({typo: false, value: ''});
88
+ if (!invalid) {
89
+ onChange && onChange(value);
90
+ }
91
+ onBlur && onBlur(event); //有输入才触发外部失去焦点事件,避免非必要请求
92
+ }
93
+ };
94
+
95
+ hasSpecialChar = (value) => {
96
+ if (value.includes('+')) {
97
+ return true;
98
+ } else if (!this.props.sign && value.includes('-')) {
99
+ return true;
100
+ } else {
101
+ return !this.props.real && value.includes('.');
102
+ }
103
+ };
104
+
105
+ format = (value, fixed) => {
106
+ const {real, sign, zero, precision,big} = this.props;
107
+ return parseNumber(value, {real, sign, zero, precision, fixed,big});
108
+ };
109
+
110
+ getShowValue = () => {
111
+ if (this.state.typo) {
112
+ // 处于输入状态从state中取值
113
+ return this.state.value;
114
+ } else {
115
+ // 处于非输入状态从props中取值
116
+ return this.format(this.props.defaultValue, this.props.fixed).value;
117
+ }
118
+ };
119
+
120
+ getProps = () => {
121
+ const props = getObjectExclude(this.props, PROPS_KEYS);
122
+ return {
123
+ ...props,
124
+ type: 'text',
125
+ ref: this.props.inputRef || null,
126
+ value: this.getShowValue(),
127
+ onChange: this.onChange,
128
+ onBlur: this.onBlur,
129
+ };
130
+ };
131
+
132
+ render() {
133
+ return <Input {...this.getProps()} />;
134
+ }
135
+ }
136
+
137
+ export default NumberInput;
@@ -0,0 +1,368 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import ReactDOM from 'react-dom';
4
+ import {Button, Form, Row, Col, Icon} from 'antd';
5
+ import Control, {getTitle, makeString} from '../Control';
6
+ import {getPathValue} from "../helper";
7
+ import variables from '../variables';
8
+
9
+ const FormItem = Form.Item;
10
+ const defaultSize = 'small';
11
+ const defaultColNum = 4;
12
+
13
+ const TYPE = [
14
+ 'text',
15
+ 'search',
16
+ 'select',
17
+ 'number',
18
+ 'date',
19
+ 'readonly',
20
+ 'selectSearch',
21
+ 'cascader', //级联选择下拉
22
+ 'treeSelect' //树选择
23
+ ];
24
+
25
+ /**
26
+ * search: 搜索按钮的标题
27
+ * more:更多按钮的标题
28
+ * reset:重置按钮的标题
29
+ * sort:排序按钮的标题
30
+ */
31
+ const ConfigType = {
32
+ search: PropTypes.string.isRequired,
33
+ reset: PropTypes.string,
34
+ sort: PropTypes.string,
35
+ more: PropTypes.string
36
+ };
37
+
38
+ /**
39
+ * key: 唯一标识一个表单元素
40
+ * title:表单元素旁边的标题
41
+ * type:表单元素的类型
42
+ * props:传递给表单元素的额外属性
43
+ */
44
+ const FilterType = {
45
+ key: PropTypes.string.isRequired,
46
+ title: PropTypes.string.isRequired,
47
+ type: PropTypes.oneOf(TYPE).isRequired,
48
+ options: PropTypes.array,
49
+ props: PropTypes.object
50
+ };
51
+
52
+ /**
53
+ * data:传递给filters的默认值,为key:value的形式,此处的key为FilterType中的key
54
+ * isSort:是否需要排序按钮,默认false,当设置为true时,onClick函数需要实现key为sort的响应函数
55
+ * options: 作用同FilterType.options类似,但优先级高于它
56
+ * onClick:按钮点击事件,原型为func(key)
57
+ * onChange:表单控件内容改变时触发,原型为func(key, value)
58
+ * onSearch:search控件发出的事件,原型为func(key, value)
59
+ * displayRow:折叠时需要展示的行数,整数,默认为1
60
+ */
61
+ class Search extends React.Component {
62
+ static propTypes = {
63
+ config: PropTypes.shape(ConfigType).isRequired,
64
+ filters: PropTypes.arrayOf(PropTypes.shape(FilterType)).isRequired,
65
+ data: PropTypes.object,
66
+ options: PropTypes.object,
67
+ getContainer: PropTypes.func,
68
+ onClick: PropTypes.func,
69
+ onChange: PropTypes.func,
70
+ onSearch: PropTypes.func,
71
+ onHeightChange: PropTypes.func,
72
+ displayRow: PropTypes.number,
73
+ };
74
+
75
+ state = {more: false};
76
+
77
+ onClick = (key) => {
78
+ const {onClick} = this.props;
79
+ onClick && onClick(key);
80
+ };
81
+
82
+ onMore = () => {
83
+ const {onHeightChange} = this.props;
84
+ this.setState({more: !this.state.more});
85
+ onHeightChange && onHeightChange(this.calHeight(!this.state.more));
86
+ };
87
+
88
+ onChange = (dictionary, key, value) => {
89
+ const {onChange} = this.props;
90
+ if (value && key === 'queryGroup' && dictionary && global.dictionary && global.dictionary[dictionary]
91
+ && !global.dictionary[dictionary].map(item => item.value).includes(value)) {
92
+ const realValue = JSON.parse(value);
93
+ this.onClick('reset');
94
+ Object.keys(realValue).map(objectKey => {
95
+ onChange && objectKey !== 'queryId' && onChange(objectKey, realValue[objectKey]);
96
+ });
97
+ }
98
+ onChange && onChange(key, value);
99
+ };
100
+
101
+ onPressEnter = () => {
102
+ ReactDOM.findDOMNode(this.refs.search).click();
103
+ };
104
+
105
+ toButton = (key, props={}) => {
106
+ const {config} = this.props;
107
+ const onClick = this.onClick.bind(this, key);
108
+ return <Button size={defaultSize} onClick={onClick} {...props}>{config[key]}</Button>;
109
+ };
110
+
111
+ toMore = () => {
112
+ return (
113
+ <a role='more' onClick={this.onMore}>
114
+ {this.props.config.more}
115
+ <Icon type='down' data-status={!this.state.more ? 'down' : 'up'} />
116
+ </a>
117
+ );
118
+ };
119
+
120
+ toButtons = () => {
121
+ const {config} = this.props;
122
+ return (
123
+ <div role='buttons'>
124
+ {this.toButton('search', {ref: 'search', type: 'primary'})}
125
+ {config.reset ? this.toButton('reset') : null}
126
+ {this.isSort() ? this.toButton('sort') : null}
127
+ {this.isMore() ? this.toMore() : null}
128
+ </div>
129
+ );
130
+ };
131
+
132
+ isSort = () => {
133
+ const {config, colNum=defaultColNum, filters, isSort=false} = this.props;
134
+ return isSort && config.sort && (filters.length > colNum);
135
+ };
136
+
137
+ isMore = () => {
138
+ const {config, colNum=defaultColNum, filters, displayRow=1} = this.props;
139
+ return config.more && (filters.filter(item => !item.hide).length > colNum * displayRow);
140
+ };
141
+
142
+ getOptions = (filter) => {
143
+ const options = this.props.options;
144
+ if (options && Array.isArray(options[filter.key])) {
145
+ return options[filter.key];
146
+ } else {
147
+ return filter.options || filter.typeRelated || [];
148
+ }
149
+ };
150
+
151
+ getContainer = () => {
152
+ return this.props.getContainer;
153
+ };
154
+
155
+ getControlProps = (control) => {
156
+ const {data={}} = this.props;
157
+ return {
158
+ ...(control.props || {}),
159
+ size: defaultSize,
160
+ type: control.type,
161
+ value: makeString(data[control.key]),
162
+ onChange: this.onChange.bind(this, control.dictionary, control.key)
163
+ };
164
+ };
165
+ validDate = ({key, type}) => (date) => {
166
+ const {data={}} = this.props;
167
+ if (!date || !data[key]) {
168
+ return false;
169
+ } else {
170
+ if (type === '>') {
171
+ return date.format('YYYY-MM-DD HH:mm:ss') <= data[key].valueOf();
172
+ } else if (type === '<') {
173
+ return date.format('YYYY-MM-DD HH:mm:ss') >= data[key].valueOf();
174
+ } else {
175
+ return false;
176
+ }
177
+ }
178
+ };
179
+
180
+ toText = (props) => {
181
+ props.onPressEnter = this.onPressEnter;
182
+ return <Control {...props} />;
183
+ };
184
+
185
+ toNumber = (props) => {
186
+ props.defaultValue = props.value;
187
+ delete props.value;
188
+ return <Control {...props} />;
189
+ };
190
+
191
+ getQueryGroupOptions = ({dictionary, configCode='unknown'}) => {
192
+ let realOptions = [];
193
+ if (dictionary && global.dictionary) {
194
+ const dicOptions = global.dictionary[dictionary] || [];
195
+ realOptions = realOptions.concat(dicOptions);
196
+ }
197
+ const state = global.store.getState();
198
+ const path = ['layout', 'tableColsSetting', configCode];
199
+ const {queryList = []} = getPathValue(state, path) || {};
200
+ return realOptions.concat(queryList.map(item => ({title: item.name, value: JSON.stringify(item.query)})));
201
+ };
202
+
203
+ toSelect = (props, filter) => {
204
+ const container = this.getContainer();
205
+ container && (props.getPopupContainer = container);
206
+ props.options = filter.key === 'queryGroup' ? this.getQueryGroupOptions(filter) : this.getOptions(filter);
207
+ props.dropdownMatchSelectWidth = false;
208
+ return <Control {...props} />;
209
+ };
210
+
211
+ createSearchEvent = (filter) => {
212
+ if (this.props.onSearch) {
213
+ return value => this.props.onSearch(filter.key, value, filter);
214
+ } else {
215
+ return null;
216
+ }
217
+ };
218
+
219
+ toSearch = (props, filter) => {
220
+ const container = this.getContainer();
221
+ container && (props.getPopupContainer = container);
222
+ props.options = this.getOptions(filter);
223
+ props.onSearch = this.createSearchEvent(filter);
224
+ props.dropdownMatchSelectWidth = false;
225
+ return <Control {...props} />;
226
+ };
227
+
228
+ selectSearch = (props, filter) => {
229
+ const container = this.getContainer();
230
+ container && (props.getPopupContainer = container);
231
+ props.options = this.getOptions(filter);
232
+ props.onSearch = this.createSearchEvent(filter);
233
+ props.dropdownMatchSelectWidth = false;
234
+ return <Control {...props} />;
235
+ };
236
+
237
+
238
+ toDate = (props,{rule}) => {
239
+ const container = this.getContainer();
240
+ container && (props.getCalendarContainer = container);
241
+ rule && (props.disabledDate = this.validDate(rule));
242
+ props.style = {width: '100%'};
243
+ return <Control {...props} />;
244
+ };
245
+
246
+ toReadonly = (props, filter) => {
247
+ props.value = getTitle(props.value, this.getOptions(filter));
248
+ return <Control {...props} />;
249
+ };
250
+
251
+ toCascader = (props,filter) => {
252
+ const container = this.getContainer();
253
+ container && (props.getPopupContainer = container);
254
+ props.options = this.getOptions(filter);
255
+ props.onSearch = this.createSearchEvent(filter);
256
+ props.placeholder = filter.placeholder || '';
257
+ return <Control {...props} />;
258
+ };
259
+ toTreeSelect = (props,filter) => {
260
+ const container = this.getContainer();
261
+ container && (props.getPopupContainer = container);
262
+ props.options = this.getOptions(filter);
263
+ props.onSearch = this.createSearchEvent(filter);
264
+ props.placeholder = filter.placeholder || '';
265
+ return <Control {...props} />;
266
+ };
267
+ toControl = (control) => {
268
+ const props = this.getControlProps(control);
269
+ switch (control.type) {
270
+ case 'text':
271
+ return this.toText(props, control);
272
+ case 'number':
273
+ return this.toNumber(props, control);
274
+ case 'select':
275
+ return this.toSelect(props, control);
276
+ case 'selectSearch':
277
+ return this.selectSearch(props, control);
278
+ case 'search':
279
+ return this.toSearch(props, control);
280
+ case 'date':
281
+ return this.toDate(props, control);
282
+ case 'readonly':
283
+ return this.toReadonly(props, control);
284
+ case 'cascader':
285
+ return this.toCascader(props,control);
286
+ case 'treeSelect':
287
+ return this.toTreeSelect(props,control)
288
+ default:
289
+ return 'type error';
290
+ }
291
+ };
292
+
293
+ async onAddQueryGroup(configCode, searchData, dictionary) {
294
+ const {onAddQueryGroup} = this.props;
295
+ onAddQueryGroup && onAddQueryGroup(configCode, searchData, dictionary)
296
+ };
297
+
298
+ async onDelQueryGroup(configCode, searchData, dictionary) {
299
+ const {onDelQueryGroup} = this.props;
300
+ onDelQueryGroup && onDelQueryGroup(configCode, searchData, dictionary)
301
+ };
302
+
303
+ toLabel = ({title, key, dictionary, configCode='unknown'}) => {
304
+ if (key === 'queryGroup') { //查询组合
305
+ return (
306
+ <span>
307
+ {title}
308
+ <Icon role='icon' type='plus-circle-o' onClick={this.onAddQueryGroup.bind(this, configCode, this.props.data, dictionary)}/>
309
+ <Icon role='icon' type="minus-circle-o" onClick={this.onDelQueryGroup.bind(this, configCode, this.props.data, dictionary)}/>
310
+ </span>
311
+ );
312
+ } else {
313
+ return title;
314
+ }
315
+ };
316
+
317
+ toCol = (span, control, more) => {
318
+ const factor = control.span || 1;
319
+ return (
320
+ <Col span={span * factor} key={control.key} onFocus={more ? ()=>{this.setState({more: true})} : undefined}>
321
+ <FormItem label={this.toLabel(control)} required={control.required}>
322
+ {this.toControl(control)}
323
+ </FormItem>
324
+ </Col>
325
+ );
326
+ };
327
+
328
+ toCols = () => {
329
+ const {colNum=defaultColNum, filters, displayRow=1} = this.props;
330
+ const span = 24 / Math.min(colNum, filters.filter(item => !item.hide).length);
331
+ return filters.filter(item => !item.hide).map((control, index) => this.toCol(span, control, index >= colNum * displayRow));
332
+ };
333
+
334
+ calWidth = () => {
335
+ const {colNum=defaultColNum, filters} = this.props;
336
+ const length = filters.filter(item => !item.hide).length;
337
+ if (length < colNum) {
338
+ return `${length * 18}%`;
339
+ } else {
340
+ return `${defaultColNum * 18}%`;
341
+ }
342
+ };
343
+
344
+ calHeight = (more) => {
345
+ const {colNum=defaultColNum, filters, displayRow=1} = this.props;
346
+ if (more) {
347
+ const row = Math.ceil(filters.filter(item => !item.hide).length / colNum);
348
+ return row * 36 + (row - 1) * 10;
349
+ } else {
350
+ return displayRow * 36 + (displayRow - 1) * 10;
351
+ }
352
+ };
353
+
354
+ render() {
355
+ return (
356
+ <div className={variables('Search')} style={{height: this.calHeight(this.state.more)}}>
357
+ <Form layout='vertical' style={{width: this.calWidth()}}>
358
+ <Row gutter={20}>
359
+ {this.toCols()}
360
+ </Row>
361
+ </Form>
362
+ {this.toButtons()}
363
+ </div>
364
+ );
365
+ }
366
+ }
367
+
368
+ export default Search;