pro-design-vue 1.3.20 → 1.3.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.css +1 -1
- package/dist/index.full.js +1203 -1588
- package/dist/index.full.min.js +7 -9
- package/dist/index.full.min.js.map +1 -1
- package/dist/index.full.min.mjs +7 -9
- package/dist/index.full.min.mjs.map +1 -1
- package/dist/index.full.mjs +1204 -1589
- package/es/components/config-provider/src/typing.d.ts +3 -1
- package/es/components/table/src/components/Body/Body.vue.d.ts +270 -15
- package/es/components/table/src/components/Body/BodyCell.vue.d.ts +255 -0
- package/es/components/table/src/components/Body/BodyEditCell.d.ts +60 -0
- package/es/components/table/src/components/Body/BodyExtraCell.vue.d.ts +6 -1
- package/es/components/table/src/components/Body/BodyRow.vue.d.ts +270 -15
- package/es/components/table/src/components/Body/BodyRows.vue.d.ts +270 -15
- package/es/components/table/src/components/Body/{BodyCell.d.ts → BodyTextCell.d.ts} +1 -7
- package/es/components/table/src/components/ExpandIcon.vue.d.ts +3 -0
- package/es/components/table/src/components/InteralTable.vue.d.ts +332 -19
- package/es/components/table/src/components/Table.d.ts +60 -0
- package/es/components/table/src/components/context/TableContext.d.ts +6 -1
- package/es/components/table/src/components/interface.d.ts +308 -23
- package/es/components/table/src/hooks/useCellProps.d.ts +5 -1
- package/es/components/table/src/hooks/useEdit.d.ts +24 -7
- package/es/components/table/src/utils/form-model.d.ts +25 -0
- package/es/components/table/src/utils/util.d.ts +1 -0
- package/es/index.d.ts +291 -5
- package/es/packages/components/table/src/components/Body/BodyCell.vue.mjs +35 -0
- package/es/packages/components/table/src/components/Body/BodyCell.vue.mjs.map +1 -0
- package/es/packages/components/table/src/components/Body/BodyCell.vue2.mjs +129 -0
- package/es/packages/components/table/src/components/Body/BodyCell.vue2.mjs.map +1 -0
- package/es/packages/components/table/src/components/Body/BodyEditCell.mjs +256 -0
- package/es/packages/components/table/src/components/Body/BodyEditCell.mjs.map +1 -0
- package/es/packages/components/table/src/components/Body/BodyExtraCell.vue.mjs +2 -1
- package/es/packages/components/table/src/components/Body/BodyExtraCell.vue.mjs.map +1 -1
- package/es/packages/components/table/src/components/Body/BodyExtraCell.vue2.mjs +1 -0
- package/es/packages/components/table/src/components/Body/BodyExtraCell.vue2.mjs.map +1 -1
- package/es/packages/components/table/src/components/Body/BodyRow.vue.mjs +66 -9
- package/es/packages/components/table/src/components/Body/BodyRow.vue.mjs.map +1 -1
- package/es/packages/components/table/src/components/Body/BodyRow.vue2.mjs +26 -18
- package/es/packages/components/table/src/components/Body/BodyRow.vue2.mjs.map +1 -1
- package/es/packages/components/table/src/components/Body/{BodyCell.mjs → BodyTextCell.mjs} +25 -155
- package/es/packages/components/table/src/components/Body/BodyTextCell.mjs.map +1 -0
- package/es/packages/components/table/src/components/ExpandIcon.vue.mjs.map +1 -1
- package/es/packages/components/table/src/components/ExpandIcon.vue2.mjs +4 -2
- package/es/packages/components/table/src/components/ExpandIcon.vue2.mjs.map +1 -1
- package/es/packages/components/table/src/components/InteralTable.vue.mjs +24 -25
- package/es/packages/components/table/src/components/InteralTable.vue.mjs.map +1 -1
- package/es/packages/components/table/src/components/InteralTable.vue2.mjs +43 -97
- package/es/packages/components/table/src/components/InteralTable.vue2.mjs.map +1 -1
- package/es/packages/components/table/src/components/Table.mjs +24 -20
- package/es/packages/components/table/src/components/Table.mjs.map +1 -1
- package/es/packages/components/table/src/components/context/TableContext.mjs.map +1 -1
- package/es/packages/components/table/src/components/interface.mjs +28 -0
- package/es/packages/components/table/src/components/interface.mjs.map +1 -1
- package/es/packages/components/table/src/hooks/useCellProps.mjs +8 -0
- package/es/packages/components/table/src/hooks/useCellProps.mjs.map +1 -1
- package/es/packages/components/table/src/hooks/useEdit.mjs +293 -18
- package/es/packages/components/table/src/hooks/useEdit.mjs.map +1 -1
- package/es/packages/components/table/src/utils/form-model.mjs +98 -0
- package/es/packages/components/table/src/utils/form-model.mjs.map +1 -0
- package/es/packages/components/table/src/utils/util.mjs +4 -1
- package/es/packages/components/table/src/utils/util.mjs.map +1 -1
- package/es/packages/utils/dom.mjs +15 -1
- package/es/packages/utils/dom.mjs.map +1 -1
- package/es/packages/utils/index.mjs +1 -1
- package/es/utils/dom.d.ts +2 -0
- package/es/version.d.ts +1 -1
- package/es/version.mjs +1 -1
- package/es/version.mjs.map +1 -1
- package/lib/components/config-provider/src/typing.d.ts +3 -1
- package/lib/components/table/src/components/Body/Body.vue.d.ts +270 -15
- package/lib/components/table/src/components/Body/BodyCell.vue.d.ts +255 -0
- package/lib/components/table/src/components/Body/BodyEditCell.d.ts +60 -0
- package/lib/components/table/src/components/Body/BodyExtraCell.vue.d.ts +6 -1
- package/lib/components/table/src/components/Body/BodyRow.vue.d.ts +270 -15
- package/lib/components/table/src/components/Body/BodyRows.vue.d.ts +270 -15
- package/lib/components/table/src/components/Body/{BodyCell.d.ts → BodyTextCell.d.ts} +1 -7
- package/lib/components/table/src/components/ExpandIcon.vue.d.ts +3 -0
- package/lib/components/table/src/components/InteralTable.vue.d.ts +332 -19
- package/lib/components/table/src/components/Table.d.ts +60 -0
- package/lib/components/table/src/components/context/TableContext.d.ts +6 -1
- package/lib/components/table/src/components/interface.d.ts +308 -23
- package/lib/components/table/src/hooks/useCellProps.d.ts +5 -1
- package/lib/components/table/src/hooks/useEdit.d.ts +24 -7
- package/lib/components/table/src/utils/form-model.d.ts +25 -0
- package/lib/components/table/src/utils/util.d.ts +1 -0
- package/lib/index.d.ts +291 -5
- package/lib/packages/components/table/src/components/Body/BodyCell.vue.js +39 -0
- package/lib/packages/components/table/src/components/Body/BodyCell.vue.js.map +1 -0
- package/lib/packages/components/table/src/components/Body/BodyCell.vue2.js +133 -0
- package/lib/packages/components/table/src/components/Body/BodyCell.vue2.js.map +1 -0
- package/lib/packages/components/table/src/components/Body/BodyEditCell.js +260 -0
- package/lib/packages/components/table/src/components/Body/BodyEditCell.js.map +1 -0
- package/lib/packages/components/table/src/components/Body/BodyExtraCell.vue.js +2 -1
- package/lib/packages/components/table/src/components/Body/BodyExtraCell.vue.js.map +1 -1
- package/lib/packages/components/table/src/components/Body/BodyExtraCell.vue2.js +1 -0
- package/lib/packages/components/table/src/components/Body/BodyExtraCell.vue2.js.map +1 -1
- package/lib/packages/components/table/src/components/Body/BodyRow.vue.js +66 -9
- package/lib/packages/components/table/src/components/Body/BodyRow.vue.js.map +1 -1
- package/lib/packages/components/table/src/components/Body/BodyRow.vue2.js +24 -16
- package/lib/packages/components/table/src/components/Body/BodyRow.vue2.js.map +1 -1
- package/lib/packages/components/table/src/components/Body/{BodyCell.js → BodyTextCell.js} +24 -154
- package/lib/packages/components/table/src/components/Body/BodyTextCell.js.map +1 -0
- package/lib/packages/components/table/src/components/ExpandIcon.vue.js.map +1 -1
- package/lib/packages/components/table/src/components/ExpandIcon.vue2.js +4 -2
- package/lib/packages/components/table/src/components/ExpandIcon.vue2.js.map +1 -1
- package/lib/packages/components/table/src/components/InteralTable.vue.js +24 -25
- package/lib/packages/components/table/src/components/InteralTable.vue.js.map +1 -1
- package/lib/packages/components/table/src/components/InteralTable.vue2.js +43 -97
- package/lib/packages/components/table/src/components/InteralTable.vue2.js.map +1 -1
- package/lib/packages/components/table/src/components/Table.js +24 -20
- package/lib/packages/components/table/src/components/Table.js.map +1 -1
- package/lib/packages/components/table/src/components/context/TableContext.js.map +1 -1
- package/lib/packages/components/table/src/components/interface.js +28 -0
- package/lib/packages/components/table/src/components/interface.js.map +1 -1
- package/lib/packages/components/table/src/hooks/useCellProps.js +8 -0
- package/lib/packages/components/table/src/hooks/useCellProps.js.map +1 -1
- package/lib/packages/components/table/src/hooks/useEdit.js +292 -17
- package/lib/packages/components/table/src/hooks/useEdit.js.map +1 -1
- package/lib/packages/components/table/src/utils/form-model.js +102 -0
- package/lib/packages/components/table/src/utils/form-model.js.map +1 -0
- package/lib/packages/components/table/src/utils/util.js +4 -0
- package/lib/packages/components/table/src/utils/util.js.map +1 -1
- package/lib/packages/utils/dom.js +16 -0
- package/lib/packages/utils/dom.js.map +1 -1
- package/lib/packages/utils/index.js +2 -0
- package/lib/packages/utils/index.js.map +1 -1
- package/lib/utils/dom.d.ts +2 -0
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/package.json +1 -1
- package/theme-chalk/index.css +1 -1
- package/theme-chalk/src/table/table.less +78 -25
- package/es/components/table/src/components/Body/EditInput.vue.d.ts +0 -102
- package/es/packages/components/table/src/components/Body/BodyCell.mjs.map +0 -1
- package/es/packages/components/table/src/components/Body/EditInput.vue.mjs +0 -48
- package/es/packages/components/table/src/components/Body/EditInput.vue.mjs.map +0 -1
- package/es/packages/components/table/src/components/Body/EditInput.vue2.mjs +0 -151
- package/es/packages/components/table/src/components/Body/EditInput.vue2.mjs.map +0 -1
- package/lib/components/table/src/components/Body/EditInput.vue.d.ts +0 -102
- package/lib/packages/components/table/src/components/Body/BodyCell.js.map +0 -1
- package/lib/packages/components/table/src/components/Body/EditInput.vue.js +0 -52
- package/lib/packages/components/table/src/components/Body/EditInput.vue.js.map +0 -1
- package/lib/packages/components/table/src/components/Body/EditInput.vue2.js +0 -155
- package/lib/packages/components/table/src/components/Body/EditInput.vue2.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCellProps.js","sources":["../../../../../../../../packages/components/table/src/hooks/useCellProps.ts"],"sourcesContent":["/*\n * @Author: shen\n * @Date: 2022-11-05 14:16:25\n * @LastEditors: shen\n * @LastEditTime: 2025-09-29 14:02:06\n * @Description:\n */\nimport type { Ref, CSSProperties } from 'vue'\nimport type {\n FinallyColumnType,\n FlatRecord,\n Key,\n RenderedCell,\n ProTableProps,\n} from '../components/interface'\n\nimport { shallowRef, watchEffect, isVNode } from 'vue'\nimport { ExpandColumnKey } from './useColumns'\nimport { getPathValue, parseStyleText } from '../utils/util'\nimport { isArray, isObject } from '@pro-design-vue/utils'\n\ninterface UseCellProps {\n leftColumns: Ref<FinallyColumnType[]>\n rightColumns: Ref<FinallyColumnType[]>\n visibleCenterColumns: Ref<FinallyColumnType[]>\n allColumns: Ref<FinallyColumnType[]>\n data: Ref<FlatRecord[]>\n mergedRowHeights: Ref<Record<Key, number>>\n startIndex: Ref<number>\n bodyWidth: Ref<number>\n leftWidth: Ref<number>\n centerWidth: Ref<number>\n getColumnPosition: (\n index: number,\n colSpan?: number,\n ) => {\n width: number\n left: number\n minWidth: number\n maxWidth: number\n }\n getRowHeight: (fromIndex: number, rowSpan?: number) => number\n customCell: Ref<ProTableProps['customCell']>\n}\nexport type UseCellPropsRes = {\n allCellProps: Ref<Record<string, Record<string, RenderedCell>>>\n hasMultiRowSpanInfo: Ref<Record<string, boolean>>\n centerRowColumnsMap: Ref<Map<Key, FinallyColumnType[]>>\n}\nconst useCellProps = ({\n leftColumns,\n rightColumns,\n visibleCenterColumns,\n allColumns,\n data,\n mergedRowHeights,\n getColumnPosition,\n bodyWidth,\n leftWidth,\n centerWidth,\n getRowHeight,\n customCell: contextCustomCell,\n}: UseCellProps): UseCellPropsRes => {\n const allCellProps = shallowRef<Record<string, Record<string, RenderedCell>>>({})\n const hasMultiRowSpanInfo = shallowRef<Record<string, boolean>>({})\n const centerRowColumnsMap = shallowRef<Map<Key, FinallyColumnType[]>>(new Map())\n\n const computedCellProps = (\n offsetLeft: number,\n column: FinallyColumnType,\n rowIndex: number,\n record: any,\n overflow: string,\n ) => {\n const { customRender, originColumn, dataIndex, columnIndex, left, customCell } = column\n const cellProps: RenderedCell = {}\n const customCellProps: Record<string, any> =\n (customCell || contextCustomCell.value)?.({ record, rowIndex, column }) ?? {}\n const mergeCellStyles: CSSProperties = Object.assign(\n { overflow },\n parseStyleText(customCellProps.style || {}),\n )\n const copyCustomCellProps = Object.assign({}, customCellProps)\n\n if (customRender) {\n const value = getPathValue(record, dataIndex!)\n const customCellRender: any = customRender({\n text: value,\n value,\n record,\n index: rowIndex,\n column: originColumn as FinallyColumnType,\n })\n if (\n customCellRender &&\n isObject(customCellRender) &&\n !isArray(customCellRender) &&\n !isVNode(customCellRender)\n ) {\n Object.assign(copyCustomCellProps, (customCellRender as any).props || {})\n cellProps.children = (customCellRender as any).children\n } else {\n cellProps.children = customCellRender\n }\n }\n\n copyCustomCellProps.colSpan = copyCustomCellProps.colSpan ?? 1\n copyCustomCellProps.rowSpan = copyCustomCellProps.rowSpan ?? 1\n const { width } = getColumnPosition(columnIndex, copyCustomCellProps.colSpan)\n Object.assign(mergeCellStyles, { width: `${width}px`, left: left! - offsetLeft + 'px' })\n if (width === 0) {\n mergeCellStyles.display = 'none'\n }\n if (copyCustomCellProps.colSpan > 1) {\n mergeCellStyles.zIndex = 1\n }\n\n if (copyCustomCellProps.rowSpan > 1) {\n mergeCellStyles.height = `${getRowHeight(rowIndex, copyCustomCellProps.rowSpan) - 1}px`\n }\n cellProps.props = Object.assign({}, copyCustomCellProps, {\n style: { ...copyCustomCellProps.style, ...mergeCellStyles },\n })\n return cellProps\n }\n\n watchEffect(() => {\n const rawAllCellProps: Record<string, Record<string, RenderedCell>> = {}\n const rawRowSpanInfo: Record<string, boolean> = {}\n const genAllCellProps = (\n index: number,\n offsetLeft: number,\n finallyColumns: FinallyColumnType[],\n rowKey: Key,\n rowIndex: number,\n record: any,\n overflow: string,\n rowColumnsMap?: Map<Key, FinallyColumnType[]>,\n ) => {\n const collen = finallyColumns.length\n let currentColumn: FinallyColumnType | null = null\n let currentColumnIndex = 0\n for (let i = 0; i < collen; i++) {\n const { columnIndex, columnKey } = finallyColumns[i]!\n const cellProps = computedCellProps(\n offsetLeft,\n finallyColumns[i]!,\n rowIndex,\n record,\n overflow,\n )\n rawAllCellProps[rowKey]![columnKey] = cellProps\n if (cellProps.props?.rowSpan || 0 > 1) {\n rawRowSpanInfo[rowKey] = true\n }\n if (i === 0 && cellProps.props?.colSpan === 0) {\n currentColumnIndex = columnIndex\n }\n }\n\n if (currentColumnIndex !== 0) {\n for (let i = currentColumnIndex - 1; i > 0; i--) {\n const column = allColumns.value[i]!\n if (column.fixed) break\n const cellProps = computedCellProps(offsetLeft, column, rowIndex, record, overflow)\n if (cellProps.props?.colSpan !== 0) {\n currentColumn = column\n rawAllCellProps[rowKey]![column.columnKey] = cellProps\n if (cellProps.props?.rowSpan || 0 > 1) {\n rawRowSpanInfo[rowKey] = true\n }\n break\n }\n }\n }\n\n if (currentColumn) {\n const columns = finallyColumns.slice()\n columns.push(currentColumn)\n rowColumnsMap?.set(rowKey, columns)\n } else {\n rowColumnsMap?.set(rowKey, finallyColumns)\n }\n }\n const rowColumnsMap = new Map()\n const len = data.value.length\n for (let i = 0; i < len; i++) {\n if (!data.value[i]) continue\n const { record, isExpandRow, rowKey, rowIndex } = data.value[i]!\n rawAllCellProps[rowKey] = {}\n const overflow: string = mergedRowHeights.value[rowKey] ? 'hidden' : 'initial'\n if (isExpandRow) {\n rawAllCellProps[rowKey][ExpandColumnKey] = {\n props: {\n style: { left: '0px', width: `${bodyWidth.value}px`, zIndex: 1 },\n },\n }\n } else {\n genAllCellProps(0, 0, leftColumns.value, rowKey, rowIndex, record, overflow)\n genAllCellProps(\n 0,\n leftWidth.value,\n visibleCenterColumns.value,\n rowKey,\n rowIndex,\n record,\n overflow,\n rowColumnsMap,\n )\n genAllCellProps(\n 0,\n leftWidth.value + centerWidth.value,\n rightColumns.value,\n rowKey,\n rowIndex,\n record,\n overflow,\n )\n }\n }\n allCellProps.value = rawAllCellProps\n hasMultiRowSpanInfo.value = rawRowSpanInfo\n centerRowColumnsMap.value = rowColumnsMap\n })\n\n return { allCellProps, hasMultiRowSpanInfo, centerRowColumnsMap }\n}\nexport default useCellProps\n"],"names":["shallowRef","parseStyleText","getPathValue","isObject","isArray","isVNode","watchEffect","rowColumnsMap","ExpandColumnKey"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useCellProps.js","sources":["../../../../../../../../packages/components/table/src/hooks/useCellProps.ts"],"sourcesContent":["/*\n * @Author: shen\n * @Date: 2022-11-05 14:16:25\n * @LastEditors: shen\n * @LastEditTime: 2025-12-01 14:33:05\n * @Description:\n */\nimport type { Ref, CSSProperties } from 'vue'\nimport type {\n FinallyColumnType,\n FlatRecord,\n Key,\n RenderedCell,\n ProTableProps,\n} from '../components/interface'\n\nimport { shallowRef, watchEffect, isVNode } from 'vue'\nimport { ExpandColumnKey } from './useColumns'\nimport { getPathValue, parseStyleText } from '../utils/util'\nimport { isArray, isObject } from '@pro-design-vue/utils'\n\ninterface UseCellProps {\n leftColumns: Ref<FinallyColumnType[]>\n rightColumns: Ref<FinallyColumnType[]>\n visibleCenterColumns: Ref<FinallyColumnType[]>\n allColumns: Ref<FinallyColumnType[]>\n data: Ref<FlatRecord[]>\n mergedRowHeights: Ref<Record<Key, number>>\n startIndex: Ref<number>\n bodyWidth: Ref<number>\n leftWidth: Ref<number>\n centerWidth: Ref<number>\n cancelEditable: (recordKey: Key) => boolean\n startEditable: (recordKey: Key, recordValue?: any) => boolean\n saveEditable: (recordKey: Key) => Promise<boolean>\n isEditable: (recordKey: Key) => boolean\n getColumnPosition: (\n index: number,\n colSpan?: number,\n ) => {\n width: number\n left: number\n minWidth: number\n maxWidth: number\n }\n getRowHeight: (fromIndex: number, rowSpan?: number) => number\n customCell: Ref<ProTableProps['customCell']>\n}\nexport type UseCellPropsRes = {\n allCellProps: Ref<Record<string, Record<string, RenderedCell>>>\n hasMultiRowSpanInfo: Ref<Record<string, boolean>>\n centerRowColumnsMap: Ref<Map<Key, FinallyColumnType[]>>\n}\nconst useCellProps = ({\n leftColumns,\n rightColumns,\n visibleCenterColumns,\n allColumns,\n data,\n mergedRowHeights,\n getColumnPosition,\n bodyWidth,\n leftWidth,\n centerWidth,\n getRowHeight,\n cancelEditable,\n startEditable,\n saveEditable,\n isEditable,\n customCell: contextCustomCell,\n}: UseCellProps): UseCellPropsRes => {\n const allCellProps = shallowRef<Record<string, Record<string, RenderedCell>>>({})\n const hasMultiRowSpanInfo = shallowRef<Record<string, boolean>>({})\n const centerRowColumnsMap = shallowRef<Map<Key, FinallyColumnType[]>>(new Map())\n\n const computedCellProps = (\n offsetLeft: number,\n column: FinallyColumnType,\n rowIndex: number,\n record: any,\n overflow: string,\n ) => {\n const { customRender, originColumn, dataIndex, columnIndex, left, customCell } = column\n const cellProps: RenderedCell = {}\n const customCellProps: Record<string, any> =\n (customCell || contextCustomCell.value)?.({ record, rowIndex, column }) ?? {}\n const mergeCellStyles: CSSProperties = Object.assign(\n { overflow },\n parseStyleText(customCellProps.style || {}),\n )\n const copyCustomCellProps = Object.assign({}, customCellProps)\n\n if (customRender) {\n const value = getPathValue(record, dataIndex!)\n const customCellRender: any = customRender({\n text: value,\n value,\n record,\n index: rowIndex,\n cancelEditable,\n startEditable,\n saveEditable,\n isEditable,\n column: originColumn as FinallyColumnType,\n })\n if (\n customCellRender &&\n isObject(customCellRender) &&\n !isArray(customCellRender) &&\n !isVNode(customCellRender)\n ) {\n Object.assign(copyCustomCellProps, (customCellRender as any).props || {})\n cellProps.children = (customCellRender as any).children\n } else {\n cellProps.children = customCellRender\n }\n }\n\n copyCustomCellProps.colSpan = copyCustomCellProps.colSpan ?? 1\n copyCustomCellProps.rowSpan = copyCustomCellProps.rowSpan ?? 1\n const { width } = getColumnPosition(columnIndex, copyCustomCellProps.colSpan)\n Object.assign(mergeCellStyles, { width: `${width}px`, left: left! - offsetLeft + 'px' })\n if (width === 0) {\n mergeCellStyles.display = 'none'\n }\n if (copyCustomCellProps.colSpan > 1) {\n mergeCellStyles.zIndex = 1\n }\n\n if (copyCustomCellProps.rowSpan > 1) {\n mergeCellStyles.height = `${getRowHeight(rowIndex, copyCustomCellProps.rowSpan) - 1}px`\n }\n cellProps.props = Object.assign({}, copyCustomCellProps, {\n style: { ...copyCustomCellProps.style, ...mergeCellStyles },\n })\n return cellProps\n }\n\n watchEffect(() => {\n const rawAllCellProps: Record<string, Record<string, RenderedCell>> = {}\n const rawRowSpanInfo: Record<string, boolean> = {}\n const genAllCellProps = (\n index: number,\n offsetLeft: number,\n finallyColumns: FinallyColumnType[],\n rowKey: Key,\n rowIndex: number,\n record: any,\n overflow: string,\n rowColumnsMap?: Map<Key, FinallyColumnType[]>,\n ) => {\n const collen = finallyColumns.length\n let currentColumn: FinallyColumnType | null = null\n let currentColumnIndex = 0\n for (let i = 0; i < collen; i++) {\n const { columnIndex, columnKey } = finallyColumns[i]!\n const cellProps = computedCellProps(\n offsetLeft,\n finallyColumns[i]!,\n rowIndex,\n record,\n overflow,\n )\n rawAllCellProps[rowKey]![columnKey] = cellProps\n if (cellProps.props?.rowSpan || 0 > 1) {\n rawRowSpanInfo[rowKey] = true\n }\n if (i === 0 && cellProps.props?.colSpan === 0) {\n currentColumnIndex = columnIndex\n }\n }\n\n if (currentColumnIndex !== 0) {\n for (let i = currentColumnIndex - 1; i > 0; i--) {\n const column = allColumns.value[i]!\n if (column.fixed) break\n const cellProps = computedCellProps(offsetLeft, column, rowIndex, record, overflow)\n if (cellProps.props?.colSpan !== 0) {\n currentColumn = column\n rawAllCellProps[rowKey]![column.columnKey] = cellProps\n if (cellProps.props?.rowSpan || 0 > 1) {\n rawRowSpanInfo[rowKey] = true\n }\n break\n }\n }\n }\n\n if (currentColumn) {\n const columns = finallyColumns.slice()\n columns.push(currentColumn)\n rowColumnsMap?.set(rowKey, columns)\n } else {\n rowColumnsMap?.set(rowKey, finallyColumns)\n }\n }\n const rowColumnsMap = new Map()\n const len = data.value.length\n for (let i = 0; i < len; i++) {\n if (!data.value[i]) continue\n const { record, isExpandRow, rowKey, rowIndex } = data.value[i]!\n rawAllCellProps[rowKey] = {}\n const overflow: string = mergedRowHeights.value[rowKey] ? 'hidden' : 'initial'\n if (isExpandRow) {\n rawAllCellProps[rowKey][ExpandColumnKey] = {\n props: {\n style: { left: '0px', width: `${bodyWidth.value}px`, zIndex: 1 },\n },\n }\n } else {\n genAllCellProps(0, 0, leftColumns.value, rowKey, rowIndex, record, overflow)\n genAllCellProps(\n 0,\n leftWidth.value,\n visibleCenterColumns.value,\n rowKey,\n rowIndex,\n record,\n overflow,\n rowColumnsMap,\n )\n genAllCellProps(\n 0,\n leftWidth.value + centerWidth.value,\n rightColumns.value,\n rowKey,\n rowIndex,\n record,\n overflow,\n )\n }\n }\n allCellProps.value = rawAllCellProps\n hasMultiRowSpanInfo.value = rawRowSpanInfo\n centerRowColumnsMap.value = rowColumnsMap\n })\n\n return { allCellProps, hasMultiRowSpanInfo, centerRowColumnsMap }\n}\nexport default useCellProps\n"],"names":["shallowRef","parseStyleText","getPathValue","isObject","isArray","isVNode","watchEffect","rowColumnsMap","ExpandColumnKey"],"mappings":";;;;;;;;;AAqDA,MAAM,eAAe,CAAC;AAAA,EACpB,WAAA;AAAA,EACA,YAAA;AAAA,EACA,oBAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA,EAAY;AACd,CAAA,KAAqC;AACnC,EAAA,MAAM,YAAA,GAAeA,cAAA,CAAyD,EAAE,CAAA;AAChF,EAAA,MAAM,mBAAA,GAAsBA,cAAA,CAAoC,EAAE,CAAA;AAClE,EAAA,MAAM,mBAAA,GAAsBA,cAAA,iBAA0C,IAAI,GAAA,EAAK,CAAA;AAE/E,EAAA,MAAM,oBAAoB,CACxB,UAAA,EACA,MAAA,EACA,QAAA,EACA,QACA,QAAA,KACG;AAjFP,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAkFI,IAAA,MAAM,EAAE,YAAA,EAAc,YAAA,EAAc,WAAW,WAAA,EAAa,IAAA,EAAM,YAAW,GAAI,MAAA;AACjF,IAAA,MAAM,YAA0B,EAAC;AACjC,IAAA,MAAM,eAAA,GAAA,CACH,EAAA,GAAA,CAAA,EAAA,GAAA,UAAA,IAAc,iBAAA,CAAkB,KAAA,KAAhC,IAAA,GAAA,MAAA,GAAA,EAAA,CAAyC,EAAE,MAAA,EAAQ,QAAA,EAAU,MAAA,EAAO,CAAA,KAApE,IAAA,GAAA,EAAA,GAA0E,EAAC;AAC9E,IAAA,MAAM,kBAAiC,MAAA,CAAO,MAAA;AAAA,MAC5C,EAAE,QAAA,EAAS;AAAA,MACXC,mBAAA,CAAe,eAAA,CAAgB,KAAA,IAAS,EAAE;AAAA,KAC5C;AACA,IAAA,MAAM,mBAAA,GAAsB,MAAA,CAAO,MAAA,CAAO,IAAI,eAAe,CAAA;AAE7D,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAM,KAAA,GAAQC,iBAAA,CAAa,MAAA,EAAQ,SAAU,CAAA;AAC7C,MAAA,MAAM,mBAAwB,YAAA,CAAa;AAAA,QACzC,IAAA,EAAM,KAAA;AAAA,QACN,KAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAA,EAAO,QAAA;AAAA,QACP,cAAA;AAAA,QACA,aAAA;AAAA,QACA,YAAA;AAAA,QACA,UAAA;AAAA,QACA,MAAA,EAAQ;AAAA,OACT,CAAA;AACD,MAAA,IACE,gBAAA,IACAC,iBAAA,CAAS,gBAAgB,CAAA,IACzB,CAACC,gBAAA,CAAQ,gBAAgB,CAAA,IACzB,CAACC,WAAA,CAAQ,gBAAgB,CAAA,EACzB;AACA,QAAA,MAAA,CAAO,MAAA,CAAO,mBAAA,EAAsB,gBAAA,CAAyB,KAAA,IAAS,EAAE,CAAA;AACxE,QAAA,SAAA,CAAU,WAAY,gBAAA,CAAyB,QAAA;AAAA,MACjD,CAAA,MAAO;AACL,QAAA,SAAA,CAAU,QAAA,GAAW,gBAAA;AAAA,MACvB;AAAA,IACF;AAEA,IAAA,mBAAA,CAAoB,OAAA,GAAA,CAAU,EAAA,GAAA,mBAAA,CAAoB,OAAA,KAApB,IAAA,GAAA,EAAA,GAA+B,CAAA;AAC7D,IAAA,mBAAA,CAAoB,OAAA,GAAA,CAAU,EAAA,GAAA,mBAAA,CAAoB,OAAA,KAApB,IAAA,GAAA,EAAA,GAA+B,CAAA;AAC7D,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,iBAAA,CAAkB,WAAA,EAAa,oBAAoB,OAAO,CAAA;AAC5E,IAAA,MAAA,CAAO,MAAA,CAAO,eAAA,EAAiB,EAAE,KAAA,EAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA,EAAM,IAAA,EAAM,IAAA,GAAQ,UAAA,GAAa,IAAA,EAAM,CAAA;AACvF,IAAA,IAAI,UAAU,CAAA,EAAG;AACf,MAAA,eAAA,CAAgB,OAAA,GAAU,MAAA;AAAA,IAC5B;AACA,IAAA,IAAI,mBAAA,CAAoB,UAAU,CAAA,EAAG;AACnC,MAAA,eAAA,CAAgB,MAAA,GAAS,CAAA;AAAA,IAC3B;AAEA,IAAA,IAAI,mBAAA,CAAoB,UAAU,CAAA,EAAG;AACnC,MAAA,eAAA,CAAgB,SAAS,CAAA,EAAG,YAAA,CAAa,UAAU,mBAAA,CAAoB,OAAO,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,IACrF;AACA,IAAA,SAAA,CAAU,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,IAAI,mBAAA,EAAqB;AAAA,MACvD,OAAO,EAAE,GAAG,mBAAA,CAAoB,KAAA,EAAO,GAAG,eAAA;AAAgB,KAC3D,CAAA;AACD,IAAA,OAAO,SAAA;AAAA,EACT,CAAA;AAEA,EAAAC,eAAA,CAAY,MAAM;AAChB,IAAA,MAAM,kBAAgE,EAAC;AACvE,IAAA,MAAM,iBAA0C,EAAC;AACjD,IAAA,MAAM,eAAA,GAAkB,CACtB,KAAA,EACA,UAAA,EACA,gBACA,MAAA,EACA,QAAA,EACA,MAAA,EACA,QAAA,EACAC,cAAAA,KACG;AAtJT,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAuJM,MAAA,MAAM,SAAS,cAAA,CAAe,MAAA;AAC9B,MAAA,IAAI,aAAA,GAA0C,IAAA;AAC9C,MAAA,IAAI,kBAAA,GAAqB,CAAA;AACzB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC/B,QAAA,MAAM,EAAE,WAAA,EAAa,SAAA,EAAU,GAAI,eAAe,CAAC,CAAA;AACnD,QAAA,MAAM,SAAA,GAAY,iBAAA;AAAA,UAChB,UAAA;AAAA,UACA,eAAe,CAAC,CAAA;AAAA,UAChB,QAAA;AAAA,UACA,MAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,eAAA,CAAgB,MAAM,CAAA,CAAG,SAAS,CAAA,GAAI,SAAA;AACtC,QAAA,IAAA,CAAA,CAAI,EAAA,GAAA,SAAA,CAAU,KAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,OAAA,KAAW,IAAI,CAAA,EAAG;AACrC,UAAA,cAAA,CAAe,MAAM,CAAA,GAAI,IAAA;AAAA,QAC3B;AACA,QAAA,IAAI,MAAM,CAAA,IAAA,CAAA,CAAK,EAAA,GAAA,SAAA,CAAU,KAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,aAAY,CAAA,EAAG;AAC7C,UAAA,kBAAA,GAAqB,WAAA;AAAA,QACvB;AAAA,MACF;AAEA,MAAA,IAAI,uBAAuB,CAAA,EAAG;AAC5B,QAAA,KAAA,IAAS,CAAA,GAAI,kBAAA,GAAqB,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,EAAA,EAAK;AAC/C,UAAA,MAAM,MAAA,GAAS,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA;AACjC,UAAA,IAAI,OAAO,KAAA,EAAO;AAClB,UAAA,MAAM,YAAY,iBAAA,CAAkB,UAAA,EAAY,MAAA,EAAQ,QAAA,EAAU,QAAQ,QAAQ,CAAA;AAClF,UAAA,IAAA,CAAA,CAAI,EAAA,GAAA,SAAA,CAAU,KAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,OAAA,MAAY,CAAA,EAAG;AAClC,YAAA,aAAA,GAAgB,MAAA;AAChB,YAAA,eAAA,CAAgB,MAAM,CAAA,CAAG,MAAA,CAAO,SAAS,CAAA,GAAI,SAAA;AAC7C,YAAA,IAAA,CAAA,CAAI,EAAA,GAAA,SAAA,CAAU,KAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,OAAA,KAAW,IAAI,CAAA,EAAG;AACrC,cAAA,cAAA,CAAe,MAAM,CAAA,GAAI,IAAA;AAAA,YAC3B;AACA,YAAA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,MAAM,OAAA,GAAU,eAAe,KAAA,EAAM;AACrC,QAAA,OAAA,CAAQ,KAAK,aAAa,CAAA;AAC1B,QAAAA,cAAAA,IAAA,IAAA,GAAA,MAAA,GAAAA,cAAAA,CAAe,GAAA,CAAI,MAAA,EAAQ,OAAA,CAAA;AAAA,MAC7B,CAAA,MAAO;AACL,QAAAA,cAAAA,IAAA,IAAA,GAAA,MAAA,GAAAA,cAAAA,CAAe,GAAA,CAAI,MAAA,EAAQ,cAAA,CAAA;AAAA,MAC7B;AAAA,IACF,CAAA;AACA,IAAA,MAAM,aAAA,uBAAoB,GAAA,EAAI;AAC9B,IAAA,MAAM,GAAA,GAAM,KAAK,KAAA,CAAM,MAAA;AACvB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAC5B,MAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,EAAG;AACpB,MAAA,MAAM,EAAE,QAAQ,WAAA,EAAa,MAAA,EAAQ,UAAS,GAAI,IAAA,CAAK,MAAM,CAAC,CAAA;AAC9D,MAAA,eAAA,CAAgB,MAAM,IAAI,EAAC;AAC3B,MAAA,MAAM,QAAA,GAAmB,gBAAA,CAAiB,KAAA,CAAM,MAAM,IAAI,QAAA,GAAW,SAAA;AACrE,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,eAAA,CAAgB,MAAM,CAAA,CAAEC,0BAAe,CAAA,GAAI;AAAA,UACzC,KAAA,EAAO;AAAA,YACL,KAAA,EAAO,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,GAAG,SAAA,CAAU,KAAK,CAAA,EAAA,CAAA,EAAM,MAAA,EAAQ,CAAA;AAAE;AACjE,SACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,eAAA,CAAgB,GAAG,CAAA,EAAG,WAAA,CAAY,OAAO,MAAA,EAAQ,QAAA,EAAU,QAAQ,QAAQ,CAAA;AAC3E,QAAA,eAAA;AAAA,UACE,CAAA;AAAA,UACA,SAAA,CAAU,KAAA;AAAA,UACV,oBAAA,CAAqB,KAAA;AAAA,UACrB,MAAA;AAAA,UACA,QAAA;AAAA,UACA,MAAA;AAAA,UACA,QAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,eAAA;AAAA,UACE,CAAA;AAAA,UACA,SAAA,CAAU,QAAQ,WAAA,CAAY,KAAA;AAAA,UAC9B,YAAA,CAAa,KAAA;AAAA,UACb,MAAA;AAAA,UACA,QAAA;AAAA,UACA,MAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAAA,IACF;AACA,IAAA,YAAA,CAAa,KAAA,GAAQ,eAAA;AACrB,IAAA,mBAAA,CAAoB,KAAA,GAAQ,cAAA;AAC5B,IAAA,mBAAA,CAAoB,KAAA,GAAQ,aAAA;AAAA,EAC9B,CAAC,CAAA;AAED,EAAA,OAAO,EAAE,YAAA,EAAc,mBAAA,EAAqB,mBAAA,EAAoB;AAClE;;;;"}
|
|
@@ -1,43 +1,312 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var vue = require('vue');
|
|
4
|
+
var antDesignVue = require('ant-design-vue');
|
|
5
|
+
var util = require('../utils/util.js');
|
|
6
|
+
var useIntl = require('../../../config-provider/src/useIntl.js');
|
|
7
|
+
var index = require('../../../../hooks/use-merged-state/index.js');
|
|
8
|
+
var lodashUnified = require('lodash-unified');
|
|
4
9
|
|
|
5
10
|
const EditKey = Symbol("edit");
|
|
6
|
-
const useEditProvider = (
|
|
11
|
+
const useEditProvider = (props, {
|
|
12
|
+
rawData,
|
|
13
|
+
getRowKey,
|
|
14
|
+
getIndexsByKey,
|
|
15
|
+
getRecordByKey
|
|
16
|
+
}) => {
|
|
17
|
+
var _a;
|
|
7
18
|
const editCellKeys = vue.shallowRef([]);
|
|
8
|
-
const
|
|
9
|
-
const
|
|
19
|
+
const editRowsMap = vue.shallowRef({});
|
|
20
|
+
const intl = useIntl.useIntl();
|
|
21
|
+
const editableType = vue.computed(() => {
|
|
22
|
+
var _a2;
|
|
23
|
+
return (_a2 = props.rowEditable) == null ? void 0 : _a2.type;
|
|
24
|
+
});
|
|
25
|
+
const [mergedEditableKeys, setMergedEditableKeys] = index.useMergedState([], {
|
|
26
|
+
value: vue.computed(() => {
|
|
27
|
+
var _a2;
|
|
28
|
+
return props.editableKeys || ((_a2 = props.rowEditable) == null ? void 0 : _a2.editableKeys);
|
|
29
|
+
}),
|
|
30
|
+
onChange: ((_a = props.rowEditable) == null ? void 0 : _a.onChange) ? (keys) => {
|
|
31
|
+
var _a2, _b, _c;
|
|
32
|
+
(_c = (_a2 = props.rowEditable) == null ? void 0 : _a2.onChange) == null ? void 0 : _c.call(
|
|
33
|
+
_a2,
|
|
34
|
+
// 计算编辑的key
|
|
35
|
+
keys != null ? keys : [],
|
|
36
|
+
(_b = keys == null ? void 0 : keys.map((key) => editRowsMap.value[key])) != null ? _b : []
|
|
37
|
+
);
|
|
38
|
+
} : void 0
|
|
39
|
+
});
|
|
40
|
+
const editingCells = vue.ref({});
|
|
41
|
+
const newLineRecordCache = vue.shallowRef({});
|
|
42
|
+
const editableKeysSet = vue.computed(() => {
|
|
43
|
+
var _a2;
|
|
44
|
+
const keys = editableType.value === "single" ? (_a2 = mergedEditableKeys.value) == null ? void 0 : _a2.slice(0, 1) : mergedEditableKeys.value;
|
|
45
|
+
return new Set(keys);
|
|
46
|
+
});
|
|
47
|
+
const isEditable = (recordKey) => {
|
|
48
|
+
var _a2;
|
|
49
|
+
if ((_a2 = mergedEditableKeys.value) == null ? void 0 : _a2.includes(recordKey)) return true;
|
|
50
|
+
return false;
|
|
51
|
+
};
|
|
52
|
+
const isRowEdit = vue.computed(() => !!editableType.value);
|
|
53
|
+
const openEditor = (key) => {
|
|
10
54
|
if (key) {
|
|
55
|
+
const newKeys = [...editCellKeys.value];
|
|
11
56
|
if (Array.isArray(key)) {
|
|
12
57
|
editCellKeys.value = key;
|
|
13
58
|
} else {
|
|
14
|
-
|
|
59
|
+
newKeys.includes(key) || newKeys.push(key);
|
|
15
60
|
}
|
|
16
|
-
|
|
61
|
+
editCellKeys.value = newKeys;
|
|
17
62
|
}
|
|
18
63
|
};
|
|
19
64
|
const closeEditor = (key) => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
65
|
+
const closeKeys = editCellKeys.value.filter((cellKey) => cellKey !== key);
|
|
66
|
+
const closeCells = closeKeys.map((key2) => editingCells.value[key2]).filter((cell) => {
|
|
67
|
+
var _a2, _b;
|
|
68
|
+
return !((_b = (_a2 = cell.column) == null ? void 0 : _a2.edit) == null ? void 0 : _b.keepEditMode);
|
|
69
|
+
});
|
|
70
|
+
const list = closeCells.map(
|
|
71
|
+
(cell) => new Promise((resolve) => {
|
|
72
|
+
cell == null ? void 0 : cell.validateEdit().then((r) => {
|
|
73
|
+
if (r === true) {
|
|
74
|
+
const cellKey = util.getCellKey(cell.rowKey, cell.columnKey);
|
|
75
|
+
resolve(cellKey);
|
|
76
|
+
} else {
|
|
77
|
+
resolve(null);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
})
|
|
81
|
+
);
|
|
82
|
+
Promise.all(list).then((keys) => {
|
|
83
|
+
const closeKeys2 = keys.filter((key2) => !!key2);
|
|
84
|
+
editCellKeys.value = editCellKeys.value.filter((key2) => !closeKeys2.includes(key2));
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
const setEditingCell = (params, isEdit) => {
|
|
88
|
+
const cellKey = util.getCellKey(params.rowKey, params.columnKey);
|
|
89
|
+
if (isEdit) {
|
|
90
|
+
editingCells.value[cellKey] = params;
|
|
91
|
+
} else {
|
|
92
|
+
delete editingCells.value[cellKey];
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
const getErrorListMapByErrors = (errors) => {
|
|
96
|
+
const errorMap = {};
|
|
97
|
+
errors.forEach(({ rowKey, columnKey, errorList }) => {
|
|
98
|
+
const key = [rowKey, columnKey].join("__");
|
|
99
|
+
if (errorList == null ? void 0 : errorList.length) {
|
|
100
|
+
errorMap[key] = errorList;
|
|
101
|
+
} else {
|
|
102
|
+
delete errorMap[key];
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
return errorMap;
|
|
106
|
+
};
|
|
107
|
+
const validateOneRowData = (recordKey) => {
|
|
108
|
+
const cellKeys = Object.keys(editingCells.value);
|
|
109
|
+
const rowCellKeys = cellKeys.filter((cellKey) => cellKey.startsWith(`${recordKey}_`));
|
|
110
|
+
const list = rowCellKeys.map(
|
|
111
|
+
(cellKey) => new Promise((resolve) => {
|
|
112
|
+
const cell = editingCells.value[cellKey];
|
|
113
|
+
cell == null ? void 0 : cell.validateEdit().then((r) => {
|
|
114
|
+
if (r === true) {
|
|
115
|
+
resolve({ ...cell, errorList: [] });
|
|
116
|
+
} else {
|
|
117
|
+
resolve({ ...cell, errorList: r });
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
})
|
|
121
|
+
);
|
|
122
|
+
return new Promise((resolve, reject) => {
|
|
123
|
+
Promise.all(list).then((errors) => {
|
|
124
|
+
resolve({
|
|
125
|
+
errors: errors.filter((t) => {
|
|
126
|
+
var _a2;
|
|
127
|
+
return (_a2 = t.errorList) == null ? void 0 : _a2.length;
|
|
128
|
+
}),
|
|
129
|
+
errorMap: getErrorListMapByErrors(errors)
|
|
130
|
+
});
|
|
131
|
+
}, reject);
|
|
132
|
+
});
|
|
133
|
+
};
|
|
134
|
+
const validateRowData = (recordKey) => new Promise((resolve, reject) => {
|
|
135
|
+
validateOneRowData(recordKey).then(({ errors, errorMap }) => {
|
|
136
|
+
var _a2;
|
|
137
|
+
(_a2 = props.onRowValidate) == null ? void 0 : _a2.call(props, { errors, errorMap });
|
|
138
|
+
resolve({ errors, errorMap });
|
|
139
|
+
}, reject);
|
|
140
|
+
});
|
|
141
|
+
const validateTableCellData = () => {
|
|
142
|
+
const cellKeys = Object.keys(editingCells.value);
|
|
143
|
+
const list = cellKeys.map(
|
|
144
|
+
(cellKey) => new Promise((resolve) => {
|
|
145
|
+
const cell = editingCells.value[cellKey];
|
|
146
|
+
cell == null ? void 0 : cell.validateEdit().then((r) => {
|
|
147
|
+
if (r === true) {
|
|
148
|
+
resolve({ ...cell, errorList: [] });
|
|
149
|
+
} else {
|
|
150
|
+
resolve({ ...cell, errorList: r });
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
})
|
|
154
|
+
);
|
|
155
|
+
return new Promise((resolve, reject) => {
|
|
156
|
+
Promise.all(list).then((errors) => {
|
|
157
|
+
resolve({
|
|
158
|
+
errors: errors.filter((t) => {
|
|
159
|
+
var _a2;
|
|
160
|
+
return (_a2 = t.errorList) == null ? void 0 : _a2.length;
|
|
161
|
+
}),
|
|
162
|
+
errorMap: getErrorListMapByErrors(errors)
|
|
163
|
+
});
|
|
164
|
+
}, reject);
|
|
29
165
|
});
|
|
30
166
|
};
|
|
167
|
+
const validateTableData = () => new Promise((resolve, reject) => {
|
|
168
|
+
validateTableCellData().then(({ errors, errorMap }) => {
|
|
169
|
+
var _a2;
|
|
170
|
+
(_a2 = props.onValidate) == null ? void 0 : _a2.call(props, { errors, errorMap });
|
|
171
|
+
resolve({ errors, errorMap, data: (errors == null ? void 0 : errors.length) ? void 0 : rawData.value });
|
|
172
|
+
}, reject);
|
|
173
|
+
});
|
|
174
|
+
const addEditRecord = (recordValue, options) => {
|
|
175
|
+
var _a2, _b, _c, _d;
|
|
176
|
+
if (isRowEdit.value && ((_a2 = Object.keys(newLineRecordCache.value)) == null ? void 0 : _a2.length) && ((_b = props.rowEditable) == null ? void 0 : _b.onlyAddOneLineAlertMessage) !== false) {
|
|
177
|
+
antDesignVue.message.warning(
|
|
178
|
+
((_c = props.rowEditable) == null ? void 0 : _c.onlyAddOneLineAlertMessage) || intl.getMessage("editableTable.onlyAddOneLine", "\u53EA\u80FD\u65B0\u589E\u4E00\u884C")
|
|
179
|
+
);
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
if (isRowEdit.value && editableKeysSet.value.size > 0 && editableType.value === "single") {
|
|
183
|
+
antDesignVue.message.warning(
|
|
184
|
+
((_d = props.rowEditable) == null ? void 0 : _d.onlyOneLineEditorAlertMessage) || intl.getMessage("editableTable.onlyOneLineEditor", "\u53EA\u80FD\u540C\u65F6\u7F16\u8F91\u4E00\u884C")
|
|
185
|
+
);
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
const recordKey = getRowKey.value(recordValue, -1);
|
|
189
|
+
if (!recordKey) {
|
|
190
|
+
throw new Error("\u8BF7\u8BBE\u7F6E recordCreatorProps.record \u5E76\u8FD4\u56DE\u4E00\u4E2A\u552F\u4E00\u7684key");
|
|
191
|
+
}
|
|
192
|
+
if (isRowEdit.value) {
|
|
193
|
+
editableKeysSet.value.add(recordKey);
|
|
194
|
+
editRowsMap.value[recordKey] = lodashUnified.cloneDeep(recordValue);
|
|
195
|
+
setMergedEditableKeys(Array.from(editableKeysSet.value));
|
|
196
|
+
vue.triggerRef(editRowsMap);
|
|
197
|
+
}
|
|
198
|
+
if ((options == null ? void 0 : options.position) === "top") {
|
|
199
|
+
rawData.value.unshift(recordValue);
|
|
200
|
+
} else {
|
|
201
|
+
rawData.value.push(recordValue);
|
|
202
|
+
}
|
|
203
|
+
newLineRecordCache.value[recordKey] = {
|
|
204
|
+
defaultValue: recordValue,
|
|
205
|
+
options
|
|
206
|
+
};
|
|
207
|
+
vue.triggerRef(rawData);
|
|
208
|
+
return true;
|
|
209
|
+
};
|
|
210
|
+
const startEditable = (recordKey, recordValue) => {
|
|
211
|
+
var _a2;
|
|
212
|
+
if (!isRowEdit.value) {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
if (editableKeysSet.value.size > 0 && editableType.value === "single") {
|
|
216
|
+
antDesignVue.message.warning(
|
|
217
|
+
((_a2 = props.rowEditable) == null ? void 0 : _a2.onlyOneLineEditorAlertMessage) || intl.getMessage("editableTable.onlyOneLineEditor", "\u53EA\u80FD\u540C\u65F6\u7F16\u8F91\u4E00\u884C")
|
|
218
|
+
);
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
editableKeysSet.value.add(recordKey);
|
|
222
|
+
editRowsMap.value[recordKey] = lodashUnified.cloneDeep(recordValue != null ? recordValue : getRecordByKey(recordKey));
|
|
223
|
+
setMergedEditableKeys(Array.from(editableKeysSet.value));
|
|
224
|
+
vue.triggerRef(editRowsMap);
|
|
225
|
+
return true;
|
|
226
|
+
};
|
|
227
|
+
const cancelEditable = (recordKey) => {
|
|
228
|
+
if (!isRowEdit.value) {
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
const newLineRecord = newLineRecordCache.value[recordKey];
|
|
232
|
+
if (newLineRecord) {
|
|
233
|
+
delete newLineRecordCache.value[recordKey];
|
|
234
|
+
const rowIndex = rawData.value.findIndex((item) => getRowKey.value(item, -1) === recordKey);
|
|
235
|
+
rawData.value.splice(rowIndex, 1);
|
|
236
|
+
vue.triggerRef(rawData);
|
|
237
|
+
}
|
|
238
|
+
editableKeysSet.value.delete(recordKey);
|
|
239
|
+
delete editRowsMap.value[recordKey];
|
|
240
|
+
setMergedEditableKeys(Array.from(editableKeysSet.value));
|
|
241
|
+
return true;
|
|
242
|
+
};
|
|
243
|
+
const saveEditable = async (recordKey) => {
|
|
244
|
+
var _a2, _b;
|
|
245
|
+
if (!isRowEdit.value) {
|
|
246
|
+
return false;
|
|
247
|
+
}
|
|
248
|
+
const { errors } = await validateRowData(recordKey);
|
|
249
|
+
if (!!errors.length) {
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
const editRow = editRowsMap.value[recordKey];
|
|
253
|
+
const originRow = getRecordByKey(recordKey);
|
|
254
|
+
const success = await ((_b = (_a2 = props.rowEditable) == null ? void 0 : _a2.onSave) == null ? void 0 : _b.call(_a2, recordKey, editRow, originRow));
|
|
255
|
+
if (success === false) {
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
upadteRowData(recordKey, editRow);
|
|
259
|
+
const newLineRecord = newLineRecordCache.value[recordKey];
|
|
260
|
+
if (newLineRecord) {
|
|
261
|
+
delete newLineRecordCache.value[recordKey];
|
|
262
|
+
}
|
|
263
|
+
await cancelEditable(recordKey);
|
|
264
|
+
return true;
|
|
265
|
+
};
|
|
266
|
+
const upadteRowData = (recordKey, editRow) => {
|
|
267
|
+
const recordIndexs = getIndexsByKey(recordKey);
|
|
268
|
+
const indexsLen = recordIndexs.length;
|
|
269
|
+
if (indexsLen === 1) {
|
|
270
|
+
rawData.value.splice(recordIndexs[0], 1, editRow);
|
|
271
|
+
}
|
|
272
|
+
if (indexsLen > 1) {
|
|
273
|
+
let copyData = rawData.value;
|
|
274
|
+
let item;
|
|
275
|
+
const childrenColumnName = props.childrenColumnName || "children";
|
|
276
|
+
for (let i = 0; i < indexsLen; i++) {
|
|
277
|
+
item = copyData[recordIndexs[i]];
|
|
278
|
+
if (i === indexsLen - 2) {
|
|
279
|
+
const currentData = (item == null ? void 0 : item[childrenColumnName]) || [];
|
|
280
|
+
currentData.splice(recordIndexs[indexsLen - 1], 1, editRow);
|
|
281
|
+
break;
|
|
282
|
+
}
|
|
283
|
+
copyData = (item == null ? void 0 : item[childrenColumnName]) || [];
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
vue.triggerRef(rawData);
|
|
287
|
+
};
|
|
31
288
|
vue.provide(EditKey, {
|
|
32
289
|
editCellKeys,
|
|
33
290
|
openEditor,
|
|
34
291
|
closeEditor,
|
|
35
|
-
oldValuesMap
|
|
292
|
+
// oldValuesMap,
|
|
293
|
+
editableType,
|
|
294
|
+
mergedEditableKeys,
|
|
295
|
+
isRowEdit,
|
|
296
|
+
editRowsMap,
|
|
297
|
+
setEditingCell
|
|
36
298
|
});
|
|
37
299
|
return {
|
|
38
300
|
editCellKeys,
|
|
39
301
|
openEditor,
|
|
40
|
-
closeEditor
|
|
302
|
+
closeEditor,
|
|
303
|
+
cancelEditable,
|
|
304
|
+
startEditable,
|
|
305
|
+
saveEditable,
|
|
306
|
+
isEditable,
|
|
307
|
+
validateTableData,
|
|
308
|
+
validateRowData,
|
|
309
|
+
addEditRecord
|
|
41
310
|
};
|
|
42
311
|
};
|
|
43
312
|
const useEditInject = () => {
|
|
@@ -47,7 +316,13 @@ const useEditInject = () => {
|
|
|
47
316
|
},
|
|
48
317
|
closeEditor: () => {
|
|
49
318
|
},
|
|
50
|
-
oldValuesMap:
|
|
319
|
+
// oldValuesMap: shallowRef({}),
|
|
320
|
+
editRowsMap: vue.shallowRef({}),
|
|
321
|
+
editableType: vue.computed(() => void 0),
|
|
322
|
+
isRowEdit: vue.computed(() => false),
|
|
323
|
+
mergedEditableKeys: vue.computed(() => []),
|
|
324
|
+
setEditingCell: () => {
|
|
325
|
+
}
|
|
51
326
|
});
|
|
52
327
|
};
|
|
53
328
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEdit.js","sources":["../../../../../../../../packages/components/table/src/hooks/useEdit.ts"],"sourcesContent":["/*\n * @Author: shen\n * @Date: 2023-11-03 11:03:37\n * @LastEditors: shen\n * @LastEditTime: 2023-12-29 10:38:16\n * @Description:\n */\nimport { shallowRef, provide, inject, ref } from 'vue'\nimport type { Ref, ShallowRef, InjectionKey } from 'vue'\n\ntype EditProps = {\n editCellKeys: Ref<string[]>\n openEditor: (key: string | string[], values?: Record<string, any>) => void\n closeEditor: (key?: string | string[]) => void\n oldValuesMap: ShallowRef<Record<string, any>>\n}\n\nconst EditKey: InjectionKey<EditProps> = Symbol('edit')\n\nexport const useEditProvider = () => {\n const editCellKeys = shallowRef<string[]>([])\n const oldValuesMap = shallowRef({})\n const openEditor = (key: string | string[], values?: Record<string, any>) => {\n if (key) {\n if (Array.isArray(key)) {\n editCellKeys.value = key\n } else {\n editCellKeys.value.includes(key) || (editCellKeys.value = [key])\n }\n Object.assign(oldValuesMap.value, values || {})\n }\n }\n const closeEditor = (key?: string | string[]) => {\n if (typeof key === 'undefined') {\n editCellKeys.value = []\n oldValuesMap.value = {}\n return\n }\n const keys = Array.isArray(key) ? key : [key]\n editCellKeys.value = editCellKeys.value.filter((key) => !keys.includes(key))\n keys.forEach((key) => {\n delete oldValuesMap.value[key]\n })\n }\n provide(EditKey, {\n editCellKeys,\n openEditor,\n closeEditor,\n oldValuesMap,\n })\n return {\n editCellKeys,\n openEditor,\n closeEditor,\n }\n}\nexport const useEditInject = () => {\n return inject(EditKey, {\n editCellKeys: ref([]),\n openEditor: () => {},\n closeEditor: () => {},\n oldValuesMap: shallowRef({}),\n })\n}\n"],"names":["shallowRef","key","provide","inject","ref"],"mappings":";;;;AAiBA,MAAM,OAAA,GAAmC,OAAO,MAAM,CAAA;AAE/C,MAAM,kBAAkB,MAAM;AACnC,EAAA,MAAM,YAAA,GAAeA,cAAA,CAAqB,EAAE,CAAA;AAC5C,EAAA,MAAM,YAAA,GAAeA,cAAA,CAAW,EAAE,CAAA;AAClC,EAAA,MAAM,UAAA,GAAa,CAAC,GAAA,EAAwB,MAAA,KAAiC;AAC3E,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,QAAA,YAAA,CAAa,KAAA,GAAQ,GAAA;AAAA,MACvB,CAAA,MAAO;AACL,QAAA,YAAA,CAAa,MAAM,QAAA,CAAS,GAAG,MAAM,YAAA,CAAa,KAAA,GAAQ,CAAC,GAAG,CAAA,CAAA;AAAA,MAChE;AACA,MAAA,MAAA,CAAO,MAAA,CAAO,YAAA,CAAa,KAAA,EAAO,MAAA,IAAU,EAAE,CAAA;AAAA,IAChD;AAAA,EACF,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,CAAC,GAAA,KAA4B;AAC/C,IAAA,IAAI,OAAO,QAAQ,WAAA,EAAa;AAC9B,MAAA,YAAA,CAAa,QAAQ,EAAC;AACtB,MAAA,YAAA,CAAa,QAAQ,EAAC;AACtB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,OAAO,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,GAAI,GAAA,GAAM,CAAC,GAAG,CAAA;AAC5C,IAAA,YAAA,CAAa,KAAA,GAAQ,YAAA,CAAa,KAAA,CAAM,MAAA,CAAO,CAACC,SAAQ,CAAC,IAAA,CAAK,QAAA,CAASA,IAAG,CAAC,CAAA;AAC3E,IAAA,IAAA,CAAK,OAAA,CAAQ,CAACA,IAAAA,KAAQ;AACpB,MAAA,OAAO,YAAA,CAAa,MAAMA,IAAG,CAAA;AAAA,IAC/B,CAAC,CAAA;AAAA,EACH,CAAA;AACA,EAAAC,WAAA,CAAQ,OAAA,EAAS;AAAA,IACf,YAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,OAAO;AAAA,IACL,YAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AACF;AACO,MAAM,gBAAgB,MAAM;AACjC,EAAA,OAAOC,WAAO,OAAA,EAAS;AAAA,IACrB,YAAA,EAAcC,OAAA,CAAI,EAAE,CAAA;AAAA,IACpB,YAAY,MAAM;AAAA,IAAC,CAAA;AAAA,IACnB,aAAa,MAAM;AAAA,IAAC,CAAA;AAAA,IACpB,YAAA,EAAcJ,cAAA,CAAW,EAAE;AAAA,GAC5B,CAAA;AACH;;;;;"}
|
|
1
|
+
{"version":3,"file":"useEdit.js","sources":["../../../../../../../../packages/components/table/src/hooks/useEdit.ts"],"sourcesContent":["/*\n * @Author: shen\n * @Date: 2023-11-03 11:03:37\n * @LastEditors: shen\n * @LastEditTime: 2025-12-02 17:15:49\n * @Description:\n */\nimport type { Ref, ShallowRef, InjectionKey, ComputedRef } from 'vue'\nimport type {\n AddLineOptions,\n DefaultRecordType,\n ErrorListObjectType,\n GetRowKey,\n Key,\n ProTableProps,\n RowEditableType,\n TableEditingCell,\n TableErrorListMap,\n TableExposeType,\n TablePromiseErrorData,\n} from '../components/interface'\nimport { shallowRef, provide, inject, ref, computed, triggerRef } from 'vue'\nimport { useMergedState } from '@pro-design-vue/hooks'\nimport { useIntl } from '@pro-design-vue/components/config-provider'\nimport { message } from 'ant-design-vue'\nimport { cloneDeep } from '@pro-design-vue/utils'\nimport { getCellKey } from '../utils/util'\n\ntype EditProps = {\n editCellKeys: Ref<string[]>\n openEditor: (key: string | string[]) => void\n closeEditor: (key: string) => void\n // oldValuesMap: ShallowRef<Record<string, any>>\n editableType: ComputedRef<RowEditableType | undefined>\n mergedEditableKeys: Ref<Key[] | undefined>\n isRowEdit: ComputedRef<boolean>\n editRowsMap: ShallowRef<Record<string, Record<string, any>>>\n setEditingCell: (params: TableEditingCell, isEdit: boolean) => void\n}\n\nconst EditKey: InjectionKey<EditProps> = Symbol('edit')\n\nexport const useEditProvider = (\n props: ProTableProps,\n {\n rawData,\n getRowKey,\n getIndexsByKey,\n getRecordByKey,\n }: {\n rawData: ShallowRef<DefaultRecordType[]>\n getRowKey: ComputedRef<GetRowKey>\n getIndexsByKey: (key: Key) => number[]\n getRecordByKey: (key: Key) => DefaultRecordType\n },\n) => {\n const editCellKeys = shallowRef<string[]>([])\n // const oldValuesMap = shallowRef({})\n const editRowsMap = shallowRef({})\n const intl = useIntl()\n const editableType = computed<RowEditableType | undefined>(() => props.rowEditable?.type)\n const [mergedEditableKeys, setMergedEditableKeys] = useMergedState<Key[] | undefined>([], {\n value: computed(() => props.editableKeys || props.rowEditable?.editableKeys),\n onChange: props.rowEditable?.onChange\n ? (keys) => {\n props.rowEditable?.onChange?.(\n // 计算编辑的key\n keys ?? [],\n keys?.map((key) => editRowsMap.value[key]) ?? [],\n )\n }\n : undefined,\n })\n\n // 当前编辑的单元格\n const editingCells = ref<{ [cellKey: string]: TableEditingCell }>({})\n const newLineRecordCache = shallowRef<{\n [key: Key]: { defaultValue: any; options: AddLineOptions }\n }>({})\n /** 一个用来标志的set 提供了方便的 api 来去重什么的 */\n const editableKeysSet = computed(() => {\n const keys =\n editableType.value === 'single'\n ? mergedEditableKeys.value?.slice(0, 1)\n : mergedEditableKeys.value\n return new Set(keys)\n })\n\n const isEditable = (recordKey: Key) => {\n if (mergedEditableKeys.value?.includes(recordKey)) return true\n return false\n }\n const isRowEdit = computed(() => !!editableType.value)\n\n const openEditor = (key: string | string[]) => {\n if (key) {\n const newKeys = [...editCellKeys.value]\n if (Array.isArray(key)) {\n editCellKeys.value = key\n } else {\n newKeys.includes(key) || newKeys.push(key)\n }\n editCellKeys.value = newKeys\n // Object.assign(oldValuesMap.value, values || {})\n }\n }\n const closeEditor = (key: string) => {\n const closeKeys = editCellKeys.value.filter((cellKey) => cellKey !== key)\n const closeCells = closeKeys\n .map((key) => editingCells.value[key]!)\n .filter((cell) => !cell.column?.edit?.keepEditMode)\n const list = closeCells.map(\n (cell) =>\n new Promise((resolve) => {\n cell?.validateEdit().then((r) => {\n if (r === true) {\n const cellKey = getCellKey(cell.rowKey, cell.columnKey)\n resolve(cellKey)\n } else {\n resolve(null)\n }\n })\n }),\n )\n\n Promise.all(list).then((keys) => {\n const closeKeys = keys.filter((key) => !!key)\n editCellKeys.value = editCellKeys.value.filter((key) => !closeKeys.includes(key))\n })\n }\n\n const setEditingCell = (params: TableEditingCell, isEdit: boolean) => {\n const cellKey = getCellKey(params.rowKey, params.columnKey)\n\n if (isEdit) {\n // @ts-ignore\n editingCells.value[cellKey] = params\n } else {\n delete editingCells.value[cellKey]\n }\n }\n\n const getErrorListMapByErrors = (errors: ErrorListObjectType[]): TableErrorListMap => {\n const errorMap: TableErrorListMap = {}\n errors.forEach(({ rowKey, columnKey, errorList }) => {\n const key = [rowKey, columnKey].join('__')\n if (errorList?.length) {\n errorMap[key] = errorList\n } else {\n delete errorMap[key]\n }\n })\n return errorMap\n }\n\n // 校验一行的数据\n const validateOneRowData = (recordKey: Key) => {\n const cellKeys = Object.keys(editingCells.value)\n const rowCellKeys = cellKeys.filter((cellKey) => cellKey.startsWith(`${recordKey}_`))\n const list = rowCellKeys.map(\n (cellKey) =>\n new Promise<ErrorListObjectType>((resolve) => {\n const cell = editingCells.value[cellKey]\n cell?.validateEdit().then((r) => {\n if (r === true) {\n resolve({ ...cell, errorList: [] })\n } else {\n resolve({ ...cell, errorList: r })\n }\n })\n }),\n )\n return new Promise<TablePromiseErrorData>((resolve, reject) => {\n Promise.all(list).then((errors) => {\n resolve({\n errors: errors.filter((t) => t.errorList?.length),\n errorMap: getErrorListMapByErrors(errors),\n })\n }, reject)\n })\n }\n\n /**\n * 校验表格单行数据(对外开放方法,修改时需慎重)\n * @param recordKey 行唯一标识\n */\n const validateRowData: TableExposeType['validateRowData'] = (recordKey: Key) =>\n new Promise((resolve, reject) => {\n validateOneRowData(recordKey).then(({ errors, errorMap }) => {\n props.onRowValidate?.({ errors, errorMap })\n resolve({ errors, errorMap })\n }, reject)\n })\n\n // 校验可编辑单元格\n const validateTableCellData = () => {\n const cellKeys = Object.keys(editingCells.value)\n const list = cellKeys.map(\n (cellKey) =>\n new Promise<ErrorListObjectType>((resolve) => {\n const cell = editingCells.value[cellKey]\n cell?.validateEdit().then((r) => {\n if (r === true) {\n resolve({ ...cell, errorList: [] })\n } else {\n resolve({ ...cell, errorList: r })\n }\n })\n }),\n )\n return new Promise<TablePromiseErrorData>((resolve, reject) => {\n Promise.all(list).then((errors) => {\n resolve({\n errors: errors.filter((t) => t.errorList?.length),\n errorMap: getErrorListMapByErrors(errors),\n })\n }, reject)\n })\n }\n /**\n * 校验整个表格数据(对外开放方法,修改时需慎重)\n */\n const validateTableData: TableExposeType['validateTableData'] = () =>\n new Promise((resolve, reject) => {\n validateTableCellData().then(({ errors, errorMap }) => {\n props.onValidate?.({ errors, errorMap })\n resolve({ errors, errorMap, data: errors?.length ? undefined : rawData.value })\n }, reject)\n })\n\n /**\n * 添加编辑行数据\n *\n * @param recordKey\n */\n const addEditRecord = (recordValue: any, options: AddLineOptions) => {\n // 暂时不支持多行新增\n if (\n isRowEdit.value &&\n Object.keys(newLineRecordCache.value)?.length &&\n props.rowEditable?.onlyAddOneLineAlertMessage !== false\n ) {\n message.warning(\n props.rowEditable?.onlyAddOneLineAlertMessage ||\n intl.getMessage('editableTable.onlyAddOneLine', '只能新增一行'),\n )\n return false\n }\n // 如果是单行的话,不允许多行编辑\n if (isRowEdit.value && editableKeysSet.value.size > 0 && editableType.value === 'single') {\n message.warning(\n props.rowEditable?.onlyOneLineEditorAlertMessage ||\n intl.getMessage('editableTable.onlyOneLineEditor', '只能同时编辑一行'),\n )\n return false\n }\n\n const recordKey = getRowKey.value(recordValue, -1)\n if (!recordKey) {\n throw new Error('请设置 recordCreatorProps.record 并返回一个唯一的key')\n }\n if (isRowEdit.value) {\n editableKeysSet.value.add(recordKey)\n editRowsMap.value[recordKey] = cloneDeep(recordValue)\n setMergedEditableKeys(Array.from(editableKeysSet.value))\n triggerRef(editRowsMap)\n }\n if (options?.position === 'top') {\n rawData.value.unshift(recordValue)\n } else {\n rawData.value.push(recordValue)\n }\n newLineRecordCache.value[recordKey] = {\n defaultValue: recordValue,\n options,\n }\n triggerRef(rawData)\n return true\n }\n\n /**\n * 进入编辑状态\n *\n * @param recordKey\n */\n const startEditable = (recordKey: Key, recordValue?: any) => {\n if (!isRowEdit.value) {\n return false\n }\n // 如果是单行的话,不允许多行编辑\n if (editableKeysSet.value.size > 0 && editableType.value === 'single') {\n message.warning(\n props.rowEditable?.onlyOneLineEditorAlertMessage ||\n intl.getMessage('editableTable.onlyOneLineEditor', '只能同时编辑一行'),\n )\n return false\n }\n editableKeysSet.value.add(recordKey)\n\n editRowsMap.value[recordKey] = cloneDeep(recordValue ?? getRecordByKey(recordKey))\n setMergedEditableKeys(Array.from(editableKeysSet.value))\n triggerRef(editRowsMap)\n return true\n }\n\n /**\n * 退出编辑状态\n *\n * @param recordKey\n */\n const cancelEditable = (recordKey: Key) => {\n if (!isRowEdit.value) {\n return false\n }\n const newLineRecord = newLineRecordCache.value[recordKey]\n if (newLineRecord) {\n delete newLineRecordCache.value[recordKey]\n const rowIndex = rawData.value.findIndex((item) => getRowKey.value(item, -1) === recordKey)\n rawData.value.splice(rowIndex, 1)\n triggerRef(rawData)\n }\n editableKeysSet.value.delete(recordKey)\n delete editRowsMap.value[recordKey]\n setMergedEditableKeys(Array.from(editableKeysSet.value))\n\n return true\n }\n\n /**\n * 保存编辑\n *\n * @param recordKey\n */\n const saveEditable = async (recordKey: Key) => {\n if (!isRowEdit.value) {\n return false\n }\n const { errors } = await validateRowData(recordKey)\n if (!!errors.length) {\n return false\n }\n const editRow = editRowsMap.value[recordKey]\n const originRow = getRecordByKey(recordKey)\n const success = await props.rowEditable?.onSave?.(recordKey, editRow, originRow)\n if (success === false) {\n return false\n }\n upadteRowData(recordKey, editRow)\n const newLineRecord = newLineRecordCache.value[recordKey]\n if (newLineRecord) {\n delete newLineRecordCache.value[recordKey]\n }\n await cancelEditable(recordKey)\n return true\n }\n\n const upadteRowData = (recordKey: Key, editRow: any) => {\n const recordIndexs = getIndexsByKey(recordKey)\n const indexsLen = recordIndexs.length\n if (indexsLen === 1) {\n rawData.value.splice(recordIndexs[0]!, 1, editRow)\n }\n\n if (indexsLen > 1) {\n let copyData: DefaultRecordType[] = rawData.value\n let item: DefaultRecordType\n const childrenColumnName = props.childrenColumnName || 'children'\n for (let i = 0; i < indexsLen; i++) {\n item = copyData[recordIndexs[i]!]!\n if (i === indexsLen - 2) {\n const currentData = item?.[childrenColumnName] || []\n currentData.splice(recordIndexs[indexsLen - 1]!, 1, editRow)\n break\n }\n copyData = item?.[childrenColumnName] || []\n }\n }\n triggerRef(rawData)\n }\n\n provide(EditKey, {\n editCellKeys,\n openEditor,\n closeEditor,\n // oldValuesMap,\n editableType,\n mergedEditableKeys,\n isRowEdit,\n editRowsMap,\n setEditingCell,\n })\n return {\n editCellKeys,\n openEditor,\n closeEditor,\n cancelEditable,\n startEditable,\n saveEditable,\n isEditable,\n validateTableData,\n validateRowData,\n addEditRecord,\n }\n}\nexport const useEditInject = () => {\n return inject(EditKey, {\n editCellKeys: ref([]),\n openEditor: () => {},\n closeEditor: () => {},\n // oldValuesMap: shallowRef({}),\n editRowsMap: shallowRef({}),\n editableType: computed(() => undefined),\n isRowEdit: computed(() => false),\n mergedEditableKeys: computed(() => []),\n setEditingCell: () => {},\n })\n}\n"],"names":["shallowRef","useIntl","computed","_a","useMergedState","ref","key","getCellKey","closeKeys","message","cloneDeep","triggerRef","provide","inject"],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var validate$1 = require('../../../../utils/validate.js');
|
|
4
|
+
|
|
5
|
+
function getCharacterLength(str, maxCharacter) {
|
|
6
|
+
const hasMaxCharacter = validate$1.isNumber(maxCharacter);
|
|
7
|
+
if (!str || str.length === 0) {
|
|
8
|
+
if (hasMaxCharacter) {
|
|
9
|
+
return {
|
|
10
|
+
length: 0,
|
|
11
|
+
characters: str
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
return 0;
|
|
15
|
+
}
|
|
16
|
+
let len = 0;
|
|
17
|
+
for (let i = 0; i < str.length; i++) {
|
|
18
|
+
let currentStringLength = 0;
|
|
19
|
+
if (str.charCodeAt(i) > 127) {
|
|
20
|
+
currentStringLength = 2;
|
|
21
|
+
} else {
|
|
22
|
+
currentStringLength = 1;
|
|
23
|
+
}
|
|
24
|
+
if (hasMaxCharacter && len + currentStringLength > maxCharacter) {
|
|
25
|
+
return {
|
|
26
|
+
length: len,
|
|
27
|
+
characters: str.slice(0, i)
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
len += currentStringLength;
|
|
31
|
+
}
|
|
32
|
+
if (hasMaxCharacter) {
|
|
33
|
+
return {
|
|
34
|
+
length: len,
|
|
35
|
+
characters: str
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
return len;
|
|
39
|
+
}
|
|
40
|
+
function isValueEmpty(val) {
|
|
41
|
+
const type = Object.prototype.toString.call(val);
|
|
42
|
+
const typeMap = {
|
|
43
|
+
Date: "[object Date]"
|
|
44
|
+
};
|
|
45
|
+
if (type === typeMap.Date) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
return validate$1.isObject(val) ? validate$1.isEmpty(val) : ["", void 0, null].includes(val);
|
|
49
|
+
}
|
|
50
|
+
const VALIDATE_MAP = {
|
|
51
|
+
required: (val) => !isValueEmpty(val),
|
|
52
|
+
whitespace: (val) => !(/^\s+$/.test(val) || val === ""),
|
|
53
|
+
boolean: (val) => validate$1.isBoolean(val),
|
|
54
|
+
max: (val, num) => validate$1.isNumber(val) ? val <= num : getCharacterLength(val) <= num,
|
|
55
|
+
min: (val, num) => validate$1.isNumber(val) ? val >= num : getCharacterLength(val) >= num,
|
|
56
|
+
len: (val, num) => getCharacterLength(String(val)) === num,
|
|
57
|
+
number: (val) => validate$1.isNumber(val),
|
|
58
|
+
enum: (val, strs) => strs.includes(val),
|
|
59
|
+
idcard: (val) => /^(\d{18,18}|\d{15,15}|\d{17,17}x)$/i.test(val),
|
|
60
|
+
telnumber: (val) => /^1[3-9]\d{9}$/.test(val),
|
|
61
|
+
pattern: (val, regexp) => regexp.test(val),
|
|
62
|
+
// 自定义校验规则,可能是异步校验
|
|
63
|
+
validator: (val, validate2) => validate2(val)
|
|
64
|
+
};
|
|
65
|
+
async function validateOneRule(value, rule) {
|
|
66
|
+
let validateResult = { result: true };
|
|
67
|
+
const keys = Object.keys(rule);
|
|
68
|
+
let vOptions;
|
|
69
|
+
let vValidateFun;
|
|
70
|
+
for (let i = 0; i < keys.length; i++) {
|
|
71
|
+
const key = keys[i];
|
|
72
|
+
if (!rule.required && isValueEmpty(value) && !rule.validator) {
|
|
73
|
+
return validateResult;
|
|
74
|
+
}
|
|
75
|
+
const validateRule = VALIDATE_MAP[key];
|
|
76
|
+
if (validateRule && (rule[key] || rule[key] === 0)) {
|
|
77
|
+
vOptions = rule[key] === true ? void 0 : rule[key];
|
|
78
|
+
vValidateFun = validateRule;
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (vValidateFun) {
|
|
83
|
+
validateResult = await vValidateFun(value, vOptions);
|
|
84
|
+
if (validate$1.isBoolean(validateResult)) {
|
|
85
|
+
return { ...rule, result: validateResult };
|
|
86
|
+
}
|
|
87
|
+
if (validate$1.isObject(validateResult)) {
|
|
88
|
+
return validateResult;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return validateResult;
|
|
92
|
+
}
|
|
93
|
+
async function validate(value, rules) {
|
|
94
|
+
const all = rules.map((rule) => validateOneRule(value, rule));
|
|
95
|
+
const r = await Promise.all(all);
|
|
96
|
+
return r;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
exports.isValueEmpty = isValueEmpty;
|
|
100
|
+
exports.validate = validate;
|
|
101
|
+
exports.validateOneRule = validateOneRule;
|
|
102
|
+
//# sourceMappingURL=form-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-model.js","sources":["../../../../../../../../packages/components/table/src/utils/form-model.ts"],"sourcesContent":["/*\n * @Author: shen\n * @Date: 2025-12-02 09:58:56\n * @LastEditors: shen\n * @LastEditTime: 2025-12-02 10:24:20\n * @Description:\n */\nimport { isEmpty, isObject, isNumber, isBoolean } from '@pro-design-vue/utils'\n\n/**\n * 计算字符串字符的长度并可以截取字符串。\n * @param str 传入字符串\n * @param maxCharacter 规定最大字符串长度\n * @returns 当没有传入maxCharacter时返回字符串字符长度,当传入maxCharacter时返回截取之后的字符串和长度。\n */\nfunction getCharacterLength(str: string): number\nfunction getCharacterLength(\n str: string,\n maxCharacter?: number,\n): { length: number; characters: string }\nfunction getCharacterLength(str: string, maxCharacter?: number) {\n const hasMaxCharacter = isNumber(maxCharacter)\n if (!str || str.length === 0) {\n if (hasMaxCharacter) {\n return {\n length: 0,\n characters: str,\n }\n }\n return 0\n }\n let len = 0\n for (let i = 0; i < str.length; i++) {\n let currentStringLength = 0\n if (str.charCodeAt(i) > 127) {\n currentStringLength = 2\n } else {\n currentStringLength = 1\n }\n if (hasMaxCharacter && len + currentStringLength > maxCharacter) {\n return {\n length: len,\n characters: str.slice(0, i),\n }\n }\n len += currentStringLength\n }\n if (hasMaxCharacter) {\n return {\n length: len,\n characters: str,\n }\n }\n return len\n}\n\n// `{} / [] / '' / undefined / null` 等内容被认为是空; 0 和 false 被认为是正常数据,部分数据的值就是 0 或者 false\nexport function isValueEmpty(val: any): boolean {\n const type: string = Object.prototype.toString.call(val)\n const typeMap: Record<string, any> = {\n Date: '[object Date]',\n }\n if (type === typeMap.Date) {\n return false\n }\n return isObject(val) ? isEmpty(val) : ['', undefined, null].includes(val)\n}\n\nconst VALIDATE_MAP = {\n required: (val: any): boolean => !isValueEmpty(val),\n whitespace: (val: any): boolean => !(/^\\s+$/.test(val) || val === ''),\n boolean: (val: any): boolean => isBoolean(val),\n max: (val: any, num: number): boolean =>\n isNumber(val) ? val <= num : getCharacterLength(val) <= num,\n min: (val: any, num: number): boolean =>\n isNumber(val) ? val >= num : getCharacterLength(val) >= num,\n len: (val: any, num: number): boolean => getCharacterLength(String(val)) === num,\n number: (val: any): boolean => isNumber(val),\n enum: (val: any, strs: Array<string>): boolean => strs.includes(val),\n idcard: (val: any): boolean => /^(\\d{18,18}|\\d{15,15}|\\d{17,17}x)$/i.test(val),\n telnumber: (val: any): boolean => /^1[3-9]\\d{9}$/.test(val),\n pattern: (val: any, regexp: RegExp): boolean => regexp.test(val),\n // 自定义校验规则,可能是异步校验\n validator: (val: any, validate: any): ReturnType<any> => validate(val),\n}\n\nexport type ValidateFuncType = (typeof VALIDATE_MAP)[keyof typeof VALIDATE_MAP]\n\n/**\n * 校验某一条数据的某一条规则,一种校验规则不满足则不再进行校验。\n * @param value 值\n * @param rule 校验规则\n * @returns 两种校验结果,一种是内置校验规则的校验结果哦,二种是自定义校验规则(validator)的校验结果\n */\nexport async function validateOneRule(value: any, rule: any): Promise<any> {\n let validateResult: any = { result: true }\n const keys = Object.keys(rule) as (keyof any)[]\n let vOptions: undefined | any[keyof any]\n let vValidateFun: any\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]!\n // 非必填选项,值为空,非自定义规则:无需校验,直接返回 true\n if (!rule.required && isValueEmpty(value) && !rule.validator) {\n return validateResult\n }\n\n const validateRule: ValidateFuncType = VALIDATE_MAP[key as keyof typeof VALIDATE_MAP]\n // 找到一个校验规则,则无需再找,因为参数只允许对一个规则进行校验\n if (validateRule && (rule[key] || rule[key] === 0)) {\n // rule 值为 true 则表示没有校验参数,只是对值进行默认规则校验\n vOptions = rule[key] === true ? undefined : rule[key]\n vValidateFun = validateRule\n break\n }\n }\n if (vValidateFun) {\n // @ts-ignore\n validateResult = await vValidateFun(value, vOptions)\n // 如果校验不通过,则返回校验不通过的规则\n if (isBoolean(validateResult)) {\n return { ...rule, result: validateResult }\n }\n // 校验结果为 CustomValidateObj,只有自定义校验规则会存在这种情况\n if (isObject(validateResult)) {\n return validateResult\n }\n }\n return validateResult\n}\n\n// 单个数据进行全规则校验,校验成功也可能会有 message\nexport async function validate(value: any, rules: Array<any>): Promise<any[]> {\n const all = rules.map((rule) => validateOneRule(value, rule))\n const r = await Promise.all(all)\n return r\n}\n"],"names":["isNumber","isObject","isEmpty","isBoolean","validate"],"mappings":"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"}
|
|
@@ -28,6 +28,9 @@ const genColumnKey = (key, index) => {
|
|
|
28
28
|
function getColumnPos(index, pos) {
|
|
29
29
|
return pos ? `${pos}-${index}` : `${index}`;
|
|
30
30
|
}
|
|
31
|
+
function getCellKey(rowKey, colKey) {
|
|
32
|
+
return [rowKey, colKey].join("_");
|
|
33
|
+
}
|
|
31
34
|
function objectToEmpty(obj) {
|
|
32
35
|
for (const key in obj) Object.prototype.hasOwnProperty.call(obj, key) && delete obj[key];
|
|
33
36
|
}
|
|
@@ -230,6 +233,7 @@ exports.deleteNestItemData = deleteNestItemData;
|
|
|
230
233
|
exports.ensureValidVNode = ensureValidVNode;
|
|
231
234
|
exports.eventsClose = eventsClose;
|
|
232
235
|
exports.genColumnKey = genColumnKey;
|
|
236
|
+
exports.getCellKey = getCellKey;
|
|
233
237
|
exports.getColumnPos = getColumnPos;
|
|
234
238
|
exports.getPathValue = getPathValue;
|
|
235
239
|
exports.is = is;
|