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.
- package/components/SearchBar/ByField.js +7 -1
- package/components/SearchBar/ByKeyword.js +52 -10
- package/components/Tables/STable.d.ts +9 -1
- package/components/Tables/STable.js +20 -5
- package/components/Tables/VTable.js +18 -10
- package/components/TreeSelect/DTreeSelect.js +0 -1
- package/components/Trees/ActionTree.js +0 -1
- package/components/Trees/COTree/COButton.d.ts +3 -0
- package/components/Trees/COTree/COButton.js +121 -0
- package/components/Trees/COTree/COSelect.d.ts +46 -0
- package/components/Trees/COTree/COSelect.js +103 -0
- package/components/Trees/COTree/COTree.d.ts +74 -0
- package/components/Trees/COTree/COTree.js +207 -0
- package/components/Trees/COTree/COTreeUtil.d.ts +17 -0
- package/components/Trees/COTree/COTreeUtil.js +190 -0
- package/components/UForm/UForm.js +0 -1
- package/components/UForm/UFormModal.js +1 -1
- package/components/UForm/_FieldType.d.ts +1 -1
- package/components/UForm/_FieldType.js +11 -2
- package/components/UForm/index.d.ts +10 -0
- package/components/_adapt/Drawer.js +33 -5
- package/components/_adapt/Dropdown.d.ts +12 -3
- package/components/_adapt/Dropdown.js +10 -2
- package/components/_adapt/Modal.js +1 -1
- package/components/_adapt/Radio.js +6 -6
- package/components/_common/Upagination.js +4 -4
- package/components/_setup/UForm/UFormCOTree.d.ts +1 -0
- package/components/_setup/UForm/UFormCOTree.js +23 -0
- package/components/_setup/UForm/UFormDate.js +136 -23
- package/components/_setup/UForm/UFormJSONTable.d.ts +1 -0
- package/components/_setup/UForm/UFormJSONTable.js +157 -0
- package/components/_setup/UForm/UFormSelect.js +19 -0
- package/components/_setup/index.d.ts +1 -0
- package/components/_setup/index.js +1 -0
- package/hooks/_list.js +2 -1
- package/hooks/useArray.d.ts +2 -3
- package/hooks/useArray.js +34 -67
- package/package.json +1 -1
- package/utils/ArrayUtil.js +8 -1
- package/utils/Global.d.ts +4 -1
- package/utils/Global.js +1 -0
- package/utils/index.d.ts +32 -1
- 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 =
|
|
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 =
|
|
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
|
-
|
|
158
|
-
|
|
159
|
-
if (value == null || value == '')
|
|
280
|
+
const ptn = field.field.split(',');
|
|
281
|
+
if (ptn.length != 2)
|
|
160
282
|
return '';
|
|
161
|
-
|
|
162
|
-
if (
|
|
163
|
-
|
|
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('
|
|
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('
|
|
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)('
|
|
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)('
|
|
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:
|
|
10
|
+
pageSize: Global_1.CONFIG.PAGINATION.SIZE_DEFAULT,
|
|
10
11
|
total: 0,
|
|
11
12
|
totalAcc: 0,
|
|
12
13
|
param: {},
|
package/hooks/useArray.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { StaticListState, ListInit } from './_list';
|
|
2
|
-
type
|
|
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:
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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 });
|