ztxkui 2.0.6 → 2.1.0

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.
package/dist/App.js CHANGED
@@ -35,6 +35,7 @@ import SearchContainer from './components/business/SearchContainer';
35
35
  import Upload from './components/Upload';
36
36
  import Form from './components/Form';
37
37
  import TransList from './components/business/List';
38
+ import GridList from 'components/business/GridList';
38
39
  import './styles/index.scss';
39
40
  var RangePicker = DatePicker.RangePicker;
40
41
  var Item = Form.Item;
@@ -1370,6 +1371,18 @@ function App() {
1370
1371
  }
1371
1372
  }, []);
1372
1373
  return (React.createElement("div", { className: "App", style: { padding: '10px' } },
1374
+ React.createElement("div", { style: { padding: '10px', width: '60%' } },
1375
+ React.createElement(GridList, null,
1376
+ React.createElement(GridList.Item, { span: 8, title: "\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D" }, "\u59D3\u540D"),
1377
+ React.createElement(GridList.Item, { span: 8, title: "\u59D3\u540D" }, "\u59D3\u540D"),
1378
+ React.createElement(GridList.Item, { span: 8, title: "\u59D3\u540D" }, "\u59D3\u540D")),
1379
+ React.createElement(GridList, null,
1380
+ React.createElement(GridList.Item, { span: 12, titleSpan: 8, title: "\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D" }, "\u59D3\u540D"),
1381
+ React.createElement(GridList.Item, { span: 12, titleSpan: 8, title: "\u59D3\u540D" }, "\u59D3\u540D")),
1382
+ React.createElement(GridList, null,
1383
+ React.createElement(GridList.Item, { span: 24, title: "\u59D3\u540D", titleSpan: 8 }, "\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D")),
1384
+ React.createElement(GridList, null,
1385
+ React.createElement(GridList.Item, { span: 24, title: "\u59D3\u540D", titleSpan: 12 }, "\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3\u540D\u59D3"))),
1373
1386
  React.createElement(DetailList, { records: inspectionDetail, labelWidth: 10, labelAlign: "left", apiBaseUrl: "http://192.168.0.83:8888", fileBaseUrl: "http://192.168.0.83:88",
1374
1387
  // downloadBtnDisable={true}
1375
1388
  hasManOrDate: true, hasSignArea: true, isDark: true }),
@@ -1498,7 +1511,9 @@ function App() {
1498
1511
  dataSource: dataSource, rowKey: "id", showColumnDynamic: true,
1499
1512
  // onAddAndDelHandle={onAddAndDelHandle}
1500
1513
  // onMoveRow={onMoveRowHandle}
1501
- summaryConfig: summaryConfig, summaryFixed: true, scroll: { y: 200 }, onEditableSave: onEditableSaveHandle, rowSelection: rowSelection })))),
1514
+ summaryConfig: summaryConfig, summaryFixed: true,
1515
+ // scroll={{ y: 200 }}
1516
+ onEditableSave: onEditableSaveHandle, rowSelection: rowSelection })))),
1502
1517
  React.createElement("br", null),
1503
1518
  React.createElement("br", null),
1504
1519
  React.createElement("br", null),
package/dist/Demo.js CHANGED
@@ -6,7 +6,7 @@ var selectStyle = { width: '200px' };
6
6
  function request(options) {
7
7
  return fetch(options.url + "?" + stringify(options.params), {
8
8
  headers: {
9
- 'Zmdms-Auth': 'bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRfaWQiOiIwMDAwMDAiLCJtZW1iZXJfdHlwZSI6MSwiaGFuZGxlX2hyX3Bob25lIjpudWxsLCJyZXN1bWVfZGF0ZSI6bnVsbCwidXNlcl9uYW1lIjoiY2hlbnl4IiwiaW10X2lkIjpudWxsLCJyZWFsX25hbWUiOiLpmYjkuprpm4QiLCJjbGllbnRfdHlwZSI6IndlYiIsImRhdGFfcm9sZV9pZCI6IjEzNDU5Nzg1MDUzMDIwNTY5NjIsMTQxMjYxNDExMDY0NzM4NjExNCwxNDEyNjE1Njc3MTE5MjY2ODE3LDE0NDgxMjEwODY1MDQzMDA1NDYsMTQ1MjgyMDI5MzgwMjcxMzA5MCwxNDUzOTI1MDAxNTMxNDc4MDE3LDE0NTg3MTIwODIwODIzNTcyNTAsMTQ1ODgyNjIzODE4NTg4OTc5NCwxNDU4ODI3NzAxMDEyMzI0MzUzLDE0NTg4MjgzNjA4MDE1MDkzNzcsMTQ2MDA4OTI2MjAxMjAzMDk3NywxNDYxMTM3Nzg4NjQ1MTI2MTQ2IiwiY2xpZW50X2lkIjoic3dvcmQiLCJ1c2VyX3R5cGUiOiJ3ZWIiLCJyb2xlX2lkIjoiMTQxMjYwODc0Mjk1MzI4NzY4MiwxNDM4MzIyNTQzMjk1OTI2Mjc0LDE0NDM0NzU0NzU5NzI3MzQ5NzcsMTQ0NjgxOTQ2MzY5Mzg0NDQ4MiwxNDYwMDg1NDI2ODE1OTUwODQ5LDE0NjI2MjI5OTIzNzUyMDk5ODYiLCJwb3N0X25hbWUiOm51bGwsInNjb3BlIjpbImFsbCJdLCJpbnRlcnZpZXdfaWQiOm51bGwsImV4cCI6MTYzOTI3NTUxNiwib3JnX25hbWUiOiLmuZbljZfkuK3mi5Pkv6Hmga_np5HmioDmnInpmZDlhazlj7giLCJqdGkiOiJjOTM4ZmFlMy05YzA1LTQ1MzQtYTVhNy1mZjllY2VkMTFiOWIiLCJtZW1iZXJfaWQiOjE0MTI5NTMyMDUyNjk1MTYyOTAsImNvbXBhbnlfaWQiOjEzOTcwNzQ2MDU0MTI2OTYwNjYsInN5c3RlbV9pZCI6IjMiLCJkZXB0X25hbWUiOiLkuJrliqHkuIDpg6giLCJhdmF0YXIiOiIiLCJkYXRhX3JvbGVfbmFtZSI6ImFkbWluLHVzZXIsdXNlcixhZG1pbixhZG1pbixhZG1pbix1c2VyLHVzZXIsdXNlcix1c2VyLHVzZXIsdXNlciIsImF1dGhvcml0aWVzIjpbImFkbWluIiwidXNlciIsImFkbWluaXN0cmF0b3IiXSwicm9sZV9uYW1lIjoidXNlcixhZG1pbixhZG1pbixhZG1pbmlzdHJhdG9yLHVzZXIsdXNlciIsInJlc3VtZV90ZW1wbGF0ZSI6bnVsbCwibGljZW5zZSI6InBvd2VyZWQgYnkgem1kbXMiLCJwb3N0X2lkIjoiIiwidXNlcl9pZCI6IjE0MTI5NTM4MDQzMzM1NTU3MTQiLCJvcmdfaWQiOjE0NTc1Mjc3NjU5MTg1MTU1MzUsIm5pY2tfbmFtZSI6IumZiOS6mumbhCIsImNvbXBhbnlfbmFtZSI6Iua1meWVhuS4reaLk-mbhuWboueJqea1geenkeaKgOaciemZkOWFrOWPuCIsImRlcHRfaWQiOiIxMzk3MDgxOTMwMzI4NDI0NDQ5IiwiaGFuZGxlX2hyX25hbWUiOm51bGwsImFjY291bnQiOiJjaGVueXgiLCJyZXN1bWVfaWQiOm51bGx9.Moo8uYZzd7bNGw_jsydYQvyf5lVoJA8LLUNQdkPxXac',
9
+ 'Zmdms-Auth': 'bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRfaWQiOiIwMDAwMDAiLCJtZW1iZXJfdHlwZSI6MSwiaGFuZGxlX2hyX3Bob25lIjpudWxsLCJyZXN1bWVfZGF0ZSI6bnVsbCwidXNlcl9uYW1lIjoiY2hlbnl4IiwiaW10X2lkIjpudWxsLCJyZWFsX25hbWUiOiLpmYjkuprpm4QiLCJjbGllbnRfdHlwZSI6IndlYiIsImRhdGFfcm9sZV9pZCI6IjEzNDU5Nzg1MDUzMDIwNTY5NjIsMTQxMjYxNDExMDY0NzM4NjExNCwxNDEyNjE1Njc3MTE5MjY2ODE3LDE0NDgxMjEwODY1MDQzMDA1NDYsMTQ1MjgyMDI5MzgwMjcxMzA5MCwxNDUzOTI1MDAxNTMxNDc4MDE3LDE0NTg3MTIwODIwODIzNTcyNTAsMTQ1ODgyNjIzODE4NTg4OTc5NCwxNDU4ODI3NzAxMDEyMzI0MzUzLDE0NTg4MjgzNjA4MDE1MDkzNzcsMTQ2MDA4OTI2MjAxMjAzMDk3NywxNDYxMTM3Nzg4NjQ1MTI2MTQ2IiwiY2xpZW50X2lkIjoic3dvcmQiLCJ1c2VyX3R5cGUiOiJ3ZWIiLCJyb2xlX2lkIjoiMTQxMjYwODc0Mjk1MzI4NzY4MiwxNDM4MzIyNTQzMjk1OTI2Mjc0LDE0NDM0NzU0NzU5NzI3MzQ5NzcsMTQ0NjgxOTQ2MzY5Mzg0NDQ4MiwxNDYwMDg1NDI2ODE1OTUwODQ5LDE0NjI2MjI5OTIzNzUyMDk5ODYiLCJwb3N0X25hbWUiOm51bGwsInNjb3BlIjpbImFsbCJdLCJpbnRlcnZpZXdfaWQiOm51bGwsImV4cCI6MTYzOTQ4NDUzNSwib3JnX25hbWUiOiLmuZbljZfkuK3mi5Pkv6Hmga_np5HmioDmnInpmZDlhazlj7giLCJqdGkiOiIwN2EyYjA2MS1lNWY0LTQ4ZTEtOWIwOC1hNmI1ODQxMWY5M2UiLCJtZW1iZXJfaWQiOjE0MTI5NTMyMDUyNjk1MTYyOTAsImNvbXBhbnlfaWQiOjEzOTcwNzQ2MDU0MTI2OTYwNjYsInN5c3RlbV9pZCI6bnVsbCwiZGVwdF9uYW1lIjoi5Lia5Yqh5LiA6YOoIiwiYXZhdGFyIjoiIiwiZGF0YV9yb2xlX25hbWUiOiJhZG1pbix1c2VyLHVzZXIsYWRtaW4sYWRtaW4sYWRtaW4sdXNlcix1c2VyLHVzZXIsdXNlcix1c2VyLHVzZXIiLCJhdXRob3JpdGllcyI6WyJhZG1pbiIsInVzZXIiLCJhZG1pbmlzdHJhdG9yIl0sInJvbGVfbmFtZSI6InVzZXIsYWRtaW4sYWRtaW4sYWRtaW5pc3RyYXRvcix1c2VyLHVzZXIiLCJyZXN1bWVfdGVtcGxhdGUiOm51bGwsImxpY2Vuc2UiOiJwb3dlcmVkIGJ5IHptZG1zIiwicG9zdF9pZCI6IiIsInVzZXJfaWQiOiIxNDEyOTUzODA0MzMzNTU1NzE0Iiwib3JnX2lkIjoxNDU3NTI3NzY1OTE4NTE1NTM1LCJuaWNrX25hbWUiOiLpmYjkuprpm4QiLCJjb21wYW55X25hbWUiOiLmtZnllYbkuK3mi5Ppm4blm6LnianmtYHnp5HmioDmnInpmZDlhazlj7giLCJkZXB0X2lkIjoiMTM5NzA4MTkzMDMyODQyNDQ0OSIsImhhbmRsZV9ocl9uYW1lIjpudWxsLCJhY2NvdW50IjoiY2hlbnl4IiwicmVzdW1lX2lkIjpudWxsfQ.0Jd8QuqAcnoSPULKPBqwmuFWRwTACvNrB99xIynYB9s',
10
10
  },
11
11
  method: options.method,
12
12
  }).then(function (response) { return response.json(); });
@@ -16,6 +16,10 @@ function Demo() {
16
16
  var _a = useState([]), list = _a[0], setList = _a[1];
17
17
  var _b = useState([]), defaultList = _b[0], setDefaultList = _b[1];
18
18
  var _c = useState(''), value = _c[0], setValue = _c[1];
19
+ var _d = useState({
20
+ tenantId: '000000',
21
+ isCreateUser: 0,
22
+ }), params = _d[0], setParams = _d[1];
19
23
  // 模拟接口请求
20
24
  useEffect(function () {
21
25
  var timeoutId = setTimeout(function () {
@@ -47,7 +51,12 @@ function Demo() {
47
51
  projectName: '项目12',
48
52
  },
49
53
  ]);
50
- // setValue('1462433051208761603');
54
+ setValue('1462433051208762629');
55
+ setParams({
56
+ tenantId: '000000',
57
+ isCreateUser: 0,
58
+ orgId: 1457527765918515201,
59
+ });
51
60
  }, 2000);
52
61
  return function () {
53
62
  if (timeoutId) {
@@ -59,13 +68,12 @@ function Demo() {
59
68
  React.createElement(Link, { to: "/test" }, "test"),
60
69
  React.createElement("h1", null, "\u4F5C\u4E3A\u6F14\u793A\u4F7F\u7528"),
61
70
  React.createElement("h2", null, "\u5982\u679C\u6570\u636E\u662F\u901A\u8FC7\u5916\u90E8\u83B7\u53D6\u7684\uFF0C\u53EF\u4EE5\u901A\u8FC7\u4F20\u9012list\u5C5E\u6027"),
62
- React.createElement(EnhanceSelect, { style: selectStyle, list: list, showAll: true, joinKey: "test1", onChange: function (value, option, fullData) {
63
- console.log(value, option, fullData);
64
- } }),
65
71
  React.createElement("h2", null, "\u5F02\u6B65\u83B7\u53D6\u6570\u636E"),
66
72
  React.createElement("h2", null, "\u5F02\u6B65\u83B7\u53D6\u6570\u636E\uFF0C\u5E76\u7F13\u5B58\u6570\u636E"),
67
73
  React.createElement("h2", null, "\u8FDC\u7A0B\u6A21\u7CCA\u641C\u7D22"),
68
- React.createElement(EnhanceSelect, { style: selectStyle, placeholder: "\u53EF\u8FDC\u7A0B\u6A21\u7CCA\u641C\u7D22", url: "http://192.168.0.83:8000/api/zmdms-system/employee/page", request: request, remoteSearch: true, dataKey: "id", titleKey: "empName",
74
+ React.createElement(EnhanceSelect, { style: selectStyle, placeholder: "\u53EF\u8FDC\u7A0B\u6A21\u7CCA\u641C\u7D22", url: "http://192.168.0.83:8000/api/zmdms-system/employee/page", request: request, remoteSearch: true, dataKey: "id", titleKey: "empName", value: value, showAll: true, onChange: function (value, option, fullData) {
75
+ setValue(value);
76
+ }, params: JSON.stringify(params),
69
77
  // value={value}
70
78
  mode: "multiple" })));
71
79
  }
@@ -79,6 +79,10 @@ export interface IProps<T> extends Omit<SelectProps<T>, 'onChange'> {
79
79
  * 远程搜索主键Key值
80
80
  */
81
81
  remoteSearchDataKey?: string;
82
+ /**
83
+ * 是否启用远程搜索主键Key值
84
+ */
85
+ isRemoteSearchDataKey?: boolean;
82
86
  /**
83
87
  * 接口数据格式转换
84
88
  */
@@ -99,6 +103,6 @@ export interface IProps<T> extends Omit<SelectProps<T>, 'onChange'> {
99
103
  * { code: 200, data: { records: [] } } || { status: 200, data: { code: 200, data: { records: [] } } }
100
104
  * 如果数据不能在接口层面满足以上形式,那么组件提供transformData属性,转换接口数据格式
101
105
  */
102
- declare function EnhanceSelect<VT extends SelectValue = SelectValue>({ list, defaultList, params, url, method, dataKey, componentKey, titleKey, showAll, isCatch, onCompleted, onChange, request, remoteSearch, remoteSearchKey, remoteSearchDataKey, transformData, joinKey, joinStr, ...restProps }: IProps<VT>): JSX.Element;
106
+ declare function EnhanceSelect<VT extends SelectValue = SelectValue>({ list, defaultList, params, url, method, dataKey, componentKey, titleKey, showAll, isCatch, onCompleted, onChange, request, remoteSearch, remoteSearchKey, remoteSearchDataKey, isRemoteSearchDataKey, transformData, joinKey, joinStr, ...restProps }: IProps<VT>): JSX.Element;
103
107
  declare const _default: React.MemoExoticComponent<typeof EnhanceSelect>;
104
108
  export default _default;
@@ -71,14 +71,17 @@ function getData(request, options) {
71
71
  * 如果数据不能在接口层面满足以上形式,那么组件提供transformData属性,转换接口数据格式
72
72
  */
73
73
  function EnhanceSelect(_a) {
74
- var list = _a.list, defaultList = _a.defaultList, params = _a.params, url = _a.url, _b = _a.method, method = _b === void 0 ? 'GET' : _b, _c = _a.dataKey, dataKey = _c === void 0 ? 'id' : _c, componentKey = _a.componentKey, _d = _a.titleKey, titleKey = _d === void 0 ? 'name' : _d, showAll = _a.showAll, isCatch = _a.isCatch, onCompleted = _a.onCompleted, onChange = _a.onChange, request = _a.request, remoteSearch = _a.remoteSearch, remoteSearchKey = _a.remoteSearchKey, remoteSearchDataKey = _a.remoteSearchDataKey, transformData = _a.transformData, joinKey = _a.joinKey, _e = _a.joinStr, joinStr = _e === void 0 ? '-' : _e, restProps = __rest(_a, ["list", "defaultList", "params", "url", "method", "dataKey", "componentKey", "titleKey", "showAll", "isCatch", "onCompleted", "onChange", "request", "remoteSearch", "remoteSearchKey", "remoteSearchDataKey", "transformData", "joinKey", "joinStr"]);
74
+ var list = _a.list, defaultList = _a.defaultList, params = _a.params, url = _a.url, _b = _a.method, method = _b === void 0 ? 'GET' : _b, _c = _a.dataKey, dataKey = _c === void 0 ? 'id' : _c, componentKey = _a.componentKey, _d = _a.titleKey, titleKey = _d === void 0 ? 'name' : _d, showAll = _a.showAll, isCatch = _a.isCatch, onCompleted = _a.onCompleted, onChange = _a.onChange, request = _a.request, remoteSearch = _a.remoteSearch, remoteSearchKey = _a.remoteSearchKey, remoteSearchDataKey = _a.remoteSearchDataKey, _e = _a.isRemoteSearchDataKey, isRemoteSearchDataKey = _e === void 0 ? true : _e, transformData = _a.transformData, joinKey = _a.joinKey, _f = _a.joinStr, joinStr = _f === void 0 ? '-' : _f, restProps = __rest(_a, ["list", "defaultList", "params", "url", "method", "dataKey", "componentKey", "titleKey", "showAll", "isCatch", "onCompleted", "onChange", "request", "remoteSearch", "remoteSearchKey", "remoteSearchDataKey", "isRemoteSearchDataKey", "transformData", "joinKey", "joinStr"]);
75
75
  // 下拉数据源
76
- var _f = useFetchState([]), selectList = _f[0], setSelectList = _f[1];
76
+ var _g = useFetchState([]), selectList = _g[0], setSelectList = _g[1];
77
77
  // 多选时,自己需要合并的数据
78
- var _g = useFetchState([]), multipleList = _g[0], setMultipleList = _g[1];
79
- var _h = useFetchState(false), loading = _h[0], setLoading = _h[1];
78
+ var _h = useFetchState([]), multipleList = _h[0], setMultipleList = _h[1];
79
+ var _j = useFetchState(false), loading = _j[0], setLoading = _j[1];
80
80
  var fetchId = useRef(0); // 请求Id,每次请求都会加1
81
- var _j = useFetchState(false), firstLoading = _j[0], setFirstLoading = _j[1];
81
+ // 是否使用过远程搜索主键key
82
+ var _k = useFetchState(false), firstLoading = _k[0], setFirstLoading = _k[1];
83
+ // 第一次清空时,才做远程查询
84
+ var _l = useFetchState(false), firstClearData = _l[0], setFirstClearData = _l[1];
82
85
  // 如果selectList 发生改变,那么触发onCompleted事件
83
86
  useEffect(function () {
84
87
  if (Array.isArray(selectList) && onCompleted) {
@@ -141,7 +144,7 @@ function EnhanceSelect(_a) {
141
144
  getData(request, {
142
145
  url: url,
143
146
  method: method,
144
- params: __assign(__assign({ size: 50, page: 1 }, outParams), searchParams),
147
+ params: __assign(__assign({ size: 30, page: 1 }, outParams), searchParams),
145
148
  })
146
149
  .then(function (resData) {
147
150
  var _a, _b, _c;
@@ -162,6 +165,15 @@ function EnhanceSelect(_a) {
162
165
  result = ((_c = (_b = res === null || res === void 0 ? void 0 : res.data) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.records) || [];
163
166
  }
164
167
  }
168
+ // 如果根据id查过了,那么需要把这些数据添加到自定义合并数组中
169
+ if (dataKeyValue) {
170
+ var values = dataKeyValue.split(',');
171
+ var currentData = values.map(function (valueItem) {
172
+ return result.find(function (item) { return item[dataKey] === valueItem; });
173
+ });
174
+ currentData = currentData === null || currentData === void 0 ? void 0 : currentData.filter(function (item) { return item; });
175
+ setMultipleList(currentData);
176
+ }
165
177
  setSelectList(result);
166
178
  })
167
179
  .catch(function (err) {
@@ -180,6 +192,7 @@ function EnhanceSelect(_a) {
180
192
  setSelectList,
181
193
  transformData,
182
194
  setLoading,
195
+ setMultipleList,
183
196
  ]);
184
197
  var searchHandle = function (value) {
185
198
  // 当value有值时才进行搜索
@@ -237,21 +250,34 @@ function EnhanceSelect(_a) {
237
250
  remoteSearch,
238
251
  ]);
239
252
  // 3、远程搜索,url必须传递
253
+ // 关于远程查询,最好的做法还是后台根据主键再去查一次详情数据,这样就能保证
254
+ // 查出来的数据就能保证不止一条
240
255
  useEffect(function () {
241
256
  if (!url || !remoteSearch) {
242
257
  return;
243
258
  }
244
259
  // console.log('TEST: 远程搜索');
245
- if (!firstLoading) {
246
- if (!restProps.value) {
247
- getRemoteDataHandle('', '');
248
- }
249
- else {
250
- if (typeof restProps.value === 'string' ||
251
- Array.isArray(restProps.value)) {
252
- setFirstLoading(true);
253
- getRemoteDataHandle('', restProps.value);
254
- }
260
+ // 如果初始化请求已经做过了,那么这个副作用直接返回
261
+ if (firstLoading) {
262
+ // console.log('已经通过id访问了');
263
+ return;
264
+ }
265
+ // 这种情况不需要启用远程搜索key值
266
+ if (!isRemoteSearchDataKey) {
267
+ getRemoteDataHandle('', '');
268
+ setFirstLoading(true);
269
+ return;
270
+ }
271
+ if (!restProps.value) {
272
+ // console.log('第一次请求数据');
273
+ getRemoteDataHandle('', '');
274
+ }
275
+ else {
276
+ if (typeof restProps.value === 'string' ||
277
+ Array.isArray(restProps.value)) {
278
+ // console.log('第二次请求数据,默认为需要根据主键去请求', restProps.value);
279
+ setFirstLoading(true);
280
+ getRemoteDataHandle('', restProps.value);
255
281
  }
256
282
  }
257
283
  }, [
@@ -260,6 +286,7 @@ function EnhanceSelect(_a) {
260
286
  getRemoteDataHandle,
261
287
  restProps.value,
262
288
  firstLoading,
289
+ isRemoteSearchDataKey,
263
290
  setFirstLoading,
264
291
  ]);
265
292
  // 数据合并
@@ -315,6 +342,13 @@ function EnhanceSelect(_a) {
315
342
  };
316
343
  // onChange 方法
317
344
  var onChangeHandle = function (value, option) {
345
+ if (((Array.isArray(value) && value.length === 0) || !value) &&
346
+ remoteSearch &&
347
+ !firstClearData) {
348
+ console.log('第一次清空数据时,做一次远程查询');
349
+ setFirstClearData(true);
350
+ getRemoteDataHandle('', '');
351
+ }
318
352
  var _defaultList = Array.isArray(defaultList) ? defaultList : [];
319
353
  var currentList = concatData(concatData(selectList || [], _defaultList), multipleList || []);
320
354
  if (currentList && Array.isArray(currentList)) {
@@ -38,7 +38,7 @@ import { HTML5Backend } from 'react-dnd-html5-backend';
38
38
  import { DndProvider } from 'react-dnd';
39
39
  /**默认scroll配置 */
40
40
  // const _scroll = { y: 500, x: 1000 };
41
- var _scroll = { x: 1000 };
41
+ var _scroll = { x: 1000, y: 500 };
42
42
  /**
43
43
  * @description 定义可拖拽行
44
44
  * 定义可编辑列
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ interface IProps {
3
+ visible: boolean;
4
+ onCancel: any;
5
+ setUserPassword?: any;
6
+ request: any;
7
+ encryptionHandle: any;
8
+ setUserPasswordOption?: any;
9
+ }
10
+ declare const ForgetPassword: React.FC<IProps>;
11
+ export default ForgetPassword;
@@ -0,0 +1,235 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (_) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ import React, { useState, useCallback, useRef, useEffect } from 'react';
49
+ import { Modal, Form, SearchContainer, Input, Container, Button, message, } from '../../../../index';
50
+ import { validate, commonMessage } from 'ztxkutils/dist/validate';
51
+ var SearchLeft = SearchContainer.SearchLeft, Item = SearchContainer.SearchItem;
52
+ var countDownMaxTime = 60; // 倒计时最大时间
53
+ var ForgetPassword = function (_a) {
54
+ var visible = _a.visible, onCancel = _a.onCancel, setUserPassword = _a.setUserPassword, request = _a.request, setUserPasswordOption = _a.setUserPasswordOption, encryptionHandle = _a.encryptionHandle;
55
+ var form = Form.useForm()[0];
56
+ var _b = useState(false), loading = _b[0], setLoading = _b[1];
57
+ // 发送短信验证码相关操作
58
+ var _c = useState(false), codeLoading = _c[0], setCodeLoading = _c[1];
59
+ var _d = useState(countDownMaxTime), countDown = _d[0], setCountDown = _d[1];
60
+ var setIntervalCount = useRef();
61
+ // 开始倒计时
62
+ useEffect(function () {
63
+ // 倒计时
64
+ if (countDown === countDownMaxTime - 1) {
65
+ setIntervalCount.current = setInterval(function () {
66
+ if (countDown === 1) {
67
+ clearInterval(setIntervalCount.current);
68
+ }
69
+ setCountDown(function (preCountDown) { return preCountDown - 1; });
70
+ }, 1000);
71
+ }
72
+ else if (countDown === 0) {
73
+ setIntervalCount.current && clearInterval(setIntervalCount.current);
74
+ setCodeLoading(false);
75
+ setCountDown(countDownMaxTime);
76
+ }
77
+ }, [countDown]);
78
+ /**发送短信验证码 */
79
+ var onSendCode = function () {
80
+ setCodeLoading(true);
81
+ var phone = form.getFieldValue('phone');
82
+ if (!phone) {
83
+ message.error('请输入您的手机号');
84
+ setCodeLoading(false);
85
+ return;
86
+ }
87
+ if (!validate.phoneValidate.test(phone)) {
88
+ message.error(commonMessage.phoneMessage);
89
+ setCodeLoading(false);
90
+ return;
91
+ }
92
+ setTimeout(function () {
93
+ setCountDown(countDownMaxTime - 1);
94
+ }, 1000);
95
+ request({
96
+ url: '/api/zmdms-auth/oauth/sms',
97
+ method: 'GET',
98
+ params: {
99
+ phone: phone,
100
+ },
101
+ })
102
+ .then(function (res) {
103
+ var _a = res.data, msg = _a.msg, success = _a.success;
104
+ if (success === 'true') {
105
+ // message.success(msg || '验证码发送成功!');
106
+ // setUserPassword && setUserPassword();
107
+ }
108
+ else {
109
+ message.warning(msg || '验证码发送失败!');
110
+ }
111
+ })
112
+ .catch(function (err) {
113
+ var _a, _b;
114
+ message.warning(((_b = (_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.msg) || '验证码发送失败!');
115
+ });
116
+ };
117
+ /**提交验证 */
118
+ var vallidateFn = useCallback(function (callback) { return __awaiter(void 0, void 0, void 0, function () {
119
+ var err_1, errorFields;
120
+ return __generator(this, function (_a) {
121
+ switch (_a.label) {
122
+ case 0:
123
+ _a.trys.push([0, 2, , 3]);
124
+ // 表单验证
125
+ return [4 /*yield*/, form.validateFields()];
126
+ case 1:
127
+ // 表单验证
128
+ _a.sent();
129
+ // 验证成功 提交数据
130
+ callback();
131
+ return [3 /*break*/, 3];
132
+ case 2:
133
+ err_1 = _a.sent();
134
+ errorFields = err_1.errorFields;
135
+ if (errorFields) {
136
+ message.warning(errorFields[0].errors + '');
137
+ }
138
+ return [3 /*break*/, 3];
139
+ case 3: return [2 /*return*/];
140
+ }
141
+ });
142
+ }); }, [form]);
143
+ /**发起提交 */
144
+ var submitParamsHandle = useCallback(function () {
145
+ setLoading(true);
146
+ var params = form.getFieldsValue();
147
+ var submitParams = {
148
+ phone: params.phone,
149
+ code: params.code,
150
+ newPassword: encryptionHandle(params.newPassword),
151
+ newPassword1: encryptionHandle(params.newPassword1),
152
+ };
153
+ request(setUserPasswordOption
154
+ ? __assign(__assign({}, setUserPasswordOption), { data: __assign(__assign({}, setUserPasswordOption.data), submitParams) }) : {
155
+ url: '/api/zmdms-user/forget-password',
156
+ method: 'POST',
157
+ data: submitParams,
158
+ isFormData: true,
159
+ })
160
+ .then(function (res) {
161
+ setLoading(false);
162
+ var _a = res.data, msg = _a.msg, code = _a.code;
163
+ if (code === 200) {
164
+ message.success(msg || '密码修改成功!');
165
+ setUserPassword && setUserPassword();
166
+ }
167
+ else {
168
+ message.warning(msg || '密码修改失败!');
169
+ }
170
+ })
171
+ .catch(function (err) {
172
+ var _a, _b;
173
+ setLoading(false);
174
+ message.warning(((_b = (_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.msg) || '密码修改失败!');
175
+ });
176
+ }, [form, encryptionHandle, request, setUserPasswordOption, setUserPassword]);
177
+ var onSaveHandle = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
178
+ return __generator(this, function (_a) {
179
+ vallidateFn(function () {
180
+ submitParamsHandle();
181
+ });
182
+ return [2 /*return*/];
183
+ });
184
+ }); }, [vallidateFn, submitParamsHandle]);
185
+ var footerDomFn = function () {
186
+ return (React.createElement(Button, { type: "primary", onClick: onSaveHandle, loading: loading }, "\u786E\u8BA4\u4FEE\u6539"));
187
+ };
188
+ return (React.createElement(Modal, { loading: loading, visible: visible, onCancel: onCancel, title: "\u5FD8\u8BB0\u5BC6\u7801", width: "80%", footer: footerDomFn() },
189
+ React.createElement(Container, null,
190
+ React.createElement(Form, { name: "forget-password-making", form: form },
191
+ React.createElement(SearchContainer, { dark: true },
192
+ React.createElement(SearchLeft, null,
193
+ React.createElement("div", { style: { width: '100%' } },
194
+ React.createElement(Item, { label: "\u624B\u673A\u53F7", name: "phone", rules: [
195
+ { required: true, message: '请输入您的手机号' },
196
+ {
197
+ pattern: validate.phoneValidate,
198
+ message: commonMessage.phoneMessage,
199
+ },
200
+ ] },
201
+ React.createElement(Input, { placeholder: "\u8BF7\u8F93\u5165\u60A8\u7684\u624B\u673A\u53F7" }))),
202
+ React.createElement("div", { style: { width: '100%', display: 'flex' } },
203
+ React.createElement(Item, { label: "\u77ED\u4FE1\u9A8C\u8BC1\u7801", name: "code", rules: [{ required: true, message: '请输入您的短信验证码' }] },
204
+ React.createElement(Input, { placeholder: "\u8BF7\u8F93\u5165\u60A8\u7684\u77ED\u4FE1\u9A8C\u8BC1\u7801" })),
205
+ React.createElement(Button, { type: "primary", onClick: onSendCode, loading: codeLoading },
206
+ "\u53D1\u9001\u9A8C\u8BC1\u7801 ",
207
+ codeLoading ? "(" + countDown + "s)" : '')),
208
+ React.createElement("div", { style: { width: '100%', display: 'flex' } },
209
+ React.createElement(Item, { name: "newPassword", label: "\u65B0\u5BC6\u7801", rules: [
210
+ { required: true, message: '请输入新密码' },
211
+ {
212
+ pattern: validate.passwordValidate,
213
+ message: commonMessage.passwordMessage,
214
+ },
215
+ ] },
216
+ React.createElement(Input, { autoComplete: "new-password", type: "password", placeholder: "\u8BF7\u8F93\u5165\u65B0\u5BC6\u7801" })),
217
+ React.createElement("div", null,
218
+ React.createElement("p", { style: { height: 32, lineHeight: '32px', color: 'red' } }, "\u75319-128\u4F4D\u7684\u5B57\u6BCD+\u6570\u5B57\uFF0C\u5B57\u6BCD+\u7279\u6B8A\u5B57\u7B26\uFF0C\u6570\u5B57+\u7279\u6B8A\u5B57\u7B26\u7EC4\u6210"))),
219
+ React.createElement(Item, { name: "newPassword1", label: "\u786E\u8BA4\u65B0\u5BC6\u7801", rules: [
220
+ { required: true, message: '请确认密码' },
221
+ function (_a) {
222
+ var getFieldValue = _a.getFieldValue;
223
+ return ({
224
+ validator: function (rule, value) {
225
+ if (!value || getFieldValue('newPassword') === value) {
226
+ return Promise.resolve();
227
+ }
228
+ return Promise.reject('两次密码输入不一致');
229
+ },
230
+ });
231
+ },
232
+ ], dependencies: ['newPassword'] },
233
+ React.createElement(Input, { autoComplete: "new-password", type: "password", placeholder: "\u786E\u8BA4\u65B0\u5BC6\u7801" }))))))));
234
+ };
235
+ export default ForgetPassword;
@@ -1,3 +1,4 @@
1
1
  import UserInfo from './UserInfo';
2
2
  import UserPassword from './UserPassword';
3
- export { UserInfo, UserPassword };
3
+ import UserForgetPassword from './UserForgetPassword';
4
+ export { UserInfo, UserPassword, UserForgetPassword };
@@ -1,3 +1,4 @@
1
1
  import UserInfo from './UserInfo';
2
2
  import UserPassword from './UserPassword';
3
- export { UserInfo, UserPassword };
3
+ import UserForgetPassword from './UserForgetPassword';
4
+ export { UserInfo, UserPassword, UserForgetPassword };
@@ -3,6 +3,8 @@ import { ColProps } from 'antd/lib/col';
3
3
  export interface IProps extends ColProps {
4
4
  title: string;
5
5
  colon?: boolean;
6
+ span: number;
7
+ titleSpan?: number;
6
8
  }
7
9
  declare const Item: React.FC<IProps>;
8
10
  export default Item;
@@ -24,12 +24,12 @@ import React from 'react';
24
24
  import { Col } from 'antd';
25
25
  import classNames from 'classnames';
26
26
  var Item = function (_a) {
27
- var children = _a.children, className = _a.className, title = _a.title, colon = _a.colon, restProps = __rest(_a, ["children", "className", "title", "colon"]);
27
+ var children = _a.children, className = _a.className, title = _a.title, colon = _a.colon, span = _a.span, titleSpan = _a.titleSpan, restProps = __rest(_a, ["children", "className", "title", "colon", "span", "titleSpan"]);
28
28
  var classes = classNames('zt-grid-item', className);
29
- return (React.createElement(Col, __assign({ className: classes }, restProps),
30
- React.createElement("span", { className: "zt-grid-item--title" },
29
+ return (React.createElement(Col, __assign({ className: classes, span: span }, restProps),
30
+ React.createElement("span", { className: "zt-grid-item--title", style: titleSpan ? { width: (titleSpan / span) * 38 + "%" } : {} },
31
31
  title,
32
32
  colon && ':'),
33
- React.createElement("span", { className: "zt-grid-item--text" }, children)));
33
+ React.createElement("span", { className: "zt-grid-item--text", style: titleSpan ? { width: 100 - (titleSpan / span) * 38 + "%" } : {} }, children)));
34
34
  };
35
35
  export default Item;
package/dist/index.js CHANGED
@@ -1,52 +1,70 @@
1
- import React from 'react';
2
- import ReactDOM from 'react-dom';
3
- import App from './App';
4
- import { ConfigProvider } from 'antd';
5
- import zhCN from 'antd/lib/locale/zh_CN';
6
- import * as dayjs from 'dayjs';
7
- import zhCn from 'dayjs/locale/zh-cn';
8
- import { BrowserRouter, Switch, Route, Link } from 'react-router-dom';
9
- import Demo from './Demo';
10
- import TreeSelectDemo from './TreeSelectDemo';
11
- import TreeDemo from './TreeDemo';
12
- import UploadDemo from './UploadDemo';
13
- import CollapseDemo from './DemoCom/CollapseDemo';
14
- import TimelineDemo from './DemoCom/TimelineDemo';
15
- import WeChatDemo from './DemoCom/WechatDemo';
16
- dayjs.locale(zhCn);
17
- ReactDOM.render(
18
- // <React.StrictMode>
19
- React.createElement(ConfigProvider, { locale: zhCN },
20
- React.createElement(BrowserRouter, null,
21
- React.createElement(Switch, null,
22
- React.createElement(Route, { exact: true, path: "/" },
23
- React.createElement(App, null)),
24
- React.createElement(Route, { exact: true, path: "/select" },
25
- React.createElement(Demo, null)),
26
- React.createElement(Route, { exact: true, path: "/tree-select" },
27
- React.createElement(TreeSelectDemo, null)),
28
- React.createElement(Route, { exact: true, path: "/tree" },
29
- React.createElement(TreeDemo, null)),
30
- React.createElement(Route, { exact: true, path: "/upload" },
31
- React.createElement(UploadDemo, null)),
32
- React.createElement(Route, { exact: true, path: "/collapse" },
33
- React.createElement(CollapseDemo, null)),
34
- React.createElement(Route, { exact: true, path: "/timeline" },
35
- React.createElement(TimelineDemo, null)),
36
- React.createElement(Route, { exact: true, path: "/wechat" },
37
- React.createElement(WeChatDemo, null)),
38
- React.createElement(Route, { exact: true, path: "/test" },
39
- React.createElement("div", null,
40
- React.createElement("h1", null,
41
- React.createElement(Link, { to: "/select" }, "select")),
42
- React.createElement("h1", null,
43
- React.createElement(Link, { to: "/tree-select" }, "tree select")),
44
- React.createElement("h1", null,
45
- React.createElement(Link, { to: "/tree" }, "tree")),
46
- React.createElement("h1", null,
47
- React.createElement(Link, { to: "/upload" }, "upload"))))))),
48
- // </React.StrictMode>,
49
- document.getElementById('root'));
1
+ // import React from 'react';
2
+ // import ReactDOM from 'react-dom';
3
+ // import App from './App';
4
+ // import { ConfigProvider } from 'antd';
5
+ // import zhCN from 'antd/lib/locale/zh_CN';
6
+ // import * as dayjs from 'dayjs';
7
+ // import zhCn from 'dayjs/locale/zh-cn';
8
+ // import { BrowserRouter, Switch, Route, Link } from 'react-router-dom';
9
+ // import Demo from './Demo';
10
+ // import TreeSelectDemo from './TreeSelectDemo';
11
+ // import TreeDemo from './TreeDemo';
12
+ // import UploadDemo from './UploadDemo';
13
+ // import CollapseDemo from './DemoCom/CollapseDemo';
14
+ // import TimelineDemo from './DemoCom/TimelineDemo';
15
+ // import WeChatDemo from './DemoCom/WechatDemo';
16
+ // dayjs.locale(zhCn);
17
+ // ReactDOM.render(
18
+ // // <React.StrictMode>
19
+ // <ConfigProvider locale={zhCN}>
20
+ // <BrowserRouter>
21
+ // <Switch>
22
+ // <Route exact path="/">
23
+ // <App />
24
+ // </Route>
25
+ // <Route exact path="/select">
26
+ // <Demo />
27
+ // </Route>
28
+ // <Route exact path="/tree-select">
29
+ // <TreeSelectDemo />
30
+ // </Route>
31
+ // <Route exact path="/tree">
32
+ // <TreeDemo />
33
+ // </Route>
34
+ // <Route exact path="/upload">
35
+ // <UploadDemo />
36
+ // </Route>
37
+ // <Route exact path="/collapse">
38
+ // <CollapseDemo />
39
+ // </Route>
40
+ // <Route exact path="/timeline">
41
+ // <TimelineDemo />
42
+ // </Route>
43
+ // <Route exact path="/wechat">
44
+ // <WeChatDemo />
45
+ // </Route>
46
+ // <Route exact path="/test">
47
+ // <div>
48
+ // <h1>
49
+ // <Link to="/select">select</Link>
50
+ // </h1>
51
+ // <h1>
52
+ // <Link to="/tree-select">tree select</Link>
53
+ // </h1>
54
+ // <h1>
55
+ // <Link to="/tree">tree</Link>
56
+ // </h1>
57
+ // <h1>
58
+ // <Link to="/upload">upload</Link>
59
+ // </h1>
60
+ // </div>
61
+ // </Route>
62
+ // </Switch>
63
+ // </BrowserRouter>
64
+ // </ConfigProvider>,
65
+ // // </React.StrictMode>,
66
+ // document.getElementById('root')
67
+ // );
50
68
  export { default as Button } from './components/Button';
51
69
  export { default as Calendar } from './components/Calendar';
52
70
  export { default as Checkbox } from './components/Checkbox';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ztxkui",
3
- "version": "2.0.6",
3
+ "version": "2.1.0",
4
4
  "private": false,
5
5
  "description": "React components library",
6
6
  "author": "zt-front-end",