@vue-ui-kit/ant 1.9.4 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +4 -1
- package/dist/declarations/antProxy.d.ts +55 -20
- package/dist/es/index.js +8840 -2942
- package/dist/index.d.ts +5 -6
- package/dist/packages/components/PCanvasGrid.vue.d.ts +2 -0
- package/dist/packages/components/PCanvasTable.vue.d.ts +134 -0
- package/dist/packages/components/PForm.vue.d.ts +8 -14
- package/dist/packages/components/PFormCol.vue.d.ts +8 -13
- package/dist/packages/components/PFormGroup.vue.d.ts +16 -16
- package/dist/packages/components/PGrid.vue.d.ts +7 -27
- package/dist/packages/components/PGroupBlock.vue.d.ts +5 -7
- package/dist/packages/components/PromisePicker.vue.d.ts +5 -7
- package/dist/packages/components/RenderEditCell.d.ts +10 -0
- package/dist/packages/renders/TableInput.vue.d.ts +7 -26
- package/dist/packages/store/renderStore.d.ts +10 -58
- package/dist/packages/utils/AFormatters.d.ts +3 -13
- package/dist/packages/utils/treeHelper.d.ts +7 -7
- package/dist/style.scss +59 -35
- package/package.json +2 -1
- package/src/declarations/antProxy.ts +75 -22
- package/src/index.ts +15 -2
- package/src/packages/components/PCanvasGrid.vue +6 -0
- package/src/packages/components/PCanvasTable.vue +286 -0
- package/src/packages/components/PForm.vue +5 -5
- package/src/packages/components/PFormGroup.vue +1 -1
- package/src/packages/components/PGrid.vue +10 -5
- package/src/packages/components/PGroupBlock.vue +1 -1
- package/src/packages/components/PromisePicker.vue +1 -1
- package/src/packages/components/RenderAntCell.tsx +2 -2
- package/src/packages/components/RenderAntItem.tsx +2 -2
- package/src/packages/components/RenderDefaultSlots.tsx +1 -1
- package/src/packages/components/RenderEditCell.tsx +36 -0
- package/src/packages/components/RenderItemSlots.tsx +1 -1
- package/src/packages/components/RenderTitleSlots.tsx +1 -1
- package/src/packages/renders/TableInput.vue +1 -1
- package/src/packages/store/renderStore.tsx +44 -18
- package/src/packages/styles/index.scss +59 -31
- package/src/packages/utils/AFormatters.ts +3 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<script generic="F = Recordable" lang="ts" name="PForm" setup>
|
|
1
|
+
<script generic="F extends Recordable = Recordable" lang="ts" name="PForm" setup>
|
|
2
2
|
import { PFormItemProps, PFormProps } from '#/antProxy';
|
|
3
3
|
import { computed, ref, toRefs } from 'vue';
|
|
4
4
|
import { omit } from 'xe-utils';
|
|
@@ -39,15 +39,15 @@
|
|
|
39
39
|
eachTree(items.value, (item) => {
|
|
40
40
|
if (item.field && item.itemRender) {
|
|
41
41
|
if (isGoodValue(item.itemRender.defaultValue)) {
|
|
42
|
-
obj[item.field] = item.itemRender.defaultValue;
|
|
42
|
+
obj[item.field as keyof F] = item.itemRender.defaultValue;
|
|
43
43
|
} else {
|
|
44
|
-
obj[item.field] = undefined;
|
|
44
|
+
obj[item.field as keyof F] = undefined;
|
|
45
45
|
}
|
|
46
46
|
} else if (item.field && item.slots) {
|
|
47
47
|
if (isGoodValue(item.slots.defaultValue)) {
|
|
48
|
-
obj[item.field] = item.slots.defaultValue;
|
|
48
|
+
obj[item.field as keyof F] = item.slots.defaultValue;
|
|
49
49
|
} else {
|
|
50
|
-
obj[item.field] = undefined;
|
|
50
|
+
obj[item.field as keyof F] = undefined;
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<script lang="ts" generic="F = Recordable" setup name="PFormGroup">
|
|
1
|
+
<script lang="ts" generic="F extends Recordable = Recordable" setup name="PFormGroup">
|
|
2
2
|
import { computed, nextTick, PropType, ref, watch, watchEffect } from 'vue';
|
|
3
3
|
import { PFormGroupProps, PFormBlockInstance } from '#/antProxy';
|
|
4
4
|
import { MoreOutlined } from '@ant-design/icons-vue';
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
<script
|
|
1
|
+
<script
|
|
2
|
+
generic="D extends Recordable = Recordable, F extends Recordable = Recordable"
|
|
3
|
+
lang="ts"
|
|
4
|
+
name="PGrid"
|
|
5
|
+
setup
|
|
6
|
+
>
|
|
2
7
|
import { ColumnProps, PFormItemProps, PGridProps, ResponsePathConfig } from '#/antProxy';
|
|
3
8
|
import {
|
|
4
9
|
computed,
|
|
@@ -236,15 +241,15 @@
|
|
|
236
241
|
eachTree(formConfig.value.items, (item) => {
|
|
237
242
|
if (item.field && item.itemRender) {
|
|
238
243
|
if (isGoodValue(item.itemRender.defaultValue)) {
|
|
239
|
-
obj[item.field] = item.itemRender.defaultValue;
|
|
244
|
+
obj[item.field as keyof F] = item.itemRender.defaultValue;
|
|
240
245
|
} else {
|
|
241
|
-
obj[item.field] = undefined;
|
|
246
|
+
obj[item.field as keyof F] = undefined;
|
|
242
247
|
}
|
|
243
248
|
} else if (item.field && item.slots) {
|
|
244
249
|
if (isGoodValue(item.slots.defaultValue)) {
|
|
245
|
-
obj[item.field] = item.slots.defaultValue;
|
|
250
|
+
obj[item.field as keyof F] = item.slots.defaultValue;
|
|
246
251
|
} else {
|
|
247
|
-
obj[item.field] = undefined;
|
|
252
|
+
obj[item.field as keyof F] = undefined;
|
|
248
253
|
}
|
|
249
254
|
}
|
|
250
255
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<script lang="ts" setup name="PGroupBlock" generic="F = Recordable">
|
|
1
|
+
<script lang="ts" setup name="PGroupBlock" generic="F extends Recordable = Recordable">
|
|
2
2
|
import { PBlockProps, PFormInstance, PFormProps } from '#/antProxy';
|
|
3
3
|
import { computed, ref, toRefs } from 'vue';
|
|
4
4
|
import PForm from '@/components/PForm.vue';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<script lang="ts" setup name="PromisePicker" generic="D = Recordable, F = Recordable">
|
|
1
|
+
<script lang="ts" setup name="PromisePicker" generic="D extends Recordable = Recordable, F extends Recordable = Recordable">
|
|
2
2
|
import { reactive, ref, computed } from 'vue';
|
|
3
3
|
import { PGridInstance, PromisePickerProps } from '#/antProxy';
|
|
4
4
|
import PGrid from '@/components/PGrid.vue';
|
|
@@ -3,10 +3,10 @@ import { CellRender, RenderTableParams } from '#/antProxy';
|
|
|
3
3
|
import renderStore from '@/store/renderStore';
|
|
4
4
|
|
|
5
5
|
export default defineComponent(
|
|
6
|
-
<D = Recordable
|
|
6
|
+
<D extends Recordable = Recordable>(props: {
|
|
7
7
|
cellRender: CellRender;
|
|
8
8
|
renderTableParams: RenderTableParams<D>;
|
|
9
|
-
defaultHandler
|
|
9
|
+
defaultHandler: {
|
|
10
10
|
[key: string]: (...args: any[]) => any;
|
|
11
11
|
};
|
|
12
12
|
}) => {
|
|
@@ -3,11 +3,11 @@ import { ItemRender, RenderFormParams } from '#/antProxy';
|
|
|
3
3
|
import renderStore from '@/store/renderStore';
|
|
4
4
|
|
|
5
5
|
export default defineComponent(
|
|
6
|
-
<F = Recordable
|
|
6
|
+
<F extends Recordable = Recordable>(
|
|
7
7
|
props: {
|
|
8
8
|
itemRender: ItemRender;
|
|
9
9
|
renderFormParams: RenderFormParams<F>;
|
|
10
|
-
defaultHandler
|
|
10
|
+
defaultHandler: {
|
|
11
11
|
[key: string]: (...args: any[]) => any;
|
|
12
12
|
};
|
|
13
13
|
},
|
|
@@ -4,7 +4,7 @@ import { renderAntFormat } from '@/utils/AFormatters';
|
|
|
4
4
|
import RenderAntCell from '@/components/RenderAntCell';
|
|
5
5
|
|
|
6
6
|
export default defineComponent(
|
|
7
|
-
<D = Recordable
|
|
7
|
+
<D extends Recordable = Recordable>(props: {
|
|
8
8
|
tableData: D[];
|
|
9
9
|
row: D;
|
|
10
10
|
column: ColumnProps<D>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { defineComponent, ref } from 'vue';
|
|
2
|
+
import { CellRender, RenderTableParams } from '#/antProxy';
|
|
3
|
+
import renderStore from '@/store/renderStore';
|
|
4
|
+
|
|
5
|
+
export default defineComponent(
|
|
6
|
+
<D extends Recordable = Recordable>(
|
|
7
|
+
props: {
|
|
8
|
+
cellRender: CellRender;
|
|
9
|
+
renderTableParams: RenderTableParams<D>;
|
|
10
|
+
},
|
|
11
|
+
{ emit },
|
|
12
|
+
) => {
|
|
13
|
+
const { cellRender, renderTableParams } = props;
|
|
14
|
+
const { row, field } = renderTableParams!;
|
|
15
|
+
if (field) {
|
|
16
|
+
const innerValue = ref(row[field]);
|
|
17
|
+
return () => {
|
|
18
|
+
return (
|
|
19
|
+
renderStore.renders[cellRender!.name]?.renderEdit?.(
|
|
20
|
+
innerValue,
|
|
21
|
+
cellRender!,
|
|
22
|
+
renderTableParams,
|
|
23
|
+
emit,
|
|
24
|
+
) ?? null
|
|
25
|
+
);
|
|
26
|
+
};
|
|
27
|
+
} else {
|
|
28
|
+
return () => null;
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'RenderEditCell',
|
|
33
|
+
props: ['cellRender', 'renderTableParams'],
|
|
34
|
+
emits: ['blur'],
|
|
35
|
+
},
|
|
36
|
+
);
|
|
@@ -2,7 +2,7 @@ import { defineComponent, toRefs } from 'vue';
|
|
|
2
2
|
import { PFormItemProps } from '#/antProxy';
|
|
3
3
|
|
|
4
4
|
export default defineComponent(
|
|
5
|
-
<F = Recordable
|
|
5
|
+
<F extends Recordable = Recordable>(props: {
|
|
6
6
|
formData: F;
|
|
7
7
|
item: PFormItemProps<F>;
|
|
8
8
|
passTrigger: (cusFields?: string | string[]) => void;
|
|
@@ -2,7 +2,7 @@ import { defineComponent } from 'vue';
|
|
|
2
2
|
import { ColumnProps } from '#/antProxy';
|
|
3
3
|
|
|
4
4
|
export default defineComponent(
|
|
5
|
-
<D = Recordable
|
|
5
|
+
<D extends Recordable = Recordable>(props: { column: ColumnProps<D> }) => {
|
|
6
6
|
const { column } = props;
|
|
7
7
|
return () => {
|
|
8
8
|
return column.slots?.title?.({ column }) ?? column.title;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<script lang="ts" setup name="TableInput" generic="D = Recordable">
|
|
1
|
+
<script lang="ts" setup name="TableInput" generic="D extends Recordable = Recordable">
|
|
2
2
|
import { computed, PropType, watch } from 'vue';
|
|
3
3
|
import { TableProps } from 'ant-design-vue';
|
|
4
4
|
import { ColumnProps } from '#/antProxy';
|
|
@@ -26,7 +26,7 @@ import { ButtonProps } from 'ant-design-vue/lib/button';
|
|
|
26
26
|
import { isBadValue, isGoodValue, valued } from '@/utils/is';
|
|
27
27
|
import TableInput from '@/renders/TableInput.vue';
|
|
28
28
|
import Icon from '@/renders/Icon';
|
|
29
|
-
import { computed } from 'vue';
|
|
29
|
+
import { computed, Ref } from 'vue';
|
|
30
30
|
|
|
31
31
|
interface BtnOptions extends ButtonProps {
|
|
32
32
|
content?: string;
|
|
@@ -36,7 +36,27 @@ interface BtnOptions extends ButtonProps {
|
|
|
36
36
|
clickEvt?: (p: RenderTableParams) => any;
|
|
37
37
|
hiddenIf?: (p: RenderTableParams) => boolean;
|
|
38
38
|
}
|
|
39
|
-
|
|
39
|
+
export interface RenderWorkshop {
|
|
40
|
+
renderItemContent?: (
|
|
41
|
+
options: RenderOptions,
|
|
42
|
+
params: RenderFormParams,
|
|
43
|
+
defaultHandler: Recordable,
|
|
44
|
+
) => any;
|
|
45
|
+
renderDefault?: (
|
|
46
|
+
options: RenderOptions,
|
|
47
|
+
params: RenderTableParams,
|
|
48
|
+
defaultHandler: Recordable,
|
|
49
|
+
) => any;
|
|
50
|
+
renderEdit?: (
|
|
51
|
+
model: Ref<any>,
|
|
52
|
+
options: RenderOptions,
|
|
53
|
+
params: RenderTableParams,
|
|
54
|
+
emit?: (e: 'blur', value: any) => void,
|
|
55
|
+
) => any;
|
|
56
|
+
}
|
|
57
|
+
interface RenderFactory {
|
|
58
|
+
[key: string]: RenderWorkshop;
|
|
59
|
+
}
|
|
40
60
|
const antDefaultProps = {
|
|
41
61
|
AInput: {
|
|
42
62
|
autocomplete: 'off',
|
|
@@ -169,6 +189,25 @@ const renderBasic = (name: string) => {
|
|
|
169
189
|
<DynamicComponent is={name} {...props} />
|
|
170
190
|
);
|
|
171
191
|
},
|
|
192
|
+
renderEdit(
|
|
193
|
+
model: Ref<any>,
|
|
194
|
+
{ props = antDefaultProps[name] ?? {}, attrs = {}, events = {} }: RenderOptions,
|
|
195
|
+
params: RenderTableParams,
|
|
196
|
+
emit?: (e: 'blur', value: any[]) => void,
|
|
197
|
+
) {
|
|
198
|
+
return (
|
|
199
|
+
<DynamicComponent
|
|
200
|
+
is={name}
|
|
201
|
+
v-model:value={model.value}
|
|
202
|
+
{...attrs}
|
|
203
|
+
{...merge({}, antDefaultProps[name], props)}
|
|
204
|
+
onBlur={(...args) => {
|
|
205
|
+
emit?.('blur', model.value);
|
|
206
|
+
events.blur?.(params, ...args);
|
|
207
|
+
}}
|
|
208
|
+
/>
|
|
209
|
+
);
|
|
210
|
+
},
|
|
172
211
|
};
|
|
173
212
|
};
|
|
174
213
|
|
|
@@ -224,7 +263,7 @@ const renderBtn = (btnOpt: BtnOptions, params: RenderTableParams) =>
|
|
|
224
263
|
{btnOpt.content || (btnOpt?.getContent?.(params) ?? '')}
|
|
225
264
|
</Button>
|
|
226
265
|
);
|
|
227
|
-
const renders = {
|
|
266
|
+
const renders: RenderFactory = {
|
|
228
267
|
...Object.fromEntries(Object.keys(componentsMap).map((name) => [name, renderBasic(name)])),
|
|
229
268
|
// 简单按钮
|
|
230
269
|
$button: {
|
|
@@ -617,21 +656,7 @@ const renders = {
|
|
|
617
656
|
};
|
|
618
657
|
export const addRender = (
|
|
619
658
|
name: string,
|
|
620
|
-
{
|
|
621
|
-
renderItemContent,
|
|
622
|
-
renderDefault,
|
|
623
|
-
}: {
|
|
624
|
-
renderItemContent?: (
|
|
625
|
-
options: RenderOptions,
|
|
626
|
-
params: RenderFormParams,
|
|
627
|
-
defaultHandler: Recordable,
|
|
628
|
-
) => any;
|
|
629
|
-
renderDefault?: (
|
|
630
|
-
options: RenderOptions,
|
|
631
|
-
params: RenderTableParams,
|
|
632
|
-
defaultHandler: Recordable,
|
|
633
|
-
) => any;
|
|
634
|
-
},
|
|
659
|
+
{ renderItemContent, renderDefault, renderEdit }: RenderWorkshop,
|
|
635
660
|
) => {
|
|
636
661
|
if (renders.hasOwnProperty(name)) {
|
|
637
662
|
console.warn(`render ${name} already exists, you are trying to override it`);
|
|
@@ -639,6 +664,7 @@ export const addRender = (
|
|
|
639
664
|
renders[name] = {
|
|
640
665
|
renderItemContent,
|
|
641
666
|
renderDefault,
|
|
667
|
+
renderEdit,
|
|
642
668
|
};
|
|
643
669
|
};
|
|
644
670
|
export default {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@
|
|
1
|
+
@use 'variables';
|
|
2
2
|
|
|
3
3
|
.p-pane {
|
|
4
4
|
background-color: var(--p-theme-bg);
|
|
@@ -100,9 +100,9 @@
|
|
|
100
100
|
z-index: 4;
|
|
101
101
|
}
|
|
102
102
|
.p-error-hang-out {
|
|
103
|
-
.ant-input-affix-wrapper-status-error:not(
|
|
104
|
-
.ant-input-affix-wrapper-
|
|
105
|
-
)
|
|
103
|
+
.ant-input-affix-wrapper-status-error:not(.ant-input-affix-wrapper-disabled):not(
|
|
104
|
+
.ant-input-affix-wrapper-borderless
|
|
105
|
+
).ant-input-affix-wrapper {
|
|
106
106
|
border-color: #d9d9d9 !important;
|
|
107
107
|
|
|
108
108
|
&:focus {
|
|
@@ -122,7 +122,9 @@
|
|
|
122
122
|
transform: translateY(-10px);
|
|
123
123
|
max-height: 0;
|
|
124
124
|
overflow: hidden;
|
|
125
|
-
transition:
|
|
125
|
+
transition:
|
|
126
|
+
opacity 0.3s ease-out 0.3s,
|
|
127
|
+
transform 0.3s ease-out 0.3s,
|
|
126
128
|
max-height 0.3s ease-out 0.3s;
|
|
127
129
|
}
|
|
128
130
|
.ant-form-item-has-error .ant-form-item-explain-error {
|
|
@@ -234,25 +236,25 @@
|
|
|
234
236
|
}
|
|
235
237
|
}
|
|
236
238
|
}
|
|
237
|
-
.p-error-group-tab{
|
|
238
|
-
position:relative;
|
|
239
|
+
.p-error-group-tab {
|
|
240
|
+
position: relative;
|
|
239
241
|
overflow: visible;
|
|
240
|
-
color
|
|
241
|
-
&:after{
|
|
242
|
-
content:'🏷️';
|
|
243
|
-
position:absolute;
|
|
244
|
-
top
|
|
245
|
-
right:0;
|
|
246
|
-
width:1em;
|
|
247
|
-
height:1em;
|
|
248
|
-
font-size:0.8em;
|
|
242
|
+
color: #f5222d !important;
|
|
243
|
+
&:after {
|
|
244
|
+
content: '🏷️';
|
|
245
|
+
position: absolute;
|
|
246
|
+
top: -1em;
|
|
247
|
+
right: 0;
|
|
248
|
+
width: 1em;
|
|
249
|
+
height: 1em;
|
|
250
|
+
font-size: 0.8em;
|
|
249
251
|
animation: heartbeat 2s infinite;
|
|
250
252
|
}
|
|
251
253
|
}
|
|
252
254
|
.p-error-hang-out {
|
|
253
|
-
.ant-input-affix-wrapper-status-error:not(
|
|
254
|
-
.ant-input-affix-wrapper-
|
|
255
|
-
)
|
|
255
|
+
.ant-input-affix-wrapper-status-error:not(.ant-input-affix-wrapper-disabled):not(
|
|
256
|
+
.ant-input-affix-wrapper-borderless
|
|
257
|
+
).ant-input-affix-wrapper {
|
|
256
258
|
border-color: #d9d9d9 !important;
|
|
257
259
|
|
|
258
260
|
&:focus {
|
|
@@ -272,6 +274,10 @@
|
|
|
272
274
|
}
|
|
273
275
|
//endregion
|
|
274
276
|
|
|
277
|
+
/* #region EVirtTable */
|
|
278
|
+
|
|
279
|
+
/* #endregion */
|
|
280
|
+
|
|
275
281
|
@each $align in right center {
|
|
276
282
|
/**/
|
|
277
283
|
.p-content-align-#{$align}.ant-form-item .ant-form-item-control-input-content {
|
|
@@ -287,15 +293,37 @@
|
|
|
287
293
|
}
|
|
288
294
|
|
|
289
295
|
@keyframes heartbeat {
|
|
290
|
-
0%
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
}
|
|
296
|
+
0% {
|
|
297
|
+
transform: scale(1);
|
|
298
|
+
}
|
|
299
|
+
6% {
|
|
300
|
+
transform: scale(1.22);
|
|
301
|
+
}
|
|
302
|
+
12% {
|
|
303
|
+
transform: scale(1);
|
|
304
|
+
}
|
|
305
|
+
18% {
|
|
306
|
+
transform: scale(1.18);
|
|
307
|
+
}
|
|
308
|
+
24% {
|
|
309
|
+
transform: scale(1);
|
|
310
|
+
}
|
|
311
|
+
48% {
|
|
312
|
+
transform: scale(1);
|
|
313
|
+
} // 长停顿
|
|
314
|
+
54% {
|
|
315
|
+
transform: scale(1.22);
|
|
316
|
+
}
|
|
317
|
+
60% {
|
|
318
|
+
transform: scale(1);
|
|
319
|
+
}
|
|
320
|
+
66% {
|
|
321
|
+
transform: scale(1.18);
|
|
322
|
+
}
|
|
323
|
+
72% {
|
|
324
|
+
transform: scale(1);
|
|
325
|
+
}
|
|
326
|
+
100% {
|
|
327
|
+
transform: scale(1);
|
|
328
|
+
} // 长停顿
|
|
329
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { isArray, isFunction, isString, toNumber } from 'xe-utils';
|
|
2
2
|
import { valued } from '@/utils/is';
|
|
3
|
-
import { CellFuncArg, ColumnProps } from '#/antProxy';
|
|
3
|
+
import { CellFuncArg, ColumnProps, PFormatter } from '#/antProxy';
|
|
4
4
|
|
|
5
5
|
const emptyStr = `-`;
|
|
6
|
-
export const antFormatters = {
|
|
6
|
+
export const antFormatters: PFormatter = {
|
|
7
7
|
toString: ({ cellValue }) => (cellValue ? (cellValue.toString?.() ?? emptyStr) : emptyStr),
|
|
8
8
|
// 格式化选项
|
|
9
9
|
formatByOptions: ({ cellValue }, options: IOption[], separator = ',') => {
|
|
@@ -28,7 +28,7 @@ export const antFormatters = {
|
|
|
28
28
|
return valued(cellValue) ? (toNumber(cellValue) === 1 ? '男' : '女') : emptyStr;
|
|
29
29
|
},
|
|
30
30
|
};
|
|
31
|
-
export const renderAntFormat = <D = Recordable>(
|
|
31
|
+
export const renderAntFormat = <D extends Recordable = Recordable>(
|
|
32
32
|
formatter: string | [string, ...Array<any>] | ((arg: CellFuncArg<D>) => any),
|
|
33
33
|
{
|
|
34
34
|
record,
|