feat: 更新为 1.2.0 构建产物(内核重构版)
- 产物替换为 funjiaui.es.js / funjiaui.cjs.js / funjiaui.umd.js - style.css 更新,新增 index.d.ts 与各组件类型声明目录 - 移除旧产物 um_table.es.js(1.0.0 的 ES 包,历史与 v1.0.0 标签仍可回溯) - package.json 补齐 module / types / unpkg / jsdelivr / files 字段, 并将 vue、element-plus、@element-plus/icons-vue 声明为 peerDependencies - 新增 README 说明产物清单与用法
This commit is contained in:
Vendored
+37
@@ -0,0 +1,37 @@
|
||||
import type { VNode } from "vue";
|
||||
declare const _sfc_main: import("vue").DefineComponent<{
|
||||
target: any;
|
||||
data: any[];
|
||||
/**
|
||||
* 是否为树形表格
|
||||
*/
|
||||
isExpand?: boolean | undefined;
|
||||
/**
|
||||
* 树形表格模板
|
||||
*/
|
||||
expandTemplate?: VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}> | undefined;
|
||||
otherParams?: any;
|
||||
searchParams?: any;
|
||||
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, import("vue").EmitsOptions, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<{
|
||||
target: any;
|
||||
data: any[];
|
||||
/**
|
||||
* 是否为树形表格
|
||||
*/
|
||||
isExpand?: boolean | undefined;
|
||||
/**
|
||||
* 树形表格模板
|
||||
*/
|
||||
expandTemplate?: VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}> | undefined;
|
||||
otherParams?: any;
|
||||
searchParams?: any;
|
||||
}>, {
|
||||
target: any;
|
||||
otherParams: any;
|
||||
searchParams: any;
|
||||
}>;
|
||||
export default _sfc_main;
|
||||
Vendored
+29
@@ -0,0 +1,29 @@
|
||||
declare const _sfc_main: import("vue").DefineComponent<{
|
||||
target: Function | any;
|
||||
data: any[];
|
||||
class?: string | undefined;
|
||||
otherParams?: any;
|
||||
formData?: any;
|
||||
/**
|
||||
* 是否为树状列表
|
||||
*/
|
||||
isExpand?: boolean | undefined;
|
||||
expandTemplate?: any;
|
||||
}, any, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, import("vue").EmitsOptions, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<{
|
||||
target: Function | any;
|
||||
data: any[];
|
||||
class?: string | undefined;
|
||||
otherParams?: any;
|
||||
formData?: any;
|
||||
/**
|
||||
* 是否为树状列表
|
||||
*/
|
||||
isExpand?: boolean | undefined;
|
||||
expandTemplate?: any;
|
||||
}>, {
|
||||
target: any;
|
||||
expandTemplate: any;
|
||||
otherParams: any;
|
||||
formData: any;
|
||||
}>;
|
||||
export default _sfc_main;
|
||||
Vendored
+77
@@ -0,0 +1,77 @@
|
||||
import type { PropType } from "vue";
|
||||
import type { TColumnRender, tFieldType } from "./types";
|
||||
declare const _sfc_main: import("vue").DefineComponent<{
|
||||
fieldType: {
|
||||
type: PropType<tFieldType>;
|
||||
default: string;
|
||||
};
|
||||
data: {
|
||||
type: PropType<Record<string, any>>;
|
||||
default: () => {};
|
||||
};
|
||||
prop: {
|
||||
type: StringConstructor;
|
||||
default: string;
|
||||
};
|
||||
/** 自定义渲染函数 */
|
||||
render: {
|
||||
type: PropType<TColumnRender>;
|
||||
default: undefined;
|
||||
};
|
||||
/**
|
||||
* 日期格式化模板(仅 fieldType === "date" 生效)。
|
||||
* 不传时沿用历史默认 `YYYY-MM-DD HH:mm:ss`。
|
||||
*/
|
||||
dateFormat: {
|
||||
type: StringConstructor;
|
||||
default: undefined;
|
||||
};
|
||||
/** 是否显示单元格内容(支持异步) */
|
||||
isShow: {
|
||||
type: PropType<(data: any) => boolean | Promise<boolean>>;
|
||||
default: undefined;
|
||||
};
|
||||
}, unknown, {
|
||||
visible: boolean;
|
||||
}, {}, {
|
||||
refreshVisible(): Promise<void>;
|
||||
}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
||||
fieldType: {
|
||||
type: PropType<tFieldType>;
|
||||
default: string;
|
||||
};
|
||||
data: {
|
||||
type: PropType<Record<string, any>>;
|
||||
default: () => {};
|
||||
};
|
||||
prop: {
|
||||
type: StringConstructor;
|
||||
default: string;
|
||||
};
|
||||
/** 自定义渲染函数 */
|
||||
render: {
|
||||
type: PropType<TColumnRender>;
|
||||
default: undefined;
|
||||
};
|
||||
/**
|
||||
* 日期格式化模板(仅 fieldType === "date" 生效)。
|
||||
* 不传时沿用历史默认 `YYYY-MM-DD HH:mm:ss`。
|
||||
*/
|
||||
dateFormat: {
|
||||
type: StringConstructor;
|
||||
default: undefined;
|
||||
};
|
||||
/** 是否显示单元格内容(支持异步) */
|
||||
isShow: {
|
||||
type: PropType<(data: any) => boolean | Promise<boolean>>;
|
||||
default: undefined;
|
||||
};
|
||||
}>>, {
|
||||
data: Record<string, any>;
|
||||
fieldType: tFieldType;
|
||||
prop: string;
|
||||
dateFormat: string;
|
||||
isShow: (data: any) => boolean | Promise<boolean>;
|
||||
render: TColumnRender;
|
||||
}>;
|
||||
export default _sfc_main;
|
||||
Vendored
+42
@@ -0,0 +1,42 @@
|
||||
declare const _sfc_main: import("vue").DefineComponent<{}, {
|
||||
emit: (e: "click", data: Event) => any;
|
||||
fileInput: import("vue").Ref<any>;
|
||||
onClick: () => void;
|
||||
onFileChange: (e: Event) => void;
|
||||
Iconfont: import("vue").DefineComponent<{
|
||||
class: {
|
||||
type: StringConstructor;
|
||||
required: false;
|
||||
};
|
||||
style: {
|
||||
type: null;
|
||||
required: false;
|
||||
};
|
||||
type: {
|
||||
type: StringConstructor;
|
||||
required: true;
|
||||
};
|
||||
}, {
|
||||
props: any;
|
||||
emit: (e: "click") => void;
|
||||
iconClass: import("vue").ComputedRef<string>;
|
||||
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "click"[], "click", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
||||
class: {
|
||||
type: StringConstructor;
|
||||
required: false;
|
||||
};
|
||||
style: {
|
||||
type: null;
|
||||
required: false;
|
||||
};
|
||||
type: {
|
||||
type: StringConstructor;
|
||||
required: true;
|
||||
};
|
||||
}>> & {
|
||||
onClick?: ((...args: any[]) => any) | undefined;
|
||||
}, {}>;
|
||||
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "click"[], "click", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>> & {
|
||||
onClick?: ((...args: any[]) => any) | undefined;
|
||||
}, {}>;
|
||||
export default _sfc_main;
|
||||
Vendored
+35
@@ -0,0 +1,35 @@
|
||||
interface ISearchField {
|
||||
label: string;
|
||||
/** 由 `fieldType` 推导出的默认控件 */
|
||||
fieldType?: string;
|
||||
/** 由 `$um_component` 显式指定的控件,优先级高于 fieldType */
|
||||
component?: string;
|
||||
prop: string;
|
||||
placeholder?: string;
|
||||
style?: any;
|
||||
}
|
||||
declare const _sfc_main: import("vue").DefineComponent<{
|
||||
/** 配置类(构造函数或实例) */
|
||||
target: {
|
||||
type: any;
|
||||
required: true;
|
||||
};
|
||||
}, unknown, {
|
||||
formFields: ISearchField[];
|
||||
formModel: Record<string, any>;
|
||||
fieldOption: Map<string, any>;
|
||||
}, {}, {
|
||||
/** 收集字段并按 fieldName 初始化表单模型 */
|
||||
buildFields(): Promise<void>;
|
||||
onSubmit(): void;
|
||||
onReset(): void;
|
||||
}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "change"[], "change", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
||||
/** 配置类(构造函数或实例) */
|
||||
target: {
|
||||
type: any;
|
||||
required: true;
|
||||
};
|
||||
}>> & {
|
||||
onChange?: ((...args: any[]) => any) | undefined;
|
||||
}, {}>;
|
||||
export default _sfc_main;
|
||||
Vendored
+124
@@ -0,0 +1,124 @@
|
||||
import type { IFormRule } from "./types";
|
||||
declare const _sfc_main: import("vue").DefineComponent<{
|
||||
data: {
|
||||
type: null;
|
||||
required: false;
|
||||
};
|
||||
depData: {
|
||||
type: null;
|
||||
required: false;
|
||||
};
|
||||
}, {
|
||||
props: any;
|
||||
SyncNode: {
|
||||
new (): {};
|
||||
};
|
||||
tableForm: import("vue").Ref<any>;
|
||||
formId: import("vue").Ref<string | number>;
|
||||
moduleFieldName: import("vue").Ref<string>;
|
||||
moduleFieldTitle: import("vue").Ref<string>;
|
||||
formModel: import("vue").Ref<{
|
||||
[x: string]: any;
|
||||
}>;
|
||||
target: import("vue").ComputedRef<{
|
||||
new (): {};
|
||||
}>;
|
||||
lastApplied: any;
|
||||
onFormModelChange: (v: any) => void;
|
||||
onOk: (_data: any) => void;
|
||||
UmTableForm: import("vue").DefineComponent<{}, {
|
||||
formModel: import("vue").Ref<{
|
||||
[x: string]: any;
|
||||
}>;
|
||||
setFormModel: (models: any) => void;
|
||||
}, {
|
||||
rules: Record<string, any>;
|
||||
formItems: any[];
|
||||
fieldOption: Map<string, any>;
|
||||
maxLabelWidth: number;
|
||||
showList: string[];
|
||||
cascadeMap: Map<string, string[]>;
|
||||
throttleRefreshForm: import("lodash").DebouncedFunc<(this: any, v: any, oldV: any, needFreshCascadeField: string[]) => Promise<void>>;
|
||||
}, {
|
||||
formCom(): import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}> | null;
|
||||
}, {
|
||||
refreshForm(v: any, oldV: any, needFreshCascadeField: string[]): Promise<void | undefined>;
|
||||
onSubmit(): Promise<void>;
|
||||
getRule(rule: IFormRule): {
|
||||
required: boolean;
|
||||
message: string | undefined;
|
||||
pattern?: undefined;
|
||||
min?: undefined;
|
||||
max?: undefined;
|
||||
validator?: undefined;
|
||||
} | {
|
||||
pattern: RegExp;
|
||||
message: string;
|
||||
required?: undefined;
|
||||
min?: undefined;
|
||||
max?: undefined;
|
||||
validator?: undefined;
|
||||
} | {
|
||||
min: number | undefined;
|
||||
max: number | undefined;
|
||||
message: string;
|
||||
required?: undefined;
|
||||
pattern?: undefined;
|
||||
validator?: undefined;
|
||||
} | {
|
||||
max: number | undefined;
|
||||
message: string;
|
||||
required?: undefined;
|
||||
pattern?: undefined;
|
||||
min?: undefined;
|
||||
validator?: undefined;
|
||||
} | {
|
||||
min: number | undefined;
|
||||
message: string;
|
||||
required?: undefined;
|
||||
pattern?: undefined;
|
||||
max?: undefined;
|
||||
validator?: undefined;
|
||||
} | {
|
||||
validator: any;
|
||||
required?: undefined;
|
||||
message?: undefined;
|
||||
pattern?: undefined;
|
||||
min?: undefined;
|
||||
max?: undefined;
|
||||
} | {
|
||||
required?: undefined;
|
||||
message?: undefined;
|
||||
pattern?: undefined;
|
||||
min?: undefined;
|
||||
max?: undefined;
|
||||
validator?: undefined;
|
||||
} | undefined;
|
||||
updateFieldOption(fieldName: string, metaData: import("./types").IFieldMetaValue, isBeforeMount?: boolean): Promise<void>;
|
||||
initShowFieldList(v: any, oldV?: any): Promise<void>;
|
||||
initCascadeData(needFreshCascadeField: string[]): Promise<void>;
|
||||
initData(): Promise<void>;
|
||||
initFormItem(): void;
|
||||
initRule(isBeforeMount?: boolean): void;
|
||||
init(): Promise<void>;
|
||||
initForm(fieldName: string, value: any): void;
|
||||
}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("ok" | "cancel" | "formModelChange")[], "ok" | "cancel" | "formModelChange", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>> & {
|
||||
onOk?: ((...args: any[]) => any) | undefined;
|
||||
onCancel?: ((...args: any[]) => any) | undefined;
|
||||
onFormModelChange?: ((...args: any[]) => any) | undefined;
|
||||
}, {}>;
|
||||
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "cancel"[], "cancel", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
||||
data: {
|
||||
type: null;
|
||||
required: false;
|
||||
};
|
||||
depData: {
|
||||
type: null;
|
||||
required: false;
|
||||
};
|
||||
}>> & {
|
||||
onCancel?: ((...args: any[]) => any) | undefined;
|
||||
}, {}>;
|
||||
export default _sfc_main;
|
||||
Vendored
+600
@@ -0,0 +1,600 @@
|
||||
import type { IToolbar, TEvent } from "./types";
|
||||
declare const _sfc_main: import("vue").DefineComponent<{
|
||||
style: {
|
||||
type: null;
|
||||
required: false;
|
||||
};
|
||||
width: {
|
||||
type: (NumberConstructor | StringConstructor)[];
|
||||
required: false;
|
||||
default: string;
|
||||
};
|
||||
data: {
|
||||
type: ArrayConstructor;
|
||||
required: true;
|
||||
};
|
||||
toolbarOptions: {
|
||||
type: ArrayConstructor;
|
||||
required: false;
|
||||
default: () => never[];
|
||||
};
|
||||
toolbarEvents: {
|
||||
type: ArrayConstructor;
|
||||
required: false;
|
||||
default: () => never[];
|
||||
};
|
||||
otherParams: {
|
||||
type: null;
|
||||
required: false;
|
||||
default: () => {};
|
||||
};
|
||||
searchParams: {
|
||||
type: null;
|
||||
required: false;
|
||||
default: () => {};
|
||||
};
|
||||
rowKey: {
|
||||
type: StringConstructor;
|
||||
required: false;
|
||||
default: string;
|
||||
};
|
||||
defaultExpandAll: {
|
||||
type: BooleanConstructor;
|
||||
required: false;
|
||||
default: boolean;
|
||||
};
|
||||
treeProps: {
|
||||
type: null;
|
||||
required: false;
|
||||
};
|
||||
}, {
|
||||
props: any;
|
||||
selection: import("vue").Ref<any[]>;
|
||||
onSelect: (rows: any[]) => void;
|
||||
onSelectAll: (rows: any[]) => void;
|
||||
ElTable: import("element-plus/es/utils").SFCWithInstall<import("vue").DefineComponent<{
|
||||
data: {
|
||||
type: import("vue").PropType<any[]>;
|
||||
default: () => never[];
|
||||
};
|
||||
size: StringConstructor;
|
||||
width: (NumberConstructor | StringConstructor)[];
|
||||
height: (NumberConstructor | StringConstructor)[];
|
||||
maxHeight: (NumberConstructor | StringConstructor)[];
|
||||
fit: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
stripe: BooleanConstructor;
|
||||
border: BooleanConstructor;
|
||||
rowKey: import("vue").PropType<string | ((row: any) => string) | undefined>;
|
||||
showHeader: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
showSummary: BooleanConstructor;
|
||||
sumText: StringConstructor;
|
||||
summaryMethod: import("vue").PropType<import("element-plus/es/components/table/src/table/defaults").SummaryMethod<any> | undefined>;
|
||||
rowClassName: import("vue").PropType<import("element-plus/es/components/table/src/table/defaults").ColumnCls<any> | undefined>;
|
||||
rowStyle: import("vue").PropType<import("element-plus/es/components/table/src/table/defaults").ColumnStyle<any> | undefined>;
|
||||
cellClassName: import("vue").PropType<string | ((data: {
|
||||
row: any;
|
||||
rowIndex: number;
|
||||
column: import("element-plus/es/components/table/src/table-column/defaults").TableColumnCtx<any>;
|
||||
columnIndex: number;
|
||||
}) => string) | undefined>;
|
||||
cellStyle: import("vue").PropType<import("vue").CSSProperties | ((data: {
|
||||
row: any;
|
||||
rowIndex: number;
|
||||
column: import("element-plus/es/components/table/src/table-column/defaults").TableColumnCtx<any>;
|
||||
columnIndex: number;
|
||||
}) => import("vue").CSSProperties) | undefined>;
|
||||
headerRowClassName: import("vue").PropType<import("element-plus/es/components/table/src/table/defaults").ColumnCls<any> | undefined>;
|
||||
headerRowStyle: import("vue").PropType<import("element-plus/es/components/table/src/table/defaults").ColumnStyle<any> | undefined>;
|
||||
headerCellClassName: import("vue").PropType<string | ((data: {
|
||||
row: any;
|
||||
rowIndex: number;
|
||||
column: import("element-plus/es/components/table/src/table-column/defaults").TableColumnCtx<any>;
|
||||
columnIndex: number;
|
||||
}) => string) | undefined>;
|
||||
headerCellStyle: import("vue").PropType<import("vue").CSSProperties | ((data: {
|
||||
row: any;
|
||||
rowIndex: number;
|
||||
column: import("element-plus/es/components/table/src/table-column/defaults").TableColumnCtx<any>;
|
||||
columnIndex: number;
|
||||
}) => import("vue").CSSProperties) | undefined>;
|
||||
highlightCurrentRow: BooleanConstructor;
|
||||
currentRowKey: (NumberConstructor | StringConstructor)[];
|
||||
emptyText: StringConstructor;
|
||||
expandRowKeys: import("vue").PropType<any[] | undefined>;
|
||||
defaultExpandAll: BooleanConstructor;
|
||||
defaultSort: import("vue").PropType<import("element-plus/es/components/table/src/table/defaults").Sort | undefined>;
|
||||
tooltipEffect: StringConstructor;
|
||||
spanMethod: import("vue").PropType<((data: {
|
||||
row: any;
|
||||
rowIndex: number;
|
||||
column: import("element-plus/es/components/table/src/table-column/defaults").TableColumnCtx<any>;
|
||||
columnIndex: number;
|
||||
}) => number[] | {
|
||||
rowspan: number;
|
||||
colspan: number;
|
||||
}) | undefined>;
|
||||
selectOnIndeterminate: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
indent: {
|
||||
type: NumberConstructor;
|
||||
default: number;
|
||||
};
|
||||
treeProps: {
|
||||
type: import("vue").PropType<{
|
||||
hasChildren?: string | undefined;
|
||||
children?: string | undefined;
|
||||
} | undefined>;
|
||||
default: () => {
|
||||
hasChildren: string;
|
||||
children: string;
|
||||
};
|
||||
};
|
||||
lazy: BooleanConstructor;
|
||||
load: import("vue").PropType<((row: any, treeNode: import("element-plus/es/components/table/src/table/defaults").TreeNode, resolve: (data: any[]) => void) => void) | undefined>;
|
||||
style: {
|
||||
type: import("vue").PropType<import("vue").CSSProperties>;
|
||||
default: () => {};
|
||||
};
|
||||
className: {
|
||||
type: StringConstructor;
|
||||
default: string;
|
||||
};
|
||||
tableLayout: {
|
||||
type: import("vue").PropType<"fixed" | "auto">;
|
||||
default: string;
|
||||
};
|
||||
scrollbarAlwaysOn: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
}, {
|
||||
ns: {
|
||||
namespace: import("vue").ComputedRef<string>;
|
||||
b: (blockSuffix?: string | undefined) => string;
|
||||
e: (element?: string | undefined) => string;
|
||||
m: (modifier?: string | undefined) => string;
|
||||
be: (blockSuffix?: string | undefined, element?: string | undefined) => string;
|
||||
em: (element?: string | undefined, modifier?: string | undefined) => string;
|
||||
bm: (blockSuffix?: string | undefined, modifier?: string | undefined) => string;
|
||||
bem: (blockSuffix?: string | undefined, element?: string | undefined, modifier?: string | undefined) => string;
|
||||
is: {
|
||||
(name: string, state: boolean | undefined): string;
|
||||
(name: string): string;
|
||||
};
|
||||
};
|
||||
layout: import("element-plus/es/components/table/src/table-layout").default<any>;
|
||||
store: any;
|
||||
handleHeaderFooterMousewheel: (event: any, data: any) => void;
|
||||
handleMouseLeave: () => void;
|
||||
tableId: string;
|
||||
tableSize: import("vue").ComputedRef<"" | "default" | "small" | "large">;
|
||||
isHidden: import("vue").Ref<boolean>;
|
||||
isEmpty: import("vue").ComputedRef<boolean>;
|
||||
renderExpanded: import("vue").Ref<null>;
|
||||
resizeProxyVisible: import("vue").Ref<boolean>;
|
||||
resizeState: import("vue").Ref<{
|
||||
width: null;
|
||||
height: null;
|
||||
}>;
|
||||
isGroup: import("vue").Ref<boolean>;
|
||||
bodyWidth: import("vue").ComputedRef<string>;
|
||||
bodyHeight: import("vue").ComputedRef<{
|
||||
height: string;
|
||||
'max-height'?: undefined;
|
||||
} | {
|
||||
'max-height': string;
|
||||
height?: undefined;
|
||||
} | {
|
||||
height?: undefined;
|
||||
'max-height'?: undefined;
|
||||
}>;
|
||||
height: import("vue").ComputedRef<string | number | undefined>;
|
||||
tableBodyStyles: import("vue").ComputedRef<{
|
||||
width: string;
|
||||
}>;
|
||||
emptyBlockStyle: import("vue").ComputedRef<{
|
||||
width: string;
|
||||
height: string;
|
||||
} | null>;
|
||||
debouncedUpdateLayout: import("lodash").DebouncedFunc<() => void>;
|
||||
handleFixedMousewheel: (event: any, data: any) => void;
|
||||
fixedHeight: import("vue").ComputedRef<{
|
||||
bottom: number;
|
||||
height?: undefined;
|
||||
} | {
|
||||
bottom: string;
|
||||
height?: undefined;
|
||||
} | {
|
||||
height: string;
|
||||
bottom?: undefined;
|
||||
}>;
|
||||
fixedBodyHeight: import("vue").ComputedRef<{
|
||||
height: string;
|
||||
'max-height'?: undefined;
|
||||
} | {
|
||||
'max-height': string;
|
||||
height?: undefined;
|
||||
} | {
|
||||
height?: undefined;
|
||||
'max-height'?: undefined;
|
||||
}>;
|
||||
setCurrentRow: (row: any) => void;
|
||||
getSelectionRows: () => any;
|
||||
toggleRowSelection: (row: any, selected: boolean) => void;
|
||||
clearSelection: () => void;
|
||||
clearFilter: (columnKeys: string[]) => void;
|
||||
toggleAllSelection: () => void;
|
||||
toggleRowExpansion: (row: any, expanded: boolean) => void;
|
||||
clearSort: () => void;
|
||||
doLayout: () => void;
|
||||
sort: (prop: string, order: string) => void;
|
||||
t: import("element-plus").Translator;
|
||||
setDragVisible: (visible: boolean) => void;
|
||||
context: import("element-plus/es/components/table/src/table/defaults").Table<any>;
|
||||
computedSumText: import("vue").ComputedRef<string>;
|
||||
computedEmptyText: import("vue").ComputedRef<string>;
|
||||
tableLayout: import("vue").ComputedRef<"fixed" | "auto">;
|
||||
scrollbarViewStyle: {
|
||||
display: string;
|
||||
verticalAlign: string;
|
||||
};
|
||||
scrollBarRef: import("vue").Ref<any>;
|
||||
scrollTo: (options: number | ScrollToOptions, yCoord?: number | undefined) => void;
|
||||
setScrollLeft: (left?: number | undefined) => void;
|
||||
setScrollTop: (top?: number | undefined) => void;
|
||||
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("select" | "select-all" | "expand-change" | "current-change" | "selection-change" | "cell-mouse-enter" | "cell-mouse-leave" | "cell-contextmenu" | "cell-click" | "cell-dblclick" | "row-click" | "row-contextmenu" | "row-dblclick" | "header-click" | "header-contextmenu" | "sort-change" | "filter-change" | "header-dragend")[], "select" | "select-all" | "expand-change" | "current-change" | "selection-change" | "cell-mouse-enter" | "cell-mouse-leave" | "cell-contextmenu" | "cell-click" | "cell-dblclick" | "row-click" | "row-contextmenu" | "row-dblclick" | "header-click" | "header-contextmenu" | "sort-change" | "filter-change" | "header-dragend", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
||||
data: {
|
||||
type: import("vue").PropType<any[]>;
|
||||
default: () => never[];
|
||||
};
|
||||
size: StringConstructor;
|
||||
width: (NumberConstructor | StringConstructor)[];
|
||||
height: (NumberConstructor | StringConstructor)[];
|
||||
maxHeight: (NumberConstructor | StringConstructor)[];
|
||||
fit: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
stripe: BooleanConstructor;
|
||||
border: BooleanConstructor;
|
||||
rowKey: import("vue").PropType<string | ((row: any) => string) | undefined>;
|
||||
showHeader: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
showSummary: BooleanConstructor;
|
||||
sumText: StringConstructor;
|
||||
summaryMethod: import("vue").PropType<import("element-plus/es/components/table/src/table/defaults").SummaryMethod<any> | undefined>;
|
||||
rowClassName: import("vue").PropType<import("element-plus/es/components/table/src/table/defaults").ColumnCls<any> | undefined>;
|
||||
rowStyle: import("vue").PropType<import("element-plus/es/components/table/src/table/defaults").ColumnStyle<any> | undefined>;
|
||||
cellClassName: import("vue").PropType<string | ((data: {
|
||||
row: any;
|
||||
rowIndex: number;
|
||||
column: import("element-plus/es/components/table/src/table-column/defaults").TableColumnCtx<any>;
|
||||
columnIndex: number;
|
||||
}) => string) | undefined>;
|
||||
cellStyle: import("vue").PropType<import("vue").CSSProperties | ((data: {
|
||||
row: any;
|
||||
rowIndex: number;
|
||||
column: import("element-plus/es/components/table/src/table-column/defaults").TableColumnCtx<any>;
|
||||
columnIndex: number;
|
||||
}) => import("vue").CSSProperties) | undefined>;
|
||||
headerRowClassName: import("vue").PropType<import("element-plus/es/components/table/src/table/defaults").ColumnCls<any> | undefined>;
|
||||
headerRowStyle: import("vue").PropType<import("element-plus/es/components/table/src/table/defaults").ColumnStyle<any> | undefined>;
|
||||
headerCellClassName: import("vue").PropType<string | ((data: {
|
||||
row: any;
|
||||
rowIndex: number;
|
||||
column: import("element-plus/es/components/table/src/table-column/defaults").TableColumnCtx<any>;
|
||||
columnIndex: number;
|
||||
}) => string) | undefined>;
|
||||
headerCellStyle: import("vue").PropType<import("vue").CSSProperties | ((data: {
|
||||
row: any;
|
||||
rowIndex: number;
|
||||
column: import("element-plus/es/components/table/src/table-column/defaults").TableColumnCtx<any>;
|
||||
columnIndex: number;
|
||||
}) => import("vue").CSSProperties) | undefined>;
|
||||
highlightCurrentRow: BooleanConstructor;
|
||||
currentRowKey: (NumberConstructor | StringConstructor)[];
|
||||
emptyText: StringConstructor;
|
||||
expandRowKeys: import("vue").PropType<any[] | undefined>;
|
||||
defaultExpandAll: BooleanConstructor;
|
||||
defaultSort: import("vue").PropType<import("element-plus/es/components/table/src/table/defaults").Sort | undefined>;
|
||||
tooltipEffect: StringConstructor;
|
||||
spanMethod: import("vue").PropType<((data: {
|
||||
row: any;
|
||||
rowIndex: number;
|
||||
column: import("element-plus/es/components/table/src/table-column/defaults").TableColumnCtx<any>;
|
||||
columnIndex: number;
|
||||
}) => number[] | {
|
||||
rowspan: number;
|
||||
colspan: number;
|
||||
}) | undefined>;
|
||||
selectOnIndeterminate: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
indent: {
|
||||
type: NumberConstructor;
|
||||
default: number;
|
||||
};
|
||||
treeProps: {
|
||||
type: import("vue").PropType<{
|
||||
hasChildren?: string | undefined;
|
||||
children?: string | undefined;
|
||||
} | undefined>;
|
||||
default: () => {
|
||||
hasChildren: string;
|
||||
children: string;
|
||||
};
|
||||
};
|
||||
lazy: BooleanConstructor;
|
||||
load: import("vue").PropType<((row: any, treeNode: import("element-plus/es/components/table/src/table/defaults").TreeNode, resolve: (data: any[]) => void) => void) | undefined>;
|
||||
style: {
|
||||
type: import("vue").PropType<import("vue").CSSProperties>;
|
||||
default: () => {};
|
||||
};
|
||||
className: {
|
||||
type: StringConstructor;
|
||||
default: string;
|
||||
};
|
||||
tableLayout: {
|
||||
type: import("vue").PropType<"fixed" | "auto">;
|
||||
default: string;
|
||||
};
|
||||
scrollbarAlwaysOn: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
}>> & {
|
||||
onSelect?: ((...args: any[]) => any) | undefined;
|
||||
"onExpand-change"?: ((...args: any[]) => any) | undefined;
|
||||
"onCurrent-change"?: ((...args: any[]) => any) | undefined;
|
||||
"onSelect-all"?: ((...args: any[]) => any) | undefined;
|
||||
"onSelection-change"?: ((...args: any[]) => any) | undefined;
|
||||
"onCell-mouse-enter"?: ((...args: any[]) => any) | undefined;
|
||||
"onCell-mouse-leave"?: ((...args: any[]) => any) | undefined;
|
||||
"onCell-contextmenu"?: ((...args: any[]) => any) | undefined;
|
||||
"onCell-click"?: ((...args: any[]) => any) | undefined;
|
||||
"onCell-dblclick"?: ((...args: any[]) => any) | undefined;
|
||||
"onRow-click"?: ((...args: any[]) => any) | undefined;
|
||||
"onRow-contextmenu"?: ((...args: any[]) => any) | undefined;
|
||||
"onRow-dblclick"?: ((...args: any[]) => any) | undefined;
|
||||
"onHeader-click"?: ((...args: any[]) => any) | undefined;
|
||||
"onHeader-contextmenu"?: ((...args: any[]) => any) | undefined;
|
||||
"onSort-change"?: ((...args: any[]) => any) | undefined;
|
||||
"onFilter-change"?: ((...args: any[]) => any) | undefined;
|
||||
"onHeader-dragend"?: ((...args: any[]) => any) | undefined;
|
||||
}, {
|
||||
data: any[];
|
||||
lazy: boolean;
|
||||
style: import("vue").CSSProperties;
|
||||
className: string;
|
||||
tableLayout: "fixed" | "auto";
|
||||
border: boolean;
|
||||
fit: boolean;
|
||||
scrollbarAlwaysOn: boolean;
|
||||
stripe: boolean;
|
||||
treeProps: {
|
||||
hasChildren?: string | undefined;
|
||||
children?: string | undefined;
|
||||
} | undefined;
|
||||
showHeader: boolean;
|
||||
showSummary: boolean;
|
||||
highlightCurrentRow: boolean;
|
||||
defaultExpandAll: boolean;
|
||||
selectOnIndeterminate: boolean;
|
||||
indent: number;
|
||||
}>> & {
|
||||
TableColumn: import("vue").DefineComponent<{
|
||||
type: {
|
||||
type: StringConstructor;
|
||||
default: string;
|
||||
};
|
||||
label: StringConstructor;
|
||||
className: StringConstructor;
|
||||
labelClassName: StringConstructor;
|
||||
property: StringConstructor;
|
||||
prop: StringConstructor;
|
||||
width: {
|
||||
type: (NumberConstructor | StringConstructor)[];
|
||||
default: string;
|
||||
};
|
||||
minWidth: {
|
||||
type: (NumberConstructor | StringConstructor)[];
|
||||
default: string;
|
||||
};
|
||||
renderHeader: import("vue").PropType<(data: {
|
||||
column: import("element-plus/es/components/table/src/table-column/defaults").TableColumnCtx<any>;
|
||||
$index: number;
|
||||
}) => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}>>;
|
||||
sortable: {
|
||||
type: (BooleanConstructor | StringConstructor)[];
|
||||
default: boolean;
|
||||
};
|
||||
sortMethod: import("vue").PropType<(a: any, b: any) => number>;
|
||||
sortBy: import("vue").PropType<string | string[] | ((row: any, index: number) => string)>;
|
||||
resizable: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
columnKey: StringConstructor;
|
||||
align: StringConstructor;
|
||||
headerAlign: StringConstructor;
|
||||
showTooltipWhenOverflow: BooleanConstructor;
|
||||
showOverflowTooltip: BooleanConstructor;
|
||||
fixed: (BooleanConstructor | StringConstructor)[];
|
||||
formatter: import("vue").PropType<(row: any, column: import("element-plus/es/components/table/src/table-column/defaults").TableColumnCtx<any>, cellValue: any, index: number) => string | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}>>;
|
||||
selectable: import("vue").PropType<(row: any, index: number) => boolean>;
|
||||
reserveSelection: BooleanConstructor;
|
||||
filterMethod: import("vue").PropType<import("element-plus/es/components/table/src/table-column/defaults").FilterMethods<any>>;
|
||||
filteredValue: import("vue").PropType<string[]>;
|
||||
filters: import("vue").PropType<import("element-plus/es/components/table/src/table-column/defaults").Filters>;
|
||||
filterPlacement: StringConstructor;
|
||||
filterMultiple: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
index: import("vue").PropType<number | ((index: number) => number)>;
|
||||
sortOrders: {
|
||||
type: import("vue").PropType<("ascending" | "descending" | null)[]>;
|
||||
default: () => (string | null)[];
|
||||
validator: (val: ("ascending" | "descending" | null)[]) => boolean;
|
||||
};
|
||||
}, void, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
||||
type: {
|
||||
type: StringConstructor;
|
||||
default: string;
|
||||
};
|
||||
label: StringConstructor;
|
||||
className: StringConstructor;
|
||||
labelClassName: StringConstructor;
|
||||
property: StringConstructor;
|
||||
prop: StringConstructor;
|
||||
width: {
|
||||
type: (NumberConstructor | StringConstructor)[];
|
||||
default: string;
|
||||
};
|
||||
minWidth: {
|
||||
type: (NumberConstructor | StringConstructor)[];
|
||||
default: string;
|
||||
};
|
||||
renderHeader: import("vue").PropType<(data: {
|
||||
column: import("element-plus/es/components/table/src/table-column/defaults").TableColumnCtx<any>;
|
||||
$index: number;
|
||||
}) => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}>>;
|
||||
sortable: {
|
||||
type: (BooleanConstructor | StringConstructor)[];
|
||||
default: boolean;
|
||||
};
|
||||
sortMethod: import("vue").PropType<(a: any, b: any) => number>;
|
||||
sortBy: import("vue").PropType<string | string[] | ((row: any, index: number) => string)>;
|
||||
resizable: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
columnKey: StringConstructor;
|
||||
align: StringConstructor;
|
||||
headerAlign: StringConstructor;
|
||||
showTooltipWhenOverflow: BooleanConstructor;
|
||||
showOverflowTooltip: BooleanConstructor;
|
||||
fixed: (BooleanConstructor | StringConstructor)[];
|
||||
formatter: import("vue").PropType<(row: any, column: import("element-plus/es/components/table/src/table-column/defaults").TableColumnCtx<any>, cellValue: any, index: number) => string | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}>>;
|
||||
selectable: import("vue").PropType<(row: any, index: number) => boolean>;
|
||||
reserveSelection: BooleanConstructor;
|
||||
filterMethod: import("vue").PropType<import("element-plus/es/components/table/src/table-column/defaults").FilterMethods<any>>;
|
||||
filteredValue: import("vue").PropType<string[]>;
|
||||
filters: import("vue").PropType<import("element-plus/es/components/table/src/table-column/defaults").Filters>;
|
||||
filterPlacement: StringConstructor;
|
||||
filterMultiple: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
index: import("vue").PropType<number | ((index: number) => number)>;
|
||||
sortOrders: {
|
||||
type: import("vue").PropType<("ascending" | "descending" | null)[]>;
|
||||
default: () => (string | null)[];
|
||||
validator: (val: ("ascending" | "descending" | null)[]) => boolean;
|
||||
};
|
||||
}>>, {
|
||||
type: string;
|
||||
width: string | number;
|
||||
minWidth: string | number;
|
||||
sortOrders: ("ascending" | "descending" | null)[];
|
||||
sortable: string | boolean;
|
||||
resizable: boolean;
|
||||
showTooltipWhenOverflow: boolean;
|
||||
showOverflowTooltip: boolean;
|
||||
reserveSelection: boolean;
|
||||
filterMultiple: boolean;
|
||||
}>;
|
||||
};
|
||||
UmTableToolbar: import("vue").DefineComponent<{
|
||||
data: IToolbar[];
|
||||
events: TEvent[];
|
||||
selection: any[];
|
||||
otherParams: any;
|
||||
searchParams: any;
|
||||
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, import("vue").EmitsOptions, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<{
|
||||
data: IToolbar[];
|
||||
events: TEvent[];
|
||||
selection: any[];
|
||||
otherParams: any;
|
||||
searchParams: any;
|
||||
}>, {
|
||||
otherParams: any;
|
||||
searchParams: any;
|
||||
}>;
|
||||
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
||||
style: {
|
||||
type: null;
|
||||
required: false;
|
||||
};
|
||||
width: {
|
||||
type: (NumberConstructor | StringConstructor)[];
|
||||
required: false;
|
||||
default: string;
|
||||
};
|
||||
data: {
|
||||
type: ArrayConstructor;
|
||||
required: true;
|
||||
};
|
||||
toolbarOptions: {
|
||||
type: ArrayConstructor;
|
||||
required: false;
|
||||
default: () => never[];
|
||||
};
|
||||
toolbarEvents: {
|
||||
type: ArrayConstructor;
|
||||
required: false;
|
||||
default: () => never[];
|
||||
};
|
||||
otherParams: {
|
||||
type: null;
|
||||
required: false;
|
||||
default: () => {};
|
||||
};
|
||||
searchParams: {
|
||||
type: null;
|
||||
required: false;
|
||||
default: () => {};
|
||||
};
|
||||
rowKey: {
|
||||
type: StringConstructor;
|
||||
required: false;
|
||||
default: string;
|
||||
};
|
||||
defaultExpandAll: {
|
||||
type: BooleanConstructor;
|
||||
required: false;
|
||||
default: boolean;
|
||||
};
|
||||
treeProps: {
|
||||
type: null;
|
||||
required: false;
|
||||
};
|
||||
}>>, {
|
||||
width: string | number;
|
||||
otherParams: any;
|
||||
searchParams: any;
|
||||
toolbarOptions: unknown[];
|
||||
toolbarEvents: unknown[];
|
||||
rowKey: string;
|
||||
defaultExpandAll: boolean;
|
||||
}>;
|
||||
export default _sfc_main;
|
||||
Vendored
+341
@@ -0,0 +1,341 @@
|
||||
import type { IOperateItem, TColumnRender, tFieldType } from "./types";
|
||||
declare const _sfc_main: import("vue").DefineComponent<{
|
||||
type: {
|
||||
type: null;
|
||||
required: false;
|
||||
};
|
||||
fieldType: {
|
||||
type: null;
|
||||
required: false;
|
||||
default: string;
|
||||
};
|
||||
prop: {
|
||||
type: StringConstructor;
|
||||
required: false;
|
||||
default: string;
|
||||
};
|
||||
label: {
|
||||
type: StringConstructor;
|
||||
required: false;
|
||||
};
|
||||
width: {
|
||||
type: (NumberConstructor | StringConstructor)[];
|
||||
required: false;
|
||||
default: number;
|
||||
};
|
||||
minWidth: {
|
||||
type: (NumberConstructor | StringConstructor)[];
|
||||
required: false;
|
||||
};
|
||||
showOverflowTooltip: {
|
||||
type: BooleanConstructor;
|
||||
required: false;
|
||||
};
|
||||
operateItems: {
|
||||
type: ArrayConstructor;
|
||||
required: false;
|
||||
default: () => never[];
|
||||
};
|
||||
expandTemplate: {
|
||||
type: null;
|
||||
required: false;
|
||||
};
|
||||
columnRender: {
|
||||
type: null;
|
||||
required: false;
|
||||
};
|
||||
dateFormat: {
|
||||
type: StringConstructor;
|
||||
required: false;
|
||||
};
|
||||
isShow: {
|
||||
type: FunctionConstructor;
|
||||
required: false;
|
||||
};
|
||||
}, {
|
||||
props: any;
|
||||
resolvedLabel: import("vue").ComputedRef<string | undefined>;
|
||||
ElTableColumn: import("element-plus/es/utils").SFCWithInstall<import("vue").DefineComponent<{
|
||||
type: {
|
||||
type: StringConstructor;
|
||||
default: string;
|
||||
};
|
||||
label: StringConstructor;
|
||||
className: StringConstructor;
|
||||
labelClassName: StringConstructor;
|
||||
property: StringConstructor;
|
||||
prop: StringConstructor;
|
||||
width: {
|
||||
type: (NumberConstructor | StringConstructor)[];
|
||||
default: string;
|
||||
};
|
||||
minWidth: {
|
||||
type: (NumberConstructor | StringConstructor)[];
|
||||
default: string;
|
||||
};
|
||||
renderHeader: import("vue").PropType<(data: {
|
||||
column: import("element-plus/es/components/table/src/table-column/defaults").TableColumnCtx<any>;
|
||||
$index: number;
|
||||
}) => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}>>;
|
||||
sortable: {
|
||||
type: (BooleanConstructor | StringConstructor)[];
|
||||
default: boolean;
|
||||
};
|
||||
sortMethod: import("vue").PropType<(a: any, b: any) => number>;
|
||||
sortBy: import("vue").PropType<string | string[] | ((row: any, index: number) => string)>;
|
||||
resizable: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
columnKey: StringConstructor;
|
||||
align: StringConstructor;
|
||||
headerAlign: StringConstructor;
|
||||
showTooltipWhenOverflow: BooleanConstructor;
|
||||
showOverflowTooltip: BooleanConstructor;
|
||||
fixed: (BooleanConstructor | StringConstructor)[];
|
||||
formatter: import("vue").PropType<(row: any, column: import("element-plus/es/components/table/src/table-column/defaults").TableColumnCtx<any>, cellValue: any, index: number) => string | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}>>;
|
||||
selectable: import("vue").PropType<(row: any, index: number) => boolean>;
|
||||
reserveSelection: BooleanConstructor;
|
||||
filterMethod: import("vue").PropType<import("element-plus/es/components/table/src/table-column/defaults").FilterMethods<any>>;
|
||||
filteredValue: import("vue").PropType<string[]>;
|
||||
filters: import("vue").PropType<import("element-plus/es/components/table/src/table-column/defaults").Filters>;
|
||||
filterPlacement: StringConstructor;
|
||||
filterMultiple: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
index: import("vue").PropType<number | ((index: number) => number)>;
|
||||
sortOrders: {
|
||||
type: import("vue").PropType<("ascending" | "descending" | null)[]>;
|
||||
default: () => (string | null)[];
|
||||
validator: (val: ("ascending" | "descending" | null)[]) => boolean;
|
||||
};
|
||||
}, void, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
||||
type: {
|
||||
type: StringConstructor;
|
||||
default: string;
|
||||
};
|
||||
label: StringConstructor;
|
||||
className: StringConstructor;
|
||||
labelClassName: StringConstructor;
|
||||
property: StringConstructor;
|
||||
prop: StringConstructor;
|
||||
width: {
|
||||
type: (NumberConstructor | StringConstructor)[];
|
||||
default: string;
|
||||
};
|
||||
minWidth: {
|
||||
type: (NumberConstructor | StringConstructor)[];
|
||||
default: string;
|
||||
};
|
||||
renderHeader: import("vue").PropType<(data: {
|
||||
column: import("element-plus/es/components/table/src/table-column/defaults").TableColumnCtx<any>;
|
||||
$index: number;
|
||||
}) => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}>>;
|
||||
sortable: {
|
||||
type: (BooleanConstructor | StringConstructor)[];
|
||||
default: boolean;
|
||||
};
|
||||
sortMethod: import("vue").PropType<(a: any, b: any) => number>;
|
||||
sortBy: import("vue").PropType<string | string[] | ((row: any, index: number) => string)>;
|
||||
resizable: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
columnKey: StringConstructor;
|
||||
align: StringConstructor;
|
||||
headerAlign: StringConstructor;
|
||||
showTooltipWhenOverflow: BooleanConstructor;
|
||||
showOverflowTooltip: BooleanConstructor;
|
||||
fixed: (BooleanConstructor | StringConstructor)[];
|
||||
formatter: import("vue").PropType<(row: any, column: import("element-plus/es/components/table/src/table-column/defaults").TableColumnCtx<any>, cellValue: any, index: number) => string | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}>>;
|
||||
selectable: import("vue").PropType<(row: any, index: number) => boolean>;
|
||||
reserveSelection: BooleanConstructor;
|
||||
filterMethod: import("vue").PropType<import("element-plus/es/components/table/src/table-column/defaults").FilterMethods<any>>;
|
||||
filteredValue: import("vue").PropType<string[]>;
|
||||
filters: import("vue").PropType<import("element-plus/es/components/table/src/table-column/defaults").Filters>;
|
||||
filterPlacement: StringConstructor;
|
||||
filterMultiple: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
index: import("vue").PropType<number | ((index: number) => number)>;
|
||||
sortOrders: {
|
||||
type: import("vue").PropType<("ascending" | "descending" | null)[]>;
|
||||
default: () => (string | null)[];
|
||||
validator: (val: ("ascending" | "descending" | null)[]) => boolean;
|
||||
};
|
||||
}>>, {
|
||||
type: string;
|
||||
width: string | number;
|
||||
minWidth: string | number;
|
||||
sortOrders: ("ascending" | "descending" | null)[];
|
||||
sortable: string | boolean;
|
||||
resizable: boolean;
|
||||
showTooltipWhenOverflow: boolean;
|
||||
showOverflowTooltip: boolean;
|
||||
reserveSelection: boolean;
|
||||
filterMultiple: boolean;
|
||||
}>>;
|
||||
UmColumnRender: import("vue").DefineComponent<{
|
||||
fieldType: {
|
||||
type: import("vue").PropType<tFieldType>;
|
||||
default: string;
|
||||
};
|
||||
data: {
|
||||
type: import("vue").PropType<Record<string, any>>;
|
||||
default: () => {};
|
||||
};
|
||||
prop: {
|
||||
type: StringConstructor;
|
||||
default: string;
|
||||
};
|
||||
render: {
|
||||
type: import("vue").PropType<TColumnRender>;
|
||||
default: undefined;
|
||||
};
|
||||
dateFormat: {
|
||||
type: StringConstructor;
|
||||
default: undefined;
|
||||
};
|
||||
isShow: {
|
||||
type: import("vue").PropType<(data: any) => boolean | Promise<boolean>>;
|
||||
default: undefined;
|
||||
};
|
||||
}, unknown, {
|
||||
visible: boolean;
|
||||
}, {}, {
|
||||
refreshVisible(): Promise<void>;
|
||||
}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
||||
fieldType: {
|
||||
type: import("vue").PropType<tFieldType>;
|
||||
default: string;
|
||||
};
|
||||
data: {
|
||||
type: import("vue").PropType<Record<string, any>>;
|
||||
default: () => {};
|
||||
};
|
||||
prop: {
|
||||
type: StringConstructor;
|
||||
default: string;
|
||||
};
|
||||
render: {
|
||||
type: import("vue").PropType<TColumnRender>;
|
||||
default: undefined;
|
||||
};
|
||||
dateFormat: {
|
||||
type: StringConstructor;
|
||||
default: undefined;
|
||||
};
|
||||
isShow: {
|
||||
type: import("vue").PropType<(data: any) => boolean | Promise<boolean>>;
|
||||
default: undefined;
|
||||
};
|
||||
}>>, {
|
||||
data: Record<string, any>;
|
||||
fieldType: tFieldType;
|
||||
prop: string;
|
||||
dateFormat: string;
|
||||
isShow: (data: any) => boolean | Promise<boolean>;
|
||||
render: TColumnRender;
|
||||
}>;
|
||||
UmTableOperate: import("vue").DefineComponent<{
|
||||
items: {
|
||||
type: import("vue").PropType<IOperateItem[]>;
|
||||
default: () => never[];
|
||||
};
|
||||
rowId: {
|
||||
type: import("vue").PropType<string | number>;
|
||||
default: string;
|
||||
};
|
||||
rowData: {
|
||||
type: import("vue").PropType<any>;
|
||||
default: () => {};
|
||||
};
|
||||
}, unknown, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
||||
items: {
|
||||
type: import("vue").PropType<IOperateItem[]>;
|
||||
default: () => never[];
|
||||
};
|
||||
rowId: {
|
||||
type: import("vue").PropType<string | number>;
|
||||
default: string;
|
||||
};
|
||||
rowData: {
|
||||
type: import("vue").PropType<any>;
|
||||
default: () => {};
|
||||
};
|
||||
}>>, {
|
||||
items: IOperateItem[];
|
||||
rowId: string | number;
|
||||
rowData: any;
|
||||
}>;
|
||||
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
||||
type: {
|
||||
type: null;
|
||||
required: false;
|
||||
};
|
||||
fieldType: {
|
||||
type: null;
|
||||
required: false;
|
||||
default: string;
|
||||
};
|
||||
prop: {
|
||||
type: StringConstructor;
|
||||
required: false;
|
||||
default: string;
|
||||
};
|
||||
label: {
|
||||
type: StringConstructor;
|
||||
required: false;
|
||||
};
|
||||
width: {
|
||||
type: (NumberConstructor | StringConstructor)[];
|
||||
required: false;
|
||||
default: number;
|
||||
};
|
||||
minWidth: {
|
||||
type: (NumberConstructor | StringConstructor)[];
|
||||
required: false;
|
||||
};
|
||||
showOverflowTooltip: {
|
||||
type: BooleanConstructor;
|
||||
required: false;
|
||||
};
|
||||
operateItems: {
|
||||
type: ArrayConstructor;
|
||||
required: false;
|
||||
default: () => never[];
|
||||
};
|
||||
expandTemplate: {
|
||||
type: null;
|
||||
required: false;
|
||||
};
|
||||
columnRender: {
|
||||
type: null;
|
||||
required: false;
|
||||
};
|
||||
dateFormat: {
|
||||
type: StringConstructor;
|
||||
required: false;
|
||||
};
|
||||
isShow: {
|
||||
type: FunctionConstructor;
|
||||
required: false;
|
||||
};
|
||||
}>>, {
|
||||
width: string | number;
|
||||
fieldType: any;
|
||||
prop: string;
|
||||
showOverflowTooltip: boolean;
|
||||
operateItems: unknown[];
|
||||
}>;
|
||||
export default _sfc_main;
|
||||
Vendored
+58
@@ -0,0 +1,58 @@
|
||||
import type { PropType } from "vue";
|
||||
declare const _sfc_main: import("vue").DefineComponent<{
|
||||
modelValue: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
title: {
|
||||
type: StringConstructor;
|
||||
default: string;
|
||||
};
|
||||
/** 弹窗内容,可以是 VNode、字符串或组件 */
|
||||
content: {
|
||||
type: PropType<any>;
|
||||
default: null;
|
||||
};
|
||||
width: {
|
||||
type: (NumberConstructor | StringConstructor)[];
|
||||
default: number;
|
||||
};
|
||||
/** 是否显示默认的取消/确定 footer */
|
||||
footer: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
}, unknown, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("update:modelValue" | "ok")[], "update:modelValue" | "ok", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
||||
modelValue: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
title: {
|
||||
type: StringConstructor;
|
||||
default: string;
|
||||
};
|
||||
/** 弹窗内容,可以是 VNode、字符串或组件 */
|
||||
content: {
|
||||
type: PropType<any>;
|
||||
default: null;
|
||||
};
|
||||
width: {
|
||||
type: (NumberConstructor | StringConstructor)[];
|
||||
default: number;
|
||||
};
|
||||
/** 是否显示默认的取消/确定 footer */
|
||||
footer: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
}>> & {
|
||||
onOk?: ((...args: any[]) => any) | undefined;
|
||||
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
||||
}, {
|
||||
footer: boolean;
|
||||
title: string;
|
||||
width: string | number;
|
||||
modelValue: boolean;
|
||||
content: any;
|
||||
}>;
|
||||
export default _sfc_main;
|
||||
Vendored
+99
@@ -0,0 +1,99 @@
|
||||
import type { IFormRule, IFieldMetaValue } from "./types";
|
||||
declare const _sfc_main: import("vue").DefineComponent<{}, {
|
||||
formModel: import("vue").Ref<{
|
||||
[x: string]: any;
|
||||
}>;
|
||||
setFormModel: (models: any) => void;
|
||||
}, {
|
||||
rules: Record<string, any>;
|
||||
formItems: any[];
|
||||
fieldOption: Map<string, any>;
|
||||
/** label 默认宽度 */
|
||||
maxLabelWidth: number;
|
||||
/** 当前需要显示的字段 */
|
||||
showList: string[];
|
||||
/** 级联关系:改 A 字段要刷新它的 cascadeFiled 列表 */
|
||||
cascadeMap: Map<string, string[]>;
|
||||
/** 表单刷新按 100ms 合并,避免连续输入时反复重建整个表单 */
|
||||
throttleRefreshForm: import("lodash").DebouncedFunc<(this: any, v: any, oldV: any, needFreshCascadeField: string[]) => Promise<void>>;
|
||||
}, {
|
||||
formCom(): import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}> | null;
|
||||
}, {
|
||||
refreshForm(v: any, oldV: any, needFreshCascadeField: string[]): Promise<void | undefined>;
|
||||
onSubmit(): Promise<void>;
|
||||
/** 把 `IFormRule` 翻译成 element-plus 的 FormItemRule */
|
||||
getRule(rule: IFormRule): {
|
||||
required: boolean;
|
||||
message: string | undefined;
|
||||
pattern?: undefined;
|
||||
min?: undefined;
|
||||
max?: undefined;
|
||||
validator?: undefined;
|
||||
} | {
|
||||
pattern: RegExp;
|
||||
message: string;
|
||||
required?: undefined;
|
||||
min?: undefined;
|
||||
max?: undefined;
|
||||
validator?: undefined;
|
||||
} | {
|
||||
min: number | undefined;
|
||||
max: number | undefined;
|
||||
message: string;
|
||||
required?: undefined;
|
||||
pattern?: undefined;
|
||||
validator?: undefined;
|
||||
} | {
|
||||
max: number | undefined;
|
||||
message: string;
|
||||
required?: undefined;
|
||||
pattern?: undefined;
|
||||
min?: undefined;
|
||||
validator?: undefined;
|
||||
} | {
|
||||
min: number | undefined;
|
||||
message: string;
|
||||
required?: undefined;
|
||||
pattern?: undefined;
|
||||
max?: undefined;
|
||||
validator?: undefined;
|
||||
} | {
|
||||
validator: any;
|
||||
required?: undefined;
|
||||
message?: undefined;
|
||||
pattern?: undefined;
|
||||
min?: undefined;
|
||||
max?: undefined;
|
||||
} | {
|
||||
required?: undefined;
|
||||
message?: undefined;
|
||||
pattern?: undefined;
|
||||
min?: undefined;
|
||||
max?: undefined;
|
||||
validator?: undefined;
|
||||
} | undefined;
|
||||
/** 取回字段的候选数据(下拉 / 树),并在需要时重置级联字段的值 */
|
||||
updateFieldOption(fieldName: string, metaData: IFieldMetaValue, isBeforeMount?: boolean): Promise<void>;
|
||||
/**
|
||||
* 初始化需要显示的字段。
|
||||
* 隐藏的字段会把当前值暂存到 `$ref:<field>` 并置空,重新显示时还原。
|
||||
*/
|
||||
initShowFieldList(v: any, oldV?: any): Promise<void>;
|
||||
/** 刷新级联字段的候选数据 */
|
||||
initCascadeData(needFreshCascadeField: string[]): Promise<void>;
|
||||
/** 首次进入时把所有字段的候选数据取回来 */
|
||||
initData(): Promise<void>;
|
||||
initFormItem(): void;
|
||||
/** 根据字段元数据计算校验规则、初始化表单值、并算出最宽的 label */
|
||||
initRule(isBeforeMount?: boolean): void;
|
||||
init(): Promise<void>;
|
||||
/** 单字段赋值:整体替换对象,触发父层的 formModel watch */
|
||||
initForm(fieldName: string, value: any): void;
|
||||
}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("ok" | "cancel" | "formModelChange")[], "ok" | "cancel" | "formModelChange", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>> & {
|
||||
onOk?: ((...args: any[]) => any) | undefined;
|
||||
onCancel?: ((...args: any[]) => any) | undefined;
|
||||
onFormModelChange?: ((...args: any[]) => any) | undefined;
|
||||
}, {}>;
|
||||
export default _sfc_main;
|
||||
Vendored
+34
@@ -0,0 +1,34 @@
|
||||
declare const _sfc_main: import("vue").DefineComponent<{
|
||||
modelValue: {
|
||||
type: StringConstructor;
|
||||
required: true;
|
||||
};
|
||||
accept: {
|
||||
type: StringConstructor;
|
||||
required: false;
|
||||
default: string;
|
||||
};
|
||||
}, {
|
||||
props: any;
|
||||
emit: (n: "update:modelValue", url: string) => void;
|
||||
imageUrl: import("vue").Ref<string | undefined>;
|
||||
handleAvatarSuccess: (res: any, file: any) => void;
|
||||
beforeAvatarUpload: (file: any) => boolean;
|
||||
onHttpRequest: (option: any) => Promise<void>;
|
||||
Plus: any;
|
||||
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:modelValue"[], "update:modelValue", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
||||
modelValue: {
|
||||
type: StringConstructor;
|
||||
required: true;
|
||||
};
|
||||
accept: {
|
||||
type: StringConstructor;
|
||||
required: false;
|
||||
default: string;
|
||||
};
|
||||
}>> & {
|
||||
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
||||
}, {
|
||||
accept: string;
|
||||
}>;
|
||||
export default _sfc_main;
|
||||
Vendored
+40
@@ -0,0 +1,40 @@
|
||||
import type { PropType } from "vue";
|
||||
import type { IOperateItem } from "./types";
|
||||
declare const _sfc_main: import("vue").DefineComponent<{
|
||||
/** 操作按钮描述 */
|
||||
items: {
|
||||
type: PropType<IOperateItem[]>;
|
||||
default: () => never[];
|
||||
};
|
||||
/** 当前行的 id */
|
||||
rowId: {
|
||||
type: PropType<string | number>;
|
||||
default: string;
|
||||
};
|
||||
/** 当前行的完整数据 */
|
||||
rowData: {
|
||||
type: PropType<any>;
|
||||
default: () => {};
|
||||
};
|
||||
}, unknown, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
||||
/** 操作按钮描述 */
|
||||
items: {
|
||||
type: PropType<IOperateItem[]>;
|
||||
default: () => never[];
|
||||
};
|
||||
/** 当前行的 id */
|
||||
rowId: {
|
||||
type: PropType<string | number>;
|
||||
default: string;
|
||||
};
|
||||
/** 当前行的完整数据 */
|
||||
rowData: {
|
||||
type: PropType<any>;
|
||||
default: () => {};
|
||||
};
|
||||
}>>, {
|
||||
items: IOperateItem[];
|
||||
rowId: string | number;
|
||||
rowData: any;
|
||||
}>;
|
||||
export default _sfc_main;
|
||||
Vendored
+18
@@ -0,0 +1,18 @@
|
||||
import type { IToolbar, TEvent } from "./types";
|
||||
declare const _sfc_main: import("vue").DefineComponent<{
|
||||
data: IToolbar[];
|
||||
events: TEvent[];
|
||||
selection: any[];
|
||||
otherParams: any;
|
||||
searchParams: any;
|
||||
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, import("vue").EmitsOptions, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<{
|
||||
data: IToolbar[];
|
||||
events: TEvent[];
|
||||
selection: any[];
|
||||
otherParams: any;
|
||||
searchParams: any;
|
||||
}>, {
|
||||
otherParams: any;
|
||||
searchParams: any;
|
||||
}>;
|
||||
export default _sfc_main;
|
||||
Vendored
+80
@@ -0,0 +1,80 @@
|
||||
import type { VNode } from "vue";
|
||||
import type { IToolbar, TDecoratorKey, TEvent, TOperateType } from "../types";
|
||||
import { type IEventTask, type TFireHook } from "./events";
|
||||
/**
|
||||
* 列 / 操作列 / 工具栏的装配逻辑。
|
||||
*
|
||||
* 改造前这段"扫描类元数据 -> 拼 h() 节点 -> 造事件闭包"的代码
|
||||
* 全写在 UmByClass.vue 的 render() 里(200+ 行),
|
||||
* 每次渲染都要重建一遍,且无法复用、无法单测。这里抽成纯函数。
|
||||
*/
|
||||
/** 收集数据列 VNode(按 sort 升序) */
|
||||
export declare const collectDataColumns: (target: any) => VNode[];
|
||||
/** 操作列分组:同一 id(缺省用 type)的多个方法会聚合到同一个按钮上 */
|
||||
export interface IOperateGroup {
|
||||
type: TOperateType;
|
||||
sort: number;
|
||||
title?: any;
|
||||
isShow?: (rowData: any) => boolean;
|
||||
tasks: IEventTask[];
|
||||
}
|
||||
/**
|
||||
* 按 id(缺省用 type)聚合操作列配置。
|
||||
*
|
||||
* 说明:`@TableColumnMethodDecorator` 允许给多个方法配同一个 `type`,
|
||||
* 分别声明 `es: "onBefore" / "onNow" / "onAfter"`,运行时串成一条链,
|
||||
* 从而做到"先取详情 -> 再弹窗 -> 最后提交"。
|
||||
*/
|
||||
export declare const collectOperateGroups: (target: any) => IOperateGroup[];
|
||||
/**
|
||||
* 是否需要渲染操作列。
|
||||
*
|
||||
* 原判断:`(operates.length > 0 && !targetInstance.isShowOperate) || targetInstance?.isShowOperate?.()`
|
||||
* - 存在操作按钮但 `isShowOperate()` 返回 false 时,因为 `!undefined` 为真仍会渲染出空操作列;
|
||||
* - 没有操作按钮但 `isShowOperate()` 返回 true 时会渲染出一个空列。
|
||||
* 这里改成明确的语义:有按钮 && (未配置 isShowOperate 或其为真)。
|
||||
*/
|
||||
export declare const resolveShowOperate: (target: any, hasOperate: boolean) => boolean;
|
||||
/** 解析操作列宽度(支持实例属性与类静态属性两种写法) */
|
||||
export declare const resolveOperateWidth: (target: any, fallback?: number | string) => number | string;
|
||||
export interface IBuildOperateColumnOptions {
|
||||
fire: TFireHook;
|
||||
/** 透传给操作事件的行数据集合 */
|
||||
tableData?: any[];
|
||||
width?: number | string;
|
||||
/** 需要延后执行 onAfter 的按钮类型,见 IDeferOptions */
|
||||
deferAfterTypes?: string[];
|
||||
}
|
||||
/**
|
||||
* 默认的"弹窗确认型"按钮类型。
|
||||
*
|
||||
* 这些按钮的 `onAfter` 会被摘出主事件链,由组件在弹窗给出结果后补跑。
|
||||
* 单独抽成常量是为了让配置体检(`./diagnose`)和组件用同一份清单判断
|
||||
* "这个按钮是不是应该有 onAfter" —— 两边各写一份字符串迟早会对不上。
|
||||
*/
|
||||
export declare const DEFAULT_DEFER_TYPES: string[];
|
||||
/** 生成操作列 VNode;没有操作按钮时返回 null */
|
||||
export declare const buildOperateColumn: (groups: IOperateGroup[], options: IBuildOperateColumnOptions) => VNode | null;
|
||||
/** 工具栏收集结果 */
|
||||
export interface IToolbarCollectResult {
|
||||
toolbars: IToolbar[];
|
||||
events: TEvent[];
|
||||
}
|
||||
/**
|
||||
* 收集某个装饰器下、指定 `type` 的全部方法,按优先级降序返回。
|
||||
*
|
||||
* 用于"弹窗确定后补跑 onAfter"这类只需要部分阶段的场景:
|
||||
* 同一个按钮的多个方法(不同 `es`)都要收进来,但只执行其中某几个阶段。
|
||||
*/
|
||||
export declare const collectTypedTasks: (target: any, decoratorKey: TDecoratorKey, type: string) => IEventTask[];
|
||||
/**
|
||||
* 收集工具栏按钮与对应事件。
|
||||
*
|
||||
* 关于 `rerunOnAfterFalsy`:原实现靠它实现"弹窗被取消 / 接口失败后重来一轮",
|
||||
* 但事件链在 onAfter 返回假值时会用 `i -= 2` 回到第一阶段,若业务方法持续返回假值
|
||||
* 就会把弹窗反复重开。改造后弹窗改为"挂起事件链、确认后再继续"(见 deferAfterTypes),
|
||||
* 不再需要这个重跑机制,这里默认关闭,只在显式要求时启用。
|
||||
*/
|
||||
export declare const collectToolbar: (target: any, fire: TFireHook, options?: {
|
||||
deferAfterTypes?: string[];
|
||||
}) => IToolbarCollectResult;
|
||||
Vendored
+45
@@ -0,0 +1,45 @@
|
||||
/**
|
||||
* 配置体检。
|
||||
*
|
||||
* 装饰器驱动这套写法的最大代价是"错误是静默的":字符串写错、装饰器挂错位置、
|
||||
* 少写一个阶段,编译不报错、运行也不抛异常,只是功能没生效。使用方看到的现象
|
||||
* 永远是"点了没反应",然后去找组件的 bug —— 而问题在他的配置类里。
|
||||
*
|
||||
* 这个模块把常见的配置失误在组件挂载时一次性报出来,让静默的失败变成一条
|
||||
* 指得出位置的警告。它只读元数据、不改行为,报错也不阻断渲染。
|
||||
*/
|
||||
export type TDiagnosticLevel = "error" | "warn";
|
||||
export interface IDiagnostic {
|
||||
level: TDiagnosticLevel;
|
||||
/** 规则名,便于单测断言与按需忽略 */
|
||||
code: string;
|
||||
/** 出问题的成员(属性名 / 方法名 / 按钮类型),用于定位 */
|
||||
member?: string;
|
||||
/** 一句话结论 */
|
||||
message: string;
|
||||
/** 具体怎么改 */
|
||||
hint?: string;
|
||||
}
|
||||
export interface IDiagnoseOptions {
|
||||
/**
|
||||
* 需要"弹窗确认后才提交"的按钮类型,缺省用 `DEFAULT_DEFER_TYPES`。
|
||||
* 传了就以传入的为准(组件会把自己的 `defer-after-types` 传进来)。
|
||||
*/
|
||||
deferAfterTypes?: string[];
|
||||
/** 是否要求存在 `getList`(`UmByClassEnhance` 场景传 true) */
|
||||
requireGetList?: boolean;
|
||||
}
|
||||
/**
|
||||
* 检查一个配置类,返回全部发现的问题(按 error -> warn、再按成员名排序)。
|
||||
* 只读,不产生任何副作用。
|
||||
*/
|
||||
export declare const diagnoseTarget: (target: any, options?: IDiagnoseOptions) => IDiagnostic[];
|
||||
export declare const setDiagnosticsEnabled: (enabled: boolean) => void;
|
||||
export declare const isDiagnosticsEnabled: () => boolean;
|
||||
export interface IReportOptions extends IDiagnoseOptions {
|
||||
/** 本次是否上报(组件会把 `:diagnose="false"` 传进来) */
|
||||
enabled?: boolean;
|
||||
}
|
||||
/** 把诊断结果打到控制台,并原样返回,便于使用方自行处理 */
|
||||
export declare const reportDiagnostics: (target: any, options?: IReportOptions) => IDiagnostic[];
|
||||
export declare const reportDiagnosticsOnce: (target: any, options?: IReportOptions) => IDiagnostic[];
|
||||
Vendored
+68
@@ -0,0 +1,68 @@
|
||||
import type { TExecutionSequence, TMethodMetaValue } from "../types";
|
||||
/**
|
||||
* 事件链执行器。
|
||||
*
|
||||
* 改造前"按 priority 排序 -> 按 es 分阶段 -> 依次 await"这套逻辑
|
||||
* 在 UmByClass(操作列 / 工具栏)和 UmByClassEnhance(弹窗确认)里被复制了 3 份,
|
||||
* 参数顺序、是否透传行数据、是否支持重跑都各不相同。这里统一。
|
||||
*/
|
||||
/** 一个待执行的事件 */
|
||||
export interface IEventTask {
|
||||
event: (...args: any[]) => any;
|
||||
meta: TMethodMetaValue;
|
||||
}
|
||||
/** 阶段顺序 */
|
||||
export declare const EVENT_PHASES: TExecutionSequence[];
|
||||
/** 按优先级排序(数字越大越先执行),不修改入参数组 */
|
||||
export declare const sortTasksByPriority: (tasks: IEventTask[]) => IEventTask[];
|
||||
/**
|
||||
* 阶段之间的钩子,把控制权交回业务组件(弹窗、消息提示等都挂在这里)。
|
||||
* - `data`:当前累积的数据
|
||||
* - `type`:按钮类型("添加" / "edit" / "del" / "批量删除" ...),业务侧据此分支
|
||||
* - `phase`:当前阶段
|
||||
* - `meta`:该阶段第一个事件的元数据
|
||||
* @returns 处理后的数据,作为下一阶段的输入
|
||||
*/
|
||||
export type TFireHook = (data: any, type: string, phase: TExecutionSequence, meta?: TMethodMetaValue) => Promise<any> | any;
|
||||
export interface IRunEventPipelineOptions {
|
||||
tasks: IEventTask[];
|
||||
/** 原始入参,恒作为每个事件的第一个参数 */
|
||||
rowId: any;
|
||||
/**
|
||||
* "当前数据"(第二个参数,也是 fire 钩子拿到的 `data`)的初始值,
|
||||
* 缺省等于 `rowId`。
|
||||
*
|
||||
* 操作列会把整行数据作为初始值传进来:行数据通常已经是完整的,
|
||||
* 组件不应该强迫使用方再写一个 `es: "onBefore"` 的方法去查一遍详情,
|
||||
* 否则一旦漏写,`edit` 拿到的就只有一个行 id,表单会静默变成空的。
|
||||
*/
|
||||
initial?: any;
|
||||
/** 按钮类型,透传给 fire 钩子 */
|
||||
type: string;
|
||||
/** 阶段间的钩子 */
|
||||
fire: TFireHook;
|
||||
/** 透传给事件的额外参数(如整表数据) */
|
||||
extra?: any[];
|
||||
/**
|
||||
* 只执行指定阶段(默认按 onBefore -> onNow -> onAfter 全跑)。
|
||||
* 弹窗"确定"时只需要补跑 onAfter,用这个参数收窄。
|
||||
*/
|
||||
phases?: TExecutionSequence[];
|
||||
/**
|
||||
* onAfter 返回假值时是否回到第一阶段重跑。
|
||||
* 原 UmByClass 工具栏分支用 `i -= 2` 实现,一旦事件始终返回假值会死循环卡死页面,
|
||||
* 这里保留该行为但加上最大重跑次数保护。
|
||||
*/
|
||||
rerunOnAfterFalsy?: boolean;
|
||||
maxRerun?: number;
|
||||
}
|
||||
/**
|
||||
* 依次执行 onBefore -> onNow -> onAfter。
|
||||
*
|
||||
* 事件签名固定为 `(rowId, currentData, meta, ...extra)`:
|
||||
* - `rowId`:原始入参(行 id / 选中项),恒定不变;
|
||||
* - `currentData`:上一个事件的返回值,同阶段多个事件形成"责任链";
|
||||
* - `meta`:该事件的元数据;
|
||||
* - `...extra`:组件透传的额外数据(如整表数据)。
|
||||
*/
|
||||
export declare function runEventPipeline(options: IRunEventPipelineOptions): Promise<any>;
|
||||
Vendored
+8
@@ -0,0 +1,8 @@
|
||||
/**
|
||||
* UmTable 组件族的内核:类元数据读取 / 事件链执行 / 列装配 / 配置体检。
|
||||
* 供有定制需求的使用方复用,无需重复实现反射扫描逻辑。
|
||||
*/
|
||||
export * from "./meta";
|
||||
export * from "./events";
|
||||
export * from "./columns";
|
||||
export * from "./diagnose";
|
||||
Vendored
+73
@@ -0,0 +1,73 @@
|
||||
import type { TDecoratorKey } from "../types";
|
||||
/**
|
||||
* 类元数据访问层。
|
||||
*
|
||||
* 改造前,"实例化 target -> for...in 遍历 -> Reflect.getMetadata"
|
||||
* 这套逻辑在 UmByClass / UmByClassEnhance / UmSearchForm / UmSearchFormEnhance /
|
||||
* UmTableForm 里被复制了 8 次,每次细节还都略有出入(有的漏了 hasOwnProperty 判断,
|
||||
* 有的用归一化名查、有的用原始名查),导致同一份配置在不同组件里表现不一致。
|
||||
*
|
||||
* 这里收口成唯一实现。
|
||||
*/
|
||||
/** 类实例上的一个成员 */
|
||||
export interface IClassMember {
|
||||
/** 类上的原始属性名(可能带 `_` 前缀) */
|
||||
key: string;
|
||||
/** 归一化名称:去掉 `_` 前缀,与后端字段名一致 */
|
||||
fieldName: string;
|
||||
/** 成员的值 */
|
||||
value: any;
|
||||
/** 是否为函数成员 */
|
||||
isMethod: boolean;
|
||||
}
|
||||
/** 带元数据的成员 */
|
||||
export type IDecoratedMember<M> = IClassMember & {
|
||||
meta: M;
|
||||
};
|
||||
/** 去掉 `_` 前缀:`_foo` -> `foo` */
|
||||
export declare const normalizeFieldName: (key: string) => string;
|
||||
/**
|
||||
* 构造实例,用于读取"实例字段"上的装饰器元数据。
|
||||
* target 为空或不是构造函数时返回原值 / 空对象,避免抛错。
|
||||
*/
|
||||
export declare const createTargetInstance: (target: any) => any;
|
||||
/**
|
||||
* 收集类实例上的全部成员(含原型链上的方法)。
|
||||
*
|
||||
* 为什么要扫原型链:当 `useDefineForClassFields = false` 时,
|
||||
* 无初始值的字段(如 `birthday: any;`)不会出现在实例上,
|
||||
* 只靠 `for...in` 会漏掉这些字段对应的列。
|
||||
*/
|
||||
export declare const collectClassMembers: (target: any) => IClassMember[];
|
||||
/**
|
||||
* 读取某个成员上的装饰器元数据。
|
||||
* 先按归一化名查,再按原始名查,兼容两种书写习惯。
|
||||
*/
|
||||
export declare const getMemberMeta: <M>(target: any, decoratorKey: TDecoratorKey, member: Pick<IClassMember, "key" | "fieldName">) => M | undefined;
|
||||
/**
|
||||
* 扫描出所有挂载了指定装饰器元数据的成员。
|
||||
* @param options.methods 是否是方法成员(默认 false,即取普通字段)
|
||||
*/
|
||||
export declare const scanDecoratedMembers: <M>(target: any, decoratorKey: TDecoratorKey, options?: {
|
||||
methods?: boolean;
|
||||
}) => IDecoratedMember<M>[];
|
||||
/**
|
||||
* 在"接口原始数据"与"表单展示数据"之间做双向字段转换。
|
||||
*
|
||||
* 约定:类上用 `_field` 存原始值,再通过 getter/setter `field` 暴露格式化后的值
|
||||
* (金额、日期、字典等)。原实现把这段转换在 UmByClassEnhance 里写了两遍
|
||||
* (打开弹窗时一遍、提交时一遍),且两遍取的属性名还不一致(一处取 `field`、
|
||||
* 一处取 `_field`),行为难以预期。这里统一为单一实现:
|
||||
* - `in` :接口原始值 -> 表单展示值(走 getter)
|
||||
* - `out`:表单展示值 -> 接口原始值(走 `_field`)
|
||||
*
|
||||
* @returns 转换后的同一份 data(便于链式调用)
|
||||
*/
|
||||
export declare const transformFields: (target: any, data: any, direction: "in" | "out") => any;
|
||||
/**
|
||||
* 按类型取出某个方法元数据(早退版本,避免每次全量扫描后才 return)
|
||||
*/
|
||||
export declare const findMethodMeta: (target: any, decoratorKey: TDecoratorKey, type: string) => {
|
||||
meta: any;
|
||||
member: IDecoratedMember<any>;
|
||||
} | null;
|
||||
Vendored
+31
@@ -0,0 +1,31 @@
|
||||
import type { IFieldMetaValue, IMethodMetaValue, TDecoratorKey } from "./types";
|
||||
/**
|
||||
* UmTable 装饰器集合。
|
||||
*
|
||||
* 与改造前的差异:
|
||||
* 1. 类型改为从 `./types` 导入(原来从 `./UmTable` 导入,指向一个不存在的模块);
|
||||
* 2. 装饰器改为"柯里化后先冻结默认值再返回"的写法,避免同一个 meta 对象被多次
|
||||
* 装饰器调用共享时被反复改写(原实现对入参做 `value.width = 100` 的原地修改);
|
||||
* 3. `TableColumnMethodDecorator` 只在未显式传入时补默认值,语义不变。
|
||||
*/
|
||||
/**
|
||||
* 数据列属性装饰器
|
||||
*/
|
||||
export declare const TableColumnPropertyDecorator: (value: IFieldMetaValue) => (target: any, propertyKey: string) => void;
|
||||
/**
|
||||
* 属性装饰器(增删改查表单)
|
||||
*/
|
||||
export declare const TableFormColumnPropertyDecorator: (value: IFieldMetaValue) => (target: any, propertyKey: string) => void;
|
||||
/**
|
||||
* 属性装饰器(查询表单)
|
||||
*/
|
||||
export declare const TableSearchFormPropertyDecorator: (value: IFieldMetaValue) => (target: any, propertyKey: string) => void;
|
||||
/**
|
||||
* 方法装饰器(操作列 / 工具栏 / 查询方法)
|
||||
*/
|
||||
export declare const TableColumnMethodDecorator: ({ key, value, }: {
|
||||
key?: TDecoratorKey | undefined;
|
||||
value: IMethodMetaValue;
|
||||
}) => (target: any, propertyKey: string) => void;
|
||||
export * from "./types";
|
||||
export * from "./core";
|
||||
Vendored
+179
@@ -0,0 +1,179 @@
|
||||
import type { Component, VNode } from "vue";
|
||||
/**
|
||||
* UmTable 组件族的全部类型定义(唯一来源)。
|
||||
*
|
||||
* 改造前这些类型分散在两个文件里:
|
||||
* - `src/types/UmTable.d.ts`
|
||||
* - `src/components/UmTable/UmTable.d.ts`
|
||||
* 两者内容 90% 重复,而且都是"带 import 的模块文件 + 未 export 的 declare",
|
||||
* 结果是 `import { TFieldMetaValue } from "./UmTable"` 这类写法在类型层面解析不到,
|
||||
* 打包后 dist 里的 `UmTable/index.d.ts` 引用了一个不存在的模块 —— 对外类型是坏的。
|
||||
*
|
||||
* 现在统一到这里,全部显式 export。
|
||||
*/
|
||||
/** 数据列类型 */
|
||||
export type TColumnType = "selection" | "index" | "expand" | "operate";
|
||||
/** 兼容历史命名 */
|
||||
export type columnType = TColumnType;
|
||||
/** 操作列按钮类型 */
|
||||
export type TOperateType = "edit" | "del" | "copy" | "customOperateEvent";
|
||||
/**
|
||||
* 字段(单元格 / 表单控件)数据类型
|
||||
*/
|
||||
export type tFieldType = "date" | "default" | "upload" | "primaryKey" | "treeSelect" | "areaTreeSelect" | "select" | "switch" | "boolean" | "img" | "pickerMapGps" | "pickerMapGpsRange" | "ip" | "port" | "string" | "textarea" | "input" | "password" | "custom" | "number" | "dateRange";
|
||||
/** 工具栏按钮类型 */
|
||||
export type TToolbar = "添加" | "导入模板" | "导入" | "导出" | "批量删除" | "自定义";
|
||||
/** 查询方法类型 */
|
||||
export type TSearch = "getList";
|
||||
/**
|
||||
* 事件执行顺序
|
||||
*/
|
||||
export type TExecutionSequence = "onBefore" | "onNow" | "onAfter";
|
||||
/** 校验规则类型 */
|
||||
export type TFormRuleType = "require" | "requireString" | "idNumber" | "phone" | "regexp" | "ip" | "port" | "len" | "validator";
|
||||
/** 查询表单可用的控件类型 */
|
||||
export type TFormComponent = "date-picker" | "input" | "textarea" | "dateTime-picker" | "color-picker" | "cascader" | "checkbox" | "input-number" | "radio" | "rate" | "select" | "slider" | "switch" | "time-picker" | "time-select";
|
||||
/** 装饰器元数据 key */
|
||||
export type TDecoratorKey = "table:field" | "table:operate" | "table:toolbar" | "table:VNode" | "table:formField" | "table:searchFormField" | "table:searchFormMethod";
|
||||
/** 可能返回 Promise 的值 */
|
||||
export type MaybePromise<T> = T | Promise<T>;
|
||||
/** 工具栏按钮配置 */
|
||||
export interface IToolbar {
|
||||
/** 工具按钮类型 */
|
||||
type: TToolbar;
|
||||
/** 工具按钮图示 */
|
||||
icon?: string | VNode;
|
||||
/** 功能按钮自定义名称 */
|
||||
title?: string;
|
||||
}
|
||||
/** 事件回调(工具栏 / 操作列) */
|
||||
export type TEvent = (selection?: any[]) => void;
|
||||
/** 表单校验规则 */
|
||||
export interface IFormRule {
|
||||
type?: TFormRuleType;
|
||||
message?: string;
|
||||
pattern?: RegExp;
|
||||
max?: number;
|
||||
min?: number;
|
||||
validator?: any;
|
||||
}
|
||||
/**
|
||||
* 单元格自定义渲染函数
|
||||
* @param value 列的值
|
||||
* @param fieldName 列的字段名
|
||||
* @param rowData 列所在行的数据
|
||||
*/
|
||||
export type TColumnRender = (value: any, fieldName: string, rowData: any) => any;
|
||||
/**
|
||||
* 字段元数据(`@TableColumnPropertyDecorator` / `@TableFormColumnPropertyDecorator`
|
||||
* / `@TableSearchFormPropertyDecorator` 的入参)
|
||||
*/
|
||||
export interface IFieldMetaValue {
|
||||
lang?: string;
|
||||
/** 字段中文名(列头 / 表单 label) */
|
||||
def: string;
|
||||
fieldType?: tFieldType;
|
||||
/** 表单校验规则 */
|
||||
rule?: IFormRule | IFormRule[];
|
||||
/** 字段名称(查询表单场景下用于覆盖属性名) */
|
||||
fieldName?: string;
|
||||
width?: number;
|
||||
minWidth?: number;
|
||||
/** 用于初始化组件数据(级联数据的来源) */
|
||||
getData?: (currentData?: any) => MaybePromise<any>;
|
||||
/** 查询表单中所需要的组件类型 */
|
||||
$um_component?: TFormComponent;
|
||||
/** 页面中对相同类型字段的区分标志 */
|
||||
$um_index?: number;
|
||||
/** 自定义表单组件 */
|
||||
component?: Component | any;
|
||||
style?: any;
|
||||
/** 列排序,数字越小越靠前 */
|
||||
sort?: number;
|
||||
/** 数据列自定义渲染函数 */
|
||||
columnRender?: TColumnRender;
|
||||
/** 输入字符最长长度 */
|
||||
maxlength?: number;
|
||||
/** 输入字符最短长度 */
|
||||
minlength?: number;
|
||||
/** 占位字符 */
|
||||
placeholder?: string;
|
||||
/** 当内容过长被隐藏时显示 tooltip */
|
||||
showOverflowTooltip?: boolean;
|
||||
/**
|
||||
* 日期格式化模板,仅 `fieldType: "date"` 生效。
|
||||
* 不传时保持历史行为(YYYY-MM-DD HH:mm:ss)。
|
||||
*/
|
||||
dateFormat?: string;
|
||||
/** 禁用状态 */
|
||||
disabled?: boolean;
|
||||
/** 判断是否需要禁用 */
|
||||
isDisabled?: (rowData: any) => boolean;
|
||||
/** 是否显示该字段(支持异步) */
|
||||
isShow?: (data: any) => MaybePromise<boolean>;
|
||||
/** 是否为级联字段 */
|
||||
isCascade?: boolean;
|
||||
/** 联动触发的关联字段 */
|
||||
cascadeFiled?: string[];
|
||||
}
|
||||
/** 兼容历史命名 */
|
||||
export type TFieldMetaValue = IFieldMetaValue;
|
||||
/**
|
||||
* 方法元数据(`@TableColumnMethodDecorator` 的入参)
|
||||
*/
|
||||
export interface IMethodMetaValue {
|
||||
/** 唯一标识,用于把多个方法聚合到同一个操作按钮上 */
|
||||
id?: any;
|
||||
/** 按钮 / 事件类型 */
|
||||
type: TOperateType | TToolbar | TSearch;
|
||||
/** 执行阶段,默认 onNow */
|
||||
es?: TExecutionSequence;
|
||||
/** 同一阶段内的执行优先级,数字越大越先执行,默认 1 */
|
||||
priority?: number;
|
||||
icon?: string | VNode;
|
||||
dialogContent?: VNode | string | any;
|
||||
dialogTitle?: VNode | string | any;
|
||||
dialogWidth?: number;
|
||||
/** 弹窗表单使用的类(默认复用表格的 target) */
|
||||
dialogTarget?: any;
|
||||
title?: string;
|
||||
/**
|
||||
* 按钮排序(数字越小越靠前)。
|
||||
* 改造前声明为必填 `sort: number`,但实际用法几乎都不传,
|
||||
* 类型与实际不符,这里改为可选。
|
||||
*/
|
||||
sort?: number;
|
||||
/** 控制操作栏 / 工具栏按钮是否显示(不支持异步) */
|
||||
isShow?: (rowData: any) => boolean;
|
||||
/** 获取依赖数据 */
|
||||
getData?: () => MaybePromise<any>;
|
||||
}
|
||||
/** 兼容历史命名 */
|
||||
export type TMethodMetaValue = IMethodMetaValue;
|
||||
/**
|
||||
* 单个操作按钮的运行时描述(供 UmTableOperate 渲染)
|
||||
*
|
||||
* 改造前 UmTableOperate 接收 4 个靠下标对齐的并行数组
|
||||
* (data / titles / renders / events),再靠 mapIndex 反查,
|
||||
* 任一处顺序错位就会串按钮。这里改成一个自描述的对象数组。
|
||||
*/
|
||||
export interface IOperateItem {
|
||||
/** 按钮类型 */
|
||||
type: TOperateType;
|
||||
/** 按钮文案(自定义按钮必填) */
|
||||
title?: any;
|
||||
/** 是否显示该按钮 */
|
||||
isShow?: (rowData: any) => boolean;
|
||||
/**
|
||||
* 点击回调。
|
||||
* 第二个参数是当前行的完整数据 —— 事件链会把它作为"当前数据"的初始值,
|
||||
* 这样"编辑"按钮即使没有声明 `es: "onBefore"` 的取详情方法,
|
||||
* 弹窗表单也能直接用行数据回填。
|
||||
*/
|
||||
onClick: (rowId: string | number, rowData?: any) => void;
|
||||
}
|
||||
/** 数据列描述 */
|
||||
export interface IDataColumn {
|
||||
sort: number;
|
||||
vnode: VNode;
|
||||
}
|
||||
Reference in New Issue
Block a user