jianghu-ui 1.0.6 → 1.0.7
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/jianghu-ui.css +181 -110
- package/dist/jianghu-ui.js +1 -1
- package/package.json +1 -1
- package/src/components/JhDrawer/JhDrawer.stories.js +6 -6
- package/src/components/JhDrawerForm/JhDrawerForm.vue +1 -1
- package/src/components/JhForm/JhForm.stories.js +114 -95
- package/src/components/JhForm/JhForm.vue +148 -21
- package/src/components/JhFormFields/JhFormFields.vue +33 -14
- package/src/components/JhModal/JhModal.stories.js +6 -6
- package/src/components/JhModal/JhModal.vue +1 -1
- package/src/components/JhModalForm/JhModalForm.vue +1 -1
- package/src/components/JhTable/JhTable.stories.js +134 -167
- package/src/components/JhTable/JhTable.vue +83 -23
- package/src/style/globalCSSVuetifyV4.css +1 -2
- package/src/components/JhAddressSelect/JhAddressSelect.md +0 -267
- package/src/components/JhCard/JhCard.md +0 -246
- package/src/components/JhCheckCard/JhCheckCard.md +0 -245
- package/src/components/JhConfirmDialog/JhConfirmDialog.md +0 -70
- package/src/components/JhDateRangePicker/JhDateRangePicker.md +0 -56
- package/src/components/JhDescriptions/JhDescriptions.md +0 -724
- package/src/components/JhDraggable/JhDraggable.md +0 -66
- package/src/components/JhDrawer/JhDrawer.md +0 -68
- package/src/components/JhDrawerForm/JhDrawerForm.md +0 -69
- package/src/components/JhEditableTable/JhEditableTable.md +0 -507
- package/src/components/JhFileInput/JhFileInput.md +0 -56
- package/src/components/JhForm/JhForm.md +0 -676
- package/src/components/JhFormFields/JhFormFields.md +0 -647
- package/src/components/JhFormList/JhFormList.md +0 -303
- package/src/components/JhJsonEditor/JhJsonEditor.md +0 -54
- package/src/components/JhLayout/JhLayout.md +0 -580
- package/src/components/JhList/JhList.md +0 -441
- package/src/components/JhMarkdownEditor/JhMarkdownEditor.md +0 -56
- package/src/components/JhMask/JhMask.md +0 -62
- package/src/components/JhMenu/JhMenu.md +0 -85
- package/src/components/JhModal/JhModal.md +0 -68
- package/src/components/JhModalForm/JhModalForm.md +0 -69
- package/src/components/JhPageContainer/JhPageContainer.md +0 -409
- package/src/components/JhQueryFilter/JhQueryFilter.md +0 -77
- package/src/components/JhScene/JhScene.md +0 -64
- package/src/components/JhStatisticCard/JhStatisticCard.md +0 -363
- package/src/components/JhStepsForm/JhStepsForm.md +0 -666
- package/src/components/JhTable/JhTable.md +0 -730
- package/src/components/JhTableAttachment/JhTableAttachment.md +0 -70
- package/src/components/JhToast/JhToast.md +0 -67
- package/src/components/JhTreeSelect/JhTreeSelect.md +0 -82
- package/src/components/JhWaterMark/JhWaterMark.md +0 -190
- package/src/components/README.md +0 -52
|
@@ -1,441 +0,0 @@
|
|
|
1
|
-
# JhList 高级列表
|
|
2
|
-
|
|
3
|
-
基于 Ant Design ProList 设计的高级列表组件,提供了丰富的数据展示和交互功能。
|
|
4
|
-
|
|
5
|
-
## 特性
|
|
6
|
-
|
|
7
|
-
- 📋 **多种布局** - 支持列表、网格等多种布局方式
|
|
8
|
-
- 🎨 **灵活配置** - 通过 metas 配置快速定义数据展示
|
|
9
|
-
- 🔍 **搜索过滤** - 内置搜索功能,支持客户端和服务端搜索
|
|
10
|
-
- 📄 **分页支持** - 支持客户端和服务端分页
|
|
11
|
-
- ✅ **行选择** - 支持单选和多选
|
|
12
|
-
- 🎯 **操作按钮** - 灵活的操作按钮配置
|
|
13
|
-
- 🔄 **数据刷新** - 支持手动刷新和轮询
|
|
14
|
-
- 📱 **响应式** - 完美适配移动端
|
|
15
|
-
- 🎭 **自定义渲染** - 支持完全自定义列表项渲染
|
|
16
|
-
|
|
17
|
-
## 基础用法
|
|
18
|
-
|
|
19
|
-
```vue
|
|
20
|
-
<template>
|
|
21
|
-
<jh-list
|
|
22
|
-
:data-source="dataSource"
|
|
23
|
-
:metas="metas"
|
|
24
|
-
header-title="用户列表"
|
|
25
|
-
/>
|
|
26
|
-
</template>
|
|
27
|
-
|
|
28
|
-
<script>
|
|
29
|
-
export default {
|
|
30
|
-
data() {
|
|
31
|
-
return {
|
|
32
|
-
dataSource: [
|
|
33
|
-
{
|
|
34
|
-
id: 1,
|
|
35
|
-
name: '张三',
|
|
36
|
-
email: 'zhangsan@example.com',
|
|
37
|
-
avatar: 'https://example.com/avatar1.jpg',
|
|
38
|
-
},
|
|
39
|
-
// ...
|
|
40
|
-
],
|
|
41
|
-
metas: {
|
|
42
|
-
title: 'name',
|
|
43
|
-
description: 'email',
|
|
44
|
-
avatar: 'avatar',
|
|
45
|
-
},
|
|
46
|
-
};
|
|
47
|
-
},
|
|
48
|
-
};
|
|
49
|
-
</script>
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Metas 配置
|
|
53
|
-
|
|
54
|
-
Metas 用于定义列表项的数据映射关系:
|
|
55
|
-
|
|
56
|
-
```javascript
|
|
57
|
-
{
|
|
58
|
-
// 标题
|
|
59
|
-
title: 'name', // 字符串:直接映射字段
|
|
60
|
-
// 或
|
|
61
|
-
title: { dataIndex: 'name' }, // 对象:使用 dataIndex
|
|
62
|
-
// 或
|
|
63
|
-
title: (item) => item.firstName + ' ' + item.lastName, // 函数:自定义处理
|
|
64
|
-
|
|
65
|
-
// 副标题
|
|
66
|
-
subTitle: 'role',
|
|
67
|
-
|
|
68
|
-
// 描述
|
|
69
|
-
description: 'email',
|
|
70
|
-
|
|
71
|
-
// 头像
|
|
72
|
-
avatar: 'avatarUrl',
|
|
73
|
-
|
|
74
|
-
// 额外内容
|
|
75
|
-
extra: 'status',
|
|
76
|
-
|
|
77
|
-
// 内容区
|
|
78
|
-
content: 'bio',
|
|
79
|
-
|
|
80
|
-
// 操作按钮
|
|
81
|
-
actions: (item) => [
|
|
82
|
-
{ text: '编辑', icon: 'mdi-pencil', color: 'primary' },
|
|
83
|
-
{ text: '删除', icon: 'mdi-delete', color: 'error' },
|
|
84
|
-
],
|
|
85
|
-
}
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## 网格布局
|
|
89
|
-
|
|
90
|
-
```vue
|
|
91
|
-
<template>
|
|
92
|
-
<jh-list
|
|
93
|
-
:data-source="dataSource"
|
|
94
|
-
:metas="metas"
|
|
95
|
-
:grid="grid"
|
|
96
|
-
layout="grid"
|
|
97
|
-
header-title="项目列表"
|
|
98
|
-
/>
|
|
99
|
-
</template>
|
|
100
|
-
|
|
101
|
-
<script>
|
|
102
|
-
export default {
|
|
103
|
-
data() {
|
|
104
|
-
return {
|
|
105
|
-
grid: {
|
|
106
|
-
column: 12, // 总列数
|
|
107
|
-
xs: 12, // 超小屏:1列
|
|
108
|
-
sm: 6, // 小屏:2列
|
|
109
|
-
md: 4, // 中屏:3列
|
|
110
|
-
lg: 3, // 大屏:4列
|
|
111
|
-
xl: 3, // 超大屏:4列
|
|
112
|
-
},
|
|
113
|
-
};
|
|
114
|
-
},
|
|
115
|
-
};
|
|
116
|
-
</script>
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
## 服务端分页
|
|
120
|
-
|
|
121
|
-
```vue
|
|
122
|
-
<template>
|
|
123
|
-
<jh-list
|
|
124
|
-
:request="request"
|
|
125
|
-
:metas="metas"
|
|
126
|
-
header-title="用户列表"
|
|
127
|
-
/>
|
|
128
|
-
</template>
|
|
129
|
-
|
|
130
|
-
<script>
|
|
131
|
-
export default {
|
|
132
|
-
data() {
|
|
133
|
-
return {
|
|
134
|
-
metas: {
|
|
135
|
-
title: 'name',
|
|
136
|
-
description: 'email',
|
|
137
|
-
avatar: 'avatar',
|
|
138
|
-
},
|
|
139
|
-
};
|
|
140
|
-
},
|
|
141
|
-
methods: {
|
|
142
|
-
async request(params) {
|
|
143
|
-
// params: { current, pageSize, search }
|
|
144
|
-
const response = await fetch('/api/users', {
|
|
145
|
-
method: 'POST',
|
|
146
|
-
body: JSON.stringify(params),
|
|
147
|
-
});
|
|
148
|
-
const data = await response.json();
|
|
149
|
-
|
|
150
|
-
return {
|
|
151
|
-
success: true,
|
|
152
|
-
data: data.list,
|
|
153
|
-
total: data.total,
|
|
154
|
-
};
|
|
155
|
-
},
|
|
156
|
-
},
|
|
157
|
-
};
|
|
158
|
-
</script>
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
## 行选择
|
|
162
|
-
|
|
163
|
-
```vue
|
|
164
|
-
<template>
|
|
165
|
-
<jh-list
|
|
166
|
-
:data-source="dataSource"
|
|
167
|
-
:metas="metas"
|
|
168
|
-
:row-selection="rowSelection"
|
|
169
|
-
header-title="可选择列表"
|
|
170
|
-
>
|
|
171
|
-
<template #alert-actions="{ selectedRows }">
|
|
172
|
-
<v-btn small color="primary" @click="handleBatchEdit(selectedRows)">
|
|
173
|
-
批量编辑
|
|
174
|
-
</v-btn>
|
|
175
|
-
<v-btn small color="error" @click="handleBatchDelete(selectedRows)">
|
|
176
|
-
批量删除
|
|
177
|
-
</v-btn>
|
|
178
|
-
</template>
|
|
179
|
-
</jh-list>
|
|
180
|
-
</template>
|
|
181
|
-
|
|
182
|
-
<script>
|
|
183
|
-
export default {
|
|
184
|
-
data() {
|
|
185
|
-
return {
|
|
186
|
-
rowSelection: {
|
|
187
|
-
onChange: (selectedRowKeys, selectedRows) => {
|
|
188
|
-
console.log('选中的行:', selectedRowKeys, selectedRows);
|
|
189
|
-
},
|
|
190
|
-
},
|
|
191
|
-
};
|
|
192
|
-
},
|
|
193
|
-
methods: {
|
|
194
|
-
handleBatchEdit(rows) {
|
|
195
|
-
console.log('批量编辑:', rows);
|
|
196
|
-
},
|
|
197
|
-
handleBatchDelete(rows) {
|
|
198
|
-
console.log('批量删除:', rows);
|
|
199
|
-
},
|
|
200
|
-
},
|
|
201
|
-
};
|
|
202
|
-
</script>
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
## 自定义渲染
|
|
206
|
-
|
|
207
|
-
```vue
|
|
208
|
-
<template>
|
|
209
|
-
<jh-list
|
|
210
|
-
:data-source="dataSource"
|
|
211
|
-
:metas="metas"
|
|
212
|
-
header-title="自定义列表"
|
|
213
|
-
>
|
|
214
|
-
<template #renderItem="{ item, index }">
|
|
215
|
-
<v-card class="pa-4">
|
|
216
|
-
<div class="d-flex align-center">
|
|
217
|
-
<v-avatar size="60" color="primary">
|
|
218
|
-
<span class="white--text">{{ index + 1 }}</span>
|
|
219
|
-
</v-avatar>
|
|
220
|
-
<div class="ml-4 flex-grow-1">
|
|
221
|
-
<div class="text-h6">{{ item.title }}</div>
|
|
222
|
-
<div class="text-body-2 grey--text">{{ item.description }}</div>
|
|
223
|
-
</div>
|
|
224
|
-
<v-chip :color="item.status === 'active' ? 'success' : 'grey'">
|
|
225
|
-
{{ item.status }}
|
|
226
|
-
</v-chip>
|
|
227
|
-
</div>
|
|
228
|
-
</v-card>
|
|
229
|
-
</template>
|
|
230
|
-
</jh-list>
|
|
231
|
-
</template>
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
## 插槽自定义
|
|
235
|
-
|
|
236
|
-
```vue
|
|
237
|
-
<template>
|
|
238
|
-
<jh-list
|
|
239
|
-
:data-source="dataSource"
|
|
240
|
-
:metas="metas"
|
|
241
|
-
header-title="项目列表"
|
|
242
|
-
>
|
|
243
|
-
<!-- 自定义标题 -->
|
|
244
|
-
<template #title="{ item }">
|
|
245
|
-
<span style="color: #1890ff; font-weight: bold;">{{ item.name }}</span>
|
|
246
|
-
</template>
|
|
247
|
-
|
|
248
|
-
<!-- 自定义描述 -->
|
|
249
|
-
<template #description="{ item }">
|
|
250
|
-
<div>
|
|
251
|
-
<v-chip x-small>{{ item.category }}</v-chip>
|
|
252
|
-
<span class="ml-2">{{ item.description }}</span>
|
|
253
|
-
</div>
|
|
254
|
-
</template>
|
|
255
|
-
|
|
256
|
-
<!-- 自定义额外内容 -->
|
|
257
|
-
<template #extra="{ item }">
|
|
258
|
-
<div style="text-align: right;">
|
|
259
|
-
<div style="font-size: 20px; font-weight: bold;">{{ item.progress }}%</div>
|
|
260
|
-
<v-progress-linear :value="item.progress" height="4" class="mt-1" />
|
|
261
|
-
</div>
|
|
262
|
-
</template>
|
|
263
|
-
|
|
264
|
-
<!-- 自定义操作按钮 -->
|
|
265
|
-
<template #actions="{ item }">
|
|
266
|
-
<v-btn text x-small color="primary" @click="handleView(item)">查看</v-btn>
|
|
267
|
-
<v-btn text x-small color="success" @click="handleEdit(item)">编辑</v-btn>
|
|
268
|
-
<v-btn text x-small color="error" @click="handleDelete(item)">删除</v-btn>
|
|
269
|
-
</template>
|
|
270
|
-
|
|
271
|
-
<!-- 工具栏左侧按钮 -->
|
|
272
|
-
<template #toolbar-actions>
|
|
273
|
-
<v-btn color="success" small>
|
|
274
|
-
<v-icon left small>mdi-plus</v-icon>
|
|
275
|
-
新增项目
|
|
276
|
-
</v-btn>
|
|
277
|
-
</template>
|
|
278
|
-
|
|
279
|
-
<!-- 工具栏右侧额外内容 -->
|
|
280
|
-
<template #toolbar-extra>
|
|
281
|
-
<v-btn icon small>
|
|
282
|
-
<v-icon>mdi-filter</v-icon>
|
|
283
|
-
</v-btn>
|
|
284
|
-
<v-btn icon small>
|
|
285
|
-
<v-icon>mdi-download</v-icon>
|
|
286
|
-
</v-btn>
|
|
287
|
-
</template>
|
|
288
|
-
</jh-list>
|
|
289
|
-
</template>
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
## API
|
|
293
|
-
|
|
294
|
-
### Props
|
|
295
|
-
|
|
296
|
-
| 参数 | 说明 | 类型 | 默认值 |
|
|
297
|
-
|------|------|------|--------|
|
|
298
|
-
| dataSource | 数据源(客户端分页) | Array | [] |
|
|
299
|
-
| request | 数据请求函数(服务端分页) | Function | null |
|
|
300
|
-
| rowKey | 数据项的唯一标识字段 | String \| Function | 'id' |
|
|
301
|
-
| metas | 列表项元数据配置 | Object | {} |
|
|
302
|
-
| layout | 布局类型 | 'list' \| 'grid' \| 'card' | 'list' |
|
|
303
|
-
| grid | 网格配置 | Object | null |
|
|
304
|
-
| size | 列表尺寸 | 'small' \| 'default' \| 'large' | 'default' |
|
|
305
|
-
| split | 是否显示分割线 | Boolean | true |
|
|
306
|
-
| pagination | 分页配置 | Object \| Boolean | { current: 1, pageSize: 10 } |
|
|
307
|
-
| rowSelection | 行选择配置 | Object \| Boolean | null |
|
|
308
|
-
| checkboxColor | 复选框颜色 | String | 'primary' |
|
|
309
|
-
| expandable | 展开配置 | Object \| Boolean | null |
|
|
310
|
-
| headerTitle | 列表标题 | String | '' |
|
|
311
|
-
| tooltip | 标题提示信息 | String | '' |
|
|
312
|
-
| cardBordered | 是否显示卡片边框 | Boolean | true |
|
|
313
|
-
| ghost | 幽灵模式(无边框无背景) | Boolean | false |
|
|
314
|
-
| toolbar | 工具栏配置 | Object \| Boolean | { search: true, refresh: true, layout: true, size: true } |
|
|
315
|
-
| search | 搜索配置 | Object \| Boolean | false |
|
|
316
|
-
| loading | 加载状态 | Boolean | false |
|
|
317
|
-
| polling | 轮询间隔(毫秒) | Number | 0 |
|
|
318
|
-
| debounceTime | 搜索防抖时间(毫秒) | Number | 300 |
|
|
319
|
-
|
|
320
|
-
### Metas 配置
|
|
321
|
-
|
|
322
|
-
| 参数 | 说明 | 类型 |
|
|
323
|
-
|------|------|------|
|
|
324
|
-
| title | 标题 | String \| Object \| Function |
|
|
325
|
-
| subTitle | 副标题 | String \| Object \| Function |
|
|
326
|
-
| description | 描述 | String \| Object \| Function |
|
|
327
|
-
| avatar | 头像 | String \| Object \| Function |
|
|
328
|
-
| content | 内容区 | String \| Object \| Function |
|
|
329
|
-
| extra | 额外内容 | String \| Object \| Function |
|
|
330
|
-
| actions | 操作按钮 | String \| Object \| Function |
|
|
331
|
-
|
|
332
|
-
### Grid 配置
|
|
333
|
-
|
|
334
|
-
| 参数 | 说明 | 类型 | 默认值 |
|
|
335
|
-
|------|------|------|--------|
|
|
336
|
-
| column | 总列数 | Number | 12 |
|
|
337
|
-
| xs | 超小屏列数 | Number | - |
|
|
338
|
-
| sm | 小屏列数 | Number | - |
|
|
339
|
-
| md | 中屏列数 | Number | - |
|
|
340
|
-
| lg | 大屏列数 | Number | - |
|
|
341
|
-
| xl | 超大屏列数 | Number | - |
|
|
342
|
-
|
|
343
|
-
### Events
|
|
344
|
-
|
|
345
|
-
| 事件名 | 说明 | 回调参数 |
|
|
346
|
-
|--------|------|----------|
|
|
347
|
-
| item-click | 列表项点击 | (item, index) |
|
|
348
|
-
| action-click | 操作按钮点击 | (action, item) |
|
|
349
|
-
| selection-change | 选择改变 | ({ selectedRowKeys, selectedRows }) |
|
|
350
|
-
| page-change | 页码改变 | (page) |
|
|
351
|
-
| page-size-change | 每页条数改变 | (pageSize) |
|
|
352
|
-
| refresh | 刷新 | - |
|
|
353
|
-
| request-error | 请求错误 | (error) |
|
|
354
|
-
|
|
355
|
-
### Slots
|
|
356
|
-
|
|
357
|
-
| 插槽名 | 说明 | 参数 |
|
|
358
|
-
|--------|------|------|
|
|
359
|
-
| header-title | 自定义标题 | - |
|
|
360
|
-
| toolbar-actions | 工具栏左侧操作按钮 | - |
|
|
361
|
-
| toolbar-extra | 工具栏右侧额外内容 | - |
|
|
362
|
-
| alert | 自定义批量操作提示 | { selectedRowKeys, selectedRows } |
|
|
363
|
-
| alert-actions | 批量操作按钮 | { selectedRowKeys, selectedRows } |
|
|
364
|
-
| renderItem | 自定义列表项渲染 | { item, index } |
|
|
365
|
-
| title | 自定义标题 | { item } |
|
|
366
|
-
| subTitle | 自定义副标题 | { item } |
|
|
367
|
-
| description | 自定义描述 | { item } |
|
|
368
|
-
| content | 自定义内容区 | { item } |
|
|
369
|
-
| extra | 自定义额外内容 | { item } |
|
|
370
|
-
| actions | 自定义操作按钮 | { item } |
|
|
371
|
-
| expandedRowRender | 自定义展开内容 | { item, index } |
|
|
372
|
-
|
|
373
|
-
## 高级用法
|
|
374
|
-
|
|
375
|
-
### 轮询
|
|
376
|
-
|
|
377
|
-
```vue
|
|
378
|
-
<jh-list
|
|
379
|
-
:request="request"
|
|
380
|
-
:metas="metas"
|
|
381
|
-
:polling="5000"
|
|
382
|
-
header-title="实时监控列表"
|
|
383
|
-
/>
|
|
384
|
-
```
|
|
385
|
-
|
|
386
|
-
### 搜索防抖
|
|
387
|
-
|
|
388
|
-
```vue
|
|
389
|
-
<jh-list
|
|
390
|
-
:request="request"
|
|
391
|
-
:metas="metas"
|
|
392
|
-
:debounce-time="500"
|
|
393
|
-
header-title="搜索列表"
|
|
394
|
-
/>
|
|
395
|
-
```
|
|
396
|
-
|
|
397
|
-
### 不同尺寸
|
|
398
|
-
|
|
399
|
-
```vue
|
|
400
|
-
<!-- 小尺寸 -->
|
|
401
|
-
<jh-list :data-source="dataSource" :metas="metas" size="small" />
|
|
402
|
-
|
|
403
|
-
<!-- 默认尺寸 -->
|
|
404
|
-
<jh-list :data-source="dataSource" :metas="metas" size="default" />
|
|
405
|
-
|
|
406
|
-
<!-- 大尺寸 -->
|
|
407
|
-
<jh-list :data-source="dataSource" :metas="metas" size="large" />
|
|
408
|
-
```
|
|
409
|
-
|
|
410
|
-
### 幽灵模式
|
|
411
|
-
|
|
412
|
-
```vue
|
|
413
|
-
<jh-list
|
|
414
|
-
:data-source="dataSource"
|
|
415
|
-
:metas="metas"
|
|
416
|
-
ghost
|
|
417
|
-
header-title="幽灵模式列表"
|
|
418
|
-
/>
|
|
419
|
-
```
|
|
420
|
-
|
|
421
|
-
## 最佳实践
|
|
422
|
-
|
|
423
|
-
1. **使用 metas 配置** - 优先使用 metas 配置来定义数据映射,保持代码简洁
|
|
424
|
-
2. **服务端分页** - 大数据量时使用 request 函数实现服务端分页
|
|
425
|
-
3. **合理使用插槽** - 对于复杂的自定义需求,使用插槽而不是完全自定义渲染
|
|
426
|
-
4. **响应式布局** - 使用 grid 配置实现响应式网格布局
|
|
427
|
-
5. **防抖优化** - 搜索功能使用 debounceTime 避免频繁请求
|
|
428
|
-
|
|
429
|
-
## 注意事项
|
|
430
|
-
|
|
431
|
-
- `dataSource` 和 `request` 二选一,优先使用 `request`
|
|
432
|
-
- 使用 `rowKey` 确保每个列表项有唯一标识
|
|
433
|
-
- 网格布局需要配置 `grid` 属性并设置 `layout="grid"`
|
|
434
|
-
- 自定义渲染时注意保持样式一致性
|
|
435
|
-
|
|
436
|
-
## 与 JhTable 的区别
|
|
437
|
-
|
|
438
|
-
- **JhList** 适合卡片式、图文混排的数据展示
|
|
439
|
-
- **JhTable** 适合表格式、结构化的数据展示
|
|
440
|
-
- JhList 基于 ProTable 实现,支持大部分 ProTable 的 API
|
|
441
|
-
- 两者可以通过配置轻松切换
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
# JhMarkdownEditor - Markdown 编辑器
|
|
2
|
-
|
|
3
|
-
JhMarkdownEditor 基于 Editor.md 封装,提供全功能 Markdown 编辑、预览与 SEO HTML 输出能力。
|
|
4
|
-
|
|
5
|
-
## 功能特性
|
|
6
|
-
|
|
7
|
-
- ✍️ **所写即所得**:支持 watch/preview 模式,实时查看渲染结果
|
|
8
|
-
- 🧰 **工具栏可配置**:`toolbarIcons` 控制显示的按钮,满足精简或全量需求
|
|
9
|
-
- 📏 **尺寸可调**:通过 `height/width` 自由适配弹窗、页面等不同场景
|
|
10
|
-
- 🔒 **只读模式**:`readonly` 用于详情页展示,禁用编辑能力
|
|
11
|
-
- 📤 **内容输出**:`content-for-seo` 事件提供编译后的 HTML,可用于摘要
|
|
12
|
-
|
|
13
|
-
## 基础用法
|
|
14
|
-
|
|
15
|
-
```vue
|
|
16
|
-
<template>
|
|
17
|
-
<jh-markdown-editor
|
|
18
|
-
v-model="content"
|
|
19
|
-
height="520px"
|
|
20
|
-
placeholder="请输入文章内容"
|
|
21
|
-
@content-for-seo="storeHtml"
|
|
22
|
-
/>
|
|
23
|
-
</template>
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
## API
|
|
27
|
-
|
|
28
|
-
### Props
|
|
29
|
-
|
|
30
|
-
| 参数 | 说明 | 类型 | 默认值 |
|
|
31
|
-
| --- | --- | --- | --- |
|
|
32
|
-
| value | 双向绑定的 Markdown 文本 | string | `''` |
|
|
33
|
-
| placeholder | 输入提示 | string | `请输入内容...` |
|
|
34
|
-
| height | 编辑器高度 | string | `calc(100vh - 400px)` |
|
|
35
|
-
| width | 编辑器宽度百分比 | number | 100 |
|
|
36
|
-
| editorPath | Editor.md 静态资源路径 | string | `/public/plugins/editor.md/lib/` |
|
|
37
|
-
| toolbarIcons | 工具栏图标数组 | string[] | 预置常用图标 |
|
|
38
|
-
| readonly | 是否只读 | boolean | false |
|
|
39
|
-
|
|
40
|
-
### Events
|
|
41
|
-
|
|
42
|
-
| 事件名 | 说明 | 回调参数 |
|
|
43
|
-
| --- | --- | --- |
|
|
44
|
-
| input | `v-model` 更新 | (value: string) |
|
|
45
|
-
| change | markdown 内容变化 | (value: string) |
|
|
46
|
-
| content-for-seo | 返回编译后的 HTML 片段 | (html: string) |
|
|
47
|
-
|
|
48
|
-
### Slots
|
|
49
|
-
|
|
50
|
-
组件无插槽。
|
|
51
|
-
|
|
52
|
-
## 使用建议
|
|
53
|
-
|
|
54
|
-
- 需在页面提前加载 Editor.md 依赖 (`window.editormd`),否则组件会给出告警
|
|
55
|
-
- 如果需要插入模板内容,可通过 `ref` 调用 `insertValue`
|
|
56
|
-
- watch `value` 时注意避免循环:组件内部已通过 `isMDChange` 做了同步保护
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
# JhMask - 遮罩层组件
|
|
2
|
-
|
|
3
|
-
JhMask 基于 Vuetify `v-overlay` 封装,可用于页面 loading、全屏提示或阻断操作等场景。
|
|
4
|
-
|
|
5
|
-
## 功能特性
|
|
6
|
-
|
|
7
|
-
- 🌗 **背景可配**:颜色、透明度、zIndex 均可通过 props 设置
|
|
8
|
-
- ⏱️ **自动超时**:`timeout` 到期自动关闭并触发事件
|
|
9
|
-
- 🔁 **loading 集成**:内置进度环,也可通过插槽放置自定义内容
|
|
10
|
-
- 🖱️ **点击交互**:`closeOnClick` 允许点击遮罩直接关闭
|
|
11
|
-
- 🔒 **受控显示**:`v-model` 与父组件保持同步
|
|
12
|
-
|
|
13
|
-
## 基础用法
|
|
14
|
-
|
|
15
|
-
```vue
|
|
16
|
-
<template>
|
|
17
|
-
<jh-mask
|
|
18
|
-
v-model="maskVisible"
|
|
19
|
-
:show-loading="true"
|
|
20
|
-
loading-color="success"
|
|
21
|
-
:timeout="10000"
|
|
22
|
-
@timeout="handleTimeout"
|
|
23
|
-
/>
|
|
24
|
-
</template>
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## API
|
|
28
|
-
|
|
29
|
-
### Props
|
|
30
|
-
|
|
31
|
-
| 参数 | 说明 | 类型 | 默认值 |
|
|
32
|
-
| --- | --- | --- | --- |
|
|
33
|
-
| value | `v-model`,控制是否显示 | boolean | false |
|
|
34
|
-
| color | 背景色 | string | `#e3e3e3` |
|
|
35
|
-
| opacity | 透明度 0-1 | number \| string | 0.8 |
|
|
36
|
-
| zIndex | 遮罩层层级 | number \| string | 300 |
|
|
37
|
-
| showLoading | 是否显示内置 loading | boolean | false |
|
|
38
|
-
| loadingSize | loading 直径 | number \| string | 64 |
|
|
39
|
-
| loadingWidth | loading 线宽 | number \| string | 7 |
|
|
40
|
-
| loadingColor | loading 颜色 | string | `primary` |
|
|
41
|
-
| closeOnClick | 点击遮罩是否关闭 | boolean | false |
|
|
42
|
-
| timeout | 自动关闭时间(ms),0 表示不自动关闭 | number | 0 |
|
|
43
|
-
|
|
44
|
-
### Events
|
|
45
|
-
|
|
46
|
-
| 事件名 | 说明 | 回调参数 |
|
|
47
|
-
| --- | --- | --- |
|
|
48
|
-
| input | `v-model` 更新事件 | (visible: boolean) |
|
|
49
|
-
| click | 在 `closeOnClick`=true 且被点击时触发 | - |
|
|
50
|
-
| timeout | 达到超时时间自动触发 | - |
|
|
51
|
-
|
|
52
|
-
### Slots
|
|
53
|
-
|
|
54
|
-
| 名称 | 说明 |
|
|
55
|
-
| --- | --- |
|
|
56
|
-
| default | 自定义遮罩内容,可放置提示文案或自定义 loading |
|
|
57
|
-
|
|
58
|
-
## 使用建议
|
|
59
|
-
|
|
60
|
-
- 需要阻断用户操作时建议 `closeOnClick=false` 并增加提示文案
|
|
61
|
-
- 当与异步任务绑定时,可在任务完成后手动将 `value` 设为 false 以取消遮罩
|
|
62
|
-
- 通过插槽配合 `JhToast` 等组件可以快速实现“处理中”提示
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
# JhMenu - 响应式导航菜单
|
|
2
|
-
|
|
3
|
-
JhMenu 提供桌面/移动端统一的导航栏,集成多级菜单、右侧自定义菜单及用户头像菜单,适合后台管理与工作台场景。
|
|
4
|
-
|
|
5
|
-
## 功能特性
|
|
6
|
-
|
|
7
|
-
- 📱 **响应式布局**:自动在移动端显示抽屉菜单与头像抽屉
|
|
8
|
-
- 🌲 **多级菜单**:支持至多三级结构,含折叠/展开交互
|
|
9
|
-
- 🧭 **多入口组合**:左侧主菜单、右侧快捷菜单、头像下拉菜单可同时存在
|
|
10
|
-
- 🔔 **状态同步**:通过 `activeMenuIndex/activeSecondMenuId` 控制当前高亮
|
|
11
|
-
- 🔒 **账号信息展示**:内置用户名、角色标签、登出操作
|
|
12
|
-
|
|
13
|
-
## 基础用法
|
|
14
|
-
|
|
15
|
-
```vue
|
|
16
|
-
<template>
|
|
17
|
-
<jh-menu
|
|
18
|
-
:app-title="'工作台'"
|
|
19
|
-
:menu-list="menus"
|
|
20
|
-
:right-menu-list="[{ title: '帮助', icon: 'mdi-help-circle' }]"
|
|
21
|
-
:avatar-menu-list="[{ title: '个人设置', id: 'profile' }]"
|
|
22
|
-
:user-info="user"
|
|
23
|
-
@menu-click="handleMenu"
|
|
24
|
-
@logout="logout"
|
|
25
|
-
/>
|
|
26
|
-
</template>
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## API
|
|
30
|
-
|
|
31
|
-
### Props
|
|
32
|
-
|
|
33
|
-
| 参数 | 说明 | 类型 | 默认值 |
|
|
34
|
-
| --- | --- | --- | --- |
|
|
35
|
-
| appTitle | 应用标题 | string | `JianghuJS` |
|
|
36
|
-
| menuList | 左侧多级菜单数据 | Array | [] |
|
|
37
|
-
| rightMenuList | 顶部右侧快捷菜单数据 | Array | [] |
|
|
38
|
-
| avatarMenuList | 头像下拉菜单数据 | Array | [] |
|
|
39
|
-
| userInfo | 用户信息 `{ username,userId,roles }` | Object | `{ username: 'Guest', userId: '', roles: [] }` |
|
|
40
|
-
| showAvatar | 是否展示头像区域 | boolean | true |
|
|
41
|
-
| activeMenuIndex | 当前激活的一级菜单索引 | number | -1 |
|
|
42
|
-
| activeSecondMenuId | 当前激活的二级/三级菜单 id | string | null |
|
|
43
|
-
| temporary | 移动端抽屉是否点击遮罩关闭 | boolean | true |
|
|
44
|
-
| hideDrawers | Storybook 模式下隐藏抽屉 | boolean | false |
|
|
45
|
-
|
|
46
|
-
### Events
|
|
47
|
-
|
|
48
|
-
| 事件名 | 说明 | 回调参数 |
|
|
49
|
-
| --- | --- | --- |
|
|
50
|
-
| menu-click | 任意菜单被点击时触发 | (menuItem: object, index?: number) |
|
|
51
|
-
| logout | 点击登出按钮时触发 | - |
|
|
52
|
-
|
|
53
|
-
### Slots
|
|
54
|
-
|
|
55
|
-
该组件不暴露插槽,如需扩展请在 `menuList/rightMenuList` 数据中配置。
|
|
56
|
-
|
|
57
|
-
## 数据结构示例
|
|
58
|
-
|
|
59
|
-
```js
|
|
60
|
-
const menus = [
|
|
61
|
-
{
|
|
62
|
-
title: '首页',
|
|
63
|
-
id: 'home',
|
|
64
|
-
path: '/dashboard'
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
title: '系统管理',
|
|
68
|
-
children: [
|
|
69
|
-
{ title: '用户管理', id: 'user', path: '/user' },
|
|
70
|
-
{
|
|
71
|
-
title: '审批',
|
|
72
|
-
children: [
|
|
73
|
-
{ title: '流程列表', id: 'flow', path: '/flow' }
|
|
74
|
-
]
|
|
75
|
-
}
|
|
76
|
-
]
|
|
77
|
-
}
|
|
78
|
-
];
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
## 使用建议
|
|
82
|
-
|
|
83
|
-
- 通过 `menu-item.active` 字段可默认展开某个有子级的菜单
|
|
84
|
-
- 所有菜单项建议带上唯一 `id`,方便与二级高亮、埋点等逻辑关联
|
|
85
|
-
- 移动端建议搭配 `temporary=true`,以便点击遮罩快速收起抽屉
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
# JhModal - 通用模态框
|
|
2
|
-
|
|
3
|
-
JhModal 基于 Vuetify `v-dialog`,提供标题、内容、操作区的统一模态框样式,适用于查看详情、信息提示、二次确认等场景。
|
|
4
|
-
|
|
5
|
-
## 功能特性
|
|
6
|
-
|
|
7
|
-
- 📦 **标准布局**:包含标题区、内容区、底部操作区,并支持粘性头部
|
|
8
|
-
- 🧲 **受控显示**:`v-model` 控制显隐,自动派发 open/close
|
|
9
|
-
- 🧩 **操作插槽**:`actions` 插槽可完全替换底部按钮
|
|
10
|
-
- 🖥️ **全屏/宽度**:通过 `fullscreen` 与 `width` 适配桌面或移动端
|
|
11
|
-
- 🔒 **安全交互**:`persistent` 控制遮罩点击行为,避免误关闭
|
|
12
|
-
|
|
13
|
-
## 基础用法
|
|
14
|
-
|
|
15
|
-
```vue
|
|
16
|
-
<template>
|
|
17
|
-
<jh-modal
|
|
18
|
-
v-model="visible"
|
|
19
|
-
title="订单详情"
|
|
20
|
-
width="720"
|
|
21
|
-
:persistent="false"
|
|
22
|
-
@confirm="handleSave"
|
|
23
|
-
>
|
|
24
|
-
<order-detail />
|
|
25
|
-
</jh-modal>
|
|
26
|
-
</template>
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## API
|
|
30
|
-
|
|
31
|
-
### Props
|
|
32
|
-
|
|
33
|
-
| 参数 | 说明 | 类型 | 默认值 |
|
|
34
|
-
| --- | --- | --- | --- |
|
|
35
|
-
| value | `v-model`,模态框显隐 | boolean | false |
|
|
36
|
-
| title | 标题文本 | string | `弹窗` |
|
|
37
|
-
| width | 最大宽度(px) | number \| string | 600 |
|
|
38
|
-
| fullscreen | 是否全屏展示 | boolean | false |
|
|
39
|
-
| persistent | 是否禁止点击遮罩关闭 | boolean | true |
|
|
40
|
-
| closable | 是否显示右上角关闭按钮 | boolean | true |
|
|
41
|
-
| showActions | 是否显示底部按钮区 | boolean | true |
|
|
42
|
-
| showConfirmButton | 是否显示确认按钮 | boolean | true |
|
|
43
|
-
| showCancelButton | 是否显示取消按钮 | boolean | true |
|
|
44
|
-
| confirmText | 确认按钮文本 | string | `确认` |
|
|
45
|
-
| cancelText | 取消按钮文本 | string | `取消` |
|
|
46
|
-
|
|
47
|
-
### Events
|
|
48
|
-
|
|
49
|
-
| 事件名 | 说明 | 回调参数 |
|
|
50
|
-
| --- | --- | --- |
|
|
51
|
-
| input | `v-model` 更新事件 | (visible: boolean) |
|
|
52
|
-
| open | 弹窗打开时触发 | - |
|
|
53
|
-
| close | 弹窗关闭后触发 | - |
|
|
54
|
-
| confirm | 点击确认按钮 | - |
|
|
55
|
-
| cancel | 点击取消/关闭按钮 | - |
|
|
56
|
-
|
|
57
|
-
### Slots
|
|
58
|
-
|
|
59
|
-
| 名称 | 说明 |
|
|
60
|
-
| --- | --- |
|
|
61
|
-
| default | 弹窗主体内容 |
|
|
62
|
-
| actions | 覆盖底部按钮区 |
|
|
63
|
-
|
|
64
|
-
## 使用建议
|
|
65
|
-
|
|
66
|
-
- 表单类模态框可以关闭 `persistent` 以允许点击遮罩取消
|
|
67
|
-
- 需要长列表滚动时,可在插槽内包裹自定义滚动容器
|
|
68
|
-
- 若不需要按钮区,直接将 `showActions` 设为 false,并自行提供底部内容
|