@bchr/bchr-front-lib 0.5.8 → 0.5.10

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.
@@ -0,0 +1,790 @@
1
+ import React from 'react';
2
+ import moment from "moment";
3
+ import lodash from 'lodash';
4
+ import {Select, TreeSelect, Input, InputNumber, Switch, DatePicker, RangePicker} from 'antd';
5
+ import LangTypes from "../utils/LangTypes";
6
+ import RefInput from "./RefInput";
7
+ import {Values} from "../utils";
8
+
9
+ const KendoGridHeaderRowMustCellRender = function (props) {
10
+ let {title} = props;
11
+ return <div className="k-grid-header-must-cell">
12
+ <span className="icon-must">*</span>
13
+ {title}
14
+ </div>
15
+ }
16
+
17
+ const KendoGridRowNumberCellRender = function(props) {
18
+ return <td colSpan="1"
19
+ className={`k-sequence-number-cell ${props.className}`}
20
+ role="gridcell"
21
+ aria-colindex="1"
22
+ aria-selected="false"
23
+ data-grid-col-index="0"
24
+ style={props.style}>{props.dataIndex + 1}</td>;
25
+ }
26
+
27
+ const KendoGridRowTimeUnitCellRender = function(props) {
28
+ return <td className={` ${props.className}`} style={props.style}>{props.dataItem[props.field] == 0 ? "小时" : "天"}</td>;
29
+ }
30
+
31
+ const KendoGridRowNumberTagCellRender = function(props) {
32
+ return <td colSpan="1"
33
+ className={`k-sequence-number-cell ${props.className}`}
34
+ role="gridcell"
35
+ aria-colindex="1"
36
+ aria-selected="false"
37
+ data-grid-col-index="0"
38
+ style={props.style}>
39
+ {props.dataIndex + 1}
40
+ {props.dataItem.b_enable_sn_track && <span className="kendo-grid-row-number-tag">序</span>}
41
+ {!props.dataItem.b_enable_sn_track && <span className="kendo-grid-row-number-no-tag"></span>}
42
+ </td>;
43
+ }
44
+
45
+ const KendoGridFilterCellRender = function(props) {
46
+ return <span className="iconfont icon-personal-search"/>;
47
+ }
48
+
49
+ const KendoGridBooleanCellRender = function(props) {
50
+ return <td className={props.className} style={props.style}>{LangTypes.asBooleanValue(props.dataItem[props.field]) ? "是" : "否"}</td>;
51
+ }
52
+
53
+ const KendoGridVersionCellRender = function(props) {
54
+ return <td className={props.className} style={props.style}>v{props.dataItem[props.field]}</td>;
55
+ }
56
+
57
+ const KendoGridEmptyCellRender = function(props) {
58
+ return <td className={props.className} style={props.style}>{props.dataItem[props.field] || '--'}</td>;
59
+ }
60
+
61
+ const KendoGridPercentCellRender = function(props) {
62
+ return <td className={props.className} style={props.style}>{props.dataItem[props.field] + "%"}</td>;
63
+ }
64
+
65
+ const KendoGridTimeStampCellRender = function(props) {
66
+ if (props.dataItem[props.field]) {
67
+ return <td className={props.className} style={props.style}>{moment(props.dataItem[props.field]).format("yyyy-MM-DD HH:mm:ss")}</td>;
68
+ }
69
+ else {
70
+ return <td className={props.className} style={props.style}></td>;
71
+ }
72
+ }
73
+
74
+ const KendoGridDateCellRender = function(props) {
75
+ if (props.dataItem[props.field]) {
76
+ return <td className={props.className} style={props.style}>{moment(props.dataItem[props.field]).format("yyyy-MM-DD")}</td>;
77
+ }
78
+ else {
79
+ return <td className={props.className} style={props.style}></td>;
80
+ }
81
+ }
82
+
83
+ class KendoGridSelectCellRender extends React.Component {
84
+ constructor(props) {
85
+ super(props);
86
+ }
87
+
88
+ foreRefreshUI = () => {
89
+ this.setState({stateBarTS : new Date().getTime()});
90
+ }
91
+
92
+ onChange = (objectValue) => {
93
+ const { dataItem, field, selectProps } = this.props;
94
+ let {onChangeExtFunc} = selectProps;
95
+
96
+ if (objectValue.label) {
97
+ if (field.endsWith("_ext_name")) {
98
+ dataItem[field] = objectValue.label;
99
+ let pkFieldName = field.substring(0, field.length - "_ext_name".length) + "_pk";
100
+ dataItem[pkFieldName] = objectValue.value;
101
+ }
102
+ else if (field.endsWith("_pk")) {
103
+ dataItem[field] = objectValue.value;
104
+ let extNameFieldName = field.substring(0, field.length - "_pk".length) + "_ext_name";
105
+ dataItem[extNameFieldName] = objectValue.label;
106
+ }
107
+ else {
108
+ dataItem[field] = objectValue.value;
109
+ dataItem[field + "_ext_name"] = objectValue.label;
110
+ }
111
+ }
112
+ else {
113
+ dataItem[field] = objectValue;
114
+ }
115
+
116
+ this.foreRefreshUI();
117
+ if (lodash.isFunction(onChangeExtFunc)) {
118
+ onChangeExtFunc(dataItem)
119
+ }
120
+ }
121
+
122
+ buildSelectControlInTD = (dataItem) => {
123
+ const field = this.props.field || "";
124
+ let {selectProps} = this.props;
125
+ let newSelectProps = {...selectProps};
126
+ if (!(newSelectProps.onChangeWithObject === false)) {
127
+ newSelectProps.onChangeWithObject = true;
128
+ }
129
+
130
+ const value = dataItem[field] === null ? "" : dataItem[field];
131
+ let displayExtName = '';
132
+ if (selectProps && Values.isNotEmptyArray(selectProps.optionList)) {
133
+ displayExtName = selectProps.optionList.find(option => option.value == value)?.label;
134
+ }
135
+
136
+ let dataValue = "";
137
+ if (field.endsWith("_ext_name")) {
138
+ let pkFieldName = field.substring(0, field.length - "_ext_name".length) + "_pk";
139
+ dataValue = {
140
+ label : dataItem[field],
141
+ value : dataItem[pkFieldName]
142
+ };
143
+ }
144
+ else if (field.endsWith("_pk")) {
145
+ let extNameFieldName = field.substring(0, field.length - "_pk".length) + "_ext_name";
146
+ dataValue = {
147
+ label : dataItem[extNameFieldName],
148
+ value : dataItem[field]
149
+ };
150
+ }
151
+ else {
152
+ dataValue = {
153
+ label : dataItem[field + "_ext_name"] || displayExtName,
154
+ value : dataItem[field]
155
+ };
156
+ }
157
+
158
+ if (newSelectProps.onChangeExtFunc) {
159
+ delete newSelectProps.onChangeExtFunc;
160
+ }
161
+
162
+ return <td className={"k-grid-edit-cell"}>
163
+ <Select {...newSelectProps}
164
+ value={dataValue}
165
+ onChange={this.onChange}/>
166
+ </td>;
167
+ }
168
+
169
+ buildTextControlInTD = (dataItem) => {
170
+ let {field, className, style, selectProps} = this.props;
171
+ const dataValue = dataItem[field] === null ? "" : dataItem[field];
172
+ let displayExtName = '';
173
+ if (selectProps && Values.isNotEmptyArray(selectProps.optionList)) {
174
+ displayExtName = selectProps.optionList.find(option => option.value == dataValue)?.label;
175
+ }
176
+
177
+ return <td className={className} style={style}>
178
+ {selectProps.type === 'link' && <a onClick={() => {
179
+ if (lodash.isFunction(selectProps.onClick)) {
180
+ selectProps.onClick(dataItem)
181
+ }
182
+ }}>{displayExtName}</a>}
183
+ {!selectProps.type && displayExtName}
184
+ </td>;
185
+ }
186
+
187
+ render() {
188
+ const { dataItem, selectProps } = this.props;
189
+ if (selectProps?.disabledField) {
190
+ let disabled = dataItem[selectProps?.disabledField];
191
+ if (selectProps?.disabledValue) {
192
+ disabled = dataItem[selectProps?.disabledField] !== selectProps?.disabledValue;
193
+ }
194
+ return dataItem.inEditState && disabled ? this.buildSelectControlInTD(dataItem) : this.buildTextControlInTD(dataItem);
195
+ }
196
+ return dataItem.inEditState ? this.buildSelectControlInTD(dataItem) : this.buildTextControlInTD(dataItem);
197
+ }
198
+ }
199
+
200
+ class KendoGridTreeSelectCellRender extends React.Component {
201
+ constructor(props) {
202
+ super(props);
203
+ }
204
+
205
+ foreRefreshUI = () => {
206
+ this.setState({stateBarTS : new Date().getTime()});
207
+ }
208
+
209
+ onChange = (objectValue) => {
210
+ const { dataItem, field, selectProps } = this.props;
211
+ let {onChangeExtFunc} = selectProps;
212
+
213
+ if (objectValue.label) {
214
+ if (field.endsWith("_ext_name")) {
215
+ dataItem[field] = objectValue.label;
216
+ let pkFieldName = field.substring(0, field.length - "_ext_name".length) + "_pk";
217
+ dataItem[pkFieldName] = objectValue.value;
218
+ }
219
+ else if (field.endsWith("_pk")) {
220
+ dataItem[field] = objectValue.value;
221
+ let extNameFieldName = field.substring(0, field.length - "_pk".length) + "_ext_name";
222
+ dataItem[extNameFieldName] = objectValue.label;
223
+ }
224
+ else {
225
+ dataItem[field] = objectValue.value;
226
+ dataItem[field + "_ext_name"] = objectValue.label;
227
+ }
228
+ }
229
+ else {
230
+ dataItem[field] = objectValue;
231
+ }
232
+
233
+ this.foreRefreshUI();
234
+ if (lodash.isFunction(onChangeExtFunc)) {
235
+ onChangeExtFunc(dataItem)
236
+ }
237
+ }
238
+
239
+ buildTreeSelectControlInTD = (dataItem) => {
240
+ const field = this.props.field || "";
241
+ let {selectProps} = this.props;
242
+ let newSelectProps = {...selectProps};
243
+ if (!(newSelectProps.onChangeWithObject === false)) {
244
+ newSelectProps.onChangeWithObject = true;
245
+ }
246
+
247
+ let dataValue = "";
248
+ if (newSelectProps.onChangeWithObject) {
249
+ if (field.endsWith("_ext_name")) {
250
+ let pkFieldName = field.substring(0, field.length - "_ext_name".length) + "_pk";
251
+ dataValue = {
252
+ label : dataItem[field],
253
+ value : dataItem[pkFieldName]
254
+ };
255
+ }
256
+ else if (field.endsWith("_pk")) {
257
+ let extNameFieldName = field.substring(0, field.length - "_pk".length) + "_ext_name";
258
+ dataValue = {
259
+ label : dataItem[extNameFieldName],
260
+ value : dataItem[field]
261
+ };
262
+ }
263
+ else {
264
+ dataValue = {
265
+ label : dataItem[field + "_ext_name"],
266
+ value : dataItem[field]
267
+ };
268
+ }
269
+ }
270
+ else {
271
+ dataValue = dataItem[field] === null ? "" : dataItem[field];
272
+ }
273
+
274
+ if (newSelectProps.onChangeExtFunc) {
275
+ delete newSelectProps.onChangeExtFunc;
276
+ }
277
+
278
+ return <td className={`${this.props.className} k-grid-edit-cell`} style={this.props.style}>
279
+ <TreeSelect {...newSelectProps}
280
+ size={"large"}
281
+ value={dataValue}
282
+ onChange={this.onChange}
283
+ style={{ width: '100%' }}>
284
+ </TreeSelect>
285
+ </td>;
286
+ }
287
+
288
+ buildTextControlInTD = (dataItem) => {
289
+ let {selectProps} = this.props;
290
+ const field = this.props.field || "";
291
+ const dataValue = dataItem[field] === null ? "" : dataItem[field];
292
+ return <td className={this.props.className} style={this.props.style}>
293
+ {selectProps.type === 'link' && <a onClick={() => {
294
+ if (lodash.isFunction(selectProps.onClick)) {
295
+ selectProps.onClick(dataItem)
296
+ }
297
+ }}>{dataValue}</a>}
298
+ {!selectProps.type && dataValue}
299
+ </td>;
300
+ }
301
+
302
+ render() {
303
+ const { dataItem, selectProps } = this.props;
304
+ if (selectProps?.disabledField) {
305
+ let disabled = dataItem[selectProps?.disabledField];
306
+ if (selectProps?.disabledValue) {
307
+ disabled = dataItem[selectProps?.disabledField] !== selectProps?.disabledValue;
308
+ }
309
+ return dataItem.inEditState && disabled ? this.buildTreeSelectControlInTD(dataItem) : this.buildTextControlInTD(dataItem);
310
+ }
311
+ return dataItem.inEditState ? this.buildTreeSelectControlInTD(dataItem) : this.buildTextControlInTD(dataItem);
312
+ }
313
+ }
314
+
315
+ class KendoGridInputNumberCellRender extends React.Component {
316
+ constructor(props) {
317
+ super(props);
318
+ }
319
+
320
+ foreRefreshUI = () => {
321
+ this.setState({stateBarTS : new Date().getTime()});
322
+ }
323
+
324
+ onNumberChange = (value) => {
325
+ const { dataItem, field, inputNumberProps } = this.props;
326
+ let {onChangeExtFunc} = inputNumberProps;
327
+ dataItem[field] = value;
328
+ this.foreRefreshUI();
329
+ if (lodash.isFunction(onChangeExtFunc)) {
330
+ onChangeExtFunc(dataItem)
331
+ }
332
+ }
333
+
334
+ buildInputNumberControlInTD = (dataItem) => {
335
+ const field = this.props.field || "";
336
+ let {inputNumberProps} = this.props;
337
+ const dataValue = dataItem[field] === null ? "" : dataItem[field];
338
+
339
+ let props = {...inputNumberProps};
340
+ if (props.onChangeExtFunc) {
341
+ delete props.onChangeExtFunc;
342
+ }
343
+
344
+ if (props.disabledValue) {
345
+ delete props.disabledValue;
346
+ }
347
+
348
+ if (props.disabledField) {
349
+ delete props.disabledField;
350
+ }
351
+
352
+ return <td className={`${this.props.className} k-grid-edit-cell`} style={this.props.style}>
353
+ <InputNumber {...props}
354
+ size={"large"}
355
+ onChange={this.onNumberChange}
356
+ value={dataValue}
357
+ style={{ width: '100%' }}/>
358
+ </td>;
359
+ }
360
+
361
+ buildTextControlInTD = (dataItem) => {
362
+ const {inputNumberProps} = this.props;
363
+ const field = this.props.field || "";
364
+ const dataValue = dataItem[field] === null ? "" : dataItem[field];
365
+ return <td className={this.props.className} style={this.props.style}>
366
+ {inputNumberProps.type === 'link' && <a onClick={() => {
367
+ if (lodash.isFunction(inputNumberProps.onClick)) {
368
+ inputNumberProps.onClick(dataItem)
369
+ }
370
+ }}>{dataValue}</a>}
371
+ {!inputNumberProps.type && dataValue}
372
+ </td>;
373
+ }
374
+
375
+ render() {
376
+ const { dataItem, inputNumberProps } = this.props;
377
+ if (inputNumberProps?.disabledField) {
378
+ let disabled = dataItem[inputNumberProps?.disabledField];
379
+ if (inputNumberProps?.disabledValue) {
380
+ disabled = dataItem[inputNumberProps?.disabledField] !== inputNumberProps?.disabledValue;
381
+ }
382
+ return dataItem.inEditState && disabled ? this.buildInputNumberControlInTD(dataItem) : this.buildTextControlInTD(dataItem);
383
+ }
384
+ return dataItem.inEditState ? this.buildInputNumberControlInTD(dataItem) : this.buildTextControlInTD(dataItem);
385
+ }
386
+ }
387
+
388
+ class KendoGridInputTextCellRender extends React.Component {
389
+ constructor(props) {
390
+ super(props);
391
+ }
392
+
393
+ foreRefreshUI = () => {
394
+ this.setState({stateBarTS : new Date().getTime()});
395
+ }
396
+
397
+ onChange = (value) => {
398
+ const { dataItem, field, inputProps } = this.props;
399
+ let {onChangeExtFunc} = inputProps;
400
+ dataItem[field] = value;
401
+ this.foreRefreshUI();
402
+ if (lodash.isFunction(onChangeExtFunc)) {
403
+ onChangeExtFunc(dataItem)
404
+ }
405
+ }
406
+
407
+ buildInputTextControlInTD = (dataItem) => {
408
+ const field = this.props.field || "";
409
+ let {inputProps} = this.props;
410
+ let dataValue = dataItem[field] === null ? "" : dataItem[field];
411
+
412
+ let props = {...inputProps};
413
+ if (props.onChangeExtFunc) {
414
+ delete props.onChangeExtFunc;
415
+ }
416
+
417
+ if (props.disabledValue) {
418
+ delete props.disabledValue;
419
+ }
420
+
421
+ if (props.disabledField) {
422
+ delete props.disabledField;
423
+ }
424
+
425
+ return <td className={`${this.props.className} k-grid-edit-cell`} style={this.props.style}>
426
+ <Input {...props}
427
+ size={"large"}
428
+ onChange={this.onChange}
429
+ value={dataValue}/>
430
+ </td>;
431
+ }
432
+
433
+ buildTextControlInTD = (dataItem) => {
434
+ const {inputProps} = this.props;
435
+ const field = this.props.field || "";
436
+ const dataValue = dataItem[field] === null ? "" : dataItem[field];
437
+ return <td className={this.props.className} style={this.props.style}>
438
+ {inputProps.type === 'link' && <a onClick={() => {
439
+ if (lodash.isFunction(inputProps.onClick)) {
440
+ inputProps.onClick(dataItem)
441
+ }
442
+ }}>{dataValue}</a>}
443
+ {!inputProps.type && dataValue}
444
+ </td>;
445
+ }
446
+
447
+ render() {
448
+ const { dataItem, inputProps } = this.props;
449
+ if (inputProps?.disabledField) {
450
+ let disabled = dataItem[inputProps?.disabledField];
451
+ if (inputProps?.disabledValue) {
452
+ disabled = dataItem[inputProps?.disabledField] !== inputProps?.disabledValue;
453
+ }
454
+ return dataItem.inEditState && disabled ? this.buildInputTextControlInTD(dataItem) : this.buildTextControlInTD(dataItem);
455
+ }
456
+ return dataItem.inEditState ? this.buildInputTextControlInTD(dataItem) : this.buildTextControlInTD(dataItem);
457
+ }
458
+ }
459
+
460
+ class KendoGridDatePickerCellRender extends React.Component {
461
+ constructor(props) {
462
+ super(props);
463
+ }
464
+
465
+ foreRefreshUI = () => {
466
+ this.setState({stateBarTS : new Date().getTime()});
467
+ }
468
+
469
+ onChange = (value) => {
470
+ const { dataItem, field, datePickerProps } = this.props;
471
+ dataItem[field] = value;
472
+ let {onChangeExtFunc} = datePickerProps;
473
+ if (lodash.isFunction(onChangeExtFunc)) {
474
+ onChangeExtFunc(dataItem)
475
+ }
476
+ this.foreRefreshUI();
477
+ }
478
+
479
+ buildDatePickerControlInTD = (dataItem) => {
480
+ let {field, className, style} = this.props;
481
+ let {datePickerProps} = this.props;
482
+ const dataValue = dataItem[field] === null ? "" : dataItem[field];
483
+
484
+ let props = {...datePickerProps};
485
+ let pickerType = props.type;
486
+
487
+ if (props.onChangeExtFunc) {
488
+ delete props.onChangeExtFunc;
489
+ }
490
+
491
+ if (props.disabledValue) {
492
+ delete props.disabledValue;
493
+ }
494
+
495
+ if (props.disabledField) {
496
+ delete props.disabledField;
497
+ }
498
+
499
+ if (props.type) {
500
+ pickerType = props.type;
501
+ delete props.type;
502
+ }
503
+
504
+ if (pickerType === buildKendoGridDatePickerCellRender.prototype.DateTypes.DATE || pickerType === buildKendoGridDatePickerCellRender.prototype.DateTypes.DATETIME || pickerType === buildKendoGridDatePickerCellRender.prototype.DateTypes.MONTH) {
505
+ return <td className={`${className} k-grid-edit-cell`} style={style}>
506
+ <DatePicker {...props}
507
+ showTime={pickerType === buildKendoGridDatePickerCellRender.prototype.DateTypes.DATETIME}
508
+ picker={props.type}
509
+ onChange={this.onChange}
510
+ value={dataValue}/>
511
+ </td>;
512
+ }
513
+ else if (pickerType === buildKendoGridDatePickerCellRender.prototype.DateTypes.DATE_RANGE || pickerType === buildKendoGridDatePickerCellRender.prototype.DateTypes.DATETIME_RANGE || pickerType === buildKendoGridDatePickerCellRender.prototype.DateTypes.MONTH_RANGE) {
514
+ return <td className={`${className} k-grid-edit-cell`} style={style}>
515
+ <RangePicker {...props}
516
+ showTime={pickerType === buildKendoGridDatePickerCellRender.prototype.DateTypes.DATETIME_RANGE}
517
+ picker={pickerType.split('Range')[0]}
518
+ onChange={this.onChange}
519
+ value={dataValue}/>
520
+ </td>;
521
+ }
522
+ }
523
+
524
+ buildTextControlInTD = (dataItem) => {
525
+ let {field, className, style, datePickerProps} = this.props;
526
+ let {type, format} = datePickerProps;
527
+ let dataValue = dataItem[field];
528
+
529
+ if (dataValue !== null) {
530
+ if (type === buildKendoGridDatePickerCellRender.prototype.DateTypes.DATE) {
531
+ format = 'YYYY-MM-DD';
532
+ dataValue = moment(dataItem[field]).format(format);
533
+ }
534
+ else if (type === buildKendoGridDatePickerCellRender.prototype.DateTypes.DATE_RANGE) {
535
+ format = 'YYYY-MM-DD';
536
+ dataValue = [moment(dataItem[field][0]).format(format), moment(dataItem[field][1]).format(format)];
537
+ }
538
+ else if (type === buildKendoGridDatePickerCellRender.prototype.DateTypes.DATETIME) {
539
+ format = 'YYYY-MM-DD HH:mm:ss';
540
+ dataValue = moment(dataItem[field]).format(format);
541
+ }
542
+ else if (type === buildKendoGridDatePickerCellRender.prototype.DateTypes.DATETIME_RANGE) {
543
+ format = 'YYYY-MM-DD HH:mm:ss';
544
+ dataValue = [moment(dataItem[field][0]).format(format), moment(dataItem[field][1]).format(format)];
545
+ }
546
+ } else {
547
+ dataValue = '';
548
+ }
549
+
550
+ return <td className={className} style={style}>
551
+ {datePickerProps.type === 'link' && <a onClick={() => {
552
+ if (lodash.isFunction(datePickerProps.onClick)) {
553
+ datePickerProps.onClick(dataItem)
554
+ }
555
+ }}>{dataValue}</a>}
556
+ {dataValue}
557
+ </td>;
558
+ }
559
+
560
+ render() {
561
+ const { dataItem, datePickerProps } = this.props;
562
+ if (datePickerProps?.disabledField) {
563
+ let disabled = dataItem[datePickerProps?.disabledField];
564
+ if (datePickerProps?.disabledValue) {
565
+ disabled = dataItem[datePickerProps?.disabledField] !== datePickerProps?.disabledValue;
566
+ }
567
+ return dataItem.inEditState && disabled ? this.buildDatePickerControlInTD(dataItem) : this.buildTextControlInTD(dataItem);
568
+ }
569
+ return dataItem.inEditState ? this.buildDatePickerControlInTD(dataItem) : this.buildTextControlInTD(dataItem);
570
+ }
571
+ }
572
+
573
+ class KendoGridSwitchCellRender extends React.Component {
574
+ constructor(props) {
575
+ super(props);
576
+ }
577
+
578
+ foreRefreshUI = () => {
579
+ this.setState({stateBarTS : new Date().getTime()});
580
+ }
581
+
582
+ onChange = (objectChecked) => {
583
+ const { dataItem, field, switchProps } = this.props;
584
+ let {_this, onChangeExtFunc} = switchProps;
585
+ dataItem[field] = objectChecked;
586
+ this.foreRefreshUI();
587
+ _this.forceUpdate(() => {
588
+ if (lodash.isFunction(onChangeExtFunc)) {
589
+ onChangeExtFunc(dataItem, this.props, objectChecked)
590
+ }
591
+ })
592
+ }
593
+
594
+ buildSwitchControlInTD = (dataItem) => {
595
+ let {field, className, style, switchProps} = this.props;
596
+ let newSelectProps = {...switchProps};
597
+ if (!(newSelectProps.onChangeWithObject === false)) {
598
+ newSelectProps.onChangeWithObject = true;
599
+ }
600
+
601
+ let dataChecked = dataItem[field] === null ? "" : dataItem[field];
602
+
603
+ if (newSelectProps.onChangeExtFunc) {
604
+ delete newSelectProps.onChangeExtFunc;
605
+ }
606
+
607
+ return <td className={`${className} k-grid-edit-cell`} style={style}>
608
+ <Switch {...newSelectProps}
609
+ checked={!!dataChecked}
610
+ onChange={this.onChange}/>
611
+ </td>;
612
+ }
613
+
614
+ buildTextControlInTD = (dataItem) => {
615
+ let {field, className, style} = this.props;
616
+ const dataValue = dataItem[field] ? '是' : '否';
617
+ return <td className={className} style={style}>{dataValue}</td>;
618
+ }
619
+
620
+ render() {
621
+ const { dataItem, switchProps } = this.props;
622
+ if (switchProps?.disabledField) {
623
+ let disabled = dataItem[switchProps?.disabledField];
624
+ if (switchProps?.disabledValue) {
625
+ disabled = dataItem[switchProps?.disabledField] !== switchProps?.disabledValue;
626
+ }
627
+ return dataItem.inEditState && disabled ? this.buildSwitchControlInTD(dataItem) : this.buildTextControlInTD(dataItem)
628
+ }
629
+ return dataItem.inEditState ? this.buildSwitchControlInTD(dataItem) : this.buildTextControlInTD(dataItem)
630
+ }
631
+ }
632
+
633
+ class KendoGridRefInputCellRender extends React.Component {
634
+ constructor(props) {
635
+ super(props);
636
+ }
637
+
638
+ onChange = (data, dataItem) => {
639
+ let {inputProps} = this.props;
640
+ let {_this, onChangeExtFunc} = inputProps;
641
+
642
+ _this.forceUpdate(() => {
643
+ if (lodash.isFunction(onChangeExtFunc)) {
644
+ onChangeExtFunc(data, dataItem)
645
+ }
646
+ });
647
+ }
648
+
649
+ buildInputTextControlInTD = (dataItem) => {
650
+ let {field, className, style, inputProps} = this.props;
651
+ const dataValue = dataItem[field] === null ? "" : dataItem[field];
652
+
653
+ return <td className={`${className} k-grid-edit-cell`} style={style}>
654
+ <RefInput field={field}
655
+ value={dataValue}
656
+ showClear
657
+ data={dataItem}
658
+ readonly={inputProps.readonly}
659
+ rules={inputProps.rules || false}
660
+ refCode={inputProps.dictCode}
661
+ refDialogWidth={inputProps.refDialogWidth || 600}
662
+ refDialogHeight={inputProps.refDialogHeight || 300}
663
+ isNotData={inputProps.isNotData}
664
+ multiple={inputProps.multiple}
665
+ customGridData={inputProps.customGridData}
666
+ customRefUIConfig={inputProps.customRefUIConfig}
667
+ onBeforeClick={inputProps.onBeforeClick}
668
+ okCallback={inputProps.onChangeExtFunc || this.onChange}/>
669
+ </td>;
670
+ }
671
+
672
+ buildTextControlInTD = (dataItem) => {
673
+ let {field, className, style, inputProps} = this.props;
674
+ const dataValue = dataItem[field] === null ? "" : dataItem[field];
675
+ return <td className={className} style={style}>
676
+ {inputProps.type === 'link' && <a onClick={() => {
677
+ if (lodash.isFunction(inputProps.onClick)) {
678
+ inputProps.onClick(dataItem)
679
+ }
680
+ }}>{dataValue}</a>}
681
+ {!inputProps.type && dataValue}
682
+ </td>;
683
+ }
684
+
685
+ render() {
686
+ const { dataItem, inputProps } = this.props;
687
+
688
+ if (inputProps?.disabledField) {
689
+ let disabled = dataItem[inputProps?.disabledField];
690
+ if (inputProps?.disabledValue) {
691
+ disabled = dataItem[inputProps?.disabledField] !== inputProps?.disabledValue;
692
+ }
693
+ return dataItem.inEditState && disabled ? this.buildInputTextControlInTD(dataItem) : this.buildTextControlInTD(dataItem)
694
+ }
695
+ return dataItem.inEditState ? this.buildInputTextControlInTD(dataItem) : this.buildTextControlInTD(dataItem)
696
+ }
697
+ }
698
+
699
+ const buildKendoGridSelectCellRender = function(_this, selectProps) {
700
+ return (props) => {
701
+ let mergedProps = {...props};
702
+ if (_this) mergedProps.selectProps = {_this};
703
+ if (selectProps) mergedProps.selectProps = {_this, ...selectProps};
704
+ return <KendoGridSelectCellRender {...mergedProps} />
705
+ };
706
+ }
707
+
708
+ const buildKendoGridTreeSelectCellRender = function(_this, selectProps) {
709
+ return (props) => {
710
+ let mergedProps = {...props};
711
+ if (_this) mergedProps.selectProps = {_this};
712
+ if (selectProps) mergedProps.selectProps = {_this, ...selectProps};
713
+ return <KendoGridTreeSelectCellRender {...mergedProps} />
714
+ };
715
+ }
716
+
717
+ const buildKendoGridInputNumberCellRender = function(_this, inputNumberProps) {
718
+ return (props) => {
719
+ let mergedProps = {...props};
720
+ if (_this) mergedProps.inputNumberProps = {_this};
721
+ if (inputNumberProps) mergedProps.inputNumberProps = {_this, ...inputNumberProps};
722
+ return <KendoGridInputNumberCellRender {...mergedProps} />
723
+ };
724
+ }
725
+
726
+ const buildKendoGridInputCellRender = function(_this, inputProps) {
727
+ return (props) => {
728
+ let mergedProps = {...props};
729
+ if (_this) mergedProps.inputProps = {_this};
730
+ if (inputProps) mergedProps.inputProps = {_this, ...inputProps};
731
+ return <KendoGridInputTextCellRender {...mergedProps} />
732
+ };
733
+ }
734
+
735
+ const buildKendoGridDatePickerCellRender = function (_this, datePickerProps) {
736
+ return (props) => {
737
+ let mergedProps = {...props};
738
+ if (_this) mergedProps.datePickerProps = {_this};
739
+ if (datePickerProps) mergedProps.datePickerProps = {_this, ...datePickerProps};
740
+ return <KendoGridDatePickerCellRender {...mergedProps}/>
741
+ }
742
+ }
743
+
744
+ buildKendoGridDatePickerCellRender.prototype.DateTypes = {
745
+ DATE: 'date',
746
+ MONTH: 'month',
747
+ DATETIME: 'dateTime',
748
+ DATE_RANGE: 'dateRange',
749
+ DATETIME_RANGE: 'dateTimeRange',
750
+ MONTH_RANGE: 'monthRange',
751
+ }
752
+
753
+ const buildKendoGridSwitchCellRender = function (_this, switchProps) {
754
+ return (props) => {
755
+ let mergedProps = {...props};
756
+ if (_this) mergedProps.switchProps = {_this};
757
+ if (switchProps) mergedProps.switchProps = {_this, ...switchProps};
758
+ return <KendoGridSwitchCellRender {...mergedProps}/>
759
+ }
760
+ }
761
+
762
+ const buildKendoGridRefInputCellRender = function (_this, inputProps) {
763
+ return (props) => {
764
+ let mergedProps = {...props};
765
+ if (_this) mergedProps.inputProps = {_this};
766
+ if (inputProps) mergedProps.inputProps = {_this, ...inputProps};
767
+ return <KendoGridRefInputCellRender {...mergedProps}/>
768
+ }
769
+ }
770
+
771
+ export {
772
+ KendoGridRowNumberCellRender,
773
+ KendoGridRowNumberTagCellRender,
774
+ KendoGridRowTimeUnitCellRender,
775
+ KendoGridHeaderRowMustCellRender,
776
+ KendoGridBooleanCellRender,
777
+ KendoGridVersionCellRender,
778
+ KendoGridEmptyCellRender,
779
+ KendoGridFilterCellRender,
780
+ KendoGridPercentCellRender,
781
+ KendoGridTimeStampCellRender,
782
+ KendoGridDateCellRender,
783
+ buildKendoGridSelectCellRender,
784
+ buildKendoGridTreeSelectCellRender,
785
+ buildKendoGridInputNumberCellRender,
786
+ buildKendoGridInputCellRender,
787
+ buildKendoGridDatePickerCellRender,
788
+ buildKendoGridSwitchCellRender,
789
+ buildKendoGridRefInputCellRender
790
+ }