From 9c2f3f30bbd8abcccc4f256183ed7794da7fcda2 Mon Sep 17 00:00:00 2001 From: vben Date: Thu, 31 Dec 2020 21:24:47 +0800 Subject: [PATCH] refactor(table): refactor table #150 #148 #146 #130 #76 --- CHANGELOG.zh_CN.md | 59 ++- mock/demo/table-demo.ts | 8 + src/components/Form/index.ts | 3 + .../Form/src/components/ApiSelect.vue | 5 +- src/components/Menu/src/useOpenKeys.ts | 8 +- src/components/Table/index.ts | 3 +- src/components/Table/src/BasicTable.vue | 99 +++-- src/components/Table/src/componentMap.ts | 8 +- .../src/components/EditTableHeaderIcon.vue | 3 +- .../Table/src/components/HeaderCell.vue | 55 +++ .../Table/src/components/TableAction.vue | 7 +- .../src/components/editable/CellComponent.ts | 33 ++ .../src/components/editable/EditableCell.vue | 359 ++++++++++++++++++ .../Table/src/components/editable/helper.ts | 26 ++ .../Table/src/components/editable/index.ts | 52 +++ .../Table/src/components/renderEditable.tsx | 241 ------------ .../Table/src/components/renderExpandIcon.tsx | 14 - .../src/components/settings/ColumnSetting.vue | 2 +- src/components/Table/src/const.ts | 4 + src/components/Table/src/hooks/useColumns.ts | 73 +++- .../Table/src/hooks/useDataSource.ts | 62 ++- src/components/Table/src/hooks/useTable.ts | 48 ++- .../Table/src/hooks/useTableScroll.ts | 7 +- src/components/Table/src/props.ts | 10 +- .../Table/src/style/editable-cell.less | 39 -- src/components/Table/src/style/index.less | 16 +- .../Table/src/types/componentType.ts | 3 +- src/components/Table/src/types/table.ts | 56 ++- src/layouts/default/sider/MixSider.vue | 5 + src/router/menus/modules/demo/comp.ts | 9 + src/utils/dateUtil.ts | 11 +- src/views/demo/table/EditCellTable.vue | 130 +++++-- src/views/demo/table/EditRowTable.vue | 113 +++++- src/views/demo/table/FixedColumn.vue | 2 +- src/views/demo/table/tableData.tsx | 8 +- 35 files changed, 1113 insertions(+), 468 deletions(-) create mode 100644 src/components/Table/src/components/HeaderCell.vue create mode 100644 src/components/Table/src/components/editable/CellComponent.ts create mode 100644 src/components/Table/src/components/editable/EditableCell.vue create mode 100644 src/components/Table/src/components/editable/helper.ts create mode 100644 src/components/Table/src/components/editable/index.ts delete mode 100644 src/components/Table/src/components/renderEditable.tsx delete mode 100644 src/components/Table/src/components/renderExpandIcon.tsx delete mode 100644 src/components/Table/src/style/editable-cell.less diff --git a/CHANGELOG.zh_CN.md b/CHANGELOG.zh_CN.md index 8a793e4a..067dde18 100644 --- a/CHANGELOG.zh_CN.md +++ b/CHANGELOG.zh_CN.md @@ -1,5 +1,55 @@ ## Wip +### ✨ 表格破坏性更新 + +- 重构了可编辑单元格及可编辑行。具体看示例。写法已改变。针对可编辑表格。 + +- 表格编辑支持表单校验 + +- 在表格列配置增加了以下配置 + +```bash +{ + + # 默认是否显示列。不显示的可以在列配置打开 + defaultHidden?: boolean; + # 列头右侧帮助文本 + helpMessage?: string | string[]; + # 自定义格式化 单元格内容。 支持时间/枚举自动转化 + format?: CellFormat; + + # Editable + # 是否是可编辑单元格 + edit?: boolean; + # 是否是可编辑行 + editRow?: boolean; + # 编辑状态。 + editable?: boolean; + # 编辑组件 + editComponent?: ComponentType; + # 所对应组件的参数 + editComponentProps?: Recordable; + # 校验 + editRule?: boolean | ((text: string, record: Recordable) => Promise); + # 值枚举转化 + editValueMap?: (value: any) => string; + # 触发编辑正航 + record.onEditRow?: () => void; +} + +``` + +### ✨ 表格重构 + +- 新增`clickToRowSelect`属性。用于控制点击行是否选中勾选框 +- 监听行点击事件 +- 表格列配置按钮增加 列拖拽,列固定功能。 +- 表格列配置新增`defaultHidden` 属性。用于默认隐藏。可在表格列配置勾选显示 +- 更强大的列配置 +- useTable:支持动态改变参数。可以传入`Ref`类型与`Computed`类型进行动态更改 +- useTable:新增返回 `getForm`函数。可以用于操作表格内的表单 +- 修复表格已知的问题 + ### ✨ Features - 新增 `v-ripple`水波纹指令 @@ -12,14 +62,6 @@ - form: 新增远程下拉`ApiSelect`及示例 - form: 新增`autoFocusFirstItem`配置。用于配置是否聚焦表单第一个输入框 - useForm: 支持动态改变参数。可以传入`Ref`类型与`Computed`类型进行动态更改 -- table: 新增`clickToRowSelect`属性。用于控制点击行是否选中勾选狂 -- table: 监听行点击事件 -- table: 表格列配置按钮增加 列拖拽,列固定功能。 -- table:表格列配置新增`defaultHidden` 属性。用于默认隐藏。可在表格列配置勾选显示 - -### ✨ Refactor - -- 重构表单,解决已知 bug ### ⚡ Performance Improvements @@ -30,6 +72,7 @@ ### 🎫 Chores - 升级`ant-design-vue`到`2.0.0-rc.7` +- 升级`vue`到`3.0.5` ### 🐛 Bug Fixes diff --git a/mock/demo/table-demo.ts b/mock/demo/table-demo.ts index 7db502b3..17e80228 100644 --- a/mock/demo/table-demo.ts +++ b/mock/demo/table-demo.ts @@ -10,6 +10,14 @@ const demoList = (() => { endTime: '@datetime', address: '@city()', name: '@cname()', + name1: '@cname()', + name2: '@cname()', + name3: '@cname()', + name4: '@cname()', + name5: '@cname()', + name6: '@cname()', + name7: '@cname()', + name8: '@cname()', 'no|100000-10000000': 100000, 'status|1': ['normal', 'enable', 'disable'], }); diff --git a/src/components/Form/index.ts b/src/components/Form/index.ts index fbbea27e..6bac0c4a 100644 --- a/src/components/Form/index.ts +++ b/src/components/Form/index.ts @@ -9,4 +9,7 @@ export * from './src/types/formItem'; export { useComponentRegister } from './src/hooks/useComponentRegister'; export { useForm } from './src/hooks/useForm'; +export { default as ApiSelect } from './src/components/ApiSelect.vue'; +export { default as RadioButtonGroup } from './src/components/RadioButtonGroup.vue'; + export { BasicForm }; diff --git a/src/components/Form/src/components/ApiSelect.vue b/src/components/Form/src/components/ApiSelect.vue index 0c62e040..fb7f7a10 100644 --- a/src/components/Form/src/components/ApiSelect.vue +++ b/src/components/Form/src/components/ApiSelect.vue @@ -50,7 +50,8 @@ labelField: propTypes.string.def('label'), valueField: propTypes.string.def('value'), }, - setup(props) { + emits: ['options-change', 'change'], + setup(props, { emit }) { const options = ref([]); const loading = ref(false); const attrs = useAttrs(); @@ -86,11 +87,13 @@ const res = await api(props.params); if (Array.isArray(res)) { options.value = res; + emit('options-change', unref(options)); return; } if (props.resultField) { options.value = get(res, props.resultField) || []; } + emit('options-change', unref(options)); } catch (error) { console.warn(error); } finally { diff --git a/src/components/Menu/src/useOpenKeys.ts b/src/components/Menu/src/useOpenKeys.ts index 52111399..a9c56423 100644 --- a/src/components/Menu/src/useOpenKeys.ts +++ b/src/components/Menu/src/useOpenKeys.ts @@ -15,7 +15,7 @@ export function useOpenKeys( mode: Ref, accordion: Ref ) { - const { getCollapsed } = useMenuSetting(); + const { getCollapsed, getIsMixSidebar } = useMenuSetting(); function setOpenKeys(path: string) { if (mode.value === MenuModeEnum.HORIZONTAL) { @@ -30,7 +30,9 @@ export function useOpenKeys( } const getOpenKeys = computed(() => { - return unref(getCollapsed) ? menuState.collapsedOpenKeys : menuState.openKeys; + const collapse = unref(getIsMixSidebar) ? false : unref(getCollapsed); + + return collapse ? menuState.collapsedOpenKeys : menuState.openKeys; }); /** @@ -42,7 +44,7 @@ export function useOpenKeys( } function handleOpenChange(openKeys: string[]) { - if (unref(mode) === MenuModeEnum.HORIZONTAL || !unref(accordion)) { + if (unref(mode) === MenuModeEnum.HORIZONTAL || !unref(accordion) || unref(getIsMixSidebar)) { menuState.openKeys = openKeys; } else { // const menuList = toRaw(menus.value); diff --git a/src/components/Table/index.ts b/src/components/Table/index.ts index 4e9005af..234c8855 100644 --- a/src/components/Table/index.ts +++ b/src/components/Table/index.ts @@ -3,7 +3,6 @@ import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent'; export { default as BasicTable } from './src/BasicTable.vue'; export { default as TableAction } from './src/components/TableAction.vue'; // export { default as TableImg } from './src/components/TableImg.vue'; -export { renderEditableCell, renderEditableRow } from './src/components/renderEditable'; export { default as EditTableHeaderIcon } from './src/components/EditTableHeaderIcon.vue'; export const TableImg = createAsyncComponent(() => import('./src/components/TableImg.vue')); @@ -17,4 +16,4 @@ export { useTable } from './src/hooks/useTable'; export type { FormSchema, FormProps } from '/@/components/Form/src/types/form'; -export type { EditRecordRow } from './src/components/renderEditable'; +export type { EditRecordRow } from './src/components/editable'; diff --git a/src/components/Table/src/BasicTable.vue b/src/components/Table/src/BasicTable.vue index 5a8545c4..e26194d1 100644 --- a/src/components/Table/src/BasicTable.vue +++ b/src/components/Table/src/BasicTable.vue @@ -34,19 +34,19 @@ + + diff --git a/src/components/Table/src/components/TableAction.vue b/src/components/Table/src/components/TableAction.vue index 5ff4d908..fb577d48 100644 --- a/src/components/Table/src/components/TableAction.vue +++ b/src/components/Table/src/components/TableAction.vue @@ -1,14 +1,13 @@