diff --git a/package.json b/package.json index c0334ab5..ea049992 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vxe-pc-ui", - "version": "4.2.55", + "version": "4.3.0", "description": "A vue based PC component library", "scripts": { "update": "npm install --legacy-peer-deps", @@ -63,7 +63,7 @@ "vue": "3.5.5", "vue-i18n": "^9.13.1", "vue-router": "^4.3.2", - "vxe-table": "^4.8.0" + "vxe-table": "^4.8.16" }, "vetur": { "tags": "helper/vetur/tags.json", diff --git a/packages/number-input/src/number-input.ts b/packages/number-input/src/number-input.ts index 4d1f8aed..e1ef5960 100644 --- a/packages/number-input/src/number-input.ts +++ b/packages/number-input/src/number-input.ts @@ -259,7 +259,7 @@ export default defineComponent({ } const handleChange = (val: number | null, inputValue: string, evnt: Event | { type: string }) => { - const value = XEUtils.eqNull(val) ? null : Number(val) + const value = (val as any) === '' || XEUtils.eqNull(val) ? null : Number(val) const isChange = Number(value) !== props.modelValue if (isChange) { reactData.inputValue = inputValue || '' @@ -277,7 +277,7 @@ export default defineComponent({ const emitInputEvent = (inputValue: any, evnt: Event) => { const inpImmediate = computeInpImmediate.value - const value = inputValue ? XEUtils.toNumber(inputValue) : null + const value = inputValue === '' || XEUtils.eqNull(inputValue) ? null : XEUtils.toNumber(inputValue) reactData.inputValue = inputValue if (inpImmediate) { handleChange(value, inputValue, evnt) diff --git a/packages/ui/index.ts b/packages/ui/index.ts index 3b530619..411dc7c3 100644 --- a/packages/ui/index.ts +++ b/packages/ui/index.ts @@ -109,7 +109,8 @@ setConfig({ // colon: false, validConfig: { showMessage: true, - autoPos: true + autoPos: true, + theme: 'normal' }, tooltipConfig: { enterable: true diff --git a/types/components/form.d.ts b/types/components/form.d.ts index 2d62ce16..44eb5107 100644 --- a/types/components/form.d.ts +++ b/types/components/form.d.ts @@ -69,6 +69,10 @@ export namespace VxeFormPropTypes { export type ValidConfig = { autoPos?: boolean showMessage?: boolean + /** + * 提示消息主题样式 + */ + theme?: 'normal' | 'beautify' | '' } /** diff --git a/types/components/grid.d.ts b/types/components/grid.d.ts index 5d548e38..e9b18016 100644 --- a/types/components/grid.d.ts +++ b/types/components/grid.d.ts @@ -465,6 +465,9 @@ export interface VxeGridEventProps { onRowDragstart?: VxeGridEvents.RowDragstart onRowDragover?: VxeGridEvents.RowDragover onRowDragend?: VxeGridEvents.RowDragend + onColumnDragstart?: VxeGridEvents.ColumnDragstart + onColumnDragover?: VxeGridEvents.ColumnDragover + onColumnDragend?: VxeGridEvents.ColumnDragend // grid onProxyQuery?: VxeGridEvents.ProxyQuery @@ -526,6 +529,9 @@ export interface VxeGridListeners { rowDragstart?: VxeGridEvents.RowDragstart rowDragover?: VxeGridEvents.RowDragover rowDragend?: VxeGridEvents.RowDragend + columnDragstart?: VxeGridEvents.ColumnDragstart + columnDragover?: VxeGridEvents.ColumnDragover + columnDragend?: VxeGridEvents.ColumnDragend // grid proxyQuery?: VxeGridEvents.ProxyQuery @@ -587,6 +593,9 @@ export namespace VxeGridEvents { export type RowDragstart = (params: VxeGridDefines.RowDragstartEventParams) => void export type RowDragover = (params: VxeGridDefines.RowDragoverEventParams) => void export type RowDragend = (params: VxeGridDefines.RowDragendEventParams) => void + export type ColumnDragstart = (params: VxeGridDefines.ColumnDragstartEventParams) => void + export type ColumnDragover = (params: VxeGridDefines.ColumnDragoverEventParams) => void + export type ColumnDragend = (params: VxeGridDefines.ColumnDragendEventParams) => void export type ProxyQuery = (params: VxeGridDefines.ProxyQueryEventParams) => void export type ProxyDelete = (params: VxeGridDefines.ProxyDeleteEventParams) => void diff --git a/types/components/table-plugins/extend-cell-area.d.ts b/types/components/table-plugins/extend-cell-area.d.ts index 19178369..4cb6ea64 100644 --- a/types/components/table-plugins/extend-cell-area.d.ts +++ b/types/components/table-plugins/extend-cell-area.d.ts @@ -77,12 +77,12 @@ export interface VxeTableProMethods { export type VxeProPluginMethods = VxeTableProMethods export interface VxeTableProPrivateMethods { - handleKeyboardEvent(evnt: KeyboardEvent): void - handleHeaderCellAreaEvent(evnt: KeyboardEvent, params: VxeTableDefines.HeaderCellClickEventParams): void + handleKeyboardCellAreaEvent(evnt: KeyboardEvent): void + handleHeaderCellAreaEvent(evnt: MouseEvent, params: VxeTableDefines.HeaderCellClickEventParams): void handleCellAreaEvent(evnt: MouseEvent, params: VxeTableDefines.CellClickEventParams): void handleFilterEvent(evnt: Event, params: VxeTableDefines.FilterChangeEventParams): any handleSortEvent(evnt: Event, params: VxeTableDefines.SortChangeEventParams): any - handleUpdateCellAreas(): any + handleRecalculateCellAreas(): any handleCopyCellAreaEvent(evnt: ClipboardEvent): void handlePasteCellAreaEvent(evnt: ClipboardEvent): void handleCutCellAreaEvent(evnt: ClipboardEvent): void diff --git a/types/components/table.d.ts b/types/components/table.d.ts index f51216d8..1a4cd8d1 100644 --- a/types/components/table.d.ts +++ b/types/components/table.d.ts @@ -303,6 +303,10 @@ export namespace VxeTablePropTypes { * 固定列允许设置的最大数量(如果是分组,则一个分组算一个) */ maxFixedSize?: number + /** + * 是否启用列拖拽排序 + */ + drag?: boolean /** * 每一列的自定义表头单元格数据导出方法,返回自定义的标题 */ @@ -376,19 +380,23 @@ export namespace VxeTablePropTypes { } /** - * 可拖拽配置项 + * 已废弃,被 RowDragConfig 替换 + * @deprecated */ export interface DragConfig{ /** * 自定义图标 + * @deprecated */ rowIcon?: string /** * 是否显示拖拽按钮图标 + * @deprecated */ showRowIcon?: boolean /** * 是否禁用拖拽按钮 + * @deprecated */ rowDisabledMethod?(params: { row: D @@ -396,6 +404,7 @@ export namespace VxeTablePropTypes { }): boolean /** * 是否显示拖拽按钮 + * @deprecated */ rowVisibleMethod?(params: { row: D @@ -403,23 +412,121 @@ export namespace VxeTablePropTypes { }): boolean /** * 自定义提示内容 + * @deprecated */ rowTooltipMethod?(params: { row: D }): string | number | null /** * 拖拽开始时是否允许行拖拽调整顺序的方法,该方法的返回值用来决定是否允许被拖拽 + * @deprecated */ dragStartMethod?(params: VxeTableDefines.RowDragstartEventParams): boolean /** * 拖拽结束时是否允许行拖拽调整顺序的方法,该方法的返回值用来决定是否允许被拖拽调整顺序 + * @deprecated */ dragEndMethod?(params: Omit, '_index'>): Promise | boolean + /** + * 自定义插槽模板 + * @deprecated + */ + slots?: { + rowTip?: string | ((params: VxeTableDefines.RowDragSlotParams) => VxeComponentSlotType | VxeComponentSlotType[]) + } + } + + /** + * 行拖拽排序配置项 + */ + export interface RowDragConfig{ + /** + * 自定义图标 + */ + icon?: string + /** + * 是否显示拖拽按钮图标 + */ + showIcon?: boolean + /** + * 是否禁用拖拽按钮 + */ + disabledMethod?(params: { + row: D + column: VxeTableDefines.ColumnInfo + }): boolean + /** + * 是否显示拖拽按钮 + */ + visibleMethod?(params: { + row: D + column: VxeTableDefines.ColumnInfo + }): boolean + /** + * 自定义提示内容 + */ + tooltipMethod?(params: { + row: D + }): string | number | null + /** + * 拖拽开始时是否允许行拖拽调整顺序的方法,该方法的返回值用来决定是否允许被拖拽 + */ + dragStartMethod?(params: VxeTableDefines.RowDragstartEventParams): boolean + /** + * 拖拽结束时是否允许行拖拽调整顺序的方法,该方法的返回值用来决定是否允许被拖拽调整顺序 + */ + dragEndMethod?(params: Omit, '_index'>): Promise | boolean + /** + * 自定义插槽模板 + */ + slots?: { + tip?: string | ((params: VxeTableDefines.RowDragSlotParams) => VxeComponentSlotType | VxeComponentSlotType[]) + } + } + + /** + * 列拖拽排序配置项 + */ + export interface ColumnDragConfig{ + /** + * 自定义图标 + */ + icon?: string + /** + * 是否显示拖拽按钮图标 + */ + showIcon?: boolean + /** + * 是否禁用拖拽按钮 + */ + disabledMethod?(params: { + column: VxeTableDefines.ColumnInfo + }): boolean + /** + * 是否显示拖拽按钮 + */ + visibleMethod?(params: { + column: VxeTableDefines.ColumnInfo + }): boolean + /** + * 自定义提示内容 + */ + tooltipMethod?(params: { + column: VxeTableDefines.ColumnInfo + }): string | number | null + /** + * 拖拽开始时是否允许行拖拽调整顺序的方法,该方法的返回值用来决定是否允许被拖拽 + */ + dragStartMethod?(params: VxeTableDefines.ColumnDragstartEventParams): boolean + /** + * 拖拽结束时是否允许行拖拽调整顺序的方法,该方法的返回值用来决定是否允许被拖拽调整顺序 + */ + dragEndMethod?(params: Omit, '_index'>): Promise | boolean /** * 自定义插槽模板 */ slots?: { - rowTip?: string | ((params: VxeTableDefines.DragSlotParams) => VxeComponentSlotType | VxeComponentSlotType[]) + tip?: string | ((params: VxeTableDefines.ColumnDragSlotParams) => VxeComponentSlotType | VxeComponentSlotType[]) } } @@ -910,9 +1017,13 @@ export namespace VxeTablePropTypes { $grid: VxeGridConstructor | null | undefined }): boolean /** - * 只对 mouse-config.area 启用后有效,点击列头是否选取当前列的所有单元格 + * 只对 mouse-config.area 启用后有效,表格头部选取功能 */ selectCellByHeader?: boolean + /** + * 只对 mouse-config.area 启用后有效,表格单元格选取功能 + */ + selectCellByBody?: boolean /** * 只对 mouse-config.area 启用后有效, * 如果为 true,则选中第一列单元格自动选取一整行, @@ -1513,6 +1624,10 @@ export namespace VxeTablePropTypes { * 是否启用 */ enabled?: boolean + /** + * 是否开启实时渲染,当单元格渲染量太大时应该关闭,避免卡顿 + */ + immediate?: boolean /** * 当数据源被更改时,自动将横向滚动条滚动到左侧 */ @@ -1546,6 +1661,10 @@ export namespace VxeTablePropTypes { * 是否启用纵向虚拟滚动 */ enabled?: boolean + /** + * 是否开启实时渲染,当单元格渲染量太大时应该关闭,避免卡顿 + */ + immediate?: boolean /** * 当数据源被更改时,自动将纵向滚动条复原到顶部 */ @@ -2048,9 +2167,18 @@ export interface VxeTableProps { */ currentConfig?: VxeTablePropTypes.CurrentConfig /** - * 当前行配置项 + * 已废弃,被 rowDragConfig 替换 + * @deprecated */ dragConfig?: VxeTablePropTypes.DragConfig + /** + * 行拖拽排序配置项 + */ + rowDragConfig?: VxeTablePropTypes.RowDragConfig + /** + * 列拖拽排序配置项 + */ + columnDragConfig?: VxeTablePropTypes.ColumnDragConfig /** * 个性化信息配置项 */ @@ -2239,7 +2367,8 @@ export interface TablePrivateComputed { computeColumnOpts: ComputedRef computeCellOpts: ComputedRef computeRowOpts: ComputedRef - computeDragOpts: ComputedRef + computeRowDragOpts: ComputedRef + computeColumnDragOpts: ComputedRef computeResizeOpts: ComputedRef computeResizableOpts: ComputedRef> computeSeqOpts: ComputedRef> @@ -2504,8 +2633,10 @@ export interface TableReactData { }, scrollVMLoading: boolean - isDragRowMove: boolean + isDragRowMove: Boolean dragRow: any + isDragColMove: boolean + dragCol: any dragTipText: string _isResize: boolean @@ -2515,7 +2646,7 @@ export interface TableReactData { export interface TableInternalData { tZindex: number elemStore: { - [key: string]: Ref | null + [key: string]: Ref |Ref | null } // 存放横向 X 虚拟滚动相关的信息 scrollXStore: { @@ -2585,9 +2716,12 @@ export interface TableInternalData { columnStatusMaps: Record // 行选取状态 rowStatusMaps: Record + // 上一个拖动的行 prevDragRow?: any - prevDragPos?: 'top' | 'bottom' | '' + // 上一个拖动的列 + prevDragCol?: VVxeTableDefines.ColumnInfo + prevDragPos?: 'top' | 'bottom' | 'left' | 'right' | '' // 特殊标识 inited: boolean @@ -3347,6 +3481,13 @@ export interface TablePrivateMethods { column: VxeTableDefines.ColumnInfo }): void handleCellDragMouseupEvent (evnt: MouseEvent): void + handleHeaderCellDragDragstartEvent (evnt: DragEvent): void + handleHeaderCellDragDragendEvent(evnt: DragEvent): void + handleHeaderCellDragDragoverEvent(evnt: DragEvent,): void + handleHeaderCellDragMousedownEvent (evnt: MouseEvent, params: { + column: VxeTableDefines.ColumnInfo + }): void + handleHeaderCellDragMouseupEvent (evnt: MouseEvent): void handleScrollEvent(evnt: Event, isRollY: boolean, isRollX: boolean, scrollTop: number, scrollLeft: number, params: { type: string fixed: VxeColumnPropTypes.Fixed @@ -3419,6 +3560,9 @@ export type VxeTableEmits = [ 'row-dragstart', 'row-dragover', 'row-dragend', + 'column-dragstart', + 'column-dragover', + 'column-dragend', 'edit-actived', // 已废弃 @@ -4046,11 +4190,36 @@ export namespace VxeTableDefines { oldRow: D targetRow: D dragPos: 'top' | 'bottom' + offsetIndex: 0 | 1 } export interface RowDragendEventParams { newRow: D oldRow: D + dragPos: 'top' | 'bottom' + offsetIndex: 0 | 1 + _index: { + newIndex: number + oldIndex: number + } + } + + export interface ColumnDragstartEventParams { + column: VxeTableDefines.ColumnInfo + } + + export interface ColumnDragoverEventParams { + oldColumn: VxeTableDefines.ColumnInfo + targetColumn: VxeTableDefines.ColumnInfo + dragPos: 'left' | 'right' + offsetIndex: 0 | 1 + } + + export interface ColumnDragendEventParams { + newColumn: VxeTableDefines.ColumnInfo + oldColumn: VxeTableDefines.ColumnInfo + dragPos: 'left' | 'right' + offsetIndex: 0 | 1 _index: { newIndex: number oldIndex: number @@ -4126,10 +4295,14 @@ export namespace VxeTableDefines { isAllIndeterminate: boolean } - export interface DragSlotParams { + export interface RowDragSlotParams { row: D } + export interface ColumnDragSlotParams { + column: VxeTableDefines.ColumnInfo + } + export interface MenuSlotParams { } @@ -4323,6 +4496,9 @@ export interface VxeTableEventProps { onRowDragstart?: VxeTableEvents.RowDragstart onRowDragover?: VxeTableEvents.RowDragover onRowDragend?: VxeTableEvents.RowDragend + onColumnDragstart?: VxeTableEvents.ColumnDragstart + onColumnDragover?: VxeTableEvents.ColumnDragover + onColumnDragend?: VxeTableEvents.ColumnDragend /** * 已废弃,请使用 onEditActivated @@ -4392,6 +4568,9 @@ export interface VxeTableListeners { rowDragstart?: VxeTableEvents.RowDragstart rowDragover?: VxeTableEvents.RowDragover rowDragend?: VxeTableEvents.RowDragend + columnDragstart?: VxeTableEvents.ColumnDragstart + columnDragover?: VxeTableEvents.ColumnDragover + columnDragend?: VxeTableEvents.ColumnDragend /** * 已废弃,请使用 editActivated @@ -4444,6 +4623,9 @@ export namespace VxeTableEvents { export type RowDragstart = (params: VxeTableDefines.RowDragstartEventParams) => void export type RowDragover = (params: VxeTableDefines.RowDragoverEventParams) => void export type RowDragend = (params: VxeTableDefines.RowDragendEventParams) => void + export type ColumnDragstart = (params: VxeTableDefines.ColumnDragstartEventParams) => void + export type ColumnDragover = (params: VxeTableDefines.ColumnDragoverEventParams) => void + export type ColumnDragend = (params: VxeTableDefines.ColumnDragendEventParams) => void /** * 已废弃,请使用 EditActivated diff --git a/types/ui/global-icon.d.ts b/types/ui/global-icon.d.ts index 29229229..ad59082e 100644 --- a/types/ui/global-icon.d.ts +++ b/types/ui/global-icon.d.ts @@ -24,6 +24,7 @@ declare module '@vxe-ui/core' { TABLE_CUSTOM_SORT?: string TABLE_MENU_OPTIONS?: string TABLE_DRAG_ROW?: string + TABLE_DRAG_COLUMN?: string // toolbar TOOLBAR_TOOLS_REFRESH?: string