@vue-ui-kit/ant 1.7.0 → 1.7.2
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/README.md +426 -426
- package/README.zh.md +480 -480
- package/dist/cjs/index.js +1 -1
- package/dist/declarations/antProxy.d.ts +6 -0
- package/dist/es/index.js +1555 -1416
- package/dist/packages/components/PFormGroup.vue.d.ts +1 -0
- package/dist/packages/components/PGrid.vue.d.ts +1 -1
- package/dist/packages/components/PromisePicker.vue.d.ts +2 -1
- package/dist/packages/store/renderStore.d.ts +7 -5
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/src/declarations/antProxy.ts +6 -0
- package/src/packages/components/PForm.vue +1 -1
- package/src/packages/components/PFormGroup.vue +3 -0
- package/src/packages/components/PGrid.vue +51 -15
- package/src/packages/components/PromisePicker.vue +1 -0
- package/src/packages/store/renderStore.tsx +155 -63
- package/src/packages/styles/index.scss +6 -0
|
@@ -11,6 +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: (index: any) => any;
|
|
14
15
|
}>): void;
|
|
15
16
|
attrs: any;
|
|
16
17
|
slots: ReturnType<() => {
|
|
@@ -49,7 +49,7 @@ declare const _default: <D = Recordable<any>, F = Recordable<any>>(__VLS_props:
|
|
|
49
49
|
setBtnLoading: (code: string, value: boolean) => void;
|
|
50
50
|
selectedRecords: import('vue').ComputedRef<D[]>;
|
|
51
51
|
$form: import('vue').ComputedRef<any>;
|
|
52
|
-
setLoadings: (value: boolean) => void;
|
|
52
|
+
setLoadings: (value: boolean | Record<string, boolean>) => void;
|
|
53
53
|
resizeTable: () => void;
|
|
54
54
|
}>): void;
|
|
55
55
|
attrs: any;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PropType } from 'vue';
|
|
2
|
-
import { PGridProps } from '../../declarations/antProxy';
|
|
2
|
+
import { PGridInstance, PGridProps } from '../../declarations/antProxy';
|
|
3
3
|
declare const _default: <D = Recordable<any>, F = Recordable<any>>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_Prettify<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
4
4
|
props: __VLS_Prettify<Pick<Partial<{
|
|
5
5
|
title: string;
|
|
@@ -43,6 +43,7 @@ declare const _default: <D = Recordable<any>, F = Recordable<any>>(__VLS_props:
|
|
|
43
43
|
row: D;
|
|
44
44
|
field?: string;
|
|
45
45
|
}>;
|
|
46
|
+
grid: import('vue').Ref<PGridInstance<D, Recordable<any>> | undefined, PGridInstance<D, Recordable<any>> | undefined>;
|
|
46
47
|
}>): void;
|
|
47
48
|
attrs: any;
|
|
48
49
|
slots: ReturnType<() => {}>;
|
|
@@ -6,18 +6,20 @@ export declare const addRender: (name: string, { renderItemContent, renderDefaul
|
|
|
6
6
|
declare const _default: {
|
|
7
7
|
renders: {
|
|
8
8
|
$button: {
|
|
9
|
-
renderItemContent({ props, events }: RenderOptions, { data, field }: RenderFormParams, defaultHandler: {
|
|
9
|
+
renderItemContent({ props, events }: RenderOptions, { data, field, }: RenderFormParams, defaultHandler: {
|
|
10
10
|
[key: string]: (...args: any[]) => any;
|
|
11
11
|
}): import("vue/jsx-runtime").JSX.Element;
|
|
12
|
-
renderDefault({ props, events }: RenderOptions, { row, field }: RenderTableParams, defaultHandler: {
|
|
12
|
+
renderDefault({ props, events }: RenderOptions, { row, field, }: RenderTableParams, defaultHandler: {
|
|
13
13
|
[key: string]: (...args: any[]) => any;
|
|
14
14
|
}): import("vue/jsx-runtime").JSX.Element;
|
|
15
15
|
};
|
|
16
16
|
$buttons: {
|
|
17
|
-
renderItemContent({ props, children }: RenderOptions, { data, field }: RenderFormParams, defaultHandler: {
|
|
17
|
+
renderItemContent({ props, children }: RenderOptions, { data, field, }: RenderFormParams, defaultHandler: {
|
|
18
|
+
[key: string]: (...args: any[]) => any;
|
|
19
|
+
}): import("vue/jsx-runtime").JSX.Element;
|
|
20
|
+
renderDefault({ props, children }: RenderOptions, { data, row, field, }: RenderTableParams, defaultHandler: {
|
|
18
21
|
[key: string]: (...args: any[]) => any;
|
|
19
22
|
}): import("vue/jsx-runtime").JSX.Element;
|
|
20
|
-
renderDefault({ props, children }: RenderOptions, { data, row, field }: RenderTableParams): import("vue/jsx-runtime").JSX.Element;
|
|
21
23
|
};
|
|
22
24
|
ButtonTree: {
|
|
23
25
|
renderDefault({ children, props }: {
|
|
@@ -26,7 +28,7 @@ declare const _default: {
|
|
|
26
28
|
}, params: RenderTableParams): import("vue/jsx-runtime").JSX.Element;
|
|
27
29
|
};
|
|
28
30
|
$radio: {
|
|
29
|
-
renderItemContent({ props, options }: RenderOptions, { data, field }: RenderFormParams): import("vue/jsx-runtime").JSX.Element | null;
|
|
31
|
+
renderItemContent({ props, events, options }: RenderOptions, { data, field }: RenderFormParams): import("vue/jsx-runtime").JSX.Element | null;
|
|
30
32
|
renderDefault({ props, options }: RenderOptions, { row, field }: RenderTableParams): import("vue/jsx-runtime").JSX.Element | null;
|
|
31
33
|
};
|
|
32
34
|
$autoComplete: {
|
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@charset "UTF-8";:root{--p-theme-bg: #fff}.p-pane{background-color:var(--p-theme-bg);padding:16px;border-radius:4px}.w-full{width:100%}.cursor-pointer{cursor:pointer}.py-4x{padding-top:4px;padding-bottom:4px}.px-2x{padding-left:2px;padding-right:2px}.h-0{height:0}.h-full{height:100%}.flex{display:flex}.flex-col{flex-direction:column}.flex-1{flex:1}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-4px{gap:4px}.gap-8px{gap:8px}.pt-8px{padding-top:8px}.px-16px{padding-left:16px;padding-right:16px}.mt-4px{margin-top:4px}.text-right{text-align:right}.overflow-y-auto{overflow-y:auto}.p-theme-bg{background-color:var(--p-theme-bg)}.p-wrapper .p-form-wrapper{z-index:4}.p-wrapper .p-toolbar-wrapper{box-shadow:0 8px #fff;border-radius:.5em .5em 0 0;margin-bottom:-.5em}.p-wrapper .ant-form .ant-form-item{margin-bottom:0}.p-wrapper .ant-form .ant-form-item.p-required .ant-form-item-label>label:before{display:inline-block;margin-inline-end:4px;color:#ff4d4f;font-size:14px;font-family:SimSun,sans-serif;line-height:1;content:"*"}.p-wrapper .ant-form .ant-form-item .ant-form-item-label{display:flex;align-items:start;justify-content:flex-end}.p-wrapper .ant-form .ant-form-item .ant-form-item-label>label{white-space:break-spaces;align-items:flex-start;height:fit-content;padding-top:.36em}.p-wrapper .ant-form .ant-form-item .ant-form-item-label>label:after{padding-left:4px;margin-inline-start:unset}.p-wrapper .ant-form.ant-form-vertical .ant-form-item .ant-form-item-label{justify-content:flex-start;font-weight:600}.p-wrapper .ant-table-sticky-scroll{visibility:hidden}.p-wrapper .ant-table-header.ant-table-sticky-holder:before{content:"";width:100%;position:absolute;height:22px;display:block;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);top:-16px}.p-wrapper .ant-table-wrapper .ant-table-pagination.ant-pagination{margin:unset;padding:16px 0}.p-wrapper .p-inner-scroll>.ant-table-wrapper{height:100%}.p-wrapper .p-inner-scroll>.ant-table-wrapper>.ant-spin-nested-loading{height:100%}.p-wrapper .p-inner-scroll>.ant-table-wrapper>.ant-spin-nested-loading>.ant-spin-container{height:100%;display:flex;flex-direction:column}.p-wrapper .p-inner-scroll>.ant-table-wrapper>.ant-spin-nested-loading>.ant-spin-container>.ant-table{border-radius:unset}.p-wrapper .ant-pagination-options .ant-select{width:100px}.p-content-align-right.ant-form-item .ant-form-item-control-input-content{display:flex;justify-content:flex-end;align-items:center;text-align:right}.p-content-align-center.ant-form-item .ant-form-item-control-input-content{display:flex;justify-content:center;align-items:center;text-align:center}
|
|
1
|
+
@charset "UTF-8";:root{--p-theme-bg: #fff}.p-pane{background-color:var(--p-theme-bg);padding:16px;border-radius:4px}.w-full{width:100%}.cursor-pointer{cursor:pointer}.py-4x{padding-top:4px;padding-bottom:4px}.px-2x{padding-left:2px;padding-right:2px}.pl-4x{padding-left:1em}.pl-8{padding-left:2em}.h-0{height:0}.h-full{height:100%}.flex{display:flex}.flex-col{flex-direction:column}.flex-1{flex:1}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-4px{gap:4px}.gap-8px{gap:8px}.pt-8px{padding-top:8px}.px-16px{padding-left:16px;padding-right:16px}.mt-4px{margin-top:4px}.text-right{text-align:right}.overflow-y-auto{overflow-y:auto}.p-theme-bg{background-color:var(--p-theme-bg)}.p-wrapper .p-form-wrapper{z-index:4}.p-wrapper .p-toolbar-wrapper{box-shadow:0 8px #fff;border-radius:.5em .5em 0 0;margin-bottom:-.5em}.p-wrapper .ant-form .ant-form-item{margin-bottom:0}.p-wrapper .ant-form .ant-form-item.p-required .ant-form-item-label>label:before{display:inline-block;margin-inline-end:4px;color:#ff4d4f;font-size:14px;font-family:SimSun,sans-serif;line-height:1;content:"*"}.p-wrapper .ant-form .ant-form-item .ant-form-item-label{display:flex;align-items:start;justify-content:flex-end}.p-wrapper .ant-form .ant-form-item .ant-form-item-label>label{white-space:break-spaces;align-items:flex-start;height:fit-content;padding-top:.36em}.p-wrapper .ant-form .ant-form-item .ant-form-item-label>label:after{padding-left:4px;margin-inline-start:unset}.p-wrapper .ant-form.ant-form-vertical .ant-form-item .ant-form-item-label{justify-content:flex-start;font-weight:600}.p-wrapper .ant-table-sticky-scroll{visibility:hidden}.p-wrapper .ant-table-header.ant-table-sticky-holder:before{content:"";width:100%;position:absolute;height:22px;display:block;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);top:-16px}.p-wrapper .ant-table-wrapper .ant-table-pagination.ant-pagination{margin:unset;padding:16px 0}.p-wrapper .p-inner-scroll>.ant-table-wrapper{height:100%}.p-wrapper .p-inner-scroll>.ant-table-wrapper>.ant-spin-nested-loading{height:100%}.p-wrapper .p-inner-scroll>.ant-table-wrapper>.ant-spin-nested-loading>.ant-spin-container{height:100%;display:flex;flex-direction:column}.p-wrapper .p-inner-scroll>.ant-table-wrapper>.ant-spin-nested-loading>.ant-spin-container>.ant-table{border-radius:unset}.p-wrapper .ant-pagination-options .ant-select{width:100px}.p-content-align-right.ant-form-item .ant-form-item-control-input-content{display:flex;justify-content:flex-end;align-items:center;text-align:right}.p-content-align-center.ant-form-item .ant-form-item-control-input-content{display:flex;justify-content:center;align-items:center;text-align:center}
|
package/package.json
CHANGED
|
@@ -22,6 +22,7 @@ export interface ItemRender {
|
|
|
22
22
|
name: string;
|
|
23
23
|
defaultValue?: any;
|
|
24
24
|
props?: Recordable;
|
|
25
|
+
attrs?: Recordable;
|
|
25
26
|
options?: IOption[];
|
|
26
27
|
children?: Recordable[];
|
|
27
28
|
events?: { [key: string]: (...args: any[]) => any };
|
|
@@ -30,6 +31,7 @@ export interface ItemRender {
|
|
|
30
31
|
export interface CellRender {
|
|
31
32
|
name: string;
|
|
32
33
|
props?: Recordable;
|
|
34
|
+
attrs?: Recordable;
|
|
33
35
|
children?: Recordable[];
|
|
34
36
|
}
|
|
35
37
|
|
|
@@ -178,6 +180,7 @@ export interface PageConfig {
|
|
|
178
180
|
|
|
179
181
|
export interface SelectConfig<D = Recordable> {
|
|
180
182
|
multiple?: boolean;
|
|
183
|
+
showCount?: boolean;
|
|
181
184
|
getCheckboxProps?: (record: D) => { disabled?: boolean };
|
|
182
185
|
}
|
|
183
186
|
|
|
@@ -185,6 +188,7 @@ export type PGridProps<D = Recordable, F = Recordable> = {
|
|
|
185
188
|
selectConfig?: SelectConfig<D>;
|
|
186
189
|
rowKey?: string;
|
|
187
190
|
manualFetch?: boolean;
|
|
191
|
+
align?: 'left' | 'right' | 'center'
|
|
188
192
|
formConfig?: PFormProps<F>;
|
|
189
193
|
columns?: ColumnProps<D>[];
|
|
190
194
|
toolbarConfig?: ToolbarConfig;
|
|
@@ -275,6 +279,7 @@ export interface PFormInstance {
|
|
|
275
279
|
export interface PromisePickerInstance<D = Recordable> {
|
|
276
280
|
pick: () => Promise<{ row: D; field?: string }>;
|
|
277
281
|
pickMultiple: () => Promise<D[]>;
|
|
282
|
+
grid: PGridInstance<D>
|
|
278
283
|
}
|
|
279
284
|
|
|
280
285
|
export interface PFormBlockInstance {
|
|
@@ -285,4 +290,5 @@ export interface PFormGroupInstance<F = Recordable> {
|
|
|
285
290
|
activeKey: number;
|
|
286
291
|
setActiveKey: (activeKey: number) => void;
|
|
287
292
|
validateAll: () => Promise<void>;
|
|
293
|
+
validate: (index: number) => Promise<void>;
|
|
288
294
|
}
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
</script>
|
|
74
74
|
<template>
|
|
75
75
|
<div
|
|
76
|
-
v-if="items.some((s: PFormItemProps<F>) => s.field && s.itemRender)"
|
|
76
|
+
v-if="items.some((s: PFormItemProps<F>) => (s.field && s.itemRender) || s.slots?.default)"
|
|
77
77
|
class="p-pane p-wrapper"
|
|
78
78
|
>
|
|
79
79
|
<a-form :key="renderFormKey" ref="formEl" :model="formData" v-bind="fc" @submit="handleSubmit">
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
toRefs,
|
|
12
12
|
onBeforeUnmount,
|
|
13
13
|
} from 'vue';
|
|
14
|
-
import { debounce, get, isArray, isFunction, isString, merge, omit, toNumber } from 'lodash-es';
|
|
14
|
+
import { debounce, get, isArray, isBoolean, isFunction, isObject, isString, merge, omit, toNumber } from 'lodash-es';
|
|
15
15
|
import { eachTree } from '@/utils/treeHelper';
|
|
16
16
|
import { message as $message } from 'ant-design-vue';
|
|
17
17
|
import RenderAntItem from '@/components/RenderAntItem';
|
|
@@ -52,6 +52,17 @@
|
|
|
52
52
|
toolbar: false,
|
|
53
53
|
form: false,
|
|
54
54
|
});
|
|
55
|
+
const setLoadings = (value: boolean|Record<string, boolean>) => {
|
|
56
|
+
if(isObject(value)) {
|
|
57
|
+
Object.keys(value).forEach(key => {
|
|
58
|
+
loading[key] = value[key];
|
|
59
|
+
});
|
|
60
|
+
} else if(isBoolean(value)) {
|
|
61
|
+
loading.form = value;
|
|
62
|
+
loading.table = value;
|
|
63
|
+
loading.toolbar = value;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
55
66
|
const submitOnReset = true;
|
|
56
67
|
const boxEl = ref<HTMLDivElement>();
|
|
57
68
|
const pFormWrapper = ref<HTMLDivElement>();
|
|
@@ -393,16 +404,16 @@
|
|
|
393
404
|
const resizeTable = () => {
|
|
394
405
|
const pNode = boxEl.value?.parentElement;
|
|
395
406
|
const ph = pNode ? window.getComputedStyle(pNode).height : '0px';
|
|
396
|
-
const
|
|
397
|
-
?
|
|
407
|
+
const formOriginHeight = pFormWrapper.value
|
|
408
|
+
? window.getComputedStyle(pFormWrapper.value).height
|
|
409
|
+
: '0px';
|
|
410
|
+
const formHeight = formOriginHeight.includes('px')
|
|
411
|
+
? toNumber(formOriginHeight.replace('px', ''))
|
|
398
412
|
: 0;
|
|
399
|
-
|
|
413
|
+
const showCountHeight = selectConfig.value?.showCount ? 22 : 0
|
|
400
414
|
renderHeight.value =
|
|
401
415
|
props.renderY ??
|
|
402
|
-
toNumber(ph.replace('px', '')) -
|
|
403
|
-
(props.fitHeight ?? 170) -
|
|
404
|
-
(!!props.toolbarConfig ? 30 : 0) -
|
|
405
|
-
formHeight;
|
|
416
|
+
toNumber(ph.replace('px', '')) -(props.fitHeight ?? 170) -(!!props.toolbarConfig ? 30 : 0) -formHeight- showCountHeight;
|
|
406
417
|
enoughSpacing.value = toNumber(ph.replace('px', '')) > 600;
|
|
407
418
|
};
|
|
408
419
|
defineExpose({
|
|
@@ -417,20 +428,42 @@
|
|
|
417
428
|
setBtnLoading,
|
|
418
429
|
selectedRecords,
|
|
419
430
|
$form: computed(() => formEl.value),
|
|
420
|
-
setLoadings
|
|
421
|
-
loading.form = value;
|
|
422
|
-
loading.table = value;
|
|
423
|
-
loading.toolbar = value;
|
|
424
|
-
},
|
|
431
|
+
setLoadings,
|
|
425
432
|
resizeTable,
|
|
426
433
|
});
|
|
434
|
+
|
|
435
|
+
let observer: MutationObserver;
|
|
427
436
|
onMounted(() => {
|
|
428
437
|
resizeTable();
|
|
429
438
|
window.addEventListener('resize', resizeTable);
|
|
439
|
+
// 还需要在组件根节点由不可见转为可见时重新计算高度(display:none等样式控制时)
|
|
440
|
+
observer = new MutationObserver((mutations) => {
|
|
441
|
+
mutations.forEach((mutation) => {
|
|
442
|
+
if (mutation.type === 'attributes' && mutation.attributeName === 'style') {
|
|
443
|
+
const el = mutation.target as HTMLElement;
|
|
444
|
+
const style = window.getComputedStyle(el);
|
|
445
|
+
if (style.display !== 'none') {
|
|
446
|
+
resizeTable();
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
});
|
|
450
|
+
});
|
|
451
|
+
|
|
452
|
+
if (boxEl.value) {
|
|
453
|
+
observer.observe(boxEl.value, { attributes: true, attributeFilter: ['style'] });
|
|
454
|
+
}
|
|
430
455
|
resetQueryFormData(props.manualFetch);
|
|
431
456
|
});
|
|
457
|
+
const passFields = ['align']
|
|
458
|
+
const passDefaultColumnProps = (columns: ColumnProps<D>[]) => columns.map(c => ({
|
|
459
|
+
...passFields.reduce((prev, cur) => ({
|
|
460
|
+
[cur]: props[cur],
|
|
461
|
+
}), {} as ColumnProps<D>),
|
|
462
|
+
...c,
|
|
463
|
+
}))
|
|
432
464
|
onBeforeUnmount(() => {
|
|
433
465
|
window.removeEventListener('resize', resizeTable);
|
|
466
|
+
observer.disconnect();
|
|
434
467
|
});
|
|
435
468
|
</script>
|
|
436
469
|
<template>
|
|
@@ -570,11 +603,14 @@
|
|
|
570
603
|
</span>
|
|
571
604
|
</div>
|
|
572
605
|
<div :class="`p-pane flex-1 ${enoughSpacing ? 'h-0' : ''} p-${scrollMode ?? 'inner'}-scroll`">
|
|
606
|
+
<div v-if="selectConfig?.multiple && selectConfig.showCount" class="w-100p text-slate-5 pl-4">
|
|
607
|
+
已选:{{ selectedRowKeys.length }}
|
|
608
|
+
</div>
|
|
573
609
|
<a-table
|
|
574
610
|
:key="renderTableKey + '_table'"
|
|
575
611
|
:row-key="rowKey ?? 'id'"
|
|
576
612
|
ref="tableEl"
|
|
577
|
-
:columns="(columns ?? []).map((c) => cleanCol(c as
|
|
613
|
+
:columns="passDefaultColumnProps(columns ?? []).map((c) => cleanCol(c as ColumnProps))"
|
|
578
614
|
:data-source="tableData"
|
|
579
615
|
:loading="loading.table"
|
|
580
616
|
:pagination="pg"
|
|
@@ -597,7 +633,7 @@
|
|
|
597
633
|
v-if="slotDefaultColumns.some((s) => column.key && s.field === column.key)"
|
|
598
634
|
:key="renderTableKey + '_cell_' + dataSeed + '_slot_' + column.key"
|
|
599
635
|
:column="slotDefaultColumns.find((f) => column.key && f.field === column.key)!"
|
|
600
|
-
:default-handler="{ pick: pickRow }"
|
|
636
|
+
:default-handler="{ pick: pickRow, setLoadings }"
|
|
601
637
|
:row="record"
|
|
602
638
|
:row-index="index"
|
|
603
639
|
:table-data="tableData as Recordable[]"
|
|
@@ -220,121 +220,213 @@ const renderBtn = (btnOpt: BtnOptions, params: RenderTableParams) =>
|
|
|
220
220
|
);
|
|
221
221
|
const renders = {
|
|
222
222
|
...Object.fromEntries(Object.keys(componentsMap).map((name) => [name, renderBasic(name)])),
|
|
223
|
-
|
|
223
|
+
// 简单按钮
|
|
224
224
|
$button: {
|
|
225
|
-
renderItemContent(
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
) {
|
|
225
|
+
renderItemContent({ props = {}, events = {} }: RenderOptions, {
|
|
226
|
+
data,
|
|
227
|
+
field,
|
|
228
|
+
}: RenderFormParams, defaultHandler: {
|
|
229
|
+
[key: string]: (...args: any[]) => any
|
|
230
|
+
}) {
|
|
232
231
|
return (
|
|
233
232
|
<Button
|
|
234
233
|
{...omit(props, ['content'])}
|
|
235
234
|
icon={props.icon ? <Icon icon={props.icon} /> : null}
|
|
236
235
|
onClick={() => {
|
|
237
|
-
events.click?.({ data, field })
|
|
236
|
+
events.click?.({ data, field })
|
|
238
237
|
if (props.htmlType === 'reset' && defaultHandler?.reset) {
|
|
239
|
-
|
|
238
|
+
if (props.beforeClick && isFunction(props.beforeClick)) {
|
|
239
|
+
props.beforeClick({ data, field }).then(() => {
|
|
240
|
+
defaultHandler.reset({ data, field })
|
|
241
|
+
})
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
defaultHandler.reset({ data, field })
|
|
245
|
+
}
|
|
240
246
|
}
|
|
241
247
|
}}
|
|
242
248
|
>
|
|
243
249
|
{props.content}
|
|
250
|
+
{
|
|
251
|
+
props.suffix?.({ data, field }) ?? null
|
|
252
|
+
}
|
|
244
253
|
</Button>
|
|
245
|
-
)
|
|
254
|
+
)
|
|
246
255
|
},
|
|
247
|
-
renderDefault(
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
) {
|
|
256
|
+
renderDefault({ props = {}, events = {} }: RenderOptions, {
|
|
257
|
+
row,
|
|
258
|
+
field,
|
|
259
|
+
}: RenderTableParams, defaultHandler: {
|
|
260
|
+
[key: string]: (...args: any[]) => any
|
|
261
|
+
}) {
|
|
254
262
|
return (
|
|
255
263
|
<Button
|
|
256
264
|
{...omit(props, ['content'])}
|
|
257
265
|
icon={props.icon ? <Icon icon={props.icon} /> : null}
|
|
258
266
|
onClick={() => {
|
|
259
|
-
events.click?.({ row, field })
|
|
267
|
+
events.click?.({ row, field })
|
|
260
268
|
if (props.htmlType === 'reset' && defaultHandler?.reset) {
|
|
261
|
-
|
|
269
|
+
if (props.beforeClick && isFunction(props.beforeClick)) {
|
|
270
|
+
defaultHandler?.setLoadings?.(true)
|
|
271
|
+
props.beforeClick({ row, field }).then(() => {
|
|
272
|
+
defaultHandler.reset({ row, field })
|
|
273
|
+
}).finally(() => {
|
|
274
|
+
defaultHandler?.setLoadings?.(false)
|
|
275
|
+
})
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
defaultHandler.reset({ row, field })
|
|
279
|
+
}
|
|
262
280
|
}
|
|
263
281
|
if (props.htmlType === 'pick' && defaultHandler?.pick) {
|
|
264
|
-
|
|
282
|
+
if (props.beforeClick && isFunction(props.beforeClick)) {
|
|
283
|
+
defaultHandler?.setLoadings?.(true)
|
|
284
|
+
props.beforeClick({ row, field }).then(() => {
|
|
285
|
+
defaultHandler.pick({ row, field })
|
|
286
|
+
}).finally(() => {
|
|
287
|
+
defaultHandler?.setLoadings?.(false)
|
|
288
|
+
})
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
defaultHandler.pick({ row, field })
|
|
292
|
+
}
|
|
265
293
|
}
|
|
266
294
|
}}
|
|
267
295
|
>
|
|
268
296
|
{props.content}
|
|
269
297
|
</Button>
|
|
270
|
-
)
|
|
298
|
+
)
|
|
271
299
|
},
|
|
272
300
|
},
|
|
273
301
|
// 简单按钮组
|
|
274
302
|
$buttons: {
|
|
275
|
-
renderItemContent(
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
) {
|
|
303
|
+
renderItemContent({ props = {}, children = [] }: RenderOptions, {
|
|
304
|
+
data,
|
|
305
|
+
field,
|
|
306
|
+
}: RenderFormParams, defaultHandler: {
|
|
307
|
+
[key: string]: (...args: any[]) => any
|
|
308
|
+
}) {
|
|
282
309
|
return (
|
|
283
310
|
<span class="align-gap-box w-fit">
|
|
284
|
-
{
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
311
|
+
{
|
|
312
|
+
children.map((m) => {
|
|
313
|
+
return (
|
|
314
|
+
<Button
|
|
315
|
+
{...omit(Object.assign({}, props, m.props), ['content'])}
|
|
316
|
+
icon={m.props.icon ? <Icon icon={m.props.icon} /> : null}
|
|
317
|
+
onClick={() => {
|
|
318
|
+
m.events?.click?.({ data, field })
|
|
319
|
+
if (m.props.htmlType === 'reset' && defaultHandler?.reset) {
|
|
320
|
+
if (props.beforeClick && isFunction(props.beforeClick)) {
|
|
321
|
+
props.beforeClick({ data, field }).then(() => {
|
|
322
|
+
defaultHandler.reset({ data, field })
|
|
323
|
+
})
|
|
324
|
+
}
|
|
325
|
+
else {
|
|
326
|
+
defaultHandler.reset({ data, field })
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
if (m.props.htmlType === 'pick' && defaultHandler?.pick) {
|
|
330
|
+
if (props.beforeClick && isFunction(props.beforeClick)) {
|
|
331
|
+
props.beforeClick({ data, field }).then(() => {
|
|
332
|
+
defaultHandler.pick({ data, field })
|
|
333
|
+
})
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
defaultHandler.pick({ data, field })
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}}
|
|
340
|
+
>
|
|
341
|
+
{m.props.content}
|
|
342
|
+
</Button>
|
|
343
|
+
)
|
|
344
|
+
})
|
|
345
|
+
}
|
|
298
346
|
</span>
|
|
299
|
-
)
|
|
347
|
+
)
|
|
300
348
|
},
|
|
301
|
-
renderDefault(
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
349
|
+
renderDefault({ props = {}, children = [] }: RenderOptions, {
|
|
350
|
+
data,
|
|
351
|
+
row,
|
|
352
|
+
field,
|
|
353
|
+
}: RenderTableParams, defaultHandler: {
|
|
354
|
+
[key: string]: (...args: any[]) => any
|
|
355
|
+
}) {
|
|
305
356
|
return (
|
|
306
357
|
<span class="align-gap-box w-fit">
|
|
307
|
-
{
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
358
|
+
{
|
|
359
|
+
children.filter(f => !f?.props?.hiddenIf?.({
|
|
360
|
+
data,
|
|
361
|
+
row,
|
|
362
|
+
field,
|
|
363
|
+
})).map(m => (
|
|
364
|
+
<Button
|
|
365
|
+
{...omit(Object.assign({}, props, m.props), ['content', 'hiddenIf'])}
|
|
366
|
+
icon={m.props.icon ? <Icon icon={m.props.icon} /> : null}
|
|
367
|
+
onClick={() => {
|
|
368
|
+
m.events?.click?.({ data, row, field })
|
|
369
|
+
if (m.props.htmlType === 'reset' && defaultHandler?.reset) {
|
|
370
|
+
if (props.beforeClick && isFunction(props.beforeClick)) {
|
|
371
|
+
defaultHandler?.setLoadings?.(true)
|
|
372
|
+
props.beforeClick({ row, field }).then(() => {
|
|
373
|
+
defaultHandler.reset({ row, field })
|
|
374
|
+
}).finally(() => {
|
|
375
|
+
defaultHandler?.setLoadings?.(false)
|
|
376
|
+
})
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
defaultHandler.reset({ row, field })
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
if (m.props.htmlType === 'pick' && defaultHandler?.pick) {
|
|
383
|
+
if (props.beforeClick && isFunction(props.beforeClick)) {
|
|
384
|
+
defaultHandler?.setLoadings?.(true)
|
|
385
|
+
props.beforeClick({ row, field }).then(() => {
|
|
386
|
+
defaultHandler.pick({ row, field })
|
|
387
|
+
}).finally(() => {
|
|
388
|
+
defaultHandler?.setLoadings?.(false)
|
|
389
|
+
})
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
defaultHandler.pick({ row, field })
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
}}
|
|
396
|
+
>
|
|
397
|
+
{m.props.content}
|
|
398
|
+
</Button>
|
|
399
|
+
))
|
|
400
|
+
}
|
|
318
401
|
</span>
|
|
319
|
-
)
|
|
402
|
+
)
|
|
320
403
|
},
|
|
321
404
|
},
|
|
322
405
|
ButtonTree: {
|
|
323
406
|
renderDefault({ children = [], props = {} as Recordable }, params: RenderTableParams) {
|
|
324
407
|
return (
|
|
325
408
|
<span class={props.noGap ? 'align-no-gap-box' : 'align-gap-box'}>
|
|
326
|
-
{(children as BtnOptions[])
|
|
409
|
+
{(children as BtnOptions[])
|
|
410
|
+
.filter((f) => !f.hiddenIf?.(params))
|
|
411
|
+
.map((item) => renderBtn(item, params)) ?? []}
|
|
327
412
|
</span>
|
|
328
413
|
);
|
|
329
414
|
},
|
|
330
415
|
},
|
|
331
416
|
$radio: {
|
|
332
|
-
renderItemContent(
|
|
417
|
+
renderItemContent(
|
|
418
|
+
{ props = {}, events = {}, options }: RenderOptions,
|
|
419
|
+
{ data, field }: RenderFormParams,
|
|
420
|
+
) {
|
|
333
421
|
return valued(field) ? (
|
|
334
422
|
<RadioGroup
|
|
335
423
|
v-model:value={data[field!]}
|
|
336
424
|
{...props}
|
|
337
425
|
options={props.options ?? options ?? []}
|
|
426
|
+
disabled={!!props.disabled}
|
|
427
|
+
onChange={(...arg) => {
|
|
428
|
+
events.change?.({ data, field }, ...arg);
|
|
429
|
+
}}
|
|
338
430
|
/>
|
|
339
431
|
) : null;
|
|
340
432
|
},
|
|
@@ -356,7 +448,7 @@ const renders = {
|
|
|
356
448
|
return valued(field) ? (
|
|
357
449
|
<AutoComplete
|
|
358
450
|
v-model:value={data[field!]}
|
|
359
|
-
{...props}
|
|
451
|
+
{...Object.assign({}, { filterOption: defaultProps.autoComplete.filterOption }, props)}
|
|
360
452
|
onChange={(...arg) => {
|
|
361
453
|
events.change?.({ data, field }, ...arg);
|
|
362
454
|
}}
|