# 9.9 数据展示组件 :::tip 概述 components/ 提供 25 类公共组件,覆盖数据展示(Table/Page/CountTo/Qrcode/Render)、容器(Modal)、辅助(icon/Websocket/Lockscreen)等场景。本节介绍高频展示组件。 ::: ## 高频展示组件 | 组件 | 职责 | 典型用法 | |------|------|---------| | Table | 表格封装(columns 配置驱动) | 列表页主表格,对接 columns.ts | | pagination | 分页组件 | 配合 Table,切换触发重新请求 | | Page | 页面容器(标题/操作区/搜索区) | 列表页外框 | | Render | 函数式渲染(h 函数封装) | 复杂列渲染 | | CountTo | 数字滚动动画 | 仪表盘统计卡片 | | Qrcode | 二维码生成 | 扫码场景 | | icon | 图标组件 | 菜单/操作图标 | | Modal | 弹窗封装 | 编辑/详情弹窗 | | TableSelect | 表格选择器 | 单选/多选弹窗选择数据 | | Websocket | WebSocket 封装 | 实时消息(前端遗留能力) | ## Table 与 columns.ts 的配合(真实模式) ```ts // columns.ts 定义列(真实模式摘自 example) export const columns = [ { type: 'selection' }, // 多选框列 { label: 'ID', prop: 'id', fixed: 'left', width: 50 }, { label: '案例名称', prop: 'name', minWidth: 120 }, // 普通文本 { label: '案例图片', prop: 'avatar', minWidth: 120, // 图片渲染:以方形头像形式展示 render(record) { return h(ElAvatar, { size: 48, src: record.row.avatar, shape: 'square', fit: 'fill' }); }, }, // 枚举列建议渲染 {field}Text(statusText) ]; ``` 渲染规则约定:图片列 ElAvatar、选项列 ElTag、链接列 a 标签、其余普通文本。 ## 展示 {field}Text(枚举列) ```text 后端基座已填充 statusText 等字典文本 → columns 直接 prop: 'statusText' 或 render 用 ElTag 展示 text + 语义色 唯一真相在字典管理页(前端不硬编码枚举文案) ``` ## Page 容器布局(列表页标准形态) ```text 搜索区(querySchemas 驱动的 Form) 操作区(新增/导出等按钮,v-permission 控制) 表格区(Table + pagination) 弹窗层:edit.vue(新增/编辑)、detail.vue(详情) ``` ## 与其他层的对接 ```text Table data ← http 解包后的 data.records(PageData 声明) pagination ← data.total / data.size / data.current columns ← views/{域}/{模块}/columns.ts 弹窗表单 ← edit.vue(字段对齐 Req 结构体) ``` ## 开发规约 + 列表列用 columns.ts 声明式配置(勿在模板里手写 el-table-column) + 复杂列用 render 函数(h + Element Plus 组件) + 图片列 src 用后端 GetFileUrl 已补域名的字段(勿手拼) + 枚举列展示 {field}Text(勿硬编码映射) + 操作列按钮逐个加 v-permission(对齐 gmeta permission)