@vue-ui-kit/ant 1.7.2 → 1.7.4
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 +1 -1
- package/dist/declarations/antProxy.d.ts +11 -1
- package/dist/es/index.js +1224 -1169
- package/dist/packages/components/PFormGroup.vue.d.ts +1 -1
- package/dist/packages/components/PromisePicker.vue.d.ts +1 -0
- package/dist/packages/components/RenderAntItem.d.ts +2 -1
- package/dist/packages/components/RenderItemSlots.d.ts +2 -0
- package/package.json +1 -1
- package/src/declarations/antProxy.ts +12 -2
- package/src/packages/components/PForm.vue +8 -0
- package/src/packages/components/PFormGroup.vue +28 -8
- package/src/packages/components/PGrid.vue +3 -2
- package/src/packages/components/PromisePicker.vue +4 -1
- package/src/packages/components/RenderAntItem.tsx +5 -1
- package/src/packages/components/RenderItemSlots.tsx +3 -1
- package/src/packages/store/renderStore.tsx +15 -14
|
@@ -11,7 +11,7 @@ declare const _default: <F = Recordable<any>>(__VLS_props: NonNullable<Awaited<t
|
|
|
11
11
|
activeKey: import('vue').ComputedRef<number>;
|
|
12
12
|
setActiveKey: (key: number) => void;
|
|
13
13
|
validateAll: () => Promise<any[]>;
|
|
14
|
-
validate: (
|
|
14
|
+
validate: (__index: number) => any;
|
|
15
15
|
}>): void;
|
|
16
16
|
attrs: any;
|
|
17
17
|
slots: ReturnType<() => {
|
|
@@ -44,6 +44,7 @@ declare const _default: <D = Recordable<any>, F = Recordable<any>>(__VLS_props:
|
|
|
44
44
|
field?: string;
|
|
45
45
|
}>;
|
|
46
46
|
grid: import('vue').Ref<PGridInstance<D, Recordable<any>> | undefined, PGridInstance<D, Recordable<any>> | undefined>;
|
|
47
|
+
hide: () => void;
|
|
47
48
|
}>): void;
|
|
48
49
|
attrs: any;
|
|
49
50
|
slots: ReturnType<() => {}>;
|
|
@@ -5,7 +5,7 @@ declare const _default: import('vue').DefineSetupFnComponent<{
|
|
|
5
5
|
defaultHandler: {
|
|
6
6
|
[key: string]: (...args: any[]) => any;
|
|
7
7
|
};
|
|
8
|
-
}, "trigger"[], {}, {
|
|
8
|
+
}, ("trigger" | "delayTrigger")[], {}, {
|
|
9
9
|
itemRender: ItemRender;
|
|
10
10
|
renderFormParams: RenderFormParams<Recordable<any>>;
|
|
11
11
|
defaultHandler: {
|
|
@@ -13,5 +13,6 @@ declare const _default: import('vue').DefineSetupFnComponent<{
|
|
|
13
13
|
};
|
|
14
14
|
} & {
|
|
15
15
|
onTrigger?: ((...args: any[]) => any) | undefined;
|
|
16
|
+
onDelayTrigger?: ((...args: any[]) => any) | undefined;
|
|
16
17
|
}, import('vue').PublicProps>;
|
|
17
18
|
export default _default;
|
|
@@ -2,9 +2,11 @@ declare const _default: import('vue').DefineSetupFnComponent<{
|
|
|
2
2
|
formData: any;
|
|
3
3
|
item: any;
|
|
4
4
|
passTrigger: any;
|
|
5
|
+
passDelayTrigger: any;
|
|
5
6
|
}, {}, {}, {
|
|
6
7
|
formData: any;
|
|
7
8
|
item: any;
|
|
8
9
|
passTrigger: any;
|
|
10
|
+
passDelayTrigger: any;
|
|
9
11
|
} & {}, import('vue').PublicProps>;
|
|
10
12
|
export default _default;
|
package/package.json
CHANGED
|
@@ -65,6 +65,7 @@ export interface PFormItemProps<F = Recordable> {
|
|
|
65
65
|
default?: (
|
|
66
66
|
{ data, field }: ItemFuncArg<F>,
|
|
67
67
|
passTrigger?: (cusFields?: string | string[]) => void,
|
|
68
|
+
passDelayTrigger?: (cusFields?: string | string[], time?: number) => void
|
|
68
69
|
) => any;
|
|
69
70
|
};
|
|
70
71
|
}
|
|
@@ -108,8 +109,10 @@ export interface PFormGroupProps<F = Recordable> {
|
|
|
108
109
|
tabLabel?: string;
|
|
109
110
|
editAble?: boolean;
|
|
110
111
|
showAdd?: boolean;
|
|
112
|
+
forceRender?: boolean;
|
|
111
113
|
/* 是否保持连续编号 */
|
|
112
114
|
keepSerial?: boolean;
|
|
115
|
+
loading?: boolean;
|
|
113
116
|
itemMenus?: Array<GroupMenuItem<F>>;
|
|
114
117
|
creatItem?: ({ list }: { list?: Partial<F>[] }) => Promise<Partial<F>>;
|
|
115
118
|
max?: number;
|
|
@@ -144,7 +147,7 @@ export interface ToolbarButtonProps extends PButtonProps {
|
|
|
144
147
|
|
|
145
148
|
export interface ToolbarConfig {
|
|
146
149
|
buttons?: Array<ToolbarButtonProps>;
|
|
147
|
-
tools?: Array<{ code: string; icon: string; type?: ButtonType; disabled?: boolean }>;
|
|
150
|
+
tools?: Array<{ code: string; icon: string; type?: ButtonType; disabled?: boolean; size?: 'small' | 'large' | 'middle' }>;
|
|
148
151
|
disabled?: boolean;
|
|
149
152
|
}
|
|
150
153
|
|
|
@@ -240,6 +243,12 @@ export interface RenderOptions {
|
|
|
240
243
|
* @param cusFields field或者field数组
|
|
241
244
|
*/
|
|
242
245
|
handleTrigger?: (cusFields?: string | string[]) => void;
|
|
246
|
+
/**
|
|
247
|
+
* 延迟校验触发器
|
|
248
|
+
* @param cusFields field或者field数组
|
|
249
|
+
* @param time 延迟时间
|
|
250
|
+
*/
|
|
251
|
+
handleDelayTrigger?: (cusFields?: string | string[], time?: number) => void;
|
|
243
252
|
}
|
|
244
253
|
|
|
245
254
|
export interface RenderFormParams<F = Recordable> {
|
|
@@ -279,7 +288,8 @@ export interface PFormInstance {
|
|
|
279
288
|
export interface PromisePickerInstance<D = Recordable> {
|
|
280
289
|
pick: () => Promise<{ row: D; field?: string }>;
|
|
281
290
|
pickMultiple: () => Promise<D[]>;
|
|
282
|
-
grid: PGridInstance<D
|
|
291
|
+
grid: PGridInstance<D>;
|
|
292
|
+
hide: () => void;
|
|
283
293
|
}
|
|
284
294
|
|
|
285
295
|
export interface PFormBlockInstance {
|
|
@@ -63,6 +63,12 @@
|
|
|
63
63
|
const handleTrigger = (cusFields?: string | string[]) => {
|
|
64
64
|
validateField(cusFields);
|
|
65
65
|
};
|
|
66
|
+
const handleDelayTrigger = (cusFields?: string | string[], time?: number) => {
|
|
67
|
+
const delayTime = time ?? 222;
|
|
68
|
+
setTimeout(() => {
|
|
69
|
+
validateField(cusFields);
|
|
70
|
+
}, delayTime);
|
|
71
|
+
};
|
|
66
72
|
defineExpose({
|
|
67
73
|
reset: resetForm,
|
|
68
74
|
$form: computed(() => formEl.value),
|
|
@@ -112,6 +118,7 @@
|
|
|
112
118
|
:item="item"
|
|
113
119
|
:key="'_sl_' + (item.field ?? '_') + '_' + idx"
|
|
114
120
|
:pass-trigger="handleTrigger"
|
|
121
|
+
:pass-delay-trigger="handleDelayTrigger"
|
|
115
122
|
/>
|
|
116
123
|
<render-ant-item
|
|
117
124
|
v-else-if="item.itemRender?.name"
|
|
@@ -119,6 +126,7 @@
|
|
|
119
126
|
:default-handler="{ reset: resetFormData }"
|
|
120
127
|
:item-render="item.itemRender"
|
|
121
128
|
@trigger="handleTrigger"
|
|
129
|
+
@delay-trigger="handleDelayTrigger"
|
|
122
130
|
:render-form-params="{ data: formData, field: item.field }"
|
|
123
131
|
/>
|
|
124
132
|
<span v-else></span>
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { computed, nextTick, PropType, ref, watchEffect } from 'vue';
|
|
3
3
|
import { PFormGroupProps, PFormBlockInstance } from '#/antProxy';
|
|
4
4
|
import { MoreOutlined } from '@ant-design/icons-vue';
|
|
5
|
+
import { Form } from 'ant-design-vue'
|
|
5
6
|
import { cloneDeep, toString, isFunction, omit, maxBy, debounce } from 'lodash-es';
|
|
6
7
|
import PGroupBlock from '@/components/PGroupBlock.vue';
|
|
7
8
|
import {
|
|
@@ -15,7 +16,9 @@
|
|
|
15
16
|
} from 'ant-design-vue';
|
|
16
17
|
import { valued } from '@/utils/is';
|
|
17
18
|
import { MenuInfo } from 'ant-design-vue/es/menu/src/interface';
|
|
18
|
-
|
|
19
|
+
import { $warning } from '@/hooks/useMessage';
|
|
20
|
+
|
|
21
|
+
const useForm = Form.useForm
|
|
19
22
|
const props = defineProps<PFormGroupProps<F>>();
|
|
20
23
|
const model = defineModel({
|
|
21
24
|
type: Array as PropType<Partial<F & { __index: number }>[]>,
|
|
@@ -44,6 +47,15 @@
|
|
|
44
47
|
{ content: '复制', code: 'copy' },
|
|
45
48
|
{ content: '删除', code: 'delete' },
|
|
46
49
|
];
|
|
50
|
+
// 实际是否强制渲染
|
|
51
|
+
const fr = computed(() => {
|
|
52
|
+
return props.forceRender || model.value.length <= 5
|
|
53
|
+
})
|
|
54
|
+
const handleTabChange = () => {
|
|
55
|
+
nextTick().then(() => {
|
|
56
|
+
blockInstance.value[activeKey.value]?.$form?.validate()
|
|
57
|
+
})
|
|
58
|
+
}
|
|
47
59
|
watchEffect(() => {
|
|
48
60
|
if (!props.keepSerial) {
|
|
49
61
|
const unSortItems = model.value.filter((f) => !valued(f.__index));
|
|
@@ -70,6 +82,10 @@
|
|
|
70
82
|
});
|
|
71
83
|
break;
|
|
72
84
|
case 'copy':
|
|
85
|
+
if (model.value.length >= maxLen.value) {
|
|
86
|
+
$warning('已达到最大数量')
|
|
87
|
+
return
|
|
88
|
+
}
|
|
73
89
|
model.value = [
|
|
74
90
|
...model.value,
|
|
75
91
|
cloneDeep({
|
|
@@ -93,18 +109,22 @@
|
|
|
93
109
|
activeKey: computed(() => activeKey.value),
|
|
94
110
|
setActiveKey,
|
|
95
111
|
validateAll: () => {
|
|
96
|
-
return Promise.all(
|
|
97
|
-
|
|
98
|
-
)
|
|
112
|
+
return Promise.all(blockInstance.value.map((block, idx) =>
|
|
113
|
+
fr.value ? (block.$form?.validate() ?? Promise.resolve()) : (useForm(model.value[idx], props.getFormSetting(model.value[idx]).rules)?.validate() ?? Promise.resolve()),
|
|
114
|
+
))
|
|
99
115
|
},
|
|
100
|
-
validate: (
|
|
101
|
-
|
|
116
|
+
validate: (__index: number) => {
|
|
117
|
+
const index = model.value.findIndex(f => f.__index === __index)
|
|
118
|
+
return fr.value
|
|
119
|
+
? (blockInstance.value[index]?.$form?.validate() ?? Promise.resolve())
|
|
120
|
+
: (useForm(model.value[index], props.getFormSetting(model.value[index]).rules)?.validate() ?? Promise.resolve())
|
|
102
121
|
},
|
|
103
122
|
});
|
|
104
123
|
</script>
|
|
105
124
|
<template>
|
|
106
125
|
<a-card :title="title" size="small">
|
|
107
|
-
<a-
|
|
126
|
+
<a-spin v-if="loading" class="w-full" />
|
|
127
|
+
<a-tabs v-else type="editable-card" v-model:activeKey="activeKey" hide-add @change="handleTabChange">
|
|
108
128
|
<template #rightExtra>
|
|
109
129
|
<slot name="rightExtra">
|
|
110
130
|
<a-button
|
|
@@ -120,7 +140,7 @@
|
|
|
120
140
|
v-for="(item, idx) in model"
|
|
121
141
|
:key="idx"
|
|
122
142
|
:tab="`${tabLabel} ${keepSerial ? idx + 1 : (item.__index ?? 0) + 1}`"
|
|
123
|
-
force-render
|
|
143
|
+
:force-render="fr"
|
|
124
144
|
>
|
|
125
145
|
<template #closeIcon>
|
|
126
146
|
<a-dropdown v-if="editAble && itemMenus?.length">
|
|
@@ -512,6 +512,7 @@
|
|
|
512
512
|
:form-data="queryFormData"
|
|
513
513
|
:item="item"
|
|
514
514
|
:pass-trigger="() => {}"
|
|
515
|
+
:pass-delay-trigger="() => {}"
|
|
515
516
|
/>
|
|
516
517
|
<render-ant-item
|
|
517
518
|
v-else-if="item.itemRender?.name"
|
|
@@ -592,7 +593,7 @@
|
|
|
592
593
|
v-for="(tool, idx) in toolbarConfig.tools"
|
|
593
594
|
:key="idx"
|
|
594
595
|
:type="tool.type"
|
|
595
|
-
:size="
|
|
596
|
+
:size="tool.size ?? 'middle'"
|
|
596
597
|
:disabled="toolbarConfig.disabled || tool.disabled"
|
|
597
598
|
@click="debounceToolToolClick(tool.code)"
|
|
598
599
|
:loading="loading.toolbar || (!!tool.code && codeLoadings[tool.code])"
|
|
@@ -603,7 +604,7 @@
|
|
|
603
604
|
</span>
|
|
604
605
|
</div>
|
|
605
606
|
<div :class="`p-pane flex-1 ${enoughSpacing ? 'h-0' : ''} p-${scrollMode ?? 'inner'}-scroll`">
|
|
606
|
-
<div v-if="selectConfig?.multiple && selectConfig.showCount" class="w-
|
|
607
|
+
<div v-if="selectConfig?.multiple && selectConfig.showCount" class="w-full text-slate-5 pl-4">
|
|
607
608
|
已选:{{ selectedRowKeys.length }}
|
|
608
609
|
</div>
|
|
609
610
|
<a-table
|
|
@@ -18,12 +18,16 @@ export default defineComponent(
|
|
|
18
18
|
const passTrigger = (cusFields?: string | string[]) => {
|
|
19
19
|
emit('trigger', cusFields);
|
|
20
20
|
};
|
|
21
|
+
const passDelayTrigger = (cusFields?: string | string[], time?: number) => {
|
|
22
|
+
emit('delayTrigger', cusFields, time);
|
|
23
|
+
};
|
|
21
24
|
return () => {
|
|
22
25
|
return (
|
|
23
26
|
renderStore.renders[itemRender!.name]?.renderItemContent?.(
|
|
24
27
|
{
|
|
25
28
|
...itemRender!,
|
|
26
29
|
handleTrigger: passTrigger,
|
|
30
|
+
handleDelayTrigger: passDelayTrigger,
|
|
27
31
|
},
|
|
28
32
|
renderFormParams.value,
|
|
29
33
|
defaultHandler,
|
|
@@ -49,6 +53,6 @@ export default defineComponent(
|
|
|
49
53
|
required: false,
|
|
50
54
|
},
|
|
51
55
|
},
|
|
52
|
-
emits: ['trigger'],
|
|
56
|
+
emits: ['trigger', 'delayTrigger'],
|
|
53
57
|
},
|
|
54
58
|
);
|
|
@@ -6,6 +6,7 @@ export default defineComponent(
|
|
|
6
6
|
formData: F;
|
|
7
7
|
item: PFormItemProps<F>;
|
|
8
8
|
passTrigger: (cusFields?: string | string[]) => void;
|
|
9
|
+
passDelayTrigger: (cusFields?: string | string[], time?: number) => void;
|
|
9
10
|
}) => {
|
|
10
11
|
const { formData } = toRefs(props);
|
|
11
12
|
return () => {
|
|
@@ -13,12 +14,13 @@ export default defineComponent(
|
|
|
13
14
|
props.item.slots?.default?.(
|
|
14
15
|
{ data: formData.value, field: props.item.field },
|
|
15
16
|
props.passTrigger,
|
|
17
|
+
props.passDelayTrigger,
|
|
16
18
|
) ?? null
|
|
17
19
|
);
|
|
18
20
|
};
|
|
19
21
|
},
|
|
20
22
|
{
|
|
21
23
|
name: 'RenderItemSlots',
|
|
22
|
-
props: ['formData', 'item', 'passTrigger'],
|
|
24
|
+
props: ['formData', 'item', 'passTrigger', 'passDelayTrigger'],
|
|
23
25
|
},
|
|
24
26
|
);
|
|
@@ -34,6 +34,7 @@ interface BtnOptions extends ButtonProps {
|
|
|
34
34
|
dynamicClassName?: (p: RenderTableParams) => string;
|
|
35
35
|
dropdowns?: BtnOptions[];
|
|
36
36
|
clickEvt?: (p: RenderTableParams) => any;
|
|
37
|
+
hiddenIf?: (p: RenderTableParams) => boolean;
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
const antDefaultProps = {
|
|
@@ -236,8 +237,8 @@ const renders = {
|
|
|
236
237
|
events.click?.({ data, field })
|
|
237
238
|
if (props.htmlType === 'reset' && defaultHandler?.reset) {
|
|
238
239
|
if (props.beforeClick && isFunction(props.beforeClick)) {
|
|
239
|
-
props.beforeClick({ data, field }).then(() => {
|
|
240
|
-
defaultHandler.reset({ data, field })
|
|
240
|
+
props.beforeClick({ data, field }).then((res: void | Recordable) => {
|
|
241
|
+
defaultHandler.reset(res ? { data: res, field } : { data, field })
|
|
241
242
|
})
|
|
242
243
|
}
|
|
243
244
|
else {
|
|
@@ -268,8 +269,8 @@ const renders = {
|
|
|
268
269
|
if (props.htmlType === 'reset' && defaultHandler?.reset) {
|
|
269
270
|
if (props.beforeClick && isFunction(props.beforeClick)) {
|
|
270
271
|
defaultHandler?.setLoadings?.(true)
|
|
271
|
-
props.beforeClick({ row, field }).then(() => {
|
|
272
|
-
defaultHandler.reset({ row, field })
|
|
272
|
+
props.beforeClick({ row, field }).then((res: void | Recordable) => {
|
|
273
|
+
defaultHandler.reset(res ? { row: res, field } : { row, field })
|
|
273
274
|
}).finally(() => {
|
|
274
275
|
defaultHandler?.setLoadings?.(false)
|
|
275
276
|
})
|
|
@@ -281,8 +282,8 @@ const renders = {
|
|
|
281
282
|
if (props.htmlType === 'pick' && defaultHandler?.pick) {
|
|
282
283
|
if (props.beforeClick && isFunction(props.beforeClick)) {
|
|
283
284
|
defaultHandler?.setLoadings?.(true)
|
|
284
|
-
props.beforeClick({ row, field }).then(() => {
|
|
285
|
-
defaultHandler.pick({ row, field })
|
|
285
|
+
props.beforeClick({ row, field }).then((res: void | Recordable) => {
|
|
286
|
+
defaultHandler.pick(res ? { row: res, field } : { row, field })
|
|
286
287
|
}).finally(() => {
|
|
287
288
|
defaultHandler?.setLoadings?.(false)
|
|
288
289
|
})
|
|
@@ -318,8 +319,8 @@ const renders = {
|
|
|
318
319
|
m.events?.click?.({ data, field })
|
|
319
320
|
if (m.props.htmlType === 'reset' && defaultHandler?.reset) {
|
|
320
321
|
if (props.beforeClick && isFunction(props.beforeClick)) {
|
|
321
|
-
props.beforeClick({ data, field }).then(() => {
|
|
322
|
-
defaultHandler.reset({ data, field })
|
|
322
|
+
props.beforeClick({ data, field }).then((res: void | Recordable) => {
|
|
323
|
+
defaultHandler.reset(res ? { data: res, field } : { data, field })
|
|
323
324
|
})
|
|
324
325
|
}
|
|
325
326
|
else {
|
|
@@ -328,8 +329,8 @@ const renders = {
|
|
|
328
329
|
}
|
|
329
330
|
if (m.props.htmlType === 'pick' && defaultHandler?.pick) {
|
|
330
331
|
if (props.beforeClick && isFunction(props.beforeClick)) {
|
|
331
|
-
props.beforeClick({ data, field }).then(() => {
|
|
332
|
-
defaultHandler.pick({ data, field })
|
|
332
|
+
props.beforeClick({ data, field }).then((res: void | Recordable) => {
|
|
333
|
+
defaultHandler.pick(res ? { data: res, field } : { data, field })
|
|
333
334
|
})
|
|
334
335
|
}
|
|
335
336
|
else {
|
|
@@ -369,8 +370,8 @@ const renders = {
|
|
|
369
370
|
if (m.props.htmlType === 'reset' && defaultHandler?.reset) {
|
|
370
371
|
if (props.beforeClick && isFunction(props.beforeClick)) {
|
|
371
372
|
defaultHandler?.setLoadings?.(true)
|
|
372
|
-
props.beforeClick({ row, field }).then(() => {
|
|
373
|
-
defaultHandler.reset({ row, field })
|
|
373
|
+
props.beforeClick({ row, field }).then((res: void | Recordable) => {
|
|
374
|
+
defaultHandler.reset(res ? { row: res, field } : { row, field })
|
|
374
375
|
}).finally(() => {
|
|
375
376
|
defaultHandler?.setLoadings?.(false)
|
|
376
377
|
})
|
|
@@ -382,8 +383,8 @@ const renders = {
|
|
|
382
383
|
if (m.props.htmlType === 'pick' && defaultHandler?.pick) {
|
|
383
384
|
if (props.beforeClick && isFunction(props.beforeClick)) {
|
|
384
385
|
defaultHandler?.setLoadings?.(true)
|
|
385
|
-
props.beforeClick({ row, field }).then(() => {
|
|
386
|
-
defaultHandler.pick({ row, field })
|
|
386
|
+
props.beforeClick({ row, field }).then((res: void | Recordable) => {
|
|
387
|
+
defaultHandler.pick(res ? { row: res, field } : { row, field })
|
|
387
388
|
}).finally(() => {
|
|
388
389
|
defaultHandler?.setLoadings?.(false)
|
|
389
390
|
})
|