From 0644e261206e3f8eb321ec30dd11ee4934f0cd07 Mon Sep 17 00:00:00 2001 From: guoju0808 Date: Wed, 26 Aug 2026 11:32:53 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20GrTable=20=E7=A7=BB=E5=8A=A8=E7=AB=AF?= =?UTF-8?q?=E8=A1=A8=E6=A0=BC=E7=BB=84=E4=BB=B6=20+=20manager/Projects=20?= =?UTF-8?q?=E8=AF=95=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 业务背景 - 项目里 17+ 列的列表页 (manager/Projects, Meetings, AdminUsers 等) 在手机端只能 横向滚动, 操作体验差. - refer/gr-table.vue 是 Vue2 + Vant 组件, Vue3 不能直接用 (componentOptions 私有 API 已被 Vue3 移除). - 新建 Vue3 + EP 兼容版本 GrTable, 吸收"主列显示 / 次要列折叠到展开行"思想. 组件设计 - props: data, mainCols (默认 = 第一个 prop + 最后一个 prop), mobileBreakpoint - 通过 slots.default() 取 vnode, 读 vnode.props.prop/label (Vue3 思路, 替代 Vue2 componentOptions 私有 API) - v-bind="\$attrs" 全透传 el-table 原生 props/events - el-table 引用方法 (clearSelection / toggleRowSelection 等) defineExpose 暴露 manager/Projects 试点 - 引入 GrTable, :main-cols="['projectNo', 'projectName']" - 手机端: 只显示项目编号 + 项目名称 + 操作列, 其他 13 列折叠到展开行 - 桌面端: 与原 el-table 完全一致 (所有 17 列) - 操作列 (label=操作, 无 prop) 自动保留 (因为 shouldRenderColumn 跳过无 prop 列) --- ry-vue3/refer/gr-table-plus.vue | 161 ++++++++++++++++++++++ ry-vue3/refer/gr-table-simple.vue | 94 +++++++++++++ ry-vue3/refer/gr-table.vue | 117 ++++++++++++++++ ry-vue3/src/components/GrTable.vue | 178 +++++++++++++++++++++++++ ry-vue3/src/views/manager/Projects.vue | 12 +- 5 files changed, 560 insertions(+), 2 deletions(-) create mode 100644 ry-vue3/refer/gr-table-plus.vue create mode 100644 ry-vue3/refer/gr-table-simple.vue create mode 100644 ry-vue3/refer/gr-table.vue create mode 100644 ry-vue3/src/components/GrTable.vue diff --git a/ry-vue3/refer/gr-table-plus.vue b/ry-vue3/refer/gr-table-plus.vue new file mode 100644 index 0000000..cc3d4d5 --- /dev/null +++ b/ry-vue3/refer/gr-table-plus.vue @@ -0,0 +1,161 @@ + + + \ No newline at end of file diff --git a/ry-vue3/refer/gr-table-simple.vue b/ry-vue3/refer/gr-table-simple.vue new file mode 100644 index 0000000..86b5547 --- /dev/null +++ b/ry-vue3/refer/gr-table-simple.vue @@ -0,0 +1,94 @@ + + + \ No newline at end of file diff --git a/ry-vue3/refer/gr-table.vue b/ry-vue3/refer/gr-table.vue new file mode 100644 index 0000000..bb9b917 --- /dev/null +++ b/ry-vue3/refer/gr-table.vue @@ -0,0 +1,117 @@ + + + \ No newline at end of file diff --git a/ry-vue3/src/components/GrTable.vue b/ry-vue3/src/components/GrTable.vue new file mode 100644 index 0000000..e879a15 --- /dev/null +++ b/ry-vue3/src/components/GrTable.vue @@ -0,0 +1,178 @@ + + + + + + \ No newline at end of file diff --git a/ry-vue3/src/views/manager/Projects.vue b/ry-vue3/src/views/manager/Projects.vue index 2596991..c447221 100644 --- a/ry-vue3/src/views/manager/Projects.vue +++ b/ry-vue3/src/views/manager/Projects.vue @@ -81,7 +81,14 @@ 批量删除{{ selection.length }} - + @@ -140,7 +147,7 @@ - + @@ -245,6 +252,7 @@ import request from '@/utils/request' import { ElMessage, ElMessageBox } from 'element-plus' import { ArrowDown } from '@element-plus/icons-vue' import Preview from '@/components/Preview.vue' +import GrTable from '@/components/GrTable.vue' import { useUserStore } from '@/store/user' const userStore = useUserStore() const router = useRouter()