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