vap1 0.1.5 → 0.1.7

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 (43) hide show
  1. package/components/SearchBar/ByField.js +7 -1
  2. package/components/SearchBar/ByKeyword.js +52 -10
  3. package/components/Tables/STable.d.ts +9 -1
  4. package/components/Tables/STable.js +20 -5
  5. package/components/Tables/VTable.js +18 -10
  6. package/components/TreeSelect/DTreeSelect.js +0 -1
  7. package/components/Trees/ActionTree.js +0 -1
  8. package/components/Trees/COTree/COButton.d.ts +3 -0
  9. package/components/Trees/COTree/COButton.js +121 -0
  10. package/components/Trees/COTree/COSelect.d.ts +46 -0
  11. package/components/Trees/COTree/COSelect.js +103 -0
  12. package/components/Trees/COTree/COTree.d.ts +74 -0
  13. package/components/Trees/COTree/COTree.js +207 -0
  14. package/components/Trees/COTree/COTreeUtil.d.ts +17 -0
  15. package/components/Trees/COTree/COTreeUtil.js +190 -0
  16. package/components/UForm/UForm.js +0 -1
  17. package/components/UForm/UFormModal.js +1 -1
  18. package/components/UForm/_FieldType.d.ts +1 -1
  19. package/components/UForm/_FieldType.js +11 -2
  20. package/components/UForm/index.d.ts +10 -0
  21. package/components/_adapt/Drawer.js +33 -5
  22. package/components/_adapt/Dropdown.d.ts +12 -3
  23. package/components/_adapt/Dropdown.js +10 -2
  24. package/components/_adapt/Modal.js +1 -1
  25. package/components/_adapt/Radio.js +6 -6
  26. package/components/_common/Upagination.js +4 -4
  27. package/components/_setup/UForm/UFormCOTree.d.ts +1 -0
  28. package/components/_setup/UForm/UFormCOTree.js +23 -0
  29. package/components/_setup/UForm/UFormDate.js +136 -23
  30. package/components/_setup/UForm/UFormJSONTable.d.ts +1 -0
  31. package/components/_setup/UForm/UFormJSONTable.js +157 -0
  32. package/components/_setup/UForm/UFormSelect.js +19 -0
  33. package/components/_setup/index.d.ts +1 -0
  34. package/components/_setup/index.js +1 -0
  35. package/hooks/_list.js +2 -1
  36. package/hooks/useArray.d.ts +2 -3
  37. package/hooks/useArray.js +34 -67
  38. package/package.json +1 -1
  39. package/utils/ArrayUtil.js +8 -1
  40. package/utils/Global.d.ts +4 -1
  41. package/utils/Global.js +1 -0
  42. package/utils/index.d.ts +32 -1
  43. package/widget/index.d.ts +0 -4
@@ -85,16 +85,16 @@ const getConfig = (total, totalAcc, cost) => {
85
85
  conf.showTotal = () => utils_1.Const.NONE;
86
86
  break;
87
87
  case 1:
88
- conf.showTotal = (total, range) => TOTAL1(total, range, totalAcc);
88
+ conf.showTotal = (total, range) => TOTAL1(total, range, totalAcc || total);
89
89
  break;
90
90
  case 2:
91
- conf.showTotal = (total, range) => TOTAL2(total, range, totalAcc, cost);
91
+ conf.showTotal = (total, range) => TOTAL2(total, range, totalAcc || total, cost);
92
92
  break;
93
93
  case 3:
94
- conf.showTotal = (total, range) => TOTAL3(total, range, totalAcc);
94
+ conf.showTotal = (total, range) => TOTAL3(total, range, totalAcc || total);
95
95
  break;
96
96
  default:
97
- conf.showTotal = (total, range) => TOTAL1(total, range, totalAcc);
97
+ conf.showTotal = (total, range) => TOTAL1(total, range, totalAcc || total);
98
98
  break;
99
99
  }
100
100
  return conf;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const _register_1 = require("../../UForm/_register");
9
+ const COButton_1 = require("../../Trees/COTree/COButton");
10
+ const _input_1 = require("../../UForm/_input");
11
+ // CEMS ORG SELECT
12
+ (0, _register_1.registerFormField)('cems-org-button', (props) => {
13
+ const { field, disabled, value, onChange } = props;
14
+ let params = {
15
+ placeholder: (0, _input_1.getPlaceholder)(field, true),
16
+ disabled,
17
+ allowClear: true,
18
+ onChange: onChange
19
+ };
20
+ if (field.required || field.rules && lodash_1.default.find(field.rules, { required: true }))
21
+ params.allowClear = false;
22
+ return react_1.default.createElement(COButton_1.COButton, Object.assign({ dataType: field.dataType || 'string' }, params, field.config, { value: value }));
23
+ });
@@ -1,9 +1,32 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
27
  };
5
28
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const react_1 = __importDefault(require("react"));
29
+ const react_1 = __importStar(require("react"));
7
30
  const lodash_1 = __importDefault(require("lodash"));
8
31
  const antd_1 = require("antd");
9
32
  const _register_1 = require("../../UForm/_register");
@@ -39,7 +62,14 @@ const DatePick = (props) => {
39
62
  if (day.isValid())
40
63
  params.value = day;
41
64
  }
42
- const format = lodash_1.default.has(field.config, 'format') ? field.config.format : (props.showTime ? utils_1.GLOBAL.CONFIG.DATE.DATE_TIME_FORMAT : utils_1.GLOBAL.CONFIG.DATE.DATE_FORMAT);
65
+ const format = (0, react_1.useMemo)(() => {
66
+ var _a;
67
+ if ((_a = field.config) === null || _a === void 0 ? void 0 : _a.format)
68
+ return field.config.format;
69
+ if (props.showTime)
70
+ return utils_1.GLOBAL.CONFIG.DATE.DATE_TIME_FORMAT;
71
+ return utils_1.GLOBAL.CONFIG.DATE.DATE_FORMAT;
72
+ }, []);
43
73
  return react_1.default.createElement(antd_1.DatePicker, Object.assign({ style: { width: '80%' } }, params, field.config, { showTime: props.showTime, format: format, onChange: day => {
44
74
  if (day == null) {
45
75
  onChange(undefined);
@@ -138,12 +168,17 @@ const DatePickRender = (value, data, field, showTime) => {
138
168
  let params = { placeholder: (0, _input_1.getPlaceholder)(field, true), disabled, allowClear: true };
139
169
  if (field.required || field.rules && lodash_1.default.find(field.rules, { required: true }))
140
170
  params.allowClear = false;
171
+ const format = (0, react_1.useMemo)(() => {
172
+ var _a;
173
+ if ((_a = field.config) === null || _a === void 0 ? void 0 : _a.format)
174
+ return field.config.format;
175
+ return utils_1.GLOBAL.CONFIG.DATE.TIME_FORMAT;
176
+ }, []);
141
177
  if (value) {
142
- let day = (0, dayjs_1.default)(value);
178
+ let day = (0, dayjs_1.default)(value, format);
143
179
  if (day.isValid())
144
180
  params.value = day;
145
181
  }
146
- const format = lodash_1.default.has(field.config, 'format') ? field.config.format : utils_1.GLOBAL.CONFIG.DATE.TIME_FORMAT;
147
182
  return react_1.default.createElement(antd_1.TimePicker, Object.assign({ style: { width: '80%' } }, params, field.config, { format: format, onChange: day => {
148
183
  if (day == null) {
149
184
  onChange(undefined);
@@ -152,16 +187,102 @@ const DatePickRender = (value, data, field, showTime) => {
152
187
  onChange(day.format(format));
153
188
  }
154
189
  } }));
190
+ });
191
+ (0, _register_1.registerFormField)('timerange', (props) => {
192
+ const { field, disabled, value, onChange } = props;
193
+ const ptn = (0, react_1.useMemo)(() => field.field.split(','), []);
194
+ const format = (0, react_1.useMemo)(() => {
195
+ var _a;
196
+ if ((_a = field.config) === null || _a === void 0 ? void 0 : _a.format)
197
+ return field.config.format;
198
+ return utils_1.GLOBAL.CONFIG.DATE.TIME_FORMAT;
199
+ }, []);
200
+ if (ptn.length != 2) {
201
+ console.error('daterange field must hava a start and end, eg: field:"startTime,endTime"');
202
+ return react_1.default.createElement(antd_1.TimePicker, { value: value, onChange: (val) => onChange(val.format(format)), disabled: disabled });
203
+ }
204
+ const [startField, endField] = ptn;
205
+ let startProps = { disabled, format };
206
+ let endProps = { disabled, format };
207
+ if (field.required || field.rules && lodash_1.default.find(field.rules, { required: true })) {
208
+ startProps.allowClear = false;
209
+ endProps.allowClear = false;
210
+ }
211
+ if (value) {
212
+ if (value[startField]) {
213
+ let day = (0, dayjs_1.default)(value[startField], format);
214
+ if (day.isValid())
215
+ startProps.value = day;
216
+ }
217
+ if (value[endField]) {
218
+ let day = (0, dayjs_1.default)(value[endField], format);
219
+ if (day.isValid())
220
+ endProps.value = day;
221
+ }
222
+ if (!lodash_1.default.has(field, 'config.cross') || field.config.cross != true) {
223
+ if (endProps.value) {
224
+ startProps.hideDisabledOptions = true;
225
+ startProps.disabledHours = () => lodash_1.default.range(endProps.value.hour() + 1, 24);
226
+ startProps.disabledMinutes = (selectedHour) => {
227
+ if (selectedHour == endProps.value.hour()) {
228
+ return lodash_1.default.range(endProps.value.minute() + 1, 60);
229
+ }
230
+ return [];
231
+ };
232
+ startProps.disabledSeconds = (selectedHour, selectedMinute) => {
233
+ if (selectedHour == endProps.value.hour() && selectedMinute == endProps.value.minute()) {
234
+ return lodash_1.default.range(endProps.value.second() + 1, 60);
235
+ }
236
+ return [];
237
+ };
238
+ }
239
+ if (startProps.value) {
240
+ endProps.hideDisabledOptions = true;
241
+ endProps.disabledHours = () => lodash_1.default.range(0, startProps.value.hour());
242
+ endProps.disabledMinutes = (selectedHour) => {
243
+ if (selectedHour == startProps.value.hour()) {
244
+ return lodash_1.default.range(0, startProps.value.minute());
245
+ }
246
+ return [];
247
+ };
248
+ endProps.disabledSeconds = (selectedHour, selectedMinute) => {
249
+ if (selectedHour == startProps.value.hour() && selectedMinute == startProps.value.minute()) {
250
+ return lodash_1.default.range(0, startProps.value.second());
251
+ }
252
+ return [];
253
+ };
254
+ }
255
+ }
256
+ }
257
+ return react_1.default.createElement(antd_1.Input.Group, null,
258
+ react_1.default.createElement(antd_1.TimePicker, Object.assign({ style: { width: '40%' } }, startProps, {
259
+ // {...field.config}
260
+ format: format, onChange: time => {
261
+ if (time == null) {
262
+ onChange({ [startField]: null, [endField]: (value && value[endField]) ? value[endField] : null });
263
+ }
264
+ else {
265
+ onChange({ [startField]: time.format(format), [endField]: (value && value[endField]) ? value[endField] : null });
266
+ }
267
+ } })),
268
+ react_1.default.createElement(antd_1.Button, { ghost: true, disabled: true, style: { border: 'none' } }, "~"),
269
+ react_1.default.createElement(antd_1.TimePicker, Object.assign({ style: { width: '40%' } }, endProps, { format: format, onChange: time => {
270
+ if (time == null) {
271
+ onChange({ [startField]: (value && value[startField]) ? value[startField] : null, [endField]: null });
272
+ }
273
+ else {
274
+ onChange({ [startField]: (value && value[startField]) ? value[startField] : null, [endField]: time.format(format) });
275
+ }
276
+ } })));
155
277
  }, {
278
+ isMultiple: true,
156
279
  render: (value, data, field) => {
157
- if (field.render)
158
- return field.render(value, data);
159
- if (value == null || value == '')
280
+ const ptn = field.field.split(',');
281
+ if (ptn.length != 2)
160
282
  return '';
161
- let mnt = (0, dayjs_1.default)(value);
162
- if (mnt.isValid()) {
163
- const format = lodash_1.default.has(field.config, 'format') ? field.config.format : utils_1.GLOBAL.CONFIG.DATE.TIME_FORMAT;
164
- return mnt.format(format);
283
+ const [startField, endField] = ptn;
284
+ if (data[startField] && data[endField]) {
285
+ return `${data[startField]} - ${data[endField]}`;
165
286
  }
166
287
  return '';
167
288
  }
@@ -170,7 +291,7 @@ const AntdRangePick = (props) => {
170
291
  const { field, disabled, value, onChange } = props;
171
292
  let ptn = field.field.split(',');
172
293
  if (ptn.length != 2) {
173
- console.error('timerange field must hava a start and end, eg: field:"startTime,endTime"');
294
+ console.error('daterange field must hava a start and end, eg: field:"startTime,endTime"');
174
295
  return react_1.default.createElement(DatePick, Object.assign({}, props));
175
296
  }
176
297
  const [startField, endField] = ptn;
@@ -190,9 +311,6 @@ const AntdRangePick = (props) => {
190
311
  params.value[1] = day;
191
312
  }
192
313
  }
193
- // const format = _.has(field.config, 'format') ? field.config.format : (
194
- // props.showTime ? GLOBAL.CONFIG.DATE.DATE_TIME_FORMAT : GLOBAL.CONFIG.DATE.DATE_FORMAT
195
- // )
196
314
  let format = props.isDate ? 'YYYY-MM-DD' : 'YYYY-MM-DD HH:mm:ss';
197
315
  let showTime = !props.isDate;
198
316
  if (props.isDate) {
@@ -240,7 +358,7 @@ const DateRangePick = (props) => {
240
358
  const { field, disabled, value, onChange, showTime } = props;
241
359
  let ptn = field.field.split(',');
242
360
  if (ptn.length != 2) {
243
- console.error('timerange field must hava a start and end, eg: field:"startTime,endTime"');
361
+ console.error('daterange field must hava a start and end, eg: field:"startTime,endTime"');
244
362
  return react_1.default.createElement(DatePick, Object.assign({}, props));
245
363
  }
246
364
  const [startField, endField] = ptn;
@@ -291,7 +409,7 @@ const RangePickRender = (value, data, field, showTime) => {
291
409
  breakCol: true,
292
410
  isMultiple: true
293
411
  });
294
- (0, _register_1.registerFormField)('timerange', (props) => react_1.default.createElement(AntdRangePick, Object.assign({}, props, { isDate: false })), {
412
+ (0, _register_1.registerFormField)('datetimerange', (props) => react_1.default.createElement(AntdRangePick, Object.assign({}, props, { isDate: false })), {
295
413
  render: (value, data, field) => RangePickRender(value, data, field, true),
296
414
  breakCol: true,
297
415
  isMultiple: true
@@ -301,13 +419,8 @@ const RangePickRender = (value, data, field, showTime) => {
301
419
  breakCol: true,
302
420
  isMultiple: true
303
421
  });
304
- (0, _register_1.registerFormField)('timerange-single', (props) => react_1.default.createElement(DateRangePick, Object.assign({}, props, { showTime: true })), {
422
+ (0, _register_1.registerFormField)('datetimerange-single', (props) => react_1.default.createElement(DateRangePick, Object.assign({}, props, { showTime: true })), {
305
423
  render: (value, data, field) => RangePickRender(value, data, field, true),
306
424
  breakCol: true,
307
425
  isMultiple: true
308
426
  });
309
- // registerFormField('monthrange', (props: FormFieldProps) => <AntdRangePick {...props} isDate={true} />, {
310
- // render: (value, data, field) => RangePickRender(value, data, field, false),
311
- // breakCol: true,
312
- // isMultiple: true
313
- // });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const react_1 = __importStar(require("react"));
30
+ const lodash_1 = __importDefault(require("lodash"));
31
+ const utils_1 = require("../../../utils");
32
+ const index_1 = require("../../../index");
33
+ const components_1 = require("../../../components");
34
+ const hooks_1 = require("../../../hooks");
35
+ const renderColumn = (txt, column) => {
36
+ if (column.options) {
37
+ let find = lodash_1.default.find(column.options, { value: txt });
38
+ if (find) {
39
+ return find.name;
40
+ }
41
+ }
42
+ return txt;
43
+ };
44
+ // json-table 不支持被联动,可联动其它
45
+ // 基础组件 JSON 数组, json-array 升级版本,适用于复杂的表格
46
+ (0, components_1.registerFormField)('json-table', props => {
47
+ const { field, disabled, value, } = props;
48
+ const config = field.config;
49
+ const rowKey = lodash_1.default.has(config, 'rowKey') ? config.rowKey : 'id';
50
+ const { modalState: { modalProps }, showAdd, showEdit, showInfo, hide } = (0, hooks_1.useModals)();
51
+ const onChange = (arr) => {
52
+ if (field.dataType == 'array') {
53
+ props.onChange(arr);
54
+ }
55
+ else {
56
+ props.onChange(JSON.stringify(arr));
57
+ }
58
+ };
59
+ const arr = (0, react_1.useMemo)(() => {
60
+ let arr = [];
61
+ if (lodash_1.default.isArray(value)) {
62
+ arr = [...props.value];
63
+ }
64
+ else if (lodash_1.default.isString(value)) {
65
+ try {
66
+ arr = JSON.parse(value);
67
+ if (!lodash_1.default.isArray(arr))
68
+ arr = [];
69
+ }
70
+ catch (_a) { }
71
+ }
72
+ arr.map(item => {
73
+ if (!lodash_1.default.has(item, rowKey)) {
74
+ lodash_1.default.set(item, rowKey, utils_1.StringUtil.genKey());
75
+ }
76
+ });
77
+ return arr;
78
+ }, [value]);
79
+ const formFields = (0, react_1.useMemo)(() => {
80
+ if (lodash_1.default.has(config, 'formFields'))
81
+ return config.formFields;
82
+ let fields = [];
83
+ config.columns.map((col) => {
84
+ let field = { field: col.dataIndex, title: col.title, };
85
+ if (col.type)
86
+ field.type = col.type;
87
+ if (col.required)
88
+ field.required = true;
89
+ if (lodash_1.default.isArray(col.options))
90
+ field.options = col.options;
91
+ fields.push(field);
92
+ });
93
+ return fields;
94
+ }, []);
95
+ const tableColumns = (0, react_1.useMemo)(() => {
96
+ let columns = [];
97
+ config.columns.map((item) => {
98
+ let col = lodash_1.default.omit(item, ['type', 'options', 'required']);
99
+ if (!col.render && lodash_1.default.isArray(item.options)) {
100
+ col.render = utils_1.Renders.ListRender(item.options);
101
+ }
102
+ columns.push(col);
103
+ });
104
+ return columns;
105
+ }, []);
106
+ const add = (0, react_1.useCallback)((data) => onChange(utils_1.ArrayUtil.add(arr, Object.assign(Object.assign({}, data), { [rowKey]: utils_1.StringUtil.genKey() }))), [arr]);
107
+ const update = (0, react_1.useCallback)((data) => onChange(utils_1.ArrayUtil.update(arr, data, rowKey)), [arr]);
108
+ const del = (0, react_1.useCallback)((data) => onChange(utils_1.ArrayUtil.del(arr, data, rowKey)), [arr]);
109
+ return react_1.default.createElement(react_1.default.Fragment, null,
110
+ react_1.default.createElement(index_1.STable, { list: arr, locale: {
111
+ emptyText: react_1.default.createElement(index_1.Empty, { description: react_1.default.createElement(index_1.Button, { type: "primary", icon: "plus", onClick: showAdd },
112
+ "\u6DFB\u52A0",
113
+ field.title) })
114
+ }, columns: [
115
+ ...tableColumns,
116
+ index_1.VTable.COL_OPERACTION((record) => [
117
+ react_1.default.createElement(index_1.VTable.INFO, { onClick: () => showInfo(record) }),
118
+ react_1.default.createElement(index_1.VTable.EDIT, { onClick: () => showEdit(record) }),
119
+ react_1.default.createElement(index_1.VTable.DELETE, { onClick: () => del(record) }),
120
+ ])
121
+ ], pagination: false, footer: () => {
122
+ if (arr.length == 0 || disabled) {
123
+ return null;
124
+ }
125
+ return react_1.default.createElement(index_1.Button, { type: "primary", icon: "plus", onClick: showAdd },
126
+ "\u6DFB\u52A0",
127
+ field.title);
128
+ } }),
129
+ react_1.default.createElement(index_1.UModal, Object.assign({}, modalProps, { autoTitle: field.title, fields: formFields, default: config.formDefault || {}, onOk: (data) => {
130
+ hide();
131
+ if (modalProps.isEdit) {
132
+ update(data);
133
+ }
134
+ else {
135
+ add(data);
136
+ }
137
+ } })));
138
+ }, {
139
+ breakCol: true,
140
+ breakTitle: true,
141
+ render: (value, data, field) => {
142
+ let list = [];
143
+ try {
144
+ list = JSON.parse(value);
145
+ }
146
+ catch (e) {
147
+ console.error(e);
148
+ }
149
+ return react_1.default.createElement(index_1.STable
150
+ // className="c-table json-array-table"
151
+ // size="small"
152
+ , {
153
+ // className="c-table json-array-table"
154
+ // size="small"
155
+ locale: { emptyText: react_1.default.createElement(index_1.Empty, { description: "\u6682\u65E0\u6570\u636E" }) }, list: list, columns: field.config.columns.map(item => (Object.assign(Object.assign({}, item), { render: (txt) => renderColumn(txt, item) }))), pagination: false });
156
+ }
157
+ });
@@ -82,6 +82,25 @@ const Const_1 = require("../Const");
82
82
  onChange(isCheck ? field.options[CHECKED].value : field.options[UNCHECKED].value);
83
83
  } }));
84
84
  });
85
+ // 用法与 switch 相同
86
+ (0, _register_1.registerFormField)('switch-checkbox', (props) => {
87
+ const { field, disabled, value, onChange, options } = props;
88
+ if (options.length <= 1) {
89
+ console.warn('Type Switch Must have 2 Options');
90
+ return utils_1.Const.NONE;
91
+ }
92
+ let CHECKED = utils_1.GLOBAL.CONFIG.FORM.SWITCH_DEFAULT_CHECKED;
93
+ if (lodash_1.default.has(field.config, 'reverse') && field.config.reverse)
94
+ CHECKED = 1 - CHECKED;
95
+ let UNCHECKED = 1 - CHECKED;
96
+ const isCheck = value == field.options[CHECKED].value;
97
+ return react_1.default.createElement(antd_1.Checkbox, Object.assign({}, field.config, { disabled: disabled, checked: isCheck, onChange: evt => {
98
+ utils_1.PageUtil.stopEvent(evt.nativeEvent);
99
+ const checked = evt.target.checked;
100
+ onChange(checked ? field.options[CHECKED].value : field.options[UNCHECKED].value);
101
+ } }),
102
+ react_1.default.createElement("span", { style: { userSelect: 'none' } }, isCheck ? field.options[CHECKED].label : field.options[UNCHECKED].label));
103
+ });
85
104
  // 单选
86
105
  (0, _register_1.registerFormField)('radio', (props) => {
87
106
  const { field, disabled, value, onChange, options } = props;
@@ -16,6 +16,7 @@ import './UForm/UFormRole';
16
16
  import './UForm/UFormOrg';
17
17
  import './UForm/UFormSearch';
18
18
  import './UForm/UFormJSON';
19
+ import './UForm/UFormJSONTable';
19
20
  import './UForm/UFormCrontab';
20
21
  import './UForm/UFormAdvanceInput';
21
22
  import './UForm/UFormAdvanceSelect';
@@ -20,6 +20,7 @@ require("./UForm/UFormRole"); // 高阶类型:角色
20
20
  require("./UForm/UFormOrg"); // 高阶类型:机构
21
21
  require("./UForm/UFormSearch"); // 高阶类型:自动填充/自动搜索(API接口获取数据)
22
22
  require("./UForm/UFormJSON"); // 高阶类型:JSON Array, JSON Object
23
+ require("./UForm/UFormJSONTable"); // 高阶类型:JSON Array 升级版本
23
24
  require("./UForm/UFormCrontab"); // 高阶类型:Crontab
24
25
  require("./UForm/UFormAdvanceInput"); // 高阶类型:高级输入
25
26
  require("./UForm/UFormAdvanceSelect"); // 高阶类型:高级选择
package/hooks/_list.js CHANGED
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DEFAULT_STATE = void 0;
4
+ const Global_1 = require("../utils/Global");
4
5
  exports.DEFAULT_STATE = {
5
6
  rowKey: 'id',
6
7
  list: [],
7
8
  isQuerying: false,
8
9
  pageNo: 1,
9
- pageSize: 15,
10
+ pageSize: Global_1.CONFIG.PAGINATION.SIZE_DEFAULT,
10
11
  total: 0,
11
12
  totalAcc: 0,
12
13
  param: {},
@@ -1,5 +1,5 @@
1
1
  import type { StaticListState, ListInit } from './_list';
2
- type ArrayOption = ListInit & {
2
+ export type UseArrayOption = ListInit & {
3
3
  /**
4
4
  * 页面大小,默认为 VLIST 大小
5
5
  * 默认为 0 :为0时,不分页,非0时分页
@@ -17,5 +17,4 @@ type ArrayOption = ListInit & {
17
17
  * 静态数组 Table,支持 CRUD(不调接口)
18
18
  * 同样适用于 VTable 等组件
19
19
  */
20
- export declare const useArray: (options: ArrayOption) => StaticListState;
21
- export {};
20
+ export declare const useArray: (options: UseArrayOption) => StaticListState;
package/hooks/useArray.js CHANGED
@@ -46,21 +46,43 @@ const getList = (result) => {
46
46
  * 同样适用于 VTable 等组件
47
47
  */
48
48
  const useArray = (options) => {
49
- const AllRef = (0, react_1.useRef)(null);
50
- const BASE = Object.assign(Object.assign({}, _list_1.DEFAULT_STATE), { pageSize: 0 });
49
+ const [ALL, setList] = (0, react_1.useState)(options.list || []);
50
+ const BASE = Object.assign(Object.assign({}, _list_1.DEFAULT_STATE), { pageSize: 0, list: [] });
51
51
  if (options.rowKey)
52
52
  BASE.rowKey = options.rowKey;
53
- let lastQueryRef = (0, react_1.useRef)(options.param || {});
54
- let pageToRef = (0, react_1.useRef)(null);
55
- let orderByRef = (0, react_1.useRef)(null);
56
53
  if (options.pageSize && options.pageSize > 0)
57
54
  BASE.pageSize = options.pageSize;
55
+ let lastQueryRef = (0, react_1.useRef)(options.param || {});
56
+ let pageToRef = (0, react_1.useRef)({ pageNo: 1, pageSize: BASE.pageSize > 0 ? BASE.pageSize : 99999 });
57
+ let orderByRef = (0, react_1.useRef)(null);
58
58
  const [state, setState] = (0, useSetState_1.useSetState)(BASE);
59
+ (0, useEffectFunction_1.useEffectFunction)(() => __awaiter(void 0, void 0, void 0, function* () {
60
+ if (ALL.length > 0 || options.api == null)
61
+ return;
62
+ setState({ isQuerying: true });
63
+ const param = options.param || {};
64
+ let response;
65
+ if (options.param) {
66
+ response = utils_1.Ajax.POST(options.api, options.param);
67
+ }
68
+ else {
69
+ response = utils_1.Ajax.GET(options.api);
70
+ ;
71
+ }
72
+ const resp = yield response;
73
+ const list = getList(resp);
74
+ setList(list);
75
+ setState({ isQuerying: false, param });
76
+ }));
77
+ (0, react_1.useLayoutEffect)(() => {
78
+ setState({ total: ALL.length, totalAcc: ALL.length });
79
+ queryRef();
80
+ }, [ALL]);
59
81
  const queryRef = () => {
60
82
  const param = lastQueryRef.current;
61
83
  const pageTo = pageToRef.current;
62
84
  const orderBy = orderByRef.current;
63
- let list = AllRef.current.slice(0);
85
+ let list = ALL.slice(0);
64
86
  lodash_1.default.keys(param).map(field => {
65
87
  if (lodash_1.default.endsWith('_'))
66
88
  return;
@@ -76,28 +98,13 @@ const useArray = (options) => {
76
98
  list = lodash_1.default.orderBy(list, orderBy.order, orderBy.by);
77
99
  }
78
100
  if (pageTo == null) {
79
- setState({ isQuerying: false, list, total: list.length, totalAcc: list.length, param, pageNo: 1, });
101
+ setState({ isQuerying: false, list, param, pageNo: 1, total: list.length, totalAcc: list.length });
80
102
  return;
81
103
  }
82
104
  let start = pageTo.pageSize * (pageTo.pageNo - 1);
83
105
  let count = pageTo.pageSize;
84
- setState({ isQuerying: false, list: list.slice(start, count), total: list.length, totalAcc: list.length, param, pageNo: 1, });
106
+ setState({ isQuerying: false, list: list.slice(start, start + count), param, pageNo: pageTo.pageNo, pageSize: pageTo.pageSize, total: list.length, totalAcc: list.length });
85
107
  };
86
- const queryApi = () => __awaiter(void 0, void 0, void 0, function* () {
87
- const param = lastQueryRef.current;
88
- setState({ isQuerying: true });
89
- const resp = yield utils_1.Ajax.POST(options.api, param);
90
- const list = getList(resp);
91
- AllRef.current = list;
92
- const pageTo = pageToRef.current;
93
- if (pageTo == null) {
94
- setState({ isQuerying: false, list, total: list.length, totalAcc: list.length, param, pageNo: 1, });
95
- return;
96
- }
97
- let start = pageTo.pageSize * (pageTo.pageNo - 1);
98
- let count = pageTo.pageSize;
99
- setState({ isQuerying: false, list: list.slice(start, count), total: list.length, totalAcc: list.length, param, pageNo: 1, });
100
- });
101
108
  const query = (param, clean) => {
102
109
  if (clean) {
103
110
  lastQueryRef.current = param || {};
@@ -113,42 +120,20 @@ const useArray = (options) => {
113
120
  }
114
121
  if (options.pageSize && options.pageSize > 0) {
115
122
  pageToRef.current = { pageNo: 1, pageSize: options.pageSize };
123
+ setState({ pageNo: 1, pageSize: options.pageSize });
116
124
  }
117
125
  else {
118
126
  pageToRef.current = null;
119
127
  }
120
- if (options.api) {
121
- queryApi();
122
- }
123
- else if (AllRef.current != null && lodash_1.default.isArray(AllRef.current)) {
124
- queryRef();
125
- }
126
- else {
127
- console.error('list 与 api 到少需要指定一项');
128
- }
128
+ queryRef();
129
129
  };
130
- (0, useEffectFunction_1.useEffectFunction)(() => {
131
- if (lodash_1.default.isArray(options.list))
132
- AllRef.current = options.list;
133
- if (options.autoLoad !== false)
134
- query(options.param || {}, true);
135
- });
136
130
  const pageTo = (pageNo, pageSize) => {
137
- if (options.pageSize && options.pageSize > 0) {
138
- // pageToRef.current = { pageNo: 1, pageSize: options.pageSize }
131
+ if (options.pageSize == null || options.pageSize == 0) {
139
132
  console.error('静态Array默认不翻页,如果需要翻页,需要指定pageSize');
140
133
  return;
141
134
  }
142
135
  pageToRef.current = { pageNo, pageSize };
143
- if (AllRef.current != null && lodash_1.default.isArray(AllRef.current)) {
144
- queryRef();
145
- }
146
- else if (options.api) {
147
- queryApi();
148
- }
149
- else {
150
- console.error('list 与 api 到少需要指定一项');
151
- }
136
+ queryRef();
152
137
  };
153
138
  const orderBy = (order, by) => {
154
139
  if (order == null || by == null) {
@@ -157,24 +142,6 @@ const useArray = (options) => {
157
142
  else {
158
143
  orderByRef.current = { order, by };
159
144
  }
160
- if (AllRef.current != null && lodash_1.default.isArray(AllRef.current)) {
161
- queryRef();
162
- }
163
- else if (options.api) {
164
- queryApi();
165
- }
166
- else {
167
- console.error('list 与 api 到少需要指定一项');
168
- }
169
- };
170
- const setList = (list) => {
171
- AllRef.current = list.slice();
172
- if (options.pageSize && options.pageSize > 0) {
173
- pageToRef.current = { pageNo: 1, pageSize: options.pageSize };
174
- }
175
- else {
176
- pageToRef.current = null;
177
- }
178
145
  queryRef();
179
146
  };
180
147
  return Object.assign(Object.assign({}, state), { mode: 'static', query, pageTo, orderBy, setList });