cloud-b2b 1.1.57 → 1.1.59

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 (308) 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 -6
  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/{es → src}/ModalWithDrag/drag.js +128 -116
  27. package/src/NumberInput/NumberInput.js +137 -0
  28. package/src/Search/Search.js +368 -0
  29. package/src/Search2/Search.js +436 -0
  30. package/{lib/Search → src/Search2}/Search.less +65 -63
  31. package/{lib/Search → src/Search2}/package.json +6 -6
  32. package/src/Sidebar/Sidebar.js +111 -0
  33. package/src/Sidebar2/Sidebar.js +143 -0
  34. package/src/SuperForm/SuperForm.js +519 -0
  35. package/src/SuperForm2/SuperForm.js +588 -0
  36. package/src/SuperIcon/SuperIcon.js +14 -0
  37. package/src/SuperPagination/SuperPagination.js +65 -0
  38. package/src/SuperTab/SuperTab.js +84 -0
  39. package/src/SuperTab2/SuperTab2.js +94 -0
  40. package/src/SuperTable/DragSortRow.js +62 -0
  41. package/src/SuperTable/FilterDropDown.js +111 -0
  42. package/src/SuperTable/SuperTable.js +590 -0
  43. package/src/SuperTable/fixed.js +34 -0
  44. package/src/SuperTable2/SuperTable2.js +624 -0
  45. package/src/SuperTable2/SuperTableCell.js +175 -0
  46. package/src/SuperTable3/FilterDropDown.js +111 -0
  47. package/src/SuperTable3/SuperTable.js +498 -0
  48. package/src/SuperTable3/fixed.js +34 -0
  49. package/src/SuperToolbar/SuperToolbar.js +128 -0
  50. package/src/SuperUpload/SuperUpload.js +137 -0
  51. package/src/Title/Title.js +18 -0
  52. package/src/Viewer/ImageViews.js +220 -0
  53. package/src/Viewer/Viewer.js +97 -0
  54. package/src/WingBlank/WingBlank.js +14 -0
  55. package/src/helper.js +185 -0
  56. package/{es → src}/history.js +6 -6
  57. package/src/index.js +39 -0
  58. package/src/variables.js +5 -0
  59. package/test/index.html +10 -0
  60. package/test/test.js +16 -0
  61. package/test/test.less +12 -0
  62. package/test/webpack.config.js +71 -0
  63. package/tools/babel.config.js +14 -0
  64. package/tools/build.js +70 -0
  65. package/tools/publish.js +9 -0
  66. package/tools/util.js +53 -0
  67. package/es/Area/Area.js +0 -138
  68. package/es/Card/Card.js +0 -19
  69. package/es/CodeInput/CodeInput.js +0 -120
  70. package/es/Control/Control.js +0 -444
  71. package/es/Control/event.js +0 -43
  72. package/es/Enhance/Dialogs.js +0 -49
  73. package/es/Enhance/Loading.js +0 -128
  74. package/es/Header/Header.js +0 -159
  75. package/es/Header/Vertical.js +0 -103
  76. package/es/ImageView/ImageView.js +0 -97
  77. package/es/Indent/Indent.js +0 -19
  78. package/es/InpurCascader/InputCascader.js +0 -114
  79. package/es/InputEditor/InputEditor.js +0 -171
  80. package/es/InputSearch/InputSearch.js +0 -263
  81. package/es/InputSelect/InputSelect.js +0 -157
  82. package/es/InputTreeSelect/InputTreeSelect.js +0 -118
  83. package/es/InputWriting/InputWriting.js +0 -82
  84. package/es/Layout/Layout.js +0 -198
  85. package/es/LayoutLink/LayoutLink.js +0 -73
  86. package/es/Link/Link.js +0 -82
  87. package/es/Loading/Loading.js +0 -13
  88. package/es/Loading2/Loading2.js +0 -9
  89. package/es/ModalWithDrag/ModalWithDrag.js +0 -29
  90. package/es/NumberInput/NumberInput.js +0 -197
  91. package/es/Search/Search.js +0 -494
  92. package/es/Sidebar/Sidebar.js +0 -141
  93. package/es/Sidebar2/Sidebar.js +0 -162
  94. package/es/SuperForm/SuperForm.js +0 -593
  95. package/es/SuperForm2/SuperForm.js +0 -682
  96. package/es/SuperIcon/SuperIcon.js +0 -27
  97. package/es/SuperPagination/SuperPagination.js +0 -106
  98. package/es/SuperTab/SuperTab.js +0 -104
  99. package/es/SuperTab2/SuperTab2.js +0 -142
  100. package/es/SuperTable/DragSortRow.js +0 -94
  101. package/es/SuperTable/FilterDropDown.js +0 -161
  102. package/es/SuperTable/SuperTable.js +0 -805
  103. package/es/SuperTable/fixed.js +0 -34
  104. package/es/SuperTable2/SuperTable2.js +0 -923
  105. package/es/SuperTable2/SuperTableCell.js +0 -215
  106. package/es/SuperTable3/FilterDropDown.js +0 -161
  107. package/es/SuperTable3/SuperTable.js +0 -662
  108. package/es/SuperTable3/fixed.js +0 -34
  109. package/es/SuperToolbar/SuperToolbar.js +0 -192
  110. package/es/SuperUpload/SuperUpload.js +0 -356
  111. package/es/Title/Title.js +0 -33
  112. package/es/Viewer/ImageViews.js +0 -255
  113. package/es/Viewer/Viewer.js +0 -119
  114. package/es/WingBlank/WingBlank.js +0 -16
  115. package/es/helper.js +0 -241
  116. package/es/index.js +0 -37
  117. package/es/variables.js +0 -6
  118. package/lib/Area/Area.js +0 -146
  119. package/lib/Area/package.json +0 -6
  120. package/lib/Card/Card.js +0 -27
  121. package/lib/Card/package.json +0 -6
  122. package/lib/CodeInput/CodeInput.js +0 -128
  123. package/lib/CodeInput/package.json +0 -6
  124. package/lib/Control/Control.js +0 -450
  125. package/lib/Control/event.js +0 -51
  126. package/lib/Control/package.json +0 -6
  127. package/lib/Enhance/Dialogs.js +0 -57
  128. package/lib/Enhance/Loading.js +0 -135
  129. package/lib/Enhance/index.js +0 -25
  130. package/lib/Enhance/package.json +0 -6
  131. package/lib/Header/Header.js +0 -166
  132. package/lib/Header/Header.less +0 -95
  133. package/lib/Header/Vertical.js +0 -111
  134. package/lib/Header/Vertical.less +0 -60
  135. package/lib/Header/package.json +0 -6
  136. package/lib/ImageView/ImageView.js +0 -105
  137. package/lib/ImageView/ImageView.less +0 -14
  138. package/lib/ImageView/package.json +0 -6
  139. package/lib/Indent/Indent.js +0 -27
  140. package/lib/Indent/package.json +0 -6
  141. package/lib/InpurCascader/InputCascader.js +0 -121
  142. package/lib/InpurCascader/package.json +0 -6
  143. package/lib/InputEditor/InputEditor.js +0 -179
  144. package/lib/InputEditor/inputEditor.less +0 -8
  145. package/lib/InputEditor/package.json +0 -6
  146. package/lib/InputSearch/InputSearch.js +0 -271
  147. package/lib/InputSearch/package.json +0 -6
  148. package/lib/InputSelect/InputSelect.js +0 -165
  149. package/lib/InputSelect/package.json +0 -6
  150. package/lib/InputTreeSelect/InputTreeSelect.js +0 -125
  151. package/lib/InputTreeSelect/package.json +0 -6
  152. package/lib/InputWriting/InputWriting.js +0 -90
  153. package/lib/InputWriting/package.json +0 -6
  154. package/lib/Layout/Layout.js +0 -206
  155. package/lib/Layout/Layout.less +0 -28
  156. package/lib/Layout/package.json +0 -6
  157. package/lib/LayoutLink/LayoutLink.js +0 -85
  158. package/lib/LayoutLink/LayoutLink.less +0 -53
  159. package/lib/LayoutLink/package.json +0 -6
  160. package/lib/Link/Link.js +0 -90
  161. package/lib/Link/package.json +0 -6
  162. package/lib/Loading/Loading.js +0 -21
  163. package/lib/Loading/Loading.less +0 -13
  164. package/lib/Loading/package.json +0 -6
  165. package/lib/Loading2/Loading2.js +0 -17
  166. package/lib/Loading2/Loading2.less +0 -19
  167. package/lib/Loading2/package.json +0 -6
  168. package/lib/ModalWithDrag/ModalWithDrag.js +0 -37
  169. package/lib/ModalWithDrag/ModalWithDrag.less +0 -6
  170. package/lib/ModalWithDrag/drag.js +0 -124
  171. package/lib/ModalWithDrag/package.json +0 -6
  172. package/lib/NumberInput/NumberInput.js +0 -205
  173. package/lib/NumberInput/package.json +0 -6
  174. package/lib/Search/Search.js +0 -506
  175. package/lib/Sidebar/Sidebar.js +0 -149
  176. package/lib/Sidebar/Sidebar.less +0 -78
  177. package/lib/Sidebar/package.json +0 -6
  178. package/lib/Sidebar2/Sidebar.js +0 -170
  179. package/lib/Sidebar2/Sidebar.less +0 -153
  180. package/lib/Sidebar2/package.json +0 -6
  181. package/lib/SuperForm/SuperForm.js +0 -604
  182. package/lib/SuperForm/SuperForm.less +0 -52
  183. package/lib/SuperForm/package.json +0 -6
  184. package/lib/SuperForm2/SuperForm.js +0 -693
  185. package/lib/SuperForm2/SuperForm.less +0 -52
  186. package/lib/SuperForm2/package.json +0 -6
  187. package/lib/SuperIcon/SuperIcon.js +0 -35
  188. package/lib/SuperIcon/package.json +0 -6
  189. package/lib/SuperPagination/SuperPagination.js +0 -114
  190. package/lib/SuperPagination/package.json +0 -6
  191. package/lib/SuperTab/SuperTab.js +0 -112
  192. package/lib/SuperTab/SuperTab.less +0 -43
  193. package/lib/SuperTab/package.json +0 -6
  194. package/lib/SuperTab2/SuperTab2.js +0 -150
  195. package/lib/SuperTab2/SuperTab2.less +0 -18
  196. package/lib/SuperTab2/package.json +0 -6
  197. package/lib/SuperTable/DragSortRow.js +0 -102
  198. package/lib/SuperTable/DragSortRow.less +0 -17
  199. package/lib/SuperTable/FilterDropDown.js +0 -169
  200. package/lib/SuperTable/FilterDropDown.less +0 -30
  201. package/lib/SuperTable/SuperTable.js +0 -813
  202. package/lib/SuperTable/SuperTable.less +0 -132
  203. package/lib/SuperTable/fixed.js +0 -42
  204. package/lib/SuperTable/package.json +0 -6
  205. package/lib/SuperTable2/SuperTable2.js +0 -935
  206. package/lib/SuperTable2/SuperTable2.less +0 -118
  207. package/lib/SuperTable2/SuperTableCell.js +0 -220
  208. package/lib/SuperTable2/package.json +0 -6
  209. package/lib/SuperTable3/FilterDropDown.js +0 -169
  210. package/lib/SuperTable3/FilterDropDown.less +0 -29
  211. package/lib/SuperTable3/SuperTable.js +0 -670
  212. package/lib/SuperTable3/SuperTable.less +0 -99
  213. package/lib/SuperTable3/fixed.js +0 -42
  214. package/lib/SuperTable3/package.json +0 -6
  215. package/lib/SuperToolbar/SuperToolbar.js +0 -200
  216. package/lib/SuperToolbar/SuperToolbar.less +0 -17
  217. package/lib/SuperToolbar/package.json +0 -6
  218. package/lib/SuperUpload/SuperUpload.js +0 -367
  219. package/lib/SuperUpload/SuperUpload.less +0 -28
  220. package/lib/SuperUpload/package.json +0 -6
  221. package/lib/Title/Title.js +0 -41
  222. package/lib/Title/Title.less +0 -35
  223. package/lib/Title/package.json +0 -6
  224. package/lib/Viewer/ImageViews.js +0 -263
  225. package/lib/Viewer/Viewer.js +0 -127
  226. package/lib/Viewer/Viewer.less +0 -67
  227. package/lib/Viewer/imgView.less +0 -59
  228. package/lib/Viewer/package.json +0 -7
  229. package/lib/WingBlank/WingBlank.js +0 -24
  230. package/lib/WingBlank/WingBlank.less +0 -12
  231. package/lib/WingBlank/package.json +0 -6
  232. package/lib/adjust.less +0 -89
  233. package/lib/helper.js +0 -247
  234. package/lib/history.js +0 -12
  235. package/lib/index.js +0 -271
  236. package/lib/index.less +0 -31
  237. package/lib/style.less +0 -30
  238. package/lib/variables.js +0 -14
  239. package/lib/variables.less +0 -73
  240. /package/{es → src}/Area/package.json +0 -0
  241. /package/{es → src}/Card/package.json +0 -0
  242. /package/{es → src}/CodeInput/package.json +0 -0
  243. /package/{es → src}/Control/package.json +0 -0
  244. /package/{es → src}/Enhance/package.json +0 -0
  245. /package/{es → src}/Header/Header.less +0 -0
  246. /package/{es → src}/Header/Vertical.less +0 -0
  247. /package/{es → src}/Header/package.json +0 -0
  248. /package/{es → src}/ImageView/ImageView.less +0 -0
  249. /package/{es → src}/ImageView/package.json +0 -0
  250. /package/{es → src}/Indent/package.json +0 -0
  251. /package/{es → src}/InpurCascader/package.json +0 -0
  252. /package/{es → src}/InputEditor/inputEditor.less +0 -0
  253. /package/{es → src}/InputEditor/package.json +0 -0
  254. /package/{es → src}/InputSearch/package.json +0 -0
  255. /package/{es → src}/InputSelect/package.json +0 -0
  256. /package/{es → src}/InputTreeSelect/package.json +0 -0
  257. /package/{es → src}/InputWriting/package.json +0 -0
  258. /package/{es → src}/Layout/Layout.less +0 -0
  259. /package/{es → src}/Layout/package.json +0 -0
  260. /package/{es → src}/LayoutLink/LayoutLink.less +0 -0
  261. /package/{es → src}/LayoutLink/package.json +0 -0
  262. /package/{es → src}/Link/package.json +0 -0
  263. /package/{es → src}/Loading/Loading.less +0 -0
  264. /package/{es → src}/Loading/package.json +0 -0
  265. /package/{es → src}/Loading2/Loading2.less +0 -0
  266. /package/{es → src}/Loading2/package.json +0 -0
  267. /package/{es → src}/ModalWithDrag/ModalWithDrag.less +0 -0
  268. /package/{es → src}/ModalWithDrag/package.json +0 -0
  269. /package/{es → src}/NumberInput/package.json +0 -0
  270. /package/{es → src}/Search/Search.less +0 -0
  271. /package/{es → src}/Search/package.json +0 -0
  272. /package/{es → src}/Sidebar/Sidebar.less +0 -0
  273. /package/{es → src}/Sidebar/package.json +0 -0
  274. /package/{es → src}/Sidebar2/Sidebar.less +0 -0
  275. /package/{es → src}/Sidebar2/package.json +0 -0
  276. /package/{es → src}/SuperForm/SuperForm.less +0 -0
  277. /package/{es → src}/SuperForm/package.json +0 -0
  278. /package/{es → src}/SuperForm2/SuperForm.less +0 -0
  279. /package/{es → src}/SuperForm2/package.json +0 -0
  280. /package/{es → src}/SuperIcon/package.json +0 -0
  281. /package/{es → src}/SuperPagination/package.json +0 -0
  282. /package/{es → src}/SuperTab/SuperTab.less +0 -0
  283. /package/{es → src}/SuperTab/package.json +0 -0
  284. /package/{es → src}/SuperTab2/SuperTab2.less +0 -0
  285. /package/{es → src}/SuperTab2/package.json +0 -0
  286. /package/{es → src}/SuperTable/DragSortRow.less +0 -0
  287. /package/{es → src}/SuperTable/FilterDropDown.less +0 -0
  288. /package/{es → src}/SuperTable/SuperTable.less +0 -0
  289. /package/{es → src}/SuperTable/package.json +0 -0
  290. /package/{es → src}/SuperTable2/SuperTable2.less +0 -0
  291. /package/{es → src}/SuperTable2/package.json +0 -0
  292. /package/{es → src}/SuperTable3/FilterDropDown.less +0 -0
  293. /package/{es → src}/SuperTable3/SuperTable.less +0 -0
  294. /package/{es → src}/SuperTable3/package.json +0 -0
  295. /package/{es → src}/SuperToolbar/SuperToolbar.less +0 -0
  296. /package/{es → src}/SuperToolbar/package.json +0 -0
  297. /package/{es → src}/SuperUpload/SuperUpload.less +0 -0
  298. /package/{es → src}/SuperUpload/package.json +0 -0
  299. /package/{es → src}/Title/Title.less +0 -0
  300. /package/{es → src}/Title/package.json +0 -0
  301. /package/{es → src}/Viewer/Viewer.less +0 -0
  302. /package/{es → src}/Viewer/imgView.less +0 -0
  303. /package/{es → src}/Viewer/package.json +0 -0
  304. /package/{es → src}/WingBlank/WingBlank.less +0 -0
  305. /package/{es → src}/WingBlank/package.json +0 -0
  306. /package/{es → src}/adjust.less +0 -0
  307. /package/{es → src}/style.less +0 -0
  308. /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;