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,186 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import {AutoComplete, Input, Icon} from 'antd';
4
+ import {getObjectExclude} from '../helper';
5
+
6
+ const SelectOption = AutoComplete.Option;
7
+
8
+ // 如果写在局部,每次渲染时生成的suffix引用值不同,会使antd的Input认为suffix动态变化了,从而导致Input报出警告 (antd的BUG)
9
+ const suffix = <Icon type='search' style={{color: 'black', opacity: 0.25, marginRight: -4}} />;
10
+
11
+ const OPTION_STYLE = {float: 'right', marginLeft: '1rem', color: '#aaa', whiteSpace: 'pre-wrap'};
12
+ const OPTION_STYLE2 = {display:'block', color: '#aaa', whiteSpace: 'pre-wrap'};
13
+
14
+ /**
15
+ * filter: 为true表示下拉列表会依据输入的值进行前端过滤,默认为true; 如果不想过滤,则设为false
16
+ * remark: 为true表示options的option中含有remark字段,并需要用remark值进行过滤下拉,默认为false
17
+ * searchWhenClick: 每次点击时,触发onSearch事件,默认为false
18
+ * noSearchWhenTypo: 当输入时,不触发onSearch事件,默认为false
19
+ */
20
+ const PROPS = {
21
+ filter: PropTypes.bool,
22
+ remark: PropTypes.bool,
23
+ searchWhenClick: PropTypes.bool,
24
+ noSearchWhenTypo: PropTypes.bool,
25
+ options: PropTypes.array,
26
+ value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.object]),
27
+ inputRef: PropTypes.func,
28
+ onChange: PropTypes.func,
29
+ onBlur: PropTypes.func,
30
+ onSelect: PropTypes.func,
31
+ onSearch: PropTypes.func
32
+ };
33
+
34
+ const PROPS_KEYS = Object.keys(PROPS);
35
+
36
+ class InputSearch extends React.Component {
37
+ static propTypes = PROPS;
38
+
39
+ constructor(props) {
40
+ super(props);
41
+ this.state = {value: props.value};
42
+ }
43
+
44
+ componentWillReceiveProps(props) {
45
+ if (props.value !== this.props.value) {
46
+ this.setState({value: props.value});
47
+ }
48
+ }
49
+
50
+ onSearch = (value) => {
51
+ this.setState({value});
52
+ const {onSearch, noSearchWhenTypo} = this.props;
53
+ !noSearchWhenTypo && onSearch && onSearch(value);
54
+ };
55
+
56
+ onBlur = () => {
57
+ const {autoAdd=false, options=[], onChange, onBlur} = this.props;
58
+ if (this.props.value !== this.state.value) {
59
+ const index = options.findIndex(option => option.title === this.state.value);
60
+ let value = '';
61
+ if (index === -1) {
62
+ if (autoAdd && this.state.value) {
63
+ if (typeof this.state.value === 'string') {
64
+ value = {value: -1, title: this.state.value};
65
+ } else if (typeof this.state.value === 'object' && this.state.value.title && this.state.value.value) {
66
+ value = this.state.value;
67
+ }
68
+ }
69
+ } else {
70
+ value = options[index];
71
+ }
72
+ this.setState({value});
73
+ onChange && onChange(value);
74
+ onBlur && onBlur(value);
75
+ } else {
76
+ onBlur && onBlur(this.props.value);
77
+ }
78
+ };
79
+
80
+ onSelect = (value) => {
81
+ const {onChange, options = []} = this.props;
82
+ const index = options.findIndex(option => String(option.value) === value);
83
+ if (index > -1) {
84
+ this.setState({value: options[index]});
85
+ onChange && onChange(options[index]);
86
+ }
87
+ };
88
+
89
+ onClick = (e) => {
90
+ const {options=[], onSearch, searchWhenClick, value} = this.props;
91
+ if (onSearch && (!options.length || (!value && searchWhenClick))) {
92
+ onSearch(e.target.value);
93
+ }
94
+ };
95
+
96
+ makeValueValid = (value) => {
97
+ return [NaN, undefined, null].includes(value) ? '' : value;
98
+ };
99
+
100
+ getValue = () => {
101
+ const {value} = this.state;
102
+ return String(this.makeValueValid(typeof value === 'object' ? value.value : value));
103
+ };
104
+
105
+ isMatch = (inputValue, option) => {
106
+ return option.props.children && option.props.children.indexOf(inputValue) !== -1;
107
+ };
108
+
109
+ isMatchRemark = (inputValue, option) => {
110
+ const {text='', remark=''} = option.props;
111
+ return (text.indexOf(inputValue) > -1) || (remark.indexOf(inputValue) > -1);
112
+ };
113
+
114
+ isValidValue = (value) => {
115
+ // value必须为对象,且有属性value的值不等''或undefined
116
+ return value && !['', undefined].includes(value.value);
117
+ };
118
+
119
+ getOptions = () => {
120
+ const value = this.state.value;
121
+ const options = this.props.options;
122
+ if (options && options.length) {
123
+ if (this.isValidValue(value) && !options.find(option => option.value === value.value)) {
124
+ return [value];
125
+ } else {
126
+ return options;
127
+ }
128
+ } else if (this.isValidValue(value)) {
129
+ return [value];
130
+ } else {
131
+ return [];
132
+ }
133
+ };
134
+
135
+ getDataSource = () => {
136
+ return this.getOptions().map(option => {
137
+ return {value: String(option.value), text: option.title};
138
+ });
139
+ };
140
+
141
+ getDataSourceRemark = () => {
142
+ return this.getOptions().map((option, index) => {
143
+ return (
144
+ <SelectOption key={index} value={String(option.value)} text={option.title} remark={option.remark || ''}>
145
+ <span>{option.title}</span>
146
+ <span style={OPTION_STYLE}>{option.remark || ''}</span>
147
+ <span style={OPTION_STYLE2}>{option.description || ''}</span>
148
+ </SelectOption>
149
+ );
150
+ });
151
+ };
152
+
153
+ getProps = () => {
154
+ const {inputRef, filter=true} = this.props;
155
+ const props = Object.assign(getObjectExclude(this.props, PROPS_KEYS), {
156
+ value: this.getValue(),
157
+ allowClear: true,
158
+ ref: inputRef,
159
+ onChange: this.onSearch,
160
+ filterOption: (e, option) => option,
161
+ onSelect: this.onSelect,
162
+ onBlur: this.onBlur,
163
+ });
164
+ if (this.props.remark) {
165
+ props.dataSource = this.getDataSourceRemark();
166
+ props.filterOption = filter ? this.isMatchRemark : false;
167
+ props.optionLabelProp = 'text';
168
+ } else {
169
+ props.dataSource = this.getDataSource();
170
+ props.filterOption = filter ? this.isMatch : false;
171
+ }
172
+ return props;
173
+ };
174
+
175
+ render() {
176
+ return (
177
+ <div onClick={this.onClick}>
178
+ <AutoComplete {...this.getProps()}>
179
+ <Input suffix={suffix} />
180
+ </AutoComplete>
181
+ </div>
182
+ );
183
+ }
184
+ }
185
+
186
+ export default InputSearch;
@@ -0,0 +1,103 @@
1
+ import React from 'react';
2
+ import { Select } from 'antd';
3
+
4
+ const SelectOption = Select.Option;
5
+
6
+ const OPTION_STYLE = {float: 'right', marginLeft: '1rem',marginRight:'1rem', color: '#aaa', whiteSpace: 'pre-wrap'};
7
+
8
+
9
+ class InputSelect extends React.Component {
10
+
11
+ onClick = (e) => {
12
+ const {options=[], onSearch, value=[], searchWhenClick=false} = this.props;
13
+ // if (onSearch && (options.length <= value.length)) {
14
+ if (onSearch && searchWhenClick) {
15
+ onSearch(e.target.value);
16
+ }
17
+ };
18
+
19
+ onSearch = (value) => {
20
+ const {onSearch} = this.props;
21
+ onSearch && onSearch(value);
22
+ };
23
+
24
+ isMatch = (inputValue, option) => {
25
+ return option.props.children.indexOf(inputValue) !== -1;
26
+ };
27
+
28
+ isMatchRemark = (inputValue, option) => {
29
+ const {text, remark} = option.props;
30
+ return (text.indexOf(inputValue) > -1) || (remark.indexOf(inputValue) > -1);
31
+ };
32
+
33
+
34
+ toRemarkOption = (option, index) => {
35
+ return (
36
+ <SelectOption key={index} value={String(option.value)} text={option.title} remark={option.remark || ''} disabled={option.disabled || false}>
37
+ <span>{option.title}</span>
38
+ <span style={OPTION_STYLE}>{option.remark || ''}</span>
39
+ </SelectOption>
40
+ );
41
+ };
42
+
43
+ toOption = (option, index) => {
44
+ return(
45
+ <SelectOption key={index} value={String(option.value)} disabled={option.disabled || false}>{option.title}</SelectOption>)
46
+ };
47
+
48
+ onChange = (options, keyValue) => {
49
+ const {onChange} = this.props;
50
+ const objValue = keyValue.length > 0 ? (keyValue.map(item => {
51
+ return {
52
+ ...options.filter(o => o.value === item.key)[0],
53
+ value:item.key,
54
+ title:item.label,
55
+ }
56
+ })) : [];
57
+ onChange && onChange(objValue);
58
+ };
59
+
60
+
61
+ getValue = () => {
62
+ const {value} = this.props;
63
+ if (typeof value === 'object' && Array.isArray(value) ) {
64
+ return value.map(item => {
65
+ return {
66
+ ...item,
67
+ key:item.value,
68
+ label:item.title,
69
+ }
70
+ })
71
+ } else {
72
+ return [];
73
+ }
74
+ };
75
+
76
+ render() {
77
+ const {options=[] , size, value=[],allowClear=true} = this.props;
78
+ const values = value.map(o => o.value);
79
+ const allOptions = options.filter(o => !values.includes(o.value)).concat(value);
80
+ const props = {
81
+ value:this.getValue(),
82
+ style: this.props.style || {},
83
+ mode:'multiple',
84
+ optionLabelProp: this.props.remark ? 'text' :'children',
85
+ dropdownMatchSelectWidth:false,
86
+ filterOption: this.props.remark ? this.isMatchRemark : this.isMatch,
87
+ onSearch:this.onSearch,
88
+ onChange:this.onChange.bind(this, allOptions),
89
+ labelInValue:true,
90
+ allowClear,
91
+ size
92
+ };
93
+ return (
94
+ <div onClick={this.onClick}>
95
+ <Select {...props}>
96
+ {this.props.remark ? allOptions.map(this.toRemarkOption) : allOptions.map(this.toOption)}
97
+ </Select>
98
+ </div>
99
+ );
100
+ }
101
+ }
102
+
103
+ export default InputSelect;
@@ -0,0 +1,87 @@
1
+ //级联选择input
2
+ import React from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import { TreeSelect } from 'antd';
5
+ import { getObjectExclude } from '../helper';
6
+
7
+ const optionsType = {
8
+ value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
9
+ key:PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
10
+ disabled: PropTypes.bool,
11
+ children: PropTypes.array,
12
+ title: PropTypes.string,
13
+ isLeaf: PropTypes.bool //false 就会触发 loadData 方法,从而在loadData方法中请求下一级数据,
14
+ }
15
+
16
+
17
+ const PROPS = {
18
+ options: PropTypes.arrayOf(PropTypes.shape(optionsType)).isRequired,
19
+ value: PropTypes.array.isRequired,
20
+ placeholder: PropTypes.string,
21
+ onChange: PropTypes.func,
22
+ loadData: PropTypes.func, //动态加载 ps:loadData 与 showSearch 无法一起使用
23
+ showSearch: PropTypes.bool,
24
+ onTreeExpand:PropTypes.func,
25
+ treeDefaultExpandAll:PropTypes.bool,
26
+ treeDataSimpleMode:PropTypes.bool,
27
+ multiple:PropTypes.bool,
28
+ }
29
+
30
+ const PROPS_KEYS = Object.keys(PROPS);
31
+ class InputTreeSelect extends React.Component {
32
+ static propTypes = PROPS;
33
+
34
+ constructor(props) {
35
+ super(props);
36
+ }
37
+
38
+ onChange = (value) => {
39
+ const { onChange } = this.props;
40
+ onChange && onChange(value)
41
+ };
42
+
43
+ loadData = selectedOptions => {
44
+ const { onSearch } = this.props;
45
+ onSearch && onSearch(selectedOptions[0])
46
+ };
47
+
48
+ getOptions = (options) => {
49
+ return options.map(option => {
50
+ let obj = { ...option, label: option.title};
51
+ if(option.children && option.children.length > 0){
52
+ obj.children = this.getOptions(option.children)
53
+ }
54
+ return obj;
55
+ })
56
+ }
57
+
58
+ getProps = () => {
59
+ const { options = [], placeholder, size,value,loadData,treeDefaultExpandAll=false
60
+ ,showSearch=false,treeDataSimpleMode=false,multiple=false} = this.props;
61
+ const props = Object.assign(getObjectExclude({}, PROPS_KEYS), {
62
+ onChange: this.onChange,
63
+ value: value,
64
+ treeData:options,
65
+ treeDataSimpleMode,
66
+ placeholder: placeholder,
67
+ treeDefaultExpandAll,
68
+ multiple,
69
+ size
70
+ })
71
+ //动态加载 ps:loadData 与 showSearch 无法一起使用
72
+ if(loadData){
73
+ props.loadData = this.loadData
74
+ }else if(showSearch){
75
+ props.showSearch = showSearch;
76
+ }
77
+ return props;
78
+ };
79
+
80
+ render() {
81
+ return (
82
+ <TreeSelect {...this.getProps()} />
83
+ )
84
+ }
85
+ }
86
+
87
+ export default InputTreeSelect;
@@ -0,0 +1,65 @@
1
+ import React from 'react';
2
+ import { Select } from 'antd';
3
+
4
+ const { Option } = Select;
5
+
6
+ class InputWriting extends React.Component {
7
+
8
+ state = {
9
+ options: [],
10
+ value: [],
11
+ fetching: false,
12
+ };
13
+
14
+
15
+ onClick = (e) => {
16
+ const {options=[], onSearch,value} = this.props;
17
+ if (onSearch && (!options.length )) {
18
+ onSearch(e.target.value);
19
+ }
20
+ };
21
+
22
+ onSearch = (value) => {
23
+ const {onSearch} = this.props;
24
+ onSearch && onSearch(value);
25
+ };
26
+
27
+ isMatch = (inputValue, option) => {
28
+ return option.props.children.indexOf(inputValue) !== -1;
29
+ };
30
+
31
+ toOption = (option, index) => {
32
+ return(
33
+ <SelectOption key={index} value={String(option.value)}>{option.title}</SelectOption>)
34
+ };
35
+
36
+ onChange = (keyValue) => {
37
+ const {onChange,value} = this.props;
38
+ onChange && onChange(keyValue);
39
+ };
40
+
41
+
42
+
43
+
44
+ render() {
45
+ const {value} = this.props;
46
+ const props = {
47
+ value,
48
+ size:'small',
49
+ mode:'tags',
50
+ allowClear:true,
51
+ onSelect:this.onSelect,
52
+ filterOption: this.isMatch,
53
+ dropdownMatchSelectWidth:false,
54
+ onChange:this.onChange,
55
+ };
56
+ return (
57
+ <div onClick={this.onClick}>
58
+ <Select {...props}>
59
+ </Select>
60
+ </div>
61
+ );
62
+ }
63
+ }
64
+
65
+ export default InputWriting;
@@ -0,0 +1,121 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import Header from '../Header';
4
+ import Sidebar from '../Sidebar2';
5
+ import Loading from '../Loading';
6
+ import {Button} from 'antd';
7
+ import {jump} from '../Link';
8
+ import variables from '../variables';
9
+
10
+ const HeaderV = Header.Vertical;
11
+
12
+ const getCurrentSideKey = (sidebars={}, href) => {
13
+ if (!href) return '';
14
+ for (let key of Object.keys(sidebars)) {
15
+ if (sidebars[key].some(item => item.href === href || (item.children && item.children.some(o => o.href === href)))) {
16
+ return key
17
+ }
18
+ }
19
+ };
20
+
21
+ class Layout extends React.Component {
22
+ static propTypes = {
23
+ children: PropTypes.node.isRequired,
24
+ nav1: PropTypes.string,
25
+ nav2: PropTypes.string,
26
+ sidebars: PropTypes.object,
27
+ openKeys: PropTypes.object,
28
+ onOpenChange: PropTypes.func,
29
+ };
30
+
31
+ constructor(props) {
32
+ super(props);
33
+ this.state = {
34
+ mode: 'expand',
35
+ url: {}
36
+ };
37
+ }
38
+
39
+ componentWillReceiveProps(props) {
40
+ if (!props.loading) {
41
+ this.setState({url: Object.assign({}, this.state.url, {[getCurrentSideKey(props.sidebars, `/${props.nav1}/${props.nav2}`)]: `/${props.nav1}/${props.nav2}`})});
42
+ }
43
+ }
44
+
45
+ onOpenChange = (sideKey, openKeys) => {
46
+ const {onOpenChange} = this.props;
47
+ if (onOpenChange) {
48
+ onOpenChange(sideKey, openKeys);
49
+ }
50
+ };
51
+
52
+ getSidebarProps = (sideKey) => {
53
+ const {sidebars, nav2, openKeys={}, navigation} = this.props;
54
+ const sides = sidebars[sideKey] || [];
55
+ return {
56
+ mode: this.state.mode,
57
+ title: navigation.filter(o => o.key === sideKey)[0].title,
58
+ activeKey: nav2,
59
+ items: sides,
60
+ openKeys: openKeys[sideKey] || [],
61
+ onOpenChange: this.onOpenChange.bind(this, sideKey),
62
+ onModeChange: mode => this.setState({mode})
63
+ };
64
+ };
65
+
66
+ toSidebar = (sideKey, hasHeaderV=false) => {
67
+ if (!sideKey) {
68
+ return null;
69
+ } else {
70
+ return (
71
+ <aside style={{marginLeft: hasHeaderV ? 40 : 0}}>
72
+ <Sidebar {...this.getSidebarProps(sideKey)} />
73
+ </aside>
74
+ );
75
+ }
76
+ };
77
+
78
+ toHeader = () => {
79
+ const {loading, sidebars, nav1, nav2, homeUrl, settingUrl, messageUrl, messageCount, userName, userIcon, loginUrl, onMenuClick, onLogout} = this.props;
80
+ const selectKey = loading ? '' : getCurrentSideKey(sidebars, `/${nav1}/${nav2}`);
81
+ const selectUrl = loading ? '' : `/${nav1}/${nav2}`;
82
+ return <Header {...{homeUrl, settingUrl, messageUrl, loginUrl, userName, userIcon, messageCount, selectKey, selectUrl, onMenuClick,onLogout}} />;
83
+ };
84
+
85
+ headerVProps = (selectKey) => {
86
+ const keys = ['setting', 'message'];
87
+ return {
88
+ selectKey,
89
+ url: this.state.url,
90
+ items: this.props.navigation.filter(item => !keys.includes(item.key)),
91
+ };
92
+ };
93
+
94
+ render() {
95
+ const {loading, sidebars, nav1='', nav2='', children, noPrivilege=false, navigation} = this.props;
96
+ const hasV = navigation.filter(item => !['setting', 'message'].includes(item.key)).length > 1;
97
+ const sideKey = loading || !nav2 ? '' : getCurrentSideKey(sidebars, `/${nav1}/${nav2}`);
98
+ return noPrivilege ? (<div style={{textAlign: 'center'}}>
99
+ <div style={{lineHeight: '100px'}}>
100
+ 您暂无权限,请确认您账号角色是否正确,或联系管理员分配权限
101
+ </div>
102
+ <Button type='primary' onClick={() => jump('/')}>返回首页</Button>
103
+ </div>) : (
104
+ <div className={variables('Layout')}>
105
+ {this.toHeader(sideKey)}
106
+ {
107
+ loading ? <Loading /> :
108
+ <div>
109
+ {hasV ? <HeaderV {...this.headerVProps(sideKey)} /> : null}
110
+ {this.toSidebar(sideKey, hasV)}
111
+ <section>{children}</section>
112
+ </div>
113
+ }
114
+ </div>
115
+ )
116
+ };
117
+ }
118
+
119
+ export default Layout;
120
+
121
+
@@ -0,0 +1,59 @@
1
+ import React, {useState} from 'react';
2
+ import WingBlank from '../WingBlank';
3
+ import Card from '../Card';
4
+ import {Form, Input, Button, Empty} from 'antd';
5
+ import variables from '../variables';
6
+
7
+ const FormItem = Form.Item;
8
+
9
+ function Search({placeholder, onSearch}) {
10
+ let [value, setValue] = useState('');
11
+ let [status, setStatus] = useState('');
12
+ const onClick = () => {
13
+ if (!value) {
14
+ setStatus('error');
15
+ } else {
16
+ onSearch(value);
17
+ }
18
+ };
19
+ const onChange = (e) => {
20
+ setStatus('');
21
+ setValue(e.target.value);
22
+ };
23
+ return (
24
+ <Card className={variables('LayoutLink').search}>
25
+ <div>
26
+ <FormItem validateStatus={status}>
27
+ <Input placeholder={placeholder} value={value} onChange={onChange}/>
28
+ </FormItem>
29
+ <Button onClick={onClick}>开始查询</Button>
30
+ </div>
31
+ </Card>
32
+ )
33
+ }
34
+
35
+ function Title({title}) {
36
+ return (
37
+ <div className={variables('LayoutLink').title}>
38
+ <div>{title}</div>
39
+ <div />
40
+ </div>
41
+ )
42
+ }
43
+
44
+ function LayoutLink({children, img, title, placeholder, onSearch}) {
45
+ return (
46
+ <div className={variables('LayoutLink')}>
47
+ <div><img src={img} alt='banner' /></div>
48
+ <WingBlank>
49
+ <Search {...{placeholder, onSearch}}/>
50
+ <Title title={title}/>
51
+ <Card>{children ? children : <Empty style={{padding: '30px'}}/>}</Card>
52
+ </WingBlank>
53
+ </div>
54
+ );
55
+ }
56
+
57
+ export default LayoutLink;
58
+
59
+
@@ -0,0 +1,57 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import history from '../history';
4
+
5
+ function isLeftClickEvent(event) {
6
+ return event.button === 0;
7
+ }
8
+
9
+ function isModifiedEvent(event) {
10
+ return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);
11
+ }
12
+
13
+ function jump(url) {
14
+ if (history.location.pathname != url) {
15
+ history.push(url);
16
+ } else {
17
+ history.replace(url);
18
+ }
19
+ }
20
+
21
+ class Link extends React.Component {
22
+ static propTypes = {
23
+ to: PropTypes.string,
24
+ disabled: PropTypes.bool,
25
+ children: PropTypes.node,
26
+ onClick: PropTypes.func,
27
+ };
28
+
29
+ handleClick = (event) => {
30
+ if (this.props.onClick) {
31
+ this.props.onClick(event);
32
+ }
33
+
34
+ if (isModifiedEvent(event) || !isLeftClickEvent(event)) {
35
+ return;
36
+ }
37
+
38
+ if (event.defaultPrevented === true) {
39
+ return;
40
+ }
41
+
42
+ event.preventDefault();
43
+ jump(this.props.to);
44
+ };
45
+
46
+ render() {
47
+ const { to, children, disabled, ...props } = this.props;
48
+ if (disabled) {
49
+ return <a {...props}>{children}</a>;
50
+ } else {
51
+ return <a href={to} {...props} onClick={this.handleClick}>{children}</a>;
52
+ }
53
+ }
54
+ }
55
+
56
+ export default Link;
57
+ export {jump};
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import {Spin} from 'antd';
3
+ import variables from '../variables';
4
+
5
+ function Loading({retry, onRetry}) {
6
+ return (
7
+ <div className={variables('Loading')}>
8
+ <div>
9
+ {!retry ? <Spin /> : <span>加载失败,点击<a onClick={onRetry}>重试</a></span>}
10
+ </div>
11
+ </div>
12
+ );
13
+ }
14
+
15
+ export default Loading;