cloud-b2b 1.1.58 → 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 -141
  68. package/es/Card/Card.js +0 -19
  69. package/es/CodeInput/CodeInput.js +0 -123
  70. package/es/Control/Control.js +0 -444
  71. package/es/Control/event.js +0 -43
  72. package/es/Enhance/Dialogs.js +0 -52
  73. package/es/Enhance/Loading.js +0 -131
  74. package/es/Header/Header.js +0 -162
  75. package/es/Header/Vertical.js +0 -106
  76. package/es/ImageView/ImageView.js +0 -100
  77. package/es/Indent/Indent.js +0 -19
  78. package/es/InpurCascader/InputCascader.js +0 -117
  79. package/es/InputEditor/InputEditor.js +0 -173
  80. package/es/InputSearch/InputSearch.js +0 -266
  81. package/es/InputSelect/InputSelect.js +0 -160
  82. package/es/InputTreeSelect/InputTreeSelect.js +0 -121
  83. package/es/InputWriting/InputWriting.js +0 -85
  84. package/es/Layout/Layout.js +0 -201
  85. package/es/LayoutLink/LayoutLink.js +0 -73
  86. package/es/Link/Link.js +0 -85
  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 -200
  91. package/es/Search/Search.js +0 -497
  92. package/es/Sidebar/Sidebar.js +0 -144
  93. package/es/Sidebar2/Sidebar.js +0 -165
  94. package/es/SuperForm/SuperForm.js +0 -598
  95. package/es/SuperForm2/SuperForm.js +0 -687
  96. package/es/SuperIcon/SuperIcon.js +0 -27
  97. package/es/SuperPagination/SuperPagination.js +0 -109
  98. package/es/SuperTab/SuperTab.js +0 -107
  99. package/es/SuperTab2/SuperTab2.js +0 -145
  100. package/es/SuperTable/DragSortRow.js +0 -97
  101. package/es/SuperTable/FilterDropDown.js +0 -164
  102. package/es/SuperTable/SuperTable.js +0 -808
  103. package/es/SuperTable/fixed.js +0 -34
  104. package/es/SuperTable2/SuperTable2.js +0 -926
  105. package/es/SuperTable2/SuperTableCell.js +0 -225
  106. package/es/SuperTable3/FilterDropDown.js +0 -164
  107. package/es/SuperTable3/SuperTable.js +0 -665
  108. package/es/SuperTable3/fixed.js +0 -34
  109. package/es/SuperToolbar/SuperToolbar.js +0 -195
  110. package/es/SuperUpload/SuperUpload.js +0 -356
  111. package/es/Title/Title.js +0 -33
  112. package/es/Viewer/ImageViews.js +0 -258
  113. package/es/Viewer/Viewer.js +0 -122
  114. package/es/WingBlank/WingBlank.js +0 -16
  115. package/es/helper.js +0 -240
  116. package/es/index.js +0 -37
  117. package/es/variables.js +0 -6
  118. package/lib/Area/Area.js +0 -149
  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 -131
  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 -60
  128. package/lib/Enhance/Loading.js +0 -138
  129. package/lib/Enhance/index.js +0 -25
  130. package/lib/Enhance/package.json +0 -6
  131. package/lib/Header/Header.js +0 -169
  132. package/lib/Header/Header.less +0 -95
  133. package/lib/Header/Vertical.js +0 -114
  134. package/lib/Header/Vertical.less +0 -60
  135. package/lib/Header/package.json +0 -6
  136. package/lib/ImageView/ImageView.js +0 -108
  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 -124
  142. package/lib/InpurCascader/package.json +0 -6
  143. package/lib/InputEditor/InputEditor.js +0 -181
  144. package/lib/InputEditor/inputEditor.less +0 -8
  145. package/lib/InputEditor/package.json +0 -6
  146. package/lib/InputSearch/InputSearch.js +0 -274
  147. package/lib/InputSearch/package.json +0 -6
  148. package/lib/InputSelect/InputSelect.js +0 -168
  149. package/lib/InputSelect/package.json +0 -6
  150. package/lib/InputTreeSelect/InputTreeSelect.js +0 -128
  151. package/lib/InputTreeSelect/package.json +0 -6
  152. package/lib/InputWriting/InputWriting.js +0 -93
  153. package/lib/InputWriting/package.json +0 -6
  154. package/lib/Layout/Layout.js +0 -209
  155. package/lib/Layout/Layout.less +0 -28
  156. package/lib/Layout/package.json +0 -6
  157. package/lib/LayoutLink/LayoutLink.js +0 -86
  158. package/lib/LayoutLink/LayoutLink.less +0 -53
  159. package/lib/LayoutLink/package.json +0 -6
  160. package/lib/Link/Link.js +0 -93
  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 -208
  173. package/lib/NumberInput/package.json +0 -6
  174. package/lib/Search/Search.js +0 -510
  175. package/lib/Sidebar/Sidebar.js +0 -152
  176. package/lib/Sidebar/Sidebar.less +0 -78
  177. package/lib/Sidebar/package.json +0 -6
  178. package/lib/Sidebar2/Sidebar.js +0 -173
  179. package/lib/Sidebar2/Sidebar.less +0 -153
  180. package/lib/Sidebar2/package.json +0 -6
  181. package/lib/SuperForm/SuperForm.js +0 -610
  182. package/lib/SuperForm/SuperForm.less +0 -52
  183. package/lib/SuperForm/package.json +0 -6
  184. package/lib/SuperForm2/SuperForm.js +0 -699
  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 -117
  190. package/lib/SuperPagination/package.json +0 -6
  191. package/lib/SuperTab/SuperTab.js +0 -115
  192. package/lib/SuperTab/SuperTab.less +0 -43
  193. package/lib/SuperTab/package.json +0 -6
  194. package/lib/SuperTab2/SuperTab2.js +0 -153
  195. package/lib/SuperTab2/SuperTab2.less +0 -18
  196. package/lib/SuperTab2/package.json +0 -6
  197. package/lib/SuperTable/DragSortRow.js +0 -105
  198. package/lib/SuperTable/DragSortRow.less +0 -17
  199. package/lib/SuperTable/FilterDropDown.js +0 -172
  200. package/lib/SuperTable/FilterDropDown.less +0 -30
  201. package/lib/SuperTable/SuperTable.js +0 -816
  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 -939
  206. package/lib/SuperTable2/SuperTable2.less +0 -118
  207. package/lib/SuperTable2/SuperTableCell.js +0 -230
  208. package/lib/SuperTable2/package.json +0 -6
  209. package/lib/SuperTable3/FilterDropDown.js +0 -172
  210. package/lib/SuperTable3/FilterDropDown.less +0 -29
  211. package/lib/SuperTable3/SuperTable.js +0 -673
  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 -203
  216. package/lib/SuperToolbar/SuperToolbar.less +0 -17
  217. package/lib/SuperToolbar/package.json +0 -6
  218. package/lib/SuperUpload/SuperUpload.js +0 -368
  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 -266
  225. package/lib/Viewer/Viewer.js +0 -130
  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 -246
  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;