@cghbcf/xp-ui 1.1.0 → 1.3.0
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/README.md +441 -2
- package/dist/cghbcf-xp-ui.cjs.js +8 -5
- package/dist/cghbcf-xp-ui.es.js +1745 -820
- package/dist/style.css +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
- 🎨 现代化设计风格,支持主题定制(浅色 / 暗黑双主题)
|
|
10
10
|
- 🎛️ 可视化主题定制面板 —— 实时修改颜色、一键导出 JSON/CSS
|
|
11
11
|
- 🌈 主色自动派生(-light / -dark / -bg / -border),无需手动配置
|
|
12
|
-
- 🔧 丰富的组件库,覆盖常用场景(Button / Input / Dialog / Card / Icon / Tabs / Empty / Toast / ContextMenu 等
|
|
12
|
+
- 🔧 丰富的组件库,覆盖常用场景(Button / Input / Select / Dialog / Card / Icon / Tabs / Table / Pagination / Empty / Toast / ContextMenu / Menu 等 27+ 组件)
|
|
13
13
|
- 💎 完整的 CSS 变量(Design Tokens)系统,便于深度定制
|
|
14
14
|
- 💾 主题配置自动持久化到 localStorage,刷新页面不丢失
|
|
15
15
|
|
|
@@ -76,7 +76,25 @@ initTheme()
|
|
|
76
76
|
|
|
77
77
|
图标文件统一存放在 `src/components/icon/icons/` 目录下,组件在构建时通过 `import.meta.glob` 自动扫描该目录,**新增图标只需放入 `.svg` 文件**,即可用同名 `name` 直接引用(例如 `jiantou.svg` 对应 `name="jiantou"`)。
|
|
78
78
|
|
|
79
|
-
图标内部硬编码的 `fill` / `stroke` 颜色(除 `none` 外)会被自动替换为 `currentColor`,因此 `color`
|
|
79
|
+
图标内部硬编码的 `fill` / `stroke` 颜色(除 `none` 外)会被自动替换为 `currentColor`,因此 `color` 属性始终生效。**未指定 `color` 时图标默认继承当前文字颜色,便于通过父元素着色(如按钮 hover 高亮)。** 当 `name` 不存在时,会展示占位符(`?`)便于排查。
|
|
80
|
+
|
|
81
|
+
#### 内置图标
|
|
82
|
+
|
|
83
|
+
下表为当前内置的 18 个图标(不含占位符):
|
|
84
|
+
|
|
85
|
+
| name | 视觉 | name | 视觉 |
|
|
86
|
+
|------|------|------|------|
|
|
87
|
+
| `back` 返回 | ← | `forward` 前进 | → |
|
|
88
|
+
| `up` 上一级 | ↑ | `arrow-right` 右箭头 | →▸ |
|
|
89
|
+
| `refresh` 刷新 | ⟳ | `chevron-up` 上箭头 | ∧ |
|
|
90
|
+
| `chevron-down` 下箭头 | ∨ | `close` 关闭 | ✕ |
|
|
91
|
+
| `folder` 文件夹 | 📁 | `folder-add` 新建文件夹 | 📁+ |
|
|
92
|
+
| `list` 列表视图 | ☰ | `grid` 网格视图 | ▦ |
|
|
93
|
+
| `settings` 设置 | ⚙ | `star` 星标 | ☆ |
|
|
94
|
+
| `star-fill` 星标实心 | ★ | `upload` 上传 | ⇧ |
|
|
95
|
+
| `home` 首页 | ⌂ | `jiantou` 箭头 | ◀ |
|
|
96
|
+
|
|
97
|
+
> 图标总览见演示站 `Icon 图标` 页,点击图标可复制 `XpIcon` 代码。新增图标只需放入 `icons/` 目录即可自动出现。
|
|
80
98
|
|
|
81
99
|
#### 基础用法
|
|
82
100
|
|
|
@@ -262,6 +280,54 @@ nextTick(() => {
|
|
|
262
280
|
|
|
263
281
|
---
|
|
264
282
|
|
|
283
|
+
### Select 选择器
|
|
284
|
+
|
|
285
|
+
下拉选择器,使用 Teleport 渲染浮层。支持键盘操作(Enter/Space 打开、上下键切换、Esc 关闭)、清空、尺寸与禁用态。
|
|
286
|
+
|
|
287
|
+
#### 基础用法
|
|
288
|
+
|
|
289
|
+
```vue
|
|
290
|
+
<template>
|
|
291
|
+
<XpSelect v-model="city" :options="options" placeholder="请选择城市" @change="onChange" />
|
|
292
|
+
</template>
|
|
293
|
+
|
|
294
|
+
<script setup>
|
|
295
|
+
import { ref } from 'vue'
|
|
296
|
+
|
|
297
|
+
const city = ref('shanghai')
|
|
298
|
+
const options = [
|
|
299
|
+
{ label: '北京', value: 'beijing' },
|
|
300
|
+
{ label: '上海', value: 'shanghai' },
|
|
301
|
+
{ label: '深圳', value: 'shenzhen' }
|
|
302
|
+
]
|
|
303
|
+
const onChange = (value) => console.log(value)
|
|
304
|
+
</script>
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
> `options` 兼容纯值数组(如 `['北京', '上海']`),此时选中值即为该值本身。
|
|
308
|
+
|
|
309
|
+
##### Props
|
|
310
|
+
|
|
311
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
312
|
+
|------|------|--------|------|
|
|
313
|
+
| modelValue | string / number / boolean | '' | 当前选中值,支持 v-model |
|
|
314
|
+
| options | array | [] | 选项列表:`{ label, value, disabled }` 或纯值 |
|
|
315
|
+
| placeholder | string | 请选择 | 未选中时的占位文案 |
|
|
316
|
+
| size | string | medium | 尺寸:small / medium / large |
|
|
317
|
+
| disabled | boolean | false | 是否禁用 |
|
|
318
|
+
| clearable | boolean | false | 是否可清空 |
|
|
319
|
+
|
|
320
|
+
##### Events
|
|
321
|
+
|
|
322
|
+
| 事件名 | 说明 | 回调参数 |
|
|
323
|
+
|--------|------|----------|
|
|
324
|
+
| update:modelValue | 选中值变化(配合 v-model 使用) | (value) |
|
|
325
|
+
| change | 选择某一项后触发 | (value) |
|
|
326
|
+
| clear | 点击清空按钮时触发 | - |
|
|
327
|
+
| visible-change | 浮层显隐变化 | (visible: boolean) |
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
265
331
|
### Switch 开关
|
|
266
332
|
|
|
267
333
|
表示两种相互对立的状态间的切换。
|
|
@@ -487,6 +553,7 @@ Tag 用于标记和分类;Badge 用于消息数量提示。
|
|
|
487
553
|
| shape | string | circle | 形状:circle / square |
|
|
488
554
|
| size | string | medium | 尺寸:small / medium / large |
|
|
489
555
|
| icon | string | '' | 图标 |
|
|
556
|
+
| colorful | boolean | false | 无图片时依据 alt 自动分配柔和主题色 |
|
|
490
557
|
|
|
491
558
|
##### Events
|
|
492
559
|
|
|
@@ -718,6 +785,190 @@ const active = ref('tab1')
|
|
|
718
785
|
|
|
719
786
|
---
|
|
720
787
|
|
|
788
|
+
### Menu 菜单
|
|
789
|
+
|
|
790
|
+
为页面提供导航的菜单列表。支持目录(子菜单)嵌套目录,层级不限制;提供「组装模式」(通过 XpSubMenu / XpMenuItem 组合)与「数据驱动模式」(传入 items 树自动生成)两种用法。
|
|
791
|
+
|
|
792
|
+
#### 基础用法
|
|
793
|
+
|
|
794
|
+
```vue
|
|
795
|
+
<template>
|
|
796
|
+
<XpMenu v-model="active" @select="handleSelect">
|
|
797
|
+
<XpMenuItem index="dashboard">仪表盘</XpMenuItem>
|
|
798
|
+
<XpSubMenu index="system">
|
|
799
|
+
<template #title>系统管理</template>
|
|
800
|
+
<XpMenuItem index="system-users">用户管理</XpMenuItem>
|
|
801
|
+
<XpMenuItem index="system-settings" disabled>系统设置</XpMenuItem>
|
|
802
|
+
</XpSubMenu>
|
|
803
|
+
</XpMenu>
|
|
804
|
+
</template>
|
|
805
|
+
|
|
806
|
+
<script setup>
|
|
807
|
+
import { ref } from 'vue'
|
|
808
|
+
const active = ref('dashboard')
|
|
809
|
+
|
|
810
|
+
const handleSelect = (index, item) => {
|
|
811
|
+
// index: 选中项完整 index;item: 数据驱动模式下对应的原始节点(组装模式为 null)
|
|
812
|
+
}
|
|
813
|
+
</script>
|
|
814
|
+
```
|
|
815
|
+
|
|
816
|
+
#### 多级嵌套(不限制层级)
|
|
817
|
+
|
|
818
|
+
目录(XpSubMenu)内部可以继续放置目录,逐层展开:
|
|
819
|
+
|
|
820
|
+
```vue
|
|
821
|
+
<XpMenu v-model="active">
|
|
822
|
+
<XpSubMenu index="1">
|
|
823
|
+
<template #title>导航一</template>
|
|
824
|
+
<XpMenuItem index="1-1">选项一</XpMenuItem>
|
|
825
|
+
<XpSubMenu index="1-2">
|
|
826
|
+
<template #title>导航二(子目录)</template>
|
|
827
|
+
<XpSubMenu index="1-2-2">
|
|
828
|
+
<template #title>导航三(再嵌套)</template>
|
|
829
|
+
<XpMenuItem index="1-2-2-1">四级选项一</XpMenuItem>
|
|
830
|
+
</XpSubMenu>
|
|
831
|
+
</XpSubMenu>
|
|
832
|
+
</XpSubMenu>
|
|
833
|
+
</XpMenu>
|
|
834
|
+
```
|
|
835
|
+
|
|
836
|
+
#### 数据驱动模式
|
|
837
|
+
|
|
838
|
+
传入 `items` 树自动递归生成菜单,`children` 可无限嵌套。节点结构:
|
|
839
|
+
`{ index, label, icon?, children?, disabled? }`,其中 `icon` 传内联 SVG 字符串(图标内部颜色使用 `currentColor` 便于跟随主题着色)。节点还可携带任意扩展字段(如 `path`),经 `select` 事件随原节点一并透出。深度嵌套时依赖插件全局注册(`app.use(XpUi)` 或逐一注册 XpSubMenu / XpMenuItem)。
|
|
840
|
+
|
|
841
|
+
```vue
|
|
842
|
+
<template>
|
|
843
|
+
<XpMenu :items="items" v-model="active" @select="handleSelect"></XpMenu>
|
|
844
|
+
</template>
|
|
845
|
+
|
|
846
|
+
<script setup>
|
|
847
|
+
import { ref } from 'vue'
|
|
848
|
+
const active = ref('system.system-users')
|
|
849
|
+
|
|
850
|
+
const items = [
|
|
851
|
+
{ index: 'dashboard', label: '仪表盘' },
|
|
852
|
+
{
|
|
853
|
+
index: 'system',
|
|
854
|
+
label: '系统管理',
|
|
855
|
+
children: [
|
|
856
|
+
{ index: 'system-users', label: '用户管理' },
|
|
857
|
+
{
|
|
858
|
+
index: 'system-log',
|
|
859
|
+
label: '日志记录',
|
|
860
|
+
children: [
|
|
861
|
+
{ index: 'system-log-login', label: '登录日志' },
|
|
862
|
+
{ index: 'system-log-operation', label: '操作日志' }
|
|
863
|
+
]
|
|
864
|
+
}
|
|
865
|
+
]
|
|
866
|
+
}
|
|
867
|
+
]
|
|
868
|
+
</script>
|
|
869
|
+
```
|
|
870
|
+
|
|
871
|
+
> 激活项使用叶子节点的「完整 index」:数据驱动模式下 = 各级 `index` 以 `.` 拼接(如 `system.system-log.system-log-login`);组装模式下直接使用各组件上声明的 `index`。
|
|
872
|
+
|
|
873
|
+
#### 手风琴 & 多展开
|
|
874
|
+
|
|
875
|
+
`uniqueOpen`(默认 `true`)开启手风琴:同一分支下仅保留一个展开的目录,其余自动收起;设为 `false` 可同时展开多个。
|
|
876
|
+
|
|
877
|
+
#### 分组标题
|
|
878
|
+
|
|
879
|
+
使用 `XpMenuGroup` 为相邻菜单添加分组说明(仅组装模式):
|
|
880
|
+
|
|
881
|
+
```vue
|
|
882
|
+
<XpMenu v-model="active">
|
|
883
|
+
<XpMenuGroup title="导航">
|
|
884
|
+
<XpMenuItem index="home">首页</XpMenuItem>
|
|
885
|
+
<XpMenuItem index="news">消息</XpMenuItem>
|
|
886
|
+
</XpMenuGroup>
|
|
887
|
+
</XpMenu>
|
|
888
|
+
```
|
|
889
|
+
|
|
890
|
+
#### 横向 / 折叠
|
|
891
|
+
|
|
892
|
+
- `mode="horizontal"`:横向排列,一级目录悬停下拉弹出面板;
|
|
893
|
+
- `collapse`(仅 vertical 生效):折叠为仅图标模式,悬停一级目录在右侧弹出面板(面板内部仍支持无限嵌套)。折叠态下菜单宽度由外层容器控制(如 64px ~ 68px)。
|
|
894
|
+
|
|
895
|
+
```vue
|
|
896
|
+
<XpMenu mode="horizontal" :items="items" v-model="active"></XpMenu>
|
|
897
|
+
<XpMenu :items="items" collapse v-model="active"></XpMenu>
|
|
898
|
+
```
|
|
899
|
+
|
|
900
|
+
#### 样式定制
|
|
901
|
+
|
|
902
|
+
菜单使用 `--xp-menu-*` 系列 CSS 变量(默认对齐全局主题),可在使用处按需覆盖,例如深色侧边栏:
|
|
903
|
+
|
|
904
|
+
```css
|
|
905
|
+
.my-sidebar .xp-menu {
|
|
906
|
+
--xp-menu-text: rgba(226, 232, 255, 0.62);
|
|
907
|
+
--xp-menu-text-primary: rgba(236, 242, 255, 0.92);
|
|
908
|
+
--xp-menu-active: #fff;
|
|
909
|
+
--xp-menu-active-bg: rgba(64, 158, 255, 0.32);
|
|
910
|
+
--xp-menu-hover-bg: rgba(255, 255, 255, 0.04);
|
|
911
|
+
--xp-menu-panel-bg: #1c2333;
|
|
912
|
+
--xp-menu-disabled: rgba(226, 232, 255, 0.35);
|
|
913
|
+
}
|
|
914
|
+
```
|
|
915
|
+
|
|
916
|
+
##### Menu Props
|
|
917
|
+
|
|
918
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
919
|
+
|------|------|--------|------|
|
|
920
|
+
| modelValue | string / number | '' | 当前激活项(叶子节点)的完整 index,支持 v-model |
|
|
921
|
+
| mode | string | 'vertical' | 菜单方向:vertical / horizontal |
|
|
922
|
+
| items | array | [] | 数据驱动模式的菜单树,children 可无限嵌套 |
|
|
923
|
+
| collapse | boolean | false | 折叠为仅图标模式(仅 vertical 生效),悬停弹出面板 |
|
|
924
|
+
| uniqueOpen | boolean | true | 手风琴模式,同一分支下仅展开一个目录 |
|
|
925
|
+
| disabled | boolean | false | 是否禁用整个菜单 |
|
|
926
|
+
|
|
927
|
+
##### Menu Events
|
|
928
|
+
|
|
929
|
+
| 事件名 | 说明 | 回调参数 |
|
|
930
|
+
|--------|------|----------|
|
|
931
|
+
| update:modelValue | 选择菜单项时触发 | index |
|
|
932
|
+
| select | 选择菜单项时触发 | (index, item):item 为数据驱动模式下选中的原始节点,组装模式为 null |
|
|
933
|
+
| open | 展开子菜单时触发 | index |
|
|
934
|
+
| close | 收起子菜单时触发 | index |
|
|
935
|
+
|
|
936
|
+
##### SubMenu Props
|
|
937
|
+
|
|
938
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
939
|
+
|------|------|--------|------|
|
|
940
|
+
| index | string / number | - | 必填,完整路径 index |
|
|
941
|
+
| label | string | '' | 数据驱动模式下的标题文案 |
|
|
942
|
+
| icon | string | '' | 数据驱动模式下的内联 SVG 图标 |
|
|
943
|
+
| items | array | [] | 数据驱动模式下子级菜单树 |
|
|
944
|
+
| disabled | boolean | false | 是否禁用 |
|
|
945
|
+
|
|
946
|
+
> 标题内容也支持 `#title` 插槽,插槽优先级高于 label / icon。
|
|
947
|
+
|
|
948
|
+
##### MenuItem Props
|
|
949
|
+
|
|
950
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
951
|
+
|------|------|--------|------|
|
|
952
|
+
| index | string / number | - | 必填,叶子节点完整 index |
|
|
953
|
+
| disabled | boolean | false | 是否禁用 |
|
|
954
|
+
| item | object | null | 数据驱动模式下对应的原始节点(随 select 事件透传) |
|
|
955
|
+
|
|
956
|
+
##### MenuGroup Props
|
|
957
|
+
|
|
958
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
959
|
+
|------|------|--------|------|
|
|
960
|
+
| title | string | '' | 分组标题 |
|
|
961
|
+
|
|
962
|
+
##### Slots
|
|
963
|
+
|
|
964
|
+
| 插槽名 | 说明 |
|
|
965
|
+
|--------|------|
|
|
966
|
+
| default(Menu) | 组装模式:组合 XpSubMenu / XpMenuItem / XpMenuGroup |
|
|
967
|
+
| default(SubMenu) | 子级菜单内容 |
|
|
968
|
+
| title(SubMenu) | 子菜单标题内容 |
|
|
969
|
+
|
|
970
|
+
---
|
|
971
|
+
|
|
721
972
|
### Dialog 对话框
|
|
722
973
|
|
|
723
974
|
在保留当前页面状态的情况下,告知用户并承载相关操作。
|
|
@@ -847,6 +1098,194 @@ const handleCancel = () => { visible.value = false }
|
|
|
847
1098
|
|
|
848
1099
|
---
|
|
849
1100
|
|
|
1101
|
+
### Pagination 分页
|
|
1102
|
+
|
|
1103
|
+
分页条组件,展示数据总数与页码序列(首尾 + 当前页前后 2 页,跳跃处用省略号)。`total` 为 0 时不渲染。通过 `v-model:page` 双向绑定当前页,翻页成功后触发 `change` 事件;传入 `pageSizes` 会额外渲染每页条数选择器,配合 `v-model:page-size` 使用。
|
|
1104
|
+
|
|
1105
|
+
#### 基础用法
|
|
1106
|
+
|
|
1107
|
+
```vue
|
|
1108
|
+
<template>
|
|
1109
|
+
<XpPagination v-model:page="page" :total="128" :page-size="10" @change="fetchPage" />
|
|
1110
|
+
</template>
|
|
1111
|
+
|
|
1112
|
+
<script setup>
|
|
1113
|
+
import { ref } from 'vue'
|
|
1114
|
+
|
|
1115
|
+
const page = ref(1)
|
|
1116
|
+
const fetchPage = (n) => {
|
|
1117
|
+
// 依据新页码 page 向后端拉取数据
|
|
1118
|
+
console.log('当前页', n)
|
|
1119
|
+
}
|
|
1120
|
+
</script>
|
|
1121
|
+
```
|
|
1122
|
+
|
|
1123
|
+
#### 每页条数选择
|
|
1124
|
+
|
|
1125
|
+
```vue
|
|
1126
|
+
<template>
|
|
1127
|
+
<XpPagination
|
|
1128
|
+
v-model:page="page"
|
|
1129
|
+
v-model:page-size="pageSize"
|
|
1130
|
+
:total="186"
|
|
1131
|
+
:page-sizes="[10, 20, 50]"
|
|
1132
|
+
@change="fetchPage"
|
|
1133
|
+
@size-change="fetchPage"
|
|
1134
|
+
/>
|
|
1135
|
+
</template>
|
|
1136
|
+
```
|
|
1137
|
+
|
|
1138
|
+
##### Props
|
|
1139
|
+
|
|
1140
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
1141
|
+
|------|------|--------|------|
|
|
1142
|
+
| total | number | 0 | 数据总条数(为 0 时不渲染分页条) |
|
|
1143
|
+
| page | number | 1 | 当前页码,从 1 开始,支持 v-model:page |
|
|
1144
|
+
| pageSize | number | 10 | 每页条数,支持 v-model:page-size |
|
|
1145
|
+
| pageSizes | array | [] | 可选的每页条数列表;为空时不渲染条数选择器 |
|
|
1146
|
+
|
|
1147
|
+
##### Events
|
|
1148
|
+
|
|
1149
|
+
| 事件名 | 说明 | 回调参数 |
|
|
1150
|
+
|--------|------|----------|
|
|
1151
|
+
| update:page | 页码变化(配合 v-model:page 使用) | (page: number) |
|
|
1152
|
+
| update:pageSize | 每页条数变化(配合 v-model:page-size 使用) | (pageSize: number) |
|
|
1153
|
+
| change | 翻页成功 | (page: number) |
|
|
1154
|
+
| size-change | 每页条数变化 | (pageSize: number) |
|
|
1155
|
+
|
|
1156
|
+
---
|
|
1157
|
+
|
|
1158
|
+
### Table 表格
|
|
1159
|
+
|
|
1160
|
+
列式定义表格:`XpTable` 负责整体渲染(含加载遮罩、空状态),通过子组件 `XpTableColumn` 声明列。支持字段自动渲染、自定义单元格/表头、排序、多选、斑马纹与边框、固定列,适用于各数据列表页面。
|
|
1161
|
+
|
|
1162
|
+
#### 基础用法
|
|
1163
|
+
|
|
1164
|
+
```vue
|
|
1165
|
+
<template>
|
|
1166
|
+
<XpTable :data="list" row-key="id">
|
|
1167
|
+
<XpTableColumn prop="name" label="姓名" />
|
|
1168
|
+
<XpTableColumn prop="email" label="邮箱" />
|
|
1169
|
+
<XpTableColumn prop="active" label="状态" width="100">
|
|
1170
|
+
<template #default="{ row }">
|
|
1171
|
+
<XpTag size="small" :type="row.active ? 'success' : 'info'">
|
|
1172
|
+
{{ row.active ? '启用' : '禁用' }}
|
|
1173
|
+
</XpTag>
|
|
1174
|
+
</template>
|
|
1175
|
+
</XpTableColumn>
|
|
1176
|
+
</XpTable>
|
|
1177
|
+
</template>
|
|
1178
|
+
```
|
|
1179
|
+
|
|
1180
|
+
##### XpTable Props
|
|
1181
|
+
|
|
1182
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
1183
|
+
|------|------|--------|------|
|
|
1184
|
+
| data | array | [] | 表格数据源 |
|
|
1185
|
+
| loading | boolean | false | 加载中状态,为真时显示加载遮罩 |
|
|
1186
|
+
| emptyTitle | string | 暂无数据 | 空状态标题 |
|
|
1187
|
+
| emptyHint | string | '' | 空状态提示文案 |
|
|
1188
|
+
| rowKey | string | id | 行唯一标识字段名,用于 :key 与多选标识;行数据缺失该字段时回退到行索引(多选/排序建议显式配置) |
|
|
1189
|
+
| stripe | boolean | false | 斑马纹:奇偶行交替背景色 |
|
|
1190
|
+
| border | boolean | false | 边框模式:单元格带纵向边框并整体加外框 |
|
|
1191
|
+
|
|
1192
|
+
##### XpTableColumn Props
|
|
1193
|
+
|
|
1194
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
1195
|
+
|------|------|--------|------|
|
|
1196
|
+
| prop | string | '' | 对应数据行字段名,自动渲染 `row[prop]`;配合 formatter / #default 插槽时可不传 |
|
|
1197
|
+
| label | string | '' | 表头文案 |
|
|
1198
|
+
| type | string | default | 列类型:default 普通列 / selection 多选列 |
|
|
1199
|
+
| width | number / string | '' | 列宽(number 为 px);**固定列必须显式指定** |
|
|
1200
|
+
| minWidth | number / string | '' | 最小列宽 |
|
|
1201
|
+
| align | string | left | 对齐方式:left / center / right |
|
|
1202
|
+
| sortable | boolean / string | false | 是否可排序:true 内置升/降序;'custom' 仅触发 sort-change 由外部处理 |
|
|
1203
|
+
| fixed | string | '' | 固定列位置:'left' / 'right',需配合 width 使用 |
|
|
1204
|
+
| formatter | function | - | 单元格格式化:`(row, column, cellValue, index) => string` |
|
|
1205
|
+
| className | string | '' | 自定义列 class,同时作用于表头与单元格(如配合媒体查询隐藏整列) |
|
|
1206
|
+
|
|
1207
|
+
##### XpTable Events
|
|
1208
|
+
|
|
1209
|
+
| 事件名 | 说明 | 回调参数 |
|
|
1210
|
+
|--------|------|----------|
|
|
1211
|
+
| sort-change | 排序状态变化 | `{ column, prop, order }`,order 为 ascending / descending / null |
|
|
1212
|
+
| selection-change | 勾选集合变化 | `(rows: array)` 当前选中的行 |
|
|
1213
|
+
| select | 单个行勾选状态变化 | `(row, selected)` |
|
|
1214
|
+
| row-click | 点击行 | `(row, index)` |
|
|
1215
|
+
|
|
1216
|
+
##### XpTable 实例方法
|
|
1217
|
+
|
|
1218
|
+
| 方法名 | 说明 |
|
|
1219
|
+
|--------|------|
|
|
1220
|
+
| clearSelection | 清空所有勾选 |
|
|
1221
|
+
| toggleRowSelection(row, selected?) | 切换指定行勾选状态;selected 缺省时反转当前状态 |
|
|
1222
|
+
|
|
1223
|
+
##### XpTable Slots
|
|
1224
|
+
|
|
1225
|
+
| 插槽名 | 说明 |
|
|
1226
|
+
|--------|------|
|
|
1227
|
+
| default | 放置若干 `XpTableColumn`(列定义) |
|
|
1228
|
+
| empty | 自定义空状态内容(默认渲染 XpEmpty,由 emptyTitle / emptyHint 控制文案) |
|
|
1229
|
+
|
|
1230
|
+
##### XpTableColumn Slots
|
|
1231
|
+
|
|
1232
|
+
| 插槽名 | 说明 |
|
|
1233
|
+
|--------|------|
|
|
1234
|
+
| default | 自定义单元格内容,作用域暴露 `{ row, index }` |
|
|
1235
|
+
| header | 自定义表头内容,作用域暴露 `{ column }` |
|
|
1236
|
+
|
|
1237
|
+
#### 排序
|
|
1238
|
+
|
|
1239
|
+
```vue
|
|
1240
|
+
<XpTable :data="list" row-key="id" @sort-change="({ prop, order }) => onSort(prop, order)">
|
|
1241
|
+
<XpTableColumn prop="name" label="姓名" sortable width="130" />
|
|
1242
|
+
</XpTable>
|
|
1243
|
+
```
|
|
1244
|
+
|
|
1245
|
+
`sortable` 为 true 时表格内置升/降序(重复点击在升序 → 降序 → 复原间切换);为 `'custom'` 时不排序,仅触发 `sort-change`,由外部维护排序后的数据。
|
|
1246
|
+
|
|
1247
|
+
#### 多选
|
|
1248
|
+
|
|
1249
|
+
```vue
|
|
1250
|
+
<template>
|
|
1251
|
+
<XpTable ref="tableRef" :data="list" row-key="id" @selection-change="onSelectionChange">
|
|
1252
|
+
<XpTableColumn type="selection" width="48" />
|
|
1253
|
+
<XpTableColumn prop="name" label="姓名" />
|
|
1254
|
+
</XpTable>
|
|
1255
|
+
</template>
|
|
1256
|
+
|
|
1257
|
+
<script setup>
|
|
1258
|
+
const tableRef = ref(null)
|
|
1259
|
+
|
|
1260
|
+
const onSelectionChange = (rows) => {
|
|
1261
|
+
console.log(rows) // 选中的行数组
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1264
|
+
const clearAll = () => tableRef.value.clearSelection()
|
|
1265
|
+
</script>
|
|
1266
|
+
```
|
|
1267
|
+
|
|
1268
|
+
多选通过与 `row-key` 对应的字段标识行,请确保数据包含该字段。
|
|
1269
|
+
|
|
1270
|
+
#### 固定列
|
|
1271
|
+
|
|
1272
|
+
```vue
|
|
1273
|
+
<XpTable :data="list" row-key="id">
|
|
1274
|
+
<XpTableColumn type="selection" fixed="left" width="48" />
|
|
1275
|
+
<XpTableColumn prop="name" label="姓名" fixed="left" width="110" />
|
|
1276
|
+
<XpTableColumn prop="email" label="邮箱" />
|
|
1277
|
+
<XpTableColumn label="操作" fixed="right" width="140">
|
|
1278
|
+
<template #default="{ row }">
|
|
1279
|
+
<XpButton size="small" type="primary" @click="onEdit(row)">编辑</XpButton>
|
|
1280
|
+
</template>
|
|
1281
|
+
</XpTableColumn>
|
|
1282
|
+
</XpTable>
|
|
1283
|
+
```
|
|
1284
|
+
|
|
1285
|
+
`fixed="left"` / `fixed="right"` 将列冻结在容器两侧,表体可左右横向滚动(移动端同样生效)。固定列需显式传 `width`。
|
|
1286
|
+
|
|
1287
|
+
---
|
|
1288
|
+
|
|
850
1289
|
### FileIcon 文件图标
|
|
851
1290
|
|
|
852
1291
|
按文件类型展示对应的矢量图标,内置文件夹与常见文件类型,适用于文件管理器等场景。
|