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,368 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import ReactDOM from 'react-dom';
4
+ import {Button, Form, Row, Col, Icon} from 'antd';
5
+ import Control, {getTitle, makeString} from '../Control';
6
+ import {getPathValue} from "../helper";
7
+ import variables from '../variables';
8
+
9
+ const FormItem = Form.Item;
10
+ const defaultSize = 'small';
11
+ const defaultColNum = 4;
12
+
13
+ const TYPE = [
14
+ 'text',
15
+ 'search',
16
+ 'select',
17
+ 'number',
18
+ 'date',
19
+ 'readonly',
20
+ 'selectSearch',
21
+ 'cascader', //级联选择下拉
22
+ 'treeSelect' //树选择
23
+ ];
24
+
25
+ /**
26
+ * search: 搜索按钮的标题
27
+ * more:更多按钮的标题
28
+ * reset:重置按钮的标题
29
+ * sort:排序按钮的标题
30
+ */
31
+ const ConfigType = {
32
+ search: PropTypes.string.isRequired,
33
+ reset: PropTypes.string,
34
+ sort: PropTypes.string,
35
+ more: PropTypes.string
36
+ };
37
+
38
+ /**
39
+ * key: 唯一标识一个表单元素
40
+ * title:表单元素旁边的标题
41
+ * type:表单元素的类型
42
+ * props:传递给表单元素的额外属性
43
+ */
44
+ const FilterType = {
45
+ key: PropTypes.string.isRequired,
46
+ title: PropTypes.string.isRequired,
47
+ type: PropTypes.oneOf(TYPE).isRequired,
48
+ options: PropTypes.array,
49
+ props: PropTypes.object
50
+ };
51
+
52
+ /**
53
+ * data:传递给filters的默认值,为key:value的形式,此处的key为FilterType中的key
54
+ * isSort:是否需要排序按钮,默认false,当设置为true时,onClick函数需要实现key为sort的响应函数
55
+ * options: 作用同FilterType.options类似,但优先级高于它
56
+ * onClick:按钮点击事件,原型为func(key)
57
+ * onChange:表单控件内容改变时触发,原型为func(key, value)
58
+ * onSearch:search控件发出的事件,原型为func(key, value)
59
+ * displayRow:折叠时需要展示的行数,整数,默认为1
60
+ */
61
+ class Search extends React.Component {
62
+ static propTypes = {
63
+ config: PropTypes.shape(ConfigType).isRequired,
64
+ filters: PropTypes.arrayOf(PropTypes.shape(FilterType)).isRequired,
65
+ data: PropTypes.object,
66
+ options: PropTypes.object,
67
+ getContainer: PropTypes.func,
68
+ onClick: PropTypes.func,
69
+ onChange: PropTypes.func,
70
+ onSearch: PropTypes.func,
71
+ onHeightChange: PropTypes.func,
72
+ displayRow: PropTypes.number,
73
+ };
74
+
75
+ state = {more: false};
76
+
77
+ onClick = (key) => {
78
+ const {onClick} = this.props;
79
+ onClick && onClick(key);
80
+ };
81
+
82
+ onMore = () => {
83
+ const {onHeightChange} = this.props;
84
+ this.setState({more: !this.state.more});
85
+ onHeightChange && onHeightChange(this.calHeight(!this.state.more));
86
+ };
87
+
88
+ onChange = (dictionary, key, value) => {
89
+ const {onChange} = this.props;
90
+ if (value && key === 'queryGroup' && dictionary && global.dictionary && global.dictionary[dictionary]
91
+ && !global.dictionary[dictionary].map(item => item.value).includes(value)) {
92
+ const realValue = JSON.parse(value);
93
+ this.onClick('reset');
94
+ Object.keys(realValue).map(objectKey => {
95
+ onChange && objectKey !== 'queryId' && onChange(objectKey, realValue[objectKey]);
96
+ });
97
+ }
98
+ onChange && onChange(key, value);
99
+ };
100
+
101
+ onPressEnter = () => {
102
+ ReactDOM.findDOMNode(this.refs.search).click();
103
+ };
104
+
105
+ toButton = (key, props={}) => {
106
+ const {config} = this.props;
107
+ const onClick = this.onClick.bind(this, key);
108
+ return <Button size={defaultSize} onClick={onClick} {...props}>{config[key]}</Button>;
109
+ };
110
+
111
+ toMore = () => {
112
+ return (
113
+ <a role='more' onClick={this.onMore}>
114
+ {this.props.config.more}
115
+ <Icon type='down' data-status={!this.state.more ? 'down' : 'up'} />
116
+ </a>
117
+ );
118
+ };
119
+
120
+ toButtons = () => {
121
+ const {config} = this.props;
122
+ return (
123
+ <div role='buttons'>
124
+ {this.toButton('search', {ref: 'search', type: 'primary'})}
125
+ {config.reset ? this.toButton('reset') : null}
126
+ {this.isSort() ? this.toButton('sort') : null}
127
+ {this.isMore() ? this.toMore() : null}
128
+ </div>
129
+ );
130
+ };
131
+
132
+ isSort = () => {
133
+ const {config, colNum=defaultColNum, filters, isSort=false} = this.props;
134
+ return isSort && config.sort && (filters.length > colNum);
135
+ };
136
+
137
+ isMore = () => {
138
+ const {config, colNum=defaultColNum, filters, displayRow=1} = this.props;
139
+ return config.more && (filters.filter(item => !item.hide).length > colNum * displayRow);
140
+ };
141
+
142
+ getOptions = (filter) => {
143
+ const options = this.props.options;
144
+ if (options && Array.isArray(options[filter.key])) {
145
+ return options[filter.key];
146
+ } else {
147
+ return filter.options || filter.typeRelated || [];
148
+ }
149
+ };
150
+
151
+ getContainer = () => {
152
+ return this.props.getContainer;
153
+ };
154
+
155
+ getControlProps = (control) => {
156
+ const {data={}} = this.props;
157
+ return {
158
+ ...(control.props || {}),
159
+ size: defaultSize,
160
+ type: control.type,
161
+ value: makeString(data[control.key]),
162
+ onChange: this.onChange.bind(this, control.dictionary, control.key)
163
+ };
164
+ };
165
+ validDate = ({key, type}) => (date) => {
166
+ const {data={}} = this.props;
167
+ if (!date || !data[key]) {
168
+ return false;
169
+ } else {
170
+ if (type === '>') {
171
+ return date.format('YYYY-MM-DD HH:mm:ss') <= data[key].valueOf();
172
+ } else if (type === '<') {
173
+ return date.format('YYYY-MM-DD HH:mm:ss') >= data[key].valueOf();
174
+ } else {
175
+ return false;
176
+ }
177
+ }
178
+ };
179
+
180
+ toText = (props) => {
181
+ props.onPressEnter = this.onPressEnter;
182
+ return <Control {...props} />;
183
+ };
184
+
185
+ toNumber = (props) => {
186
+ props.defaultValue = props.value;
187
+ delete props.value;
188
+ return <Control {...props} />;
189
+ };
190
+
191
+ getQueryGroupOptions = ({dictionary, configCode='unknown'}) => {
192
+ let realOptions = [];
193
+ if (dictionary && global.dictionary) {
194
+ const dicOptions = global.dictionary[dictionary] || [];
195
+ realOptions = realOptions.concat(dicOptions);
196
+ }
197
+ const state = global.store.getState();
198
+ const path = ['layout', 'tableColsSetting', configCode];
199
+ const {queryList = []} = getPathValue(state, path) || {};
200
+ return realOptions.concat(queryList.map(item => ({title: item.name, value: JSON.stringify(item.query)})));
201
+ };
202
+
203
+ toSelect = (props, filter) => {
204
+ const container = this.getContainer();
205
+ container && (props.getPopupContainer = container);
206
+ props.options = filter.key === 'queryGroup' ? this.getQueryGroupOptions(filter) : this.getOptions(filter);
207
+ props.dropdownMatchSelectWidth = false;
208
+ return <Control {...props} />;
209
+ };
210
+
211
+ createSearchEvent = (filter) => {
212
+ if (this.props.onSearch) {
213
+ return value => this.props.onSearch(filter.key, value, filter);
214
+ } else {
215
+ return null;
216
+ }
217
+ };
218
+
219
+ toSearch = (props, filter) => {
220
+ const container = this.getContainer();
221
+ container && (props.getPopupContainer = container);
222
+ props.options = this.getOptions(filter);
223
+ props.onSearch = this.createSearchEvent(filter);
224
+ props.dropdownMatchSelectWidth = false;
225
+ return <Control {...props} />;
226
+ };
227
+
228
+ selectSearch = (props, filter) => {
229
+ const container = this.getContainer();
230
+ container && (props.getPopupContainer = container);
231
+ props.options = this.getOptions(filter);
232
+ props.onSearch = this.createSearchEvent(filter);
233
+ props.dropdownMatchSelectWidth = false;
234
+ return <Control {...props} />;
235
+ };
236
+
237
+
238
+ toDate = (props,{rule}) => {
239
+ const container = this.getContainer();
240
+ container && (props.getCalendarContainer = container);
241
+ rule && (props.disabledDate = this.validDate(rule));
242
+ props.style = {width: '100%'};
243
+ return <Control {...props} />;
244
+ };
245
+
246
+ toReadonly = (props, filter) => {
247
+ props.value = getTitle(props.value, this.getOptions(filter));
248
+ return <Control {...props} />;
249
+ };
250
+
251
+ toCascader = (props,filter) => {
252
+ const container = this.getContainer();
253
+ container && (props.getPopupContainer = container);
254
+ props.options = this.getOptions(filter);
255
+ props.onSearch = this.createSearchEvent(filter);
256
+ props.placeholder = filter.placeholder || '';
257
+ return <Control {...props} />;
258
+ };
259
+ toTreeSelect = (props,filter) => {
260
+ const container = this.getContainer();
261
+ container && (props.getPopupContainer = container);
262
+ props.options = this.getOptions(filter);
263
+ props.onSearch = this.createSearchEvent(filter);
264
+ props.placeholder = filter.placeholder || '';
265
+ return <Control {...props} />;
266
+ };
267
+ toControl = (control) => {
268
+ const props = this.getControlProps(control);
269
+ switch (control.type) {
270
+ case 'text':
271
+ return this.toText(props, control);
272
+ case 'number':
273
+ return this.toNumber(props, control);
274
+ case 'select':
275
+ return this.toSelect(props, control);
276
+ case 'selectSearch':
277
+ return this.selectSearch(props, control);
278
+ case 'search':
279
+ return this.toSearch(props, control);
280
+ case 'date':
281
+ return this.toDate(props, control);
282
+ case 'readonly':
283
+ return this.toReadonly(props, control);
284
+ case 'cascader':
285
+ return this.toCascader(props,control);
286
+ case 'treeSelect':
287
+ return this.toTreeSelect(props,control)
288
+ default:
289
+ return 'type error';
290
+ }
291
+ };
292
+
293
+ async onAddQueryGroup(configCode, searchData, dictionary) {
294
+ const {onAddQueryGroup} = this.props;
295
+ onAddQueryGroup && onAddQueryGroup(configCode, searchData, dictionary)
296
+ };
297
+
298
+ async onDelQueryGroup(configCode, searchData, dictionary) {
299
+ const {onDelQueryGroup} = this.props;
300
+ onDelQueryGroup && onDelQueryGroup(configCode, searchData, dictionary)
301
+ };
302
+
303
+ toLabel = ({title, key, dictionary, configCode='unknown'}) => {
304
+ if (key === 'queryGroup') { //查询组合
305
+ return (
306
+ <span>
307
+ {title}
308
+ <Icon role='icon' type='plus-circle-o' onClick={this.onAddQueryGroup.bind(this, configCode, this.props.data, dictionary)}/>
309
+ <Icon role='icon' type="minus-circle-o" onClick={this.onDelQueryGroup.bind(this, configCode, this.props.data, dictionary)}/>
310
+ </span>
311
+ );
312
+ } else {
313
+ return title;
314
+ }
315
+ };
316
+
317
+ toCol = (span, control, more) => {
318
+ const factor = control.span || 1;
319
+ return (
320
+ <Col span={span * factor} key={control.key} onFocus={more ? ()=>{this.setState({more: true})} : undefined}>
321
+ <FormItem label={this.toLabel(control)} required={control.required}>
322
+ {this.toControl(control)}
323
+ </FormItem>
324
+ </Col>
325
+ );
326
+ };
327
+
328
+ toCols = () => {
329
+ const {colNum=defaultColNum, filters, displayRow=1} = this.props;
330
+ const span = 24 / Math.min(colNum, filters.filter(item => !item.hide).length);
331
+ return filters.filter(item => !item.hide).map((control, index) => this.toCol(span, control, index >= colNum * displayRow));
332
+ };
333
+
334
+ calWidth = () => {
335
+ const {colNum=defaultColNum, filters} = this.props;
336
+ const length = filters.filter(item => !item.hide).length;
337
+ if (length < colNum) {
338
+ return `${length * 18}%`;
339
+ } else {
340
+ return `${defaultColNum * 18}%`;
341
+ }
342
+ };
343
+
344
+ calHeight = (more) => {
345
+ const {colNum=defaultColNum, filters, displayRow=1} = this.props;
346
+ if (more) {
347
+ const row = Math.ceil(filters.filter(item => !item.hide).length / colNum);
348
+ return row * 36 + (row - 1) * 10;
349
+ } else {
350
+ return displayRow * 36 + (displayRow - 1) * 10;
351
+ }
352
+ };
353
+
354
+ render() {
355
+ return (
356
+ <div className={variables('Search')} style={{height: this.calHeight(this.state.more)}}>
357
+ <Form layout='vertical' style={{width: this.calWidth()}}>
358
+ <Row gutter={20}>
359
+ {this.toCols()}
360
+ </Row>
361
+ </Form>
362
+ {this.toButtons()}
363
+ </div>
364
+ );
365
+ }
366
+ }
367
+
368
+ export default Search;
@@ -0,0 +1,111 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import Link from '../Link';
4
+ import SuperIcon from '../SuperIcon';
5
+ import {Menu} from 'antd';
6
+ import variables from '../variables';
7
+
8
+ const SubMenu = Menu.SubMenu;
9
+ const MenuItem = Menu.Item;
10
+
11
+ /** 侧边栏二级条目的类型
12
+ * key: 唯一标识一个条目
13
+ * title:条目的标题
14
+ * href: 为跳转页面的url
15
+ */
16
+ const ChildType = {
17
+ key: PropTypes.string.isRequired,
18
+ title: PropTypes.string.isRequired,
19
+ href: PropTypes.string.isRequired
20
+ };
21
+
22
+ /** 侧边栏一级条目的类型
23
+ * key: 唯一标识一个条目
24
+ * title:条目的标题
25
+ * icon:条目左边图标url,大小为20*20px
26
+ * isFolder:为true表明有下级菜单,此时href被忽略,children存放下级菜单的信息
27
+ * href: isFolder为false时,为跳转页面的url,否则被忽略
28
+ * children:isFolder为true时,存放下级菜单的信息,否则被忽略
29
+ */
30
+ const ItemType = {
31
+ key: PropTypes.string.isRequired,
32
+ title: PropTypes.string.isRequired,
33
+ icon: PropTypes.string,
34
+ isFolder: PropTypes.bool,
35
+ href: PropTypes.string,
36
+ children: PropTypes.arrayOf(PropTypes.shape(ChildType))
37
+ };
38
+
39
+ /**
40
+ * activeKey:指定被选中的一级条目的key,不能是二级条目的key
41
+ * items:存放所有侧边栏条目的信息
42
+ * style: 样式
43
+ */
44
+ class Sidebar extends React.Component {
45
+ static propTypes = {
46
+ activeKey: PropTypes.string.isRequired,
47
+ items: PropTypes.arrayOf(PropTypes.shape(ItemType)).isRequired,
48
+ style: PropTypes.object
49
+ };
50
+
51
+ onOpenChange = (openKeys) => {
52
+ const {onOpenChange} = this.props;
53
+ if (onOpenChange) {
54
+ onOpenChange(openKeys);
55
+ }
56
+ };
57
+
58
+ toIcon = (type) => {
59
+ if (type) {
60
+ return <SuperIcon type={type} style={{fontSize: 16, verticalAlign: -2}} />
61
+ } else {
62
+ return null;
63
+ }
64
+ };
65
+
66
+ toItem = ({key, title, isFolder, children, href, icon, unreadTotal}) => {
67
+ if (isFolder) {
68
+ const t = <div>{this.toIcon(icon)}{title}</div>;
69
+ return (
70
+ <SubMenu key={key} title={t}>
71
+ {this.toItems(children)}
72
+ </SubMenu>
73
+ );
74
+ } else {
75
+ return (
76
+ <MenuItem key={key}>
77
+ <Link to={href} title={title} className={variables('Sidebar').unreadTotalLink}>
78
+ {this.toIcon(icon)}
79
+ {title}
80
+ {unreadTotal && unreadTotal>0 && <span className={variables('Sidebar').unreadTotalLink.unreadTotal}>{unreadTotal}</span>}
81
+ </Link>
82
+ </MenuItem>
83
+ );
84
+ }
85
+ };
86
+
87
+ toItems = (items) => {
88
+ return items.map(this.toItem);
89
+ };
90
+
91
+ getProps = () => {
92
+ const {style, activeKey, openKeys=[]} = this.props;
93
+ return {
94
+ style, openKeys,
95
+ selectedKeys: [activeKey],
96
+ mode: 'inline',
97
+ onOpenChange: this.onOpenChange,
98
+ className: variables('Sidebar')
99
+ }
100
+ };
101
+
102
+ render() {
103
+ return (
104
+ <Menu {...this.getProps()}>
105
+ {this.toItems(this.props.items)}
106
+ </Menu>
107
+ );
108
+ }
109
+ }
110
+
111
+ export default Sidebar;
@@ -0,0 +1,143 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import Link from '../Link';
4
+ import {Icon} from 'antd';
5
+ import variables from '../variables';
6
+
7
+ const ITEM_HEIGHT = 40;
8
+
9
+ /** 侧边栏二级条目的类型
10
+ * key: 唯一标识一个条目
11
+ * title:条目的标题
12
+ * href: 为跳转页面的url
13
+ */
14
+ const ChildType = {
15
+ key: PropTypes.string.isRequired,
16
+ title: PropTypes.string.isRequired,
17
+ href: PropTypes.string.isRequired
18
+ };
19
+
20
+ /** 侧边栏一级条目的类型
21
+ * key: 唯一标识一个条目
22
+ * title:条目的标题
23
+ * isFolder:为true表明有下级菜单,此时href被忽略,children存放下级菜单的信息
24
+ * href: isFolder为false时,为跳转页面的url,否则被忽略
25
+ * children:isFolder为true时,存放下级菜单的信息,否则被忽略
26
+ */
27
+ const ItemType = {
28
+ key: PropTypes.string.isRequired,
29
+ title: PropTypes.string.isRequired,
30
+ isFolder: PropTypes.bool,
31
+ href: PropTypes.string,
32
+ children: PropTypes.arrayOf(PropTypes.shape(ChildType))
33
+ };
34
+
35
+ /**
36
+ * title: 侧边栏的标题
37
+ * mode: 显示模式,默认为expand(展开)
38
+ * activeKey:指定被选中的一级条目的key,不能是二级条目的key
39
+ * items:存放所有侧边栏条目的信息
40
+ * openKeys: 展开条目的key
41
+ * style: 样式
42
+ * onOpenChange: 展开条目信息改变时触发,原型为func(openKeys)
43
+ * onModeChange: 模式改变时触发,原型为func(mode)
44
+ */
45
+ class Sidebar extends React.Component {
46
+ static propTypes = {
47
+ title: PropTypes.string,
48
+ mode: PropTypes.oneOf(['collapse', 'expand']),
49
+ activeKey: PropTypes.string,
50
+ items: PropTypes.arrayOf(PropTypes.shape(ItemType)),
51
+ openKeys: PropTypes.array,
52
+ style: PropTypes.object,
53
+ onOpenChange: PropTypes.func,
54
+ onModeChange: PropTypes.func
55
+ };
56
+
57
+ onModeChange = () => {
58
+ const mode = this.props.mode || 'expand';
59
+ this.props.onModeChange(mode === 'expand' ? 'collapse' : 'expand');
60
+ };
61
+
62
+ isSelect = (item) => {
63
+ return this.props.activeKey === item.key;
64
+ };
65
+
66
+ isOpen = (item) => {
67
+ return this.props.openKeys.includes(item.key);
68
+ };
69
+
70
+ getHeight = (item) => {
71
+ if (item.isFolder && this.isOpen(item)) {
72
+ return (item.children.length + 1) * ITEM_HEIGHT;
73
+ } else {
74
+ return ITEM_HEIGHT;
75
+ }
76
+ };
77
+
78
+ linkProps = (item) => {
79
+ if (item.isFolder) {
80
+ return {
81
+ title: item.title,
82
+ onClick: () => {
83
+ if (this.isOpen(item)) {
84
+ this.props.onOpenChange(this.props.openKeys.filter(key => item.key !== key));
85
+ } else {
86
+ this.props.onOpenChange([...this.props.openKeys, item.key]);
87
+ }
88
+ }
89
+ }
90
+ } else {
91
+ return {
92
+ title: item.title,
93
+ to: item.href,
94
+ 'data-select': this.isSelect(item)
95
+ };
96
+ }
97
+ };
98
+
99
+ renderChild = (item, index) => {
100
+ return (
101
+ <li key={index}>
102
+ <Link {...this.linkProps(item)} data-role='child-item'>
103
+ <span>{item.title}</span>
104
+ {item.unreadTotal && item.unreadTotal>0 && <span className={variables('Sidebar2').unreadTotal}>{item.unreadTotal}</span>}
105
+ </Link>
106
+ </li>
107
+ );
108
+ };
109
+
110
+ renderItem = (item, index) => {
111
+ return (
112
+ <li key={index} style={{height: this.getHeight(item)}}>
113
+ <Link {...this.linkProps(item)} data-role='parent-item'>
114
+ <span>{item.isFolder ? <Icon type='caret-right' data-open={this.isOpen(item)} /> : null}</span>
115
+ <span>{item.title}</span>
116
+ </Link>
117
+ {item.isFolder && this.isOpen(item) ? <ul>{item.children.map(this.renderChild)}</ul> : null}
118
+ </li>
119
+ );
120
+ };
121
+
122
+ render() {
123
+ return (
124
+ <div className={variables('Sidebar2')} data-mode={this.props.mode || 'expand'}>
125
+ <div>
126
+ <span> </span>
127
+ <span>{this.props.title}</span>
128
+ </div>
129
+ <ul>{this.props.items.map(this.renderItem)}</ul>
130
+ {!this.props.onModeChange ? null : (
131
+ <div data-role='shousuo' onClick={this.onModeChange}>
132
+ <div>
133
+ <i />
134
+ <div><Icon type={this.props.mode === 'expand' ? 'left' : 'right'} /></div>
135
+ </div>
136
+ </div>
137
+ )}
138
+ </div>
139
+ );
140
+ }
141
+ }
142
+
143
+ export default Sidebar;