@zl-ui-kit/components 0.5.0 → 0.6.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 +3009 -148
- package/dist/components/ZlAction/types.d.ts +7 -0
- package/dist/components/ZlAddSub/index.css +1 -1
- package/dist/components/ZlAddSub/index.vue.mjs +1 -1
- package/dist/components/ZlAutoTooltip/index.css +1 -1
- package/dist/components/ZlAutoTooltip/index.vue.mjs +1 -1
- package/dist/components/ZlAutoTooltip/index2.vue.mjs +7 -3
- package/dist/components/ZlAvatar/Group.css +1 -1
- package/dist/components/ZlAvatar/Group.vue.mjs +2 -2
- package/dist/components/ZlAvatar/index.css +1 -1
- package/dist/components/ZlAvatar/index.vue.mjs +2 -2
- package/dist/components/ZlCardPage/index.vue.d.ts +6 -12
- package/dist/components/ZlCardPage/index.vue.mjs +24 -10
- package/dist/components/ZlChart/index.vue.mjs +11 -5
- package/dist/components/ZlCheckAll/index.css +1 -1
- package/dist/components/ZlCheckAll/index.vue.mjs +2 -2
- package/dist/components/ZlCheckboxTag/index.vue.mjs +1 -2
- package/dist/components/ZlCopy/index.css +1 -1
- package/dist/components/ZlCopy/index.vue.mjs +2 -2
- package/dist/components/ZlDictTag/index.vue.mjs +10 -6
- package/dist/components/ZlDynamicComponent/index.vue.mjs +1 -2
- package/dist/components/ZlEditor/ZlSqlEditor.vue.mjs +13 -8
- package/dist/components/ZlEditor/index.vue.mjs +28 -19
- package/dist/components/ZlEmpty/index.css +1 -1
- package/dist/components/ZlEmpty/index.vue.mjs +2 -2
- package/dist/components/ZlFileViewer/index.css +1 -1
- package/dist/components/ZlFileViewer/index.vue.mjs +2 -2
- package/dist/components/ZlForm/index.vue.mjs +15 -12
- package/dist/components/ZlGrid/index.vue.mjs +1 -2
- package/dist/components/ZlGrid/types.d.ts +5 -0
- package/dist/components/ZlHorizontalTable/index.css +1 -1
- package/dist/components/ZlHorizontalTable/index.vue.mjs +1 -1
- package/dist/components/ZlLayoutSwitch/index.css +1 -1
- package/dist/components/ZlLayoutSwitch/index.vue.mjs +2 -2
- package/dist/components/ZlLogin/components/LoginForm.css +1 -1
- package/dist/components/ZlLogin/components/LoginForm.vue.mjs +2 -2
- package/dist/components/ZlLogin/components/LoginForm2.vue.mjs +4 -3
- package/dist/components/ZlLogin/components/SlideChecker.css +1 -1
- package/dist/components/ZlLogin/components/SlideChecker.vue.mjs +2 -2
- package/dist/components/ZlLogin/components/SlideChecker2.vue.mjs +2 -8
- package/dist/components/ZlLogin/index.vue.mjs +2 -3
- package/dist/components/ZlPagination/index.css +1 -1
- package/dist/components/ZlPagination/index.vue.mjs +1 -1
- package/dist/components/ZlPagination/index2.vue.mjs +17 -8
- package/dist/components/ZlPermission/usePermission.mjs +9 -5
- package/dist/components/ZlSearch/index.css +1 -1
- package/dist/components/ZlSearch/index.vue.d.ts +9 -3
- package/dist/components/ZlSearch/index.vue.mjs +129 -114
- package/dist/components/ZlSearch/useSearchFormOverflow.d.ts +17 -0
- package/dist/components/ZlSearch/useSearchFormOverflow.mjs +50 -0
- package/dist/components/ZlSearchTable/index.vue.d.ts +6 -12
- package/dist/components/ZlSearchTable/index.vue.mjs +28 -17
- package/dist/components/ZlSorter/ZlSorterList.css +1 -1
- package/dist/components/ZlSorter/ZlSorterList.vue.mjs +2 -2
- package/dist/components/ZlSorter/index.css +1 -1
- package/dist/components/ZlSorter/index.vue.mjs +2 -2
- package/dist/components/ZlTable/index.vue.mjs +14 -8
- package/dist/components/ZlTable/useTablePagination.mjs +16 -10
- package/dist/components/ZlTabs/index.vue.mjs +21 -10
- package/dist/components/ZlText/index.css +1 -1
- package/dist/components/ZlText/index.vue.mjs +1 -1
- package/dist/components/ZlTitle/index.css +1 -1
- package/dist/components/ZlTitle/index.vue.mjs +2 -2
- package/dist/components/ZlTree/index.vue.mjs +13 -8
- package/dist/components/ZlTreeSelect/index.css +1 -1
- package/dist/components/ZlTreeSelect/index.vue.mjs +1 -1
- package/dist/components/ZlUpload/index.css +1 -1
- package/dist/components/ZlUpload/index.vue.mjs +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/locales/en.mjs +2 -0
- package/dist/locales/messages.mjs +2 -2
- package/dist/locales/zh-cn.mjs +2 -0
- package/dist/types.d.ts +8 -0
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -12,13 +12,13 @@ ZL UI 业务组件库 —— Element Plus 体系,`Zl` 前缀,47 个业务组
|
|
|
12
12
|
|
|
13
13
|
`zl-ui` 是一套基于 **Element Plus(EP)** 的企业级 Vue 3 组件库,以 EP 为底座,封装了 47 个 `Zl` 前缀业务组件,并提供请求、主题、图标、工具四套配套能力。
|
|
14
14
|
|
|
15
|
-
| 包
|
|
16
|
-
|
|
|
17
|
-
| [`@zl-ui-kit/components`](https://www.npmjs.com/package/@zl-ui-kit/components)
|
|
15
|
+
| 包 | 职责 |
|
|
16
|
+
| -------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
|
|
17
|
+
| [`@zl-ui-kit/components`](https://www.npmjs.com/package/@zl-ui-kit/components) | EP 化业务组件库(`Zl` 前缀,47 个组件) |
|
|
18
18
|
| [`@zl-ui-kit/composables`](https://www.npmjs.com/package/@zl-ui-kit/composables) | `useRequest` 请求体系、`useDict`、`useGlobalData` 全局数据、国际化 |
|
|
19
|
-
| [`@zl-ui-kit/icons`](https://www.npmjs.com/package/@zl-ui-kit/icons)
|
|
20
|
-
| [`@zl-ui-kit/theme`](https://www.npmjs.com/package/@zl-ui-kit/theme)
|
|
21
|
-
| [`@zl-ui-kit/utils`](https://www.npmjs.com/package/@zl-ui-kit/utils)
|
|
19
|
+
| [`@zl-ui-kit/icons`](https://www.npmjs.com/package/@zl-ui-kit/icons) | 444 个离线 SVG 图标(prefix `zl`,开源图标库) |
|
|
20
|
+
| [`@zl-ui-kit/theme`](https://www.npmjs.com/package/@zl-ui-kit/theme) | 5 套主题 + `defineTheme` 运行时定制(内置 OFL 开源中文字体) |
|
|
21
|
+
| [`@zl-ui-kit/utils`](https://www.npmjs.com/package/@zl-ui-kit/utils) | TS 工具函数库 + Axios 请求封装 |
|
|
22
22
|
|
|
23
23
|
**三个关键约定(使用组件前必读)**
|
|
24
24
|
|
|
@@ -41,11 +41,11 @@ npm i vue element-plus @vueuse/core
|
|
|
41
41
|
|
|
42
42
|
以下组件**不在主入口**,走独立子路径,依赖按需安装(`peerDependenciesMeta.optional`,没装也不会导致主入口编译失败):
|
|
43
43
|
|
|
44
|
-
| 子入口
|
|
45
|
-
|
|
|
46
|
-
| `@zl-ui-kit/components/chart`
|
|
47
|
-
| `@zl-ui-kit/components/editor`
|
|
48
|
-
| `@zl-ui-kit/components/file-preview` | `ZlFilePreview` / `ZlFileViewer`
|
|
44
|
+
| 子入口 | 组件 | 需安装 |
|
|
45
|
+
| ------------------------------------ | ----------------------------------------------- | --------------------------------------------------------------------------- |
|
|
46
|
+
| `@zl-ui-kit/components/chart` | `ZlChart` | `echarts` |
|
|
47
|
+
| `@zl-ui-kit/components/editor` | `ZlEditor` / `ZlSqlEditor` / `useSqlCompletion` | `monaco-editor` |
|
|
48
|
+
| `@zl-ui-kit/components/file-preview` | `ZlFilePreview` / `ZlFileViewer` | `@vue-office/docx` `@vue-office/excel` `@vue-office/pdf` `@vue-office/pptx` |
|
|
49
49
|
|
|
50
50
|
```ts
|
|
51
51
|
import { ZlChart } from '@zl-ui-kit/components/chart'
|
|
@@ -71,7 +71,7 @@ import { ZlFilePreview, ZlFileViewer } from '@zl-ui-kit/components/file-preview'
|
|
|
71
71
|
import { createApp } from 'vue'
|
|
72
72
|
import ElementPlus from 'element-plus'
|
|
73
73
|
import 'element-plus/dist/index.css'
|
|
74
|
-
import '@zl-ui-kit/theme/themes.css'
|
|
74
|
+
import '@zl-ui-kit/theme/themes.css' // 主题变量(--zl-* / --el-*)
|
|
75
75
|
import ZlUI from '@zl-ui-kit/components'
|
|
76
76
|
|
|
77
77
|
createApp(App).use(ElementPlus).use(ZlUI).mount('#app')
|
|
@@ -141,41 +141,60 @@ pnpm --filter @zl-ui-kit/playground dev # http://localhost:3100
|
|
|
141
141
|
|
|
142
142
|
playground 以 **源码模式** 运行,vite alias 将 `@zl-ui-kit/*` 五包精确指向各自 `src/`:
|
|
143
143
|
|
|
144
|
-
| 别名
|
|
145
|
-
|
|
|
146
|
-
| `@zl-ui-kit/utils`
|
|
147
|
-
| `@zl-ui-kit/composables`
|
|
148
|
-
| `@zl-ui-kit/components`
|
|
149
|
-
| `@zl-ui-kit/theme`(JS API) | `packages/theme/src/index.ts`
|
|
150
|
-
| `@zl-ui-kit/icons`
|
|
144
|
+
| 别名 | 指向 |
|
|
145
|
+
| ---------------------------- | ----------------------------------- |
|
|
146
|
+
| `@zl-ui-kit/utils` | `packages/utils/src/index.ts` |
|
|
147
|
+
| `@zl-ui-kit/composables` | `packages/composables/src/index.ts` |
|
|
148
|
+
| `@zl-ui-kit/components` | `packages/components/src/index.ts` |
|
|
149
|
+
| `@zl-ui-kit/theme`(JS API) | `packages/theme/src/index.ts` |
|
|
150
|
+
| `@zl-ui-kit/icons` | `packages/icons/src/index.mjs` |
|
|
151
151
|
|
|
152
152
|
**效果:直接改任意包的 `src` 源码,playground 即时热更,无需先构建。**
|
|
153
153
|
|
|
154
|
+
playground 的界面按 **Element Plus 官网的信息架构**组织(顶栏 + 左侧分组目录 + 右侧内容):
|
|
155
|
+
|
|
156
|
+
| 位置 | 内容 |
|
|
157
|
+
| -------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
158
|
+
| 顶栏 | Logo、一级导航(组件/主题/图标/示例/手册)、组件搜索(`Ctrl K` 聚焦,↑↓ 选择、Enter 跳转)、语言与主题切换 |
|
|
159
|
+
| 左侧栏 | 「指南」「综合示例」+ 按功能分 7 组(基础/布局/表单/数据展示/反馈/文件与编辑器/其他)的全部组件,分组可折叠 |
|
|
160
|
+
| 组件总览 | `/#/`,每个组件一张卡片(图标 + 中文名 + 导出符号),点击进入组件页 |
|
|
161
|
+
| 组件页 | `/#/component/ZlTable`,依次是「基础用法」实时示例 → 用法示例 / 插槽用法代码块 → props/事件/插槽/暴露方法表(props 与插槽表各带一列「示例」) |
|
|
162
|
+
| 接口手册 | `/#/manual`,跨组件检索(按 props 名 / 事件名反查组件),支持 `?name=ZlTable` 直接定位 |
|
|
163
|
+
|
|
164
|
+
> 组件页的示例来自 `apps/playground/src/pages/gallery-demos.ts`(与冒烟测试同一份渲染函数),
|
|
165
|
+
> 接口表来自 `pnpm docs:api` 产物 —— 与本文件第 14 章同源:改完组件源码记得重跑,否则 `pnpm check` 会报产物过期。
|
|
166
|
+
> 两处的 **用法示例 / 插槽用法** 代码块也是同一份字符串,页面里可一键复制;
|
|
167
|
+
> 每个 prop / 插槽的「示例」列同样是同一份字符串(可直接粘贴的属性写法 / `<template #name>` 片段)。
|
|
168
|
+
|
|
154
169
|
> 注意:`@zl-ui-kit/theme/light`、`@zl-ui-kit/theme/themes.css` 等 CSS 子路径不走别名,读取 `src/generated/` 生成物——改主题 token 后需先 `pnpm --filter @zl-ui-kit/theme gen`。
|
|
155
170
|
|
|
156
171
|
### 2.3 主题快速接入(宿主项目)
|
|
157
172
|
|
|
158
173
|
```ts
|
|
159
174
|
// main.ts
|
|
160
|
-
import '@zl-ui-kit/theme/themes.css'
|
|
175
|
+
import '@zl-ui-kit/theme/themes.css' // 全部内置主题(或按需 '@zl-ui-kit/theme/light' 等)
|
|
161
176
|
import { setTheme } from '@zl-ui-kit/theme'
|
|
162
177
|
|
|
163
|
-
setTheme('dark')
|
|
178
|
+
setTheme('dark') // 切换主题(light/dark/red-light/red-dark/blue)
|
|
164
179
|
```
|
|
165
180
|
|
|
166
181
|
### 2.4 示例页面索引
|
|
167
182
|
|
|
168
|
-
| 路由
|
|
169
|
-
|
|
|
170
|
-
| `/` |
|
|
171
|
-
| `/
|
|
172
|
-
| `/
|
|
173
|
-
| `/
|
|
174
|
-
| `/
|
|
175
|
-
| `/
|
|
176
|
-
| `/use-request`
|
|
177
|
-
| `/
|
|
178
|
-
| `/
|
|
183
|
+
| 路由 | 页面 | 覆盖内容 |
|
|
184
|
+
| ------------------------ | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
185
|
+
| `/` | 组件总览 | 按功能分组的组件卡片,点击进入组件页(Element Plus 官网 overview 的组织方式) |
|
|
186
|
+
| `/component/:name` | 组件页 | 基础用法实时示例 + 用法示例 / 插槽用法代码块 + props / 事件 / 插槽 / 暴露方法表 + 上/下一页 |
|
|
187
|
+
| `/manual` | 接口手册 | 全量 API 检索,支持按 props 名 / 事件名反查组件,`?name=ZlTable` 直接定位 |
|
|
188
|
+
| `/icons` | 图标集 | 全量图标浏览/搜索,`zl:` 前缀渲染 |
|
|
189
|
+
| `/theme` | 主题工场 | 5 套主题切换 + `defineTheme` 运行时自定义 |
|
|
190
|
+
| `/gallery` | 组件陈列 | 55 个组件逐个渲染(用于批量截图与冒烟) |
|
|
191
|
+
| `/use-request` | useRequest 联调 | 用 Mock 模块驱动各数据型组件(见第 6 章) |
|
|
192
|
+
| `/examples/basic` | 通用展示示例 | ZlTitle/ZlTag/ZlCornerTag/ZlIcon/ZlText/ZlCopy/ZlAutoTooltip/ZlPagination/ZlEmpty |
|
|
193
|
+
| `/examples/table-form` | 表格/表单示例 | ZlTable/ZlSearchTable/ZlForm/ZlDrawer/ZlPopconfirm/ZlSwitch/ZlDescription/ZlAction/ZlIconLabel/ZlIconHover/ZlSearch |
|
|
194
|
+
| `/examples/general` | 布局与交互示例 | ZlAvatar/ZlCheckAll/ZlRadioTag/ZlCheckboxTag/ZlAddSub/ZlSorter/ZlLayoutSwitch/ZlSection/ZlCard/ZlAppSlogan/ZlPermission/ZlHorizontalTable/ZlUpload/ZlTabs/ZlGrid/ZlDynamicComponent/ZlCardPage |
|
|
195
|
+
| `/examples/search-table` | ZlSearchTable 专项 | 基础用法 / `{ service, options }` 用法 / 暴露方法 / 无查询项 immediate,含分页与查询验证 |
|
|
196
|
+
|
|
197
|
+
> 改造前的扁平路由(`/components`、`/general`、`/table-form`、`/search-table`)保留 **redirect**,历史链接与自动化脚本不会失效。
|
|
179
198
|
|
|
180
199
|
---
|
|
181
200
|
|
|
@@ -183,24 +202,32 @@ setTheme('dark') // 切换主题(light/dark/red-light/red-dark/b
|
|
|
183
202
|
|
|
184
203
|
> 下面按功能分组,列出的是**导出符号**(含同目录变体,如 `ZlCornerTag` / `ZlIconHover` / `ZlActionList`),所以条目数略多于 47;组件目录共 48 个(47 个业务组件 + `ZlI18nProvider`)。
|
|
185
204
|
|
|
205
|
+
> **要查精确的 props / 事件 / 插槽 / 暴露方法 / schema 类型?** 直接看 **[§14 组件 API 参考](#14-组件-api-参考自动生成)**——逐个组件给出 `import`、可直接照抄的 **用法示例**(props 怎么写)与 **插槽用法**(`<template #name>` 怎么写),再用表格列出 TS 类型表达式、默认值、是否必填,**且每个 prop / 每个插槽都带一列「示例」**(能直接粘到标签上的写法),以及 `TableColumn` / `FormItem` / `SearchItem` / `ActionItem` 等 schema 类型的字段表。本章及 §4~§9 讲的是**场景化用法**,§14 是**逐字段的契约 + 可粘贴代码**。
|
|
206
|
+
|
|
186
207
|
### 3.1 通用展示组件
|
|
208
|
+
|
|
187
209
|
`ZlIcon` · `ZlTitle` · `ZlTag` · `ZlCornerTag` · `ZlText` · `ZlCopy` · `ZlAutoTooltip` · `ZlEmpty` · `ZlDictTag` · `ZlDescription` · `ZlSection` · `ZlCard` · `ZlAvatar` · `ZlAppSlogan` · `ZlIconLabel` · `ZlIconHover`
|
|
188
210
|
|
|
189
211
|
### 3.2 数据型组件
|
|
212
|
+
|
|
190
213
|
`ZlTable` · `ZlSearchTable` · `ZlCardPage` · `ZlPagination` · `ZlTree` · `ZlTreeSelect` · `ZlChart` · `ZlUpload`
|
|
191
214
|
|
|
192
215
|
### 3.3 表单与交互组件
|
|
216
|
+
|
|
193
217
|
`ZlForm` · `ZlSearch` · `ZlDrawer` · `ZlPopconfirm` · `ZlSwitch` · `ZlAction` · `ZlActionList` · `ZlRadioTag` · `ZlCheckboxTag` · `ZlCheckAll` · `ZlSorter` · `ZlAddSub` · `ZlLayoutSwitch` · `ZlTabs` · `ZlDynamicComponent` · `ZlGrid`
|
|
194
218
|
|
|
195
219
|
### 3.4 布局与权限
|
|
220
|
+
|
|
196
221
|
`ZlAppLayout` · `ZlAppMenu` · `ZlPermission` · `ZlHorizontalTable`
|
|
197
222
|
|
|
198
223
|
### 3.5 文件与编辑
|
|
224
|
+
|
|
199
225
|
`ZlFilePreview` · `ZlFileViewer` · `ZlPdfViewer` · `ZlEditor` · `ZlSqlEditor` · `ZlLogin`
|
|
200
226
|
|
|
201
227
|
> 页签/微前端类组件(`ZlMicroPage`/`ZlAppTabs`/`ZlPageTabs`/`ZlDevMenu`)与配套 composables(`usePageTabs` 等)均已移除,`0.5.0` 起组件库不含任何微前端能力。
|
|
202
228
|
|
|
203
229
|
### 3.6 国际化基础设施(独立于 47 个业务组件)
|
|
230
|
+
|
|
204
231
|
`ZlI18nProvider` —— 国际化根容器,将 Element Plus 语言包经 `<el-config-provider>` 挂载到 Element Plus(详见第 13 章)。
|
|
205
232
|
|
|
206
233
|
---
|
|
@@ -214,11 +241,11 @@ setTheme('dark') // 切换主题(light/dark/red-light/red-dark/b
|
|
|
214
241
|
<ZlIcon icon="zl:database-color" :size="20" />
|
|
215
242
|
```
|
|
216
243
|
|
|
217
|
-
| prop
|
|
218
|
-
|
|
|
219
|
-
| `icon`
|
|
220
|
-
| `size`
|
|
221
|
-
| `color` / `spin` 等 | 透传至底层 iconify-icon
|
|
244
|
+
| prop | 说明 |
|
|
245
|
+
| ------------------- | -------------------------------------------------------------------------------------- |
|
|
246
|
+
| `icon` | 图标名,支持 `zl:xxx`(内置)、`https://...`(外链)、普通名(iconify 在线集,需联网) |
|
|
247
|
+
| `size` | 字号/尺寸,默认 `14px` |
|
|
248
|
+
| `color` / `spin` 等 | 透传至底层 iconify-icon |
|
|
222
249
|
|
|
223
250
|
> 图标名须真实存在于 `packages/icons/src/icons.json`,否则不显示。可用 `Object.keys(require('@zl-ui-kit/icons').icons).includes('database-color')` 校验。
|
|
224
251
|
|
|
@@ -227,52 +254,69 @@ setTheme('dark') // 切换主题(light/dark/red-light/red-dark/b
|
|
|
227
254
|
## 5. 通用展示组件
|
|
228
255
|
|
|
229
256
|
### ZlTitle — 区块标题
|
|
257
|
+
|
|
230
258
|
```vue
|
|
231
259
|
<ZlTitle size="medium" text="资源列表" />
|
|
232
260
|
```
|
|
261
|
+
|
|
233
262
|
`size`: `small`(12px) / `medium`(14px) / `large`;自带左侧竖条与可选图标(`zl:help-color`)。
|
|
234
263
|
|
|
235
264
|
### ZlTag — 标签
|
|
265
|
+
|
|
236
266
|
```vue
|
|
237
267
|
<ZlTag type="primary" :closable="true" icon="zl:star-color">标签</ZlTag>
|
|
238
268
|
```
|
|
239
|
-
|
|
240
|
-
|
|
|
241
|
-
|
|
|
242
|
-
| `
|
|
243
|
-
| `
|
|
244
|
-
| `
|
|
245
|
-
| `
|
|
269
|
+
|
|
270
|
+
| prop | 取值 |
|
|
271
|
+
| ---------------------- | ----------------------------------------------------- |
|
|
272
|
+
| `type` | `primary` / `success` / `warning` / `info` / `danger` |
|
|
273
|
+
| `size` | `mini` / `small` / `medium` |
|
|
274
|
+
| `color` | 自定义色(覆盖 type) |
|
|
275
|
+
| `icon` / `iconColor` | 前置图标 |
|
|
276
|
+
| `closable` / `rounded` | 可关闭 / 圆角 |
|
|
246
277
|
|
|
247
278
|
`ZlCornerTag` 为四角定位标签,语义一致、定位展开为显式四类。
|
|
248
279
|
|
|
249
280
|
### ZlCopy — 一键复制
|
|
281
|
+
|
|
250
282
|
```vue
|
|
251
283
|
<ZlCopy :text="row.id" />
|
|
252
284
|
```
|
|
285
|
+
|
|
253
286
|
`text`(或插槽文本)经 `copy()` 写入剪贴板,按钮 `size="small" text`。
|
|
254
287
|
|
|
255
288
|
### ZlEmpty — 空状态
|
|
289
|
+
|
|
256
290
|
```vue
|
|
257
291
|
<ZlEmpty description="暂无数据" />
|
|
258
|
-
<ZlEmpty :image="customImg" />
|
|
292
|
+
<ZlEmpty :image="customImg" />
|
|
293
|
+
<!-- 传入自定义图,缺省为内置轻量 SVG 线稿 -->
|
|
259
294
|
```
|
|
260
295
|
|
|
261
296
|
### ZlDictTag — 字典标签
|
|
297
|
+
|
|
262
298
|
经 `useDict(dictKey)` 解析独立字典 store(`useDictStore`,Vue3 状态管理缓存,不依赖全局数据)。**支持三种数据注入方式**(详见第 12.1.3 节与第 6.3 节 ⑤):
|
|
263
299
|
|
|
264
300
|
```vue
|
|
265
301
|
<!-- 1. 组件级直传(最轻量,无需任何全局配置即可翻译) -->
|
|
266
|
-
<ZlDictTag
|
|
267
|
-
|
|
302
|
+
<ZlDictTag
|
|
303
|
+
dict-key="resourceType"
|
|
304
|
+
:value="row.type"
|
|
305
|
+
:dict="[
|
|
306
|
+
{ label: '图片', value: '1', icon: 'zl:image' },
|
|
307
|
+
{ label: '视频', value: '2' },
|
|
308
|
+
]"
|
|
309
|
+
/>
|
|
268
310
|
|
|
269
311
|
<!-- 2. 全局/局部数据源(应用入口注册一次,全项目共享) -->
|
|
270
312
|
<ZlDictTag dict-key="resourceType" :value="row.type" />
|
|
271
313
|
<ZlDictTag dict-key="resourceType" :value="row.type" simple />
|
|
272
314
|
```
|
|
315
|
+
|
|
273
316
|
详见第 6.3 节 ⑤。
|
|
274
317
|
|
|
275
318
|
### 其余
|
|
319
|
+
|
|
276
320
|
`ZlText`(文本省略)、`ZlAutoTooltip`(超长省略 + tooltip)、`ZlDescription`(描述列表)、`ZlSection`(分区容器)、`ZlCard`(卡片,背景图已改为纯 CSS)、`ZlAvatar`(+Group)、`ZlAppSlogan`(品牌标语,字体走 `--zl-slogan-font-family`)、`ZlIconLabel`/`ZlIconHover`(图标 + 文字组合)。
|
|
277
321
|
|
|
278
322
|
---
|
|
@@ -286,30 +330,36 @@ setTheme('dark') // 切换主题(light/dark/red-light/red-dark/b
|
|
|
286
330
|
来源:`@zl-ui-kit/composables`。`service` 统一签名:`(...args) => Promise<R>`。
|
|
287
331
|
|
|
288
332
|
#### `useRequest(service, options?, plugins?)` —— 基础形态
|
|
333
|
+
|
|
289
334
|
```ts
|
|
290
|
-
const { loading, data, error, status, run, runAsync, refresh, refreshAsync, cancel, mutate } =
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
|
297
|
-
|
|
|
298
|
-
| `
|
|
299
|
-
| `
|
|
300
|
-
| `
|
|
301
|
-
| `
|
|
302
|
-
| `
|
|
303
|
-
| `
|
|
304
|
-
| `options.
|
|
335
|
+
const { loading, data, error, status, run, runAsync, refresh, refreshAsync, cancel, mutate } = useRequest(
|
|
336
|
+
service,
|
|
337
|
+
{ manual: false, defaultParams: [], initialData, onSuccess, onError },
|
|
338
|
+
)
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
| 返回/选项 | 说明 |
|
|
342
|
+
| ---------------------------------------------- | --------------------------------------------------------- |
|
|
343
|
+
| `loading` / `data` / `error` / `status` | 响应式状态(`status`: `''`/`pending`/`finished`/`error`) |
|
|
344
|
+
| `run(...args)` | 同步触发,错误被吞(除非传 `onError`) |
|
|
345
|
+
| `runAsync(...args)` | 返回 Promise,可 await 捕获 |
|
|
346
|
+
| `refresh()` / `refreshAsync()` | 用上次参数重跑 |
|
|
347
|
+
| `cancel()` | 取消进行中请求(结果丢弃) |
|
|
348
|
+
| `mutate(data \| prev => R)` | 本地立即改 `data`,不触网 |
|
|
349
|
+
| `options.manual` | `true` 时不自动执行 |
|
|
350
|
+
| `options.defaultParams` / `initialData` | 首参 / 初始占位 |
|
|
351
|
+
| `options.onBefore/onSuccess/onError/onFinally` | 生命周期回调 |
|
|
352
|
+
| `options.loadingDelay` / `refreshDeps` | 延迟 loading / 依赖变更刷新 |
|
|
305
353
|
|
|
306
354
|
#### `useDataRequest(service, { dataKey = 'data' })` —— 自动解包信封
|
|
355
|
+
|
|
307
356
|
```ts
|
|
308
357
|
const { data } = useDataRequest(getChartDataApi, { dataKey: 'data' })
|
|
309
358
|
// data.value === 响应里的 data 字段
|
|
310
359
|
```
|
|
311
360
|
|
|
312
361
|
#### `usePaginationRequest(service, { pagination })` —— 分页专用
|
|
362
|
+
|
|
313
363
|
额外返回 `data`(行数组) / `total` / `current` / `pageSize` / `changeCurrent` / `changePageSize` / `changePagination`,分页键名(`pageNum/pageSize/total/rows`)可配置,与后端契约对齐时通过 `pagination` 选项或 `setGlobalOptions` 调整。
|
|
314
364
|
|
|
315
365
|
> `ZlSearchTable` / `ZlCardPage` 内部已用 `usePageableRequest`,**直接传 service 即可**,无需在外层再包。
|
|
@@ -318,26 +368,27 @@ const { data } = useDataRequest(getChartDataApi, { dataKey: 'data' })
|
|
|
318
368
|
|
|
319
369
|
位置 `apps/playground/src/mock/`:
|
|
320
370
|
|
|
321
|
-
| 文件
|
|
322
|
-
|
|
|
323
|
-
| `data.ts`
|
|
371
|
+
| 文件 | 内容 |
|
|
372
|
+
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
373
|
+
| `data.ts` | 内存假数据:`genResources(count=137)`、`dicts`(resourceType/resourceStatus/region)、`treeData`、`chartData` |
|
|
324
374
|
| `services.ts` | Promise service(300~600ms 延迟):`getResourcePage` / `getResourceDetail` / `getTreeData` / `getChartDataApi` / `getDictMap` / `uploadFile` / `submitResourceForm` / `getResourcePageMaybeFail` |
|
|
325
|
-
| `index.ts`
|
|
326
|
-
|
|
327
|
-
| service
|
|
328
|
-
|
|
|
329
|
-
| `getResourcePage(params)`
|
|
330
|
-
| `getResourceDetail(id)`
|
|
331
|
-
| `getTreeData()`
|
|
332
|
-
| `getChartDataApi()`
|
|
333
|
-
| `getDictMap()`
|
|
334
|
-
| `uploadFile(formData)`
|
|
335
|
-
| `submitResourceForm(data)`
|
|
336
|
-
| `getResourcePageMaybeFail(params)` | `fail:true` 时 reject
|
|
375
|
+
| `index.ts` | 统一出口 |
|
|
376
|
+
|
|
377
|
+
| service | 返回结构 | 用途 |
|
|
378
|
+
| ---------------------------------- | ------------------------------------ | ---------------------------------------------------------------- |
|
|
379
|
+
| `getResourcePage(params)` | `{ rows, total, pageNum, pageSize }` | 分页列表,喂 `ZlSearchTable`/`ZlCardPage`/`usePaginationRequest` |
|
|
380
|
+
| `getResourceDetail(id)` | `ResourceItem` | 详情 |
|
|
381
|
+
| `getTreeData()` | `TreeNode[]` | 组织树 |
|
|
382
|
+
| `getChartDataApi()` | `{ code:200, msg, data }` 信封 | 演示 `useDataRequest` 解包 |
|
|
383
|
+
| `getDictMap()` | `Record<string, DictItem[]>` | 经 `setDictSource()` 注册为全局字典数据源 |
|
|
384
|
+
| `uploadFile(formData)` | `{ url }` | 演示 `ZlUpload` |
|
|
385
|
+
| `submitResourceForm(data)` | `{ code:200, msg, data }` | 表单提交 |
|
|
386
|
+
| `getResourcePageMaybeFail(params)` | `fail:true` 时 reject | 演示错误态 |
|
|
337
387
|
|
|
338
388
|
### 6.3 组件对接实战(对应 `/use-request` 页面)
|
|
339
389
|
|
|
340
390
|
#### ① `ZlSearchTable` —— 直接传 service
|
|
391
|
+
|
|
341
392
|
```vue
|
|
342
393
|
<ZlSearchTable
|
|
343
394
|
:request="getResourcePage"
|
|
@@ -347,9 +398,11 @@ const { data } = useDataRequest(getChartDataApi, { dataKey: 'data' })
|
|
|
347
398
|
height="380"
|
|
348
399
|
/>
|
|
349
400
|
```
|
|
401
|
+
|
|
350
402
|
内部用 `usePageableRequest` 驱动分页与查询;`columns` 为 `TableColumn[]`,`queryItems` 为 `SearchItem[]`。
|
|
351
403
|
|
|
352
404
|
#### ② `ZlCardPage` —— 直接传 service
|
|
405
|
+
|
|
353
406
|
```vue
|
|
354
407
|
<ZlCardPage :request="getResourcePage" card-min-width="200px">
|
|
355
408
|
<template #default="{ data }">
|
|
@@ -357,30 +410,42 @@ const { data } = useDataRequest(getChartDataApi, { dataKey: 'data' })
|
|
|
357
410
|
</template>
|
|
358
411
|
</ZlCardPage>
|
|
359
412
|
```
|
|
413
|
+
|
|
360
414
|
内部组合 `usePageableRequest + ZlSearch + ZlPagination + ZlEmpty`。
|
|
361
415
|
|
|
362
416
|
#### ③ `ZlTable` + `ZlPagination` —— 自行 `usePaginationRequest`
|
|
417
|
+
|
|
363
418
|
```ts
|
|
364
419
|
const req = usePaginationRequest(getResourcePage, { manual: true })
|
|
365
420
|
onMounted(() => req.run({ pageNum: 1, pageSize: 8 }))
|
|
366
421
|
```
|
|
422
|
+
|
|
367
423
|
```vue
|
|
368
424
|
<ZlTable :columns="columns" :data="req.data" :loading="req.loading" height="320" />
|
|
369
425
|
<ZlPagination
|
|
370
|
-
:total="req.total"
|
|
426
|
+
:total="req.total"
|
|
427
|
+
:page-num="req.current"
|
|
428
|
+
:page-size="req.pageSize"
|
|
371
429
|
@change="({ pageNum, pageSize }) => req.changePagination(pageNum, pageSize)"
|
|
372
430
|
/>
|
|
373
431
|
```
|
|
374
432
|
|
|
375
433
|
#### ④ `ZlSearch` 触发 `run(params)`
|
|
434
|
+
|
|
376
435
|
```ts
|
|
377
436
|
const req = usePaginationRequest(getResourcePage, { manual: true })
|
|
378
|
-
function onSearch(params) {
|
|
437
|
+
function onSearch(params) {
|
|
438
|
+
req.run({ pageNum: 1, pageSize: 6, ...params })
|
|
439
|
+
}
|
|
379
440
|
```
|
|
441
|
+
|
|
380
442
|
```vue
|
|
381
443
|
<ZlSearch :items="queryItems" @search="onSearch" />
|
|
382
444
|
```
|
|
383
|
-
|
|
445
|
+
|
|
446
|
+
`ZlSearch` 按容器宽度自适应排列(每项最小 240px,列数随宽度变化)。**一行放不下的项会自动隐藏**,
|
|
447
|
+
此时「查询」左侧出现展开按钮(筛选图标):点击在查询条上层展开全量表单,再点即收起。
|
|
448
|
+
是否溢出由实测宽度算出(不是按项数猜),窗口拉宽后按钮会自动消失。`@search` 回传查询参数对象。
|
|
384
449
|
|
|
385
450
|
#### ⑤ `ZlDictTag` —— 注入字典后由 `useDict` 解析
|
|
386
451
|
|
|
@@ -391,8 +456,14 @@ function onSearch(params) { req.run({ pageNum: 1, pageSize: 6, ...params }) }
|
|
|
391
456
|
**A. 组件级直传(最轻量,推荐一次性/局部使用)**
|
|
392
457
|
|
|
393
458
|
```vue
|
|
394
|
-
<ZlDictTag
|
|
395
|
-
|
|
459
|
+
<ZlDictTag
|
|
460
|
+
dict-key="resourceType"
|
|
461
|
+
:value="row.type"
|
|
462
|
+
:dict="[
|
|
463
|
+
{ label: '图片', value: '1', icon: 'zl:image' },
|
|
464
|
+
{ label: '视频', value: '2' },
|
|
465
|
+
]"
|
|
466
|
+
/>
|
|
396
467
|
```
|
|
397
468
|
|
|
398
469
|
**B. 全局注册数据源(应用入口注册一次,全项目共享,适配不同项目)**
|
|
@@ -400,10 +471,14 @@ function onSearch(params) { req.run({ pageNum: 1, pageSize: 6, ...params }) }
|
|
|
400
471
|
```ts
|
|
401
472
|
import { setDictSource } from '@zl-ui-kit/composables'
|
|
402
473
|
// 静态字典表
|
|
403
|
-
setDictSource({
|
|
474
|
+
setDictSource({
|
|
475
|
+
resourceType: [{ label: '图片', value: '1' }],
|
|
476
|
+
resourceStatus: [{ label: '正常', value: '1' }],
|
|
477
|
+
})
|
|
404
478
|
// 或按需异步加载(推荐对接各自项目后端)
|
|
405
479
|
setDictSource(async (key) => await api.getDictOptions(key))
|
|
406
480
|
```
|
|
481
|
+
|
|
407
482
|
之后任意 `<ZlDictTag dict-key="resourceType" :value="row.type" />` 自动翻译,无需逐个传 `dict`。
|
|
408
483
|
|
|
409
484
|
**C. 局部注入(为某棵组件子树单独指定数据源,覆盖全局)**
|
|
@@ -418,26 +493,33 @@ useDictProvider({ source: { resourceType: [...] } })
|
|
|
418
493
|
<ZlDictTag dict-key="resourceType" :value="row.type" />
|
|
419
494
|
<ZlDictTag dict-key="resourceType" :value="row.type" simple />
|
|
420
495
|
```
|
|
496
|
+
|
|
421
497
|
> **注意**:`ZlTable` 列上的 `dictKey` 仅作 schema 字段透传,**不会**自动渲染字典标签,需用列插槽自行渲染 `ZlDictTag`(如 demo 中 `#type`/`#status`/`#region` 插槽)。
|
|
422
498
|
|
|
423
499
|
#### ⑥ `ZlUpload` —— 传上传 service
|
|
500
|
+
|
|
424
501
|
```vue
|
|
425
502
|
<ZlUpload v-model="uploadModel" :request="uploadFile" accept=".png,.jpg,.pdf" :max-size="5" :limit="3" />
|
|
426
503
|
```
|
|
504
|
+
|
|
427
505
|
`request` 接收 `FormData` 返回 `{ url }`;`maxSize` 单位 MB。
|
|
428
506
|
|
|
429
507
|
#### ⑦ `ZlTree` —— `useRequest` 绑定 `data`
|
|
508
|
+
|
|
430
509
|
```ts
|
|
431
510
|
const treeReq = useRequest(getTreeData)
|
|
432
511
|
// 必须提取为顶层 ref,否则模板中取到的是 Ref 对象本身(见 6.2 注意事项)
|
|
433
512
|
const { data: treeData, loading: treeLoading } = treeReq
|
|
434
513
|
```
|
|
514
|
+
|
|
435
515
|
```vue
|
|
436
516
|
<ZlTree v-if="!treeLoading" :data="treeData" :props="{ label: 'title', children: 'children' }" />
|
|
437
517
|
```
|
|
438
518
|
|
|
439
519
|
#### ⑧ `ZlChart` —— `useDataRequest` 解包后构建 option
|
|
520
|
+
|
|
440
521
|
`ZlChart` 显式 prop 为 `series`,其余配置(title/xAxis/yAxis/tooltip/grid)经 attrs 透传,故用 `v-bind` 传完整 echarts option:
|
|
522
|
+
|
|
441
523
|
```ts
|
|
442
524
|
const chartReq = useDataRequest(getChartDataApi, { dataKey: 'data' })
|
|
443
525
|
const chartOption = computed(() => {
|
|
@@ -451,18 +533,20 @@ const chartOption = computed(() => {
|
|
|
451
533
|
}
|
|
452
534
|
})
|
|
453
535
|
```
|
|
536
|
+
|
|
454
537
|
```vue
|
|
455
538
|
<ZlChart v-bind="chartOption" />
|
|
456
539
|
```
|
|
457
540
|
|
|
458
|
-
| Prop
|
|
459
|
-
|
|
|
460
|
-
| `series` | `object \| object[]` | 系列(单个或数组);其余 option 字段经 attrs 透传
|
|
461
|
-
| `theme`
|
|
541
|
+
| Prop | 类型 | 说明 |
|
|
542
|
+
| -------- | -------------------- | ------------------------------------------------------------------------------------------------------------------- |
|
|
543
|
+
| `series` | `object \| object[]` | 系列(单个或数组);其余 option 字段经 attrs 透传 |
|
|
544
|
+
| `theme` | `string` | 主题名,initialize 时指定。需先注册,如 `import 'echarts/theme/v5'` 后传 `theme="v5"`;echarts 6 想保留 v5 观感时用 |
|
|
462
545
|
|
|
463
546
|
> 暴露方法:`clear()`(模板 ref 调用)。尺寸自适应由 `useResizeObserver` 负责,容器需有明确高度。
|
|
464
547
|
|
|
465
548
|
#### ⑨ `useRequest` 生命周期面板
|
|
549
|
+
|
|
466
550
|
```ts
|
|
467
551
|
const req = useRequest(getResourcePageMaybeFail, { defaultParams: [{ pageNum: 1, pageSize: 5 }] })
|
|
468
552
|
req.refresh() // 重跑
|
|
@@ -480,18 +564,23 @@ req.cancel() // 取消进行中请求
|
|
|
480
564
|
// ❌ 错误:模板里取到的是 Ref 对象
|
|
481
565
|
const req = useRequest(getList)
|
|
482
566
|
```
|
|
567
|
+
|
|
483
568
|
```vue
|
|
484
569
|
<Table v-if="!req.loading" :data="req.data" />
|
|
485
570
|
```
|
|
571
|
+
|
|
486
572
|
```ts
|
|
487
573
|
// ✅ 正确:提取为顶层 ref,模板中自动解包
|
|
488
574
|
const req = useRequest(getList)
|
|
489
575
|
const { data: listData, loading: listLoading } = req
|
|
490
576
|
```
|
|
577
|
+
|
|
491
578
|
```vue
|
|
492
579
|
<Table v-if="!listLoading" :data="listData" />
|
|
493
580
|
```
|
|
581
|
+
|
|
494
582
|
方法调用不受影响(事件处理器中可直接写 `req.refresh()`,无需解包)。
|
|
583
|
+
|
|
495
584
|
3. **`ZlChart` 传参**:用 `series` prop + 其余 attrs 透传(推荐 `v-bind` 传整个 option),勿只传 `:option`。
|
|
496
585
|
4. **图标名必须存在**:字典/组件 `icon` 用的名字须在 `icons.json` 真实存在。
|
|
497
586
|
5. **分页键名对齐**:后端用 `current/pageSize/list` 而非 `pageNum/pageSize/rows` 时,用 `pagination` 选项或 `setGlobalOptions` 覆盖。
|
|
@@ -501,6 +590,7 @@ req.cancel() // 取消进行中请求
|
|
|
501
590
|
## 7. 表单与交互组件
|
|
502
591
|
|
|
503
592
|
### ZlForm —— schema 驱动
|
|
593
|
+
|
|
504
594
|
```ts
|
|
505
595
|
const items: FormItem[] = [
|
|
506
596
|
{ model: 'name', label: '名称', component: 'el-input', props: { placeholder: '请输入' }, rules: [{ required: true }] },
|
|
@@ -508,23 +598,41 @@ const items: FormItem[] = [
|
|
|
508
598
|
{ model: 'enable', label: '启用', component: 'ZlSwitch' },
|
|
509
599
|
]
|
|
510
600
|
```
|
|
601
|
+
|
|
511
602
|
```vue
|
|
512
603
|
<ZlForm :model="form" :items="items" label-width="auto" />
|
|
513
604
|
```
|
|
605
|
+
|
|
514
606
|
`FormItem` 关键字段:`model`(必填) / `label` / `component`(组件名或组件) / `props`(自动包装 `update:modelValue` 回写) / `slots` / `rules` / `defaultValue` / `visible`(布尔或函数) / `tooltip`(label 后帮助图标 + tooltip)。
|
|
515
607
|
|
|
516
608
|
### ZlSearch —— 查询条
|
|
609
|
+
|
|
517
610
|
见 6.3 ④。`items: SearchItem[]`,`SearchItem` 继承 `FormItem` 并扩展 `toLabel`(值→条件标签) 与 `toParams`(值→查询参数合并)。
|
|
518
611
|
|
|
612
|
+
**自适应溢出**(`useSearchFormOverflow`,移植自源组件逻辑,非按项数猜):
|
|
613
|
+
|
|
614
|
+
- 布局 `auto-fill` 网格,单列 `minmax(min(240px, 100%), 1fr)`,列数随容器宽度变化;
|
|
615
|
+
- 按实测宽度算出**一行能放几列**,记下最后可见项下标 `lastVisibleIndex`;超出的项打上
|
|
616
|
+
`zl-search-form-item-hide`(`position: absolute` + `visibility: hidden`,不占位但**仍在表单里**,
|
|
617
|
+
校验与取值不受影响),所以查询条永远只有一行高;
|
|
618
|
+
- `ResizeObserver` 监听宽度变化重算,拉宽窗口后展开按钮会自己消失;查询项增删/显隐后也会重测。
|
|
619
|
+
|
|
620
|
+
**展开 / 收起**:`lastVisibleIndex !== null` 时在「查询」左侧出现筛选图标按钮,点击在查询条**上层**
|
|
621
|
+
展开全量表单浮层(`position: absolute` + 上滑 `--28px` 淡入,不改变页面高度),再点收起;查询/重置后自动收起。
|
|
622
|
+
`showLabels` 不显式传时,仅在发生溢出时展示「筛选条件」标签行。
|
|
623
|
+
|
|
519
624
|
### ZlDrawer / ZlPopconfirm / ZlSwitch
|
|
625
|
+
|
|
520
626
|
- `ZlDrawer`:自绘 footer(okLoading/hideCancel/readonly 语义保持),`loading`→`v-loading`。
|
|
521
627
|
- `ZlPopconfirm`:基于 `el-popover` 自绘面板,保留 title/content 双插槽与确认/取消事件。
|
|
522
628
|
- `ZlSwitch`:`active-value`/`inactive-value` 包装,文本在侧(`checked-text`)。
|
|
523
629
|
|
|
524
630
|
### ZlAction / ZlActionList —— 操作列与操作列表
|
|
631
|
+
|
|
525
632
|
基于 `ActionItem`(label/icon/onClick/disabled/divider 等),`ZlTable` 列 `actions` 即渲染 `ZlActionList`。
|
|
526
633
|
|
|
527
634
|
### ZlRadioTag / ZlCheckboxTag / ZlCheckAll / ZlSorter / ZlAddSub / ZlLayoutSwitch
|
|
635
|
+
|
|
528
636
|
- `ZlRadioTag`/`ZlCheckboxTag`:隐藏原生 input,标签本体即 `ZlTag`,checked 由 model 推导;`ZlCheckboxTag` 支持 exclusive。
|
|
529
637
|
- `ZlCheckAll`:全选态 computed 推导。
|
|
530
638
|
- `ZlSorter`/`ZlSorterList`:排序控件。
|
|
@@ -532,6 +640,7 @@ const items: FormItem[] = [
|
|
|
532
640
|
- `ZlLayoutSwitch`:布局形态切换(el-radio-button + `zl:` 图标)。
|
|
533
641
|
|
|
534
642
|
### ZlTabs / ZlDynamicComponent / ZlGrid
|
|
643
|
+
|
|
535
644
|
- `ZlTabs`:`el-tabs` 封装,schema `{ key, title, lazy }`,extra 经外层绝对定位承载。
|
|
536
645
|
- `ZlDynamicComponent`:schema→VNode 渲染引擎,默认 `el-input`。
|
|
537
646
|
- `ZlGrid`(+`ZlGridItem`):自绘栅格,label 自适应/跨列/省略提示/字典。
|
|
@@ -541,13 +650,16 @@ const items: FormItem[] = [
|
|
|
541
650
|
## 8. 布局与权限
|
|
542
651
|
|
|
543
652
|
### ZlAppLayout / ZlAppMenu
|
|
653
|
+
|
|
544
654
|
- `ZlAppLayout`:horizontal/vertical 双形态布局骨架,折叠按钮 `el-button circle`。
|
|
545
655
|
- `ZlAppMenu`(+Item):`el-menu` 重写(index=menu.name),主题经 `--zl-menu-*` CSS 变量对接 `--el-menu-*`。
|
|
546
656
|
|
|
547
657
|
### ZlPermission
|
|
658
|
+
|
|
548
659
|
配合 `usePermissionProvider` 提供权限上下文,`usePermission` 校验;样例见 `/general`。
|
|
549
660
|
|
|
550
661
|
### ZlHorizontalTable
|
|
662
|
+
|
|
551
663
|
`el-row`/`el-col`(24 栅格)实现的横向描述表。
|
|
552
664
|
|
|
553
665
|
---
|
|
@@ -595,9 +707,7 @@ setupMonacoEnvironment((_, label) => {
|
|
|
595
707
|
**让编辑器不进首屏**(体积 3MB+,务必异步):
|
|
596
708
|
|
|
597
709
|
```ts
|
|
598
|
-
const ZlEditor = defineAsyncComponent(() =>
|
|
599
|
-
import('@zl-ui-kit/components/editor').then(m => m.ZlEditor),
|
|
600
|
-
)
|
|
710
|
+
const ZlEditor = defineAsyncComponent(() => import('@zl-ui-kit/components/editor').then((m) => m.ZlEditor))
|
|
601
711
|
```
|
|
602
712
|
|
|
603
713
|
路由级拆分(`() => import('./EditorPage.vue')`)效果相同 —— 只要 `@zl-ui-kit/components/editor`
|
|
@@ -616,6 +726,7 @@ const ZlEditor = defineAsyncComponent(() =>
|
|
|
616
726
|
> 主题负责「视觉」的定义与覆盖;**「文案」的同等人格能力见第 13 章**(`createZlI18n`,与 `defineTheme` 对称)。
|
|
617
727
|
|
|
618
728
|
### L1 变量直覆(小幅微调)
|
|
729
|
+
|
|
619
730
|
```css
|
|
620
731
|
body {
|
|
621
732
|
--zl-primary-6: #3056d3;
|
|
@@ -625,23 +736,36 @@ body {
|
|
|
625
736
|
```
|
|
626
737
|
|
|
627
738
|
### L2 运行时定义主题(换肤/多租户推荐)
|
|
739
|
+
|
|
628
740
|
```ts
|
|
629
741
|
import { defineTheme, setTheme, enableThemePersistence, useTheme } from '@zl-ui-kit/theme'
|
|
630
|
-
defineTheme({
|
|
742
|
+
defineTheme({
|
|
743
|
+
name: 'brand-purple',
|
|
744
|
+
base: 'light',
|
|
745
|
+
colors: { primary: '#722ED1', danger: '#f53f3f' },
|
|
746
|
+
apply: true,
|
|
747
|
+
})
|
|
631
748
|
setTheme('brand-purple')
|
|
632
|
-
enableThemePersistence()
|
|
633
|
-
const { theme, themes, setTheme } = useTheme()
|
|
749
|
+
enableThemePersistence() // 可选:localStorage 记住选择(key: zl-theme)
|
|
750
|
+
const { theme, themes, setTheme } = useTheme() // 组件内响应式
|
|
634
751
|
```
|
|
752
|
+
|
|
635
753
|
自定义主题与内置主题变量完全同构,色阶派生算法与 EP theme-chalk 对齐,支持任意数量并存切换;`tokens` 参数可覆盖任意底层 token 深度定制。
|
|
636
754
|
|
|
637
755
|
### L3 构建时生成主题(深度定制,规划中)
|
|
756
|
+
|
|
638
757
|
需求 §12-Q14:将提供 CLI 产出与内置同构的完整 CSS,当前可先用 L2 `tokens` 覆盖近似。
|
|
639
758
|
|
|
640
759
|
### SCSS 工具(编译期定制)
|
|
760
|
+
|
|
641
761
|
```scss
|
|
642
762
|
@use '@zl-ui-kit/theme/scss/colors.scss' as *;
|
|
643
|
-
.my-card {
|
|
763
|
+
.my-card {
|
|
764
|
+
@include colorGradient(primary, to right);
|
|
765
|
+
color: var(--zl-primary-6);
|
|
766
|
+
}
|
|
644
767
|
```
|
|
768
|
+
|
|
645
769
|
- `scss/colors.scss`:`colorForEach` / `colorGradient`
|
|
646
770
|
- `scss/map.scss`:`mapGet`
|
|
647
771
|
- `scss/theme.scss`:`theme()` mixin(为每套主题生成选择器块)
|
|
@@ -651,13 +775,14 @@ const { theme, themes, setTheme } = useTheme() // 组件内响应式
|
|
|
651
775
|
## 11. 调试与常见问题
|
|
652
776
|
|
|
653
777
|
### 各包常用命令
|
|
654
|
-
|
|
655
|
-
|
|
|
656
|
-
|
|
|
657
|
-
| @zl-ui-kit/
|
|
658
|
-
| @zl-ui-kit/
|
|
659
|
-
| @zl-ui-kit/
|
|
660
|
-
| @zl-ui-kit/
|
|
778
|
+
|
|
779
|
+
| 包 | 生成 | 构建 | 单测 |
|
|
780
|
+
| ---------------------- | --------------------------------------------------------------------- | ---------------------------------- | ------------------- |
|
|
781
|
+
| @zl-ui-kit/icons | `pnpm --filter @zl-ui-kit/icons gen`(svg → icons.json,prefix `zl`) | 同 gen | — |
|
|
782
|
+
| @zl-ui-kit/theme | `pnpm --filter @zl-ui-kit/theme gen`(_json → generated/) | `build`(gen + tsup) | — |
|
|
783
|
+
| @zl-ui-kit/utils | — | `build`(tsup) | `test:unit`(vitest) |
|
|
784
|
+
| @zl-ui-kit/composables | — | `build`(tsup) | — |
|
|
785
|
+
| @zl-ui-kit/components | — | `build`(vite lib + dts + 样式注入) | — |
|
|
661
786
|
|
|
662
787
|
### 文档维护位置
|
|
663
788
|
|
|
@@ -669,6 +794,7 @@ const { theme, themes, setTheme } = useTheme() // 组件内响应式
|
|
|
669
794
|
- 其余四包 README 只保留本包速查,并在顶部指向本页。
|
|
670
795
|
|
|
671
796
|
### 常见问题
|
|
797
|
+
|
|
672
798
|
- **改了 theme 的 `_json/*.json` 不生效**:先 `pnpm --filter @zl-ui-kit/theme gen`(生成 `src/generated/`),再刷新 playground。
|
|
673
799
|
- **新增 svg 图标**:放入 `packages/icons/src/svg/`,执行 icons 的 `gen` 后重启 playground。
|
|
674
800
|
- **`@zl-ui-kit/theme/scss/*.scss` 找不到**:确认已执行 theme `gen`(`generated/_constants.scss` 是其依赖)。
|
|
@@ -707,7 +833,9 @@ setGlobalOptions({ pagination: { currentKey: 'current', totalKey: 'totalCount',
|
|
|
707
833
|
|
|
708
834
|
// 自定义插件示例
|
|
709
835
|
const logPlugin = defineUseRequestPlugin((inst) => ({
|
|
710
|
-
onSuccess(data) {
|
|
836
|
+
onSuccess(data) {
|
|
837
|
+
console.log('[req]', inst.params.value, data)
|
|
838
|
+
},
|
|
711
839
|
}))
|
|
712
840
|
const { data } = useRequest(getList, {}, [logPlugin])
|
|
713
841
|
```
|
|
@@ -718,6 +846,7 @@ const { data } = useRequest(getList, {}, [logPlugin])
|
|
|
718
846
|
import { useGlobalData } from '@zl-ui-kit/composables'
|
|
719
847
|
const g = useGlobalData()
|
|
720
848
|
```
|
|
849
|
+
|
|
721
850
|
响应式字段(均为 `WritableComputedRef`):`locale` / `theme` / `token` / `isI18nKeyVisible` / `roles` / `permissions` / `user` / `localeMessages` / `elLocaleMessages` / `config`。(注:字典数据已独立为 `useDictStore`,不挂在全局数据上。)
|
|
722
851
|
|
|
723
852
|
方法:`getConfig(key, default?)` / `isConfig(key, compareValue='true')` / `setAndWaitUntil({ set?, until? })`(设置并等待条件成立)/ `resetUser()`。
|
|
@@ -726,12 +855,12 @@ const g = useGlobalData()
|
|
|
726
855
|
```ts
|
|
727
856
|
// 应用入口:初始化登录态与业务配置
|
|
728
857
|
const g = useGlobalData()
|
|
729
|
-
g.token.value = loginToken
|
|
730
|
-
g.config.value = { 'zl.service.type': 'platform' }
|
|
858
|
+
g.token.value = loginToken // 持久化到 $zl_token
|
|
859
|
+
g.config.value = { 'zl.service.type': 'platform' } // useServiceType 读取它
|
|
731
860
|
g.user.value = { name: '张三' }
|
|
732
861
|
|
|
733
|
-
g.locale.value = 'en'
|
|
734
|
-
g.resetUser()
|
|
862
|
+
g.locale.value = 'en' // 切换语言,useLocale / ZlI18nProvider 跟随
|
|
863
|
+
g.resetUser() // 登出:清 user / roles / permissions / token
|
|
735
864
|
```
|
|
736
865
|
|
|
737
866
|
> 本 hook 只依赖 `localStorage`,**不依赖任何微前端框架**。它替代了 `0.4.x` 及更早版本的
|
|
@@ -756,11 +885,18 @@ g.resetUser() // 登出:清 user
|
|
|
756
885
|
const { Message, Modal, Notification } = useGlobalMessage()
|
|
757
886
|
Message.success('保存成功')
|
|
758
887
|
// Modal 在 ElMessageBox 基础上扩展了 confirmPromise
|
|
759
|
-
const r = await Modal.confirmPromise(
|
|
760
|
-
|
|
761
|
-
async (ctx) => {
|
|
888
|
+
const r = await Modal.confirmPromise(
|
|
889
|
+
{ title: '删除', message: '确认删除?' },
|
|
890
|
+
async (ctx) => {
|
|
891
|
+
await doDelete()
|
|
892
|
+
}, // onOk
|
|
893
|
+
async (ctx) => {
|
|
894
|
+
/* onCancel */
|
|
895
|
+
},
|
|
896
|
+
)
|
|
762
897
|
// r: 'Ok' | 'Cancel' | false(onOk 抛错且 throwOnOk=false 时)
|
|
763
898
|
```
|
|
899
|
+
|
|
764
900
|
`throwOnOk` / `throwOnCancel` 控制错误是否向上抛出(默认吞错 resolve(false) / resolve('Cancel'))。
|
|
765
901
|
|
|
766
902
|
#### 12.1.5 其它 Hooks
|
|
@@ -776,7 +912,7 @@ const r = await Modal.confirmPromise({ title: '删除', message: '确认删除
|
|
|
776
912
|
|
|
777
913
|
```ts
|
|
778
914
|
import { createRequest, deepCopy, formatFilesize /* … */ } from '@zl-ui-kit/utils'
|
|
779
|
-
import request from '@zl-ui-kit/utils'
|
|
915
|
+
import request from '@zl-ui-kit/utils' // 默认导出一个开箱即用的 createRequest 实例
|
|
780
916
|
```
|
|
781
917
|
|
|
782
918
|
#### 12.2.1 网络请求封装 `createRequest`
|
|
@@ -795,30 +931,34 @@ api.get('/resources', { params: { pageNum: 1, pageSize: 10 } })
|
|
|
795
931
|
|
|
796
932
|
#### 12.2.2 数组 / 对象 / 类型判断
|
|
797
933
|
|
|
798
|
-
| 函数
|
|
799
|
-
|
|
|
800
|
-
| `convertArrayToTree(list, { id='id', pid='pid', children='children' })`
|
|
801
|
-
| `ensureArray(val)`
|
|
802
|
-
| `deepCopy(obj)` / `shallowCopy(obj)`
|
|
803
|
-
| `hasOwn(obj, key)`
|
|
804
|
-
| `isObject` / `isPlainObject` / `isArray` / `isFunction` / `isPromise` / `isBoolean` / `isNumber` / `isDefined` | 类型判断(TS 类型守卫)
|
|
934
|
+
| 函数 | 说明 |
|
|
935
|
+
| -------------------------------------------------------------------------------------------------------------- | ----------------------------------------- |
|
|
936
|
+
| `convertArrayToTree(list, { id='id', pid='pid', children='children' })` | 扁平数组转树(基于 id/pid,支持乱序输入) |
|
|
937
|
+
| `ensureArray(val)` | 非数组值包装为单元素数组 |
|
|
938
|
+
| `deepCopy(obj)` / `shallowCopy(obj)` | 深拷贝 / 浅拷贝(内部用 `hasOwn`) |
|
|
939
|
+
| `hasOwn(obj, key)` | `Object.prototype.hasOwnProperty` 封装 |
|
|
940
|
+
| `isObject` / `isPlainObject` / `isArray` / `isFunction` / `isPromise` / `isBoolean` / `isNumber` / `isDefined` | 类型判断(TS 类型守卫) |
|
|
805
941
|
|
|
806
942
|
#### 12.2.3 函数 / 加密 / DOM / 文件 / 杂项
|
|
807
943
|
|
|
808
944
|
**函数**
|
|
945
|
+
|
|
809
946
|
- `debounce(fn, delay = 300)`:防抖。
|
|
810
947
|
- `traverseTree(tree, cb, { children = 'children' })`:深度遍历树结构数组。
|
|
811
948
|
- `withResolvers<T>()`:`Promise.withResolvers` 兼容实现,返回 `{ resolve, reject, promise }`。
|
|
812
949
|
|
|
813
950
|
**加密**(CryptoJS AES-CBC-PKCS7)
|
|
951
|
+
|
|
814
952
|
- `aesEncrypt(plain, aesKey = DEFAULT_AES_KEY, aesIvKey = DEFAULT_AES_IV_KEY)` / `aesDecrypt(cipher, ...)`
|
|
815
953
|
- 默认密钥常量:`DEFAULT_AES_KEY` / `DEFAULT_AES_IV_KEY`、`DATABASE_AES_KEY` / `DATABASE_AES_IV_KEY`(均可自行传入覆盖)。
|
|
816
954
|
|
|
817
955
|
**DOM**
|
|
956
|
+
|
|
818
957
|
- `getRelativeRect(target, relative)` → `{ top, bottom, left, right, width, height }`:元素相对参照元素的矩形。
|
|
819
958
|
- `getStyle(el, prop)`:读取样式(含计算样式回退;`float` → `cssFloat`)。
|
|
820
959
|
|
|
821
960
|
**文件**
|
|
961
|
+
|
|
822
962
|
- `fileSave`(re-export `file-saver` 的 `saveAs`)。
|
|
823
963
|
- `joinFilePrefix(path, prefix = '/_file')`:拼接文件服务前缀路径。
|
|
824
964
|
- `downloadFileByUrl(url, prefix?)`:创建临时 `<a>` 触发浏览器下载。
|
|
@@ -826,6 +966,7 @@ api.get('/resources', { params: { pageNum: 1, pageSize: 10 } })
|
|
|
826
966
|
- `formatFilesize(size, { precision = 2, units })`:文件大小格式化(B/KB/MB/GB)。
|
|
827
967
|
|
|
828
968
|
**杂项**
|
|
969
|
+
|
|
829
970
|
- `generateUUID()`:UUID v4。
|
|
830
971
|
- `getRandomInt(min, max)`:`[min, max]` 区间随机整数。
|
|
831
972
|
- `paginate(data, pageSize, pageNum)` → `{ rows, pageNum, total }`:内存数组静态分页。
|
|
@@ -840,11 +981,11 @@ api.get('/resources', { params: { pageNum: 1, pageSize: 10 } })
|
|
|
840
981
|
|
|
841
982
|
### 13.1 三层结构
|
|
842
983
|
|
|
843
|
-
| 层
|
|
844
|
-
|
|
|
845
|
-
| 业务文案多语言
|
|
846
|
-
| Element Plus 内置组件本地化 | `ZlI18nProvider` → `<el-config-provider>`
|
|
847
|
-
| 调试开关
|
|
984
|
+
| 层 | 来源 | 负责 |
|
|
985
|
+
| --------------------------- | --------------------------------------------------------------- | ------------------------------------------- |
|
|
986
|
+
| 业务文案多语言 | 宿主经 `createZlI18n`(或底层 `useLocale`)安装的 vue-i18n 实例 | `t('zl.xxx')` 解析内置包 + 覆盖包 |
|
|
987
|
+
| Element Plus 内置组件本地化 | `ZlI18nProvider` → `<el-config-provider>` | 绑定 `elLocaleMessages` 到 EP |
|
|
988
|
+
| 调试开关 | `isI18nKeyVisible` | 开启后所有 `t()` 直接显示 key,便于排查漏翻 |
|
|
848
989
|
|
|
849
990
|
> ⚠️ **关键:仅 `useLocale` 不够。** `elLocaleMessages` 由 `useLocale` 的 `loader` 写入全局数据,但必须由 `ZlI18nProvider` 经 `<el-config-provider>` 真正挂载到 Element Plus,否则分页器等内置组件不会翻译。
|
|
850
991
|
|
|
@@ -865,9 +1006,9 @@ locale.value = 'zh'
|
|
|
865
1006
|
const { i18n } = createZlI18n({
|
|
866
1007
|
// 只覆盖想改的 key;未写的走组件库内置默认包
|
|
867
1008
|
messages: {
|
|
868
|
-
zh: { 'zl.login.username': '账号' },
|
|
1009
|
+
zh: { 'zl.login.username': '账号' }, // 覆盖已有语言
|
|
869
1010
|
en: { 'zl.empty.noData': 'Nothing here yet' },
|
|
870
|
-
ja: { 'zl.empty.noData': 'データがありません' },
|
|
1011
|
+
ja: { 'zl.empty.noData': 'データがありません' }, // 新增语言
|
|
871
1012
|
},
|
|
872
1013
|
// Element Plus 语言包(随 locale 自动切换,由 <ZlI18nProvider> 挂载)
|
|
873
1014
|
elLocales: { zh: zhCn, en },
|
|
@@ -923,14 +1064,14 @@ const text = t('zl.empty.noData', '暂无相关数据')
|
|
|
923
1064
|
|
|
924
1065
|
主题让消费者「定义并覆盖视觉」,国际化让消费者「定义并覆盖文案」——二者地位对等:
|
|
925
1066
|
|
|
926
|
-
| 能力
|
|
927
|
-
|
|
|
928
|
-
| 内置默认
|
|
929
|
-
| 运行时定义
|
|
930
|
-
| 引用 / 切换 | `setTheme('dark')` / `useTheme()`
|
|
931
|
-
| 持久化
|
|
932
|
-
| 细粒度覆盖
|
|
933
|
-
| 挂载点
|
|
1067
|
+
| 能力 | 主题(`@zl-ui-kit/theme`) | 国际化(`@zl-ui-kit/components` + `@zl-ui-kit/composables`) |
|
|
1068
|
+
| ----------- | ------------------------------------------------------ | ------------------------------------------------------------ |
|
|
1069
|
+
| 内置默认 | 5 套主题(light / dark / red-light / red-dark / blue) | `zlMessages`(zh / zh-cn / en) |
|
|
1070
|
+
| 运行时定义 | `defineTheme({ name, base, colors, tokens })` | `createZlI18n({ messages })` 覆盖 / 新增语言 |
|
|
1071
|
+
| 引用 / 切换 | `setTheme('dark')` / `useTheme()` | `locale.value = 'en'` / `useLocale()` 返回的 `locale` |
|
|
1072
|
+
| 持久化 | `enableThemePersistence()` | `useGlobalData().locale` 经 `$zl_locale` 持久化 |
|
|
1073
|
+
| 细粒度覆盖 | CSS 变量 L1 覆写(`--zl-primary-6`) | `mergeMessages` / 直接覆盖单个 key |
|
|
1074
|
+
| 挂载点 | `body[data-theme]` | `<ZlI18nProvider>`(EP locale)+ `app.use(i18n)`(业务文案) |
|
|
934
1075
|
|
|
935
1076
|
**三种覆盖方式(按力度递增)**
|
|
936
1077
|
|
|
@@ -951,23 +1092,2743 @@ const { i18n } = useLocale({ messages })
|
|
|
951
1092
|
|
|
952
1093
|
**内置可覆盖 key 一览**(`zl.<组件>.<语义>`)
|
|
953
1094
|
|
|
954
|
-
| 组件
|
|
955
|
-
|
|
|
956
|
-
| ZlEmpty
|
|
957
|
-
| ZlDrawer
|
|
958
|
-
| ZlPopconfirm
|
|
959
|
-
| ZlLayoutSwitch | `zl.layoutSwitch.grid` / `table`
|
|
960
|
-
| ZlUpload
|
|
961
|
-
| ZlSearch
|
|
962
|
-
| ZlLogin
|
|
963
|
-
| ZlFilePreview
|
|
964
|
-
| ZlAction
|
|
965
|
-
| ZlCheckAll
|
|
966
|
-
| ZlCopy
|
|
967
|
-
| ZlDescription
|
|
968
|
-
| ZlGrid
|
|
969
|
-
| ZlSqlEditor
|
|
1095
|
+
| 组件 | key | 默认(zh) |
|
|
1096
|
+
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
|
|
1097
|
+
| ZlEmpty | `zl.empty.noData` | 暂无相关数据 |
|
|
1098
|
+
| ZlDrawer | `zl.drawer.cancel` / `confirm` / `close` | 取消 / 确定 / 关闭 |
|
|
1099
|
+
| ZlPopconfirm | `zl.popconfirm.confirm` / `cancel` | 确定 / 取消 |
|
|
1100
|
+
| ZlLayoutSwitch | `zl.layoutSwitch.grid` / `table` | 网格 / 表格 |
|
|
1101
|
+
| ZlUpload | `zl.upload.accept` / `limit` / `maxSize` / `nameSpace` | 仅支持{accept}格式的文件 / 最多可上传{limit}个 / 大小不超过{maxSize}MB / 文件名中不得包含空格 |
|
|
1102
|
+
| ZlSearch | `zl.search.search` / `filterConditions` / `all` | 查询 / 筛选条件 / 全部 |
|
|
1103
|
+
| ZlLogin | `zl.login.username` / `password` / `usernamePlaceholder` / `passwordPlaceholder` / `slideRequired` / `slideText` / `slideSuccess` / `submit` / `welcome` | 用户名 / 密码 / 请输入用户名 / 请输入密码 / 请将滑块移至右侧 / 请滑动到右侧 / 验证通过 / 登 录 / 欢迎登录 |
|
|
1104
|
+
| ZlFilePreview | `zl.filePreview.typeError` / `fetchError` | 获取文件类型失败 / 文件获取失败 |
|
|
1105
|
+
| ZlAction | `zl.action.more` | 更多 |
|
|
1106
|
+
| ZlCheckAll | `zl.checkAll.selectAll` | 全选 |
|
|
1107
|
+
| ZlCopy | `zl.copy.copy` / `success` / `failed` | 复制 / 复制成功 / 复制失败 |
|
|
1108
|
+
| ZlDescription | `zl.description.empty` | 暂无 |
|
|
1109
|
+
| ZlGrid | `zl.grid.empty` | 暂无 |
|
|
1110
|
+
| ZlSqlEditor | `zl.sqlEditor.invalid` | 请检查SQL语法 |
|
|
970
1111
|
|
|
971
1112
|
> **props 优先于 i18n**:组件显式传入的 props(如 `ZlPopconfirm` 的 `confirmButtonText`、`ZlDescription`/`ZlGrid` 的 `emptyText`)优先;i18n 只决定「未传时的默认文案」。新增文案请同步补 `packages/components/src/locales/{zh-cn,en}.ts`。
|
|
972
1113
|
|
|
973
1114
|
> **当前未接入 i18n 的中文**:仅剩开发态告警(`ZlDynamicComponent` 的 `console.warn`、`ZlPermission` 的 `throw new Error('权限格式错误')`、`ZlEditor` 的 worker 未配置提示)——这些不面向终端用户,保持中文以便排查。
|
|
1115
|
+
|
|
1116
|
+
---
|
|
1117
|
+
|
|
1118
|
+
<!-- API:START -->
|
|
1119
|
+
|
|
1120
|
+
## 14. 组件 API 参考(自动生成)
|
|
1121
|
+
|
|
1122
|
+
> 本章由 `pnpm docs:api`(`scripts/gen-component-api.mjs`)从各组件源码**静态提取**后自动写入,**请勿手改**——会被下次生成覆盖。要补充 prop 说明,请给源码里的 prop 加 `/** ... */` 注释。
|
|
1123
|
+
>
|
|
1124
|
+
> 提取口径:`defineProps`(含 `withDefaults` 默认值、`defineComponent({ props })` 选项式)/ `defineEmits` / `<slot>` / `defineExpose`。类型列显示的是源码里的 TS 类型表达式,可直接当入参类型用。
|
|
1125
|
+
>
|
|
1126
|
+
> 代码块取自 `apps/playground/src/pages/gallery-demos.ts` 的逐组件最小示例(同一份代码在冒烟测试里真实渲染),因此不会出现过期写法;改示例后重跑即同步。
|
|
1127
|
+
>
|
|
1128
|
+
> **每个 prop / 每个插槽都有示例**:`props` 表的「示例」列是该属性的**可直接粘贴写法**(`v-model` 用简写,布尔值按默认值给反例,字面量联合取首个取值,数组 / 对象 / 函数给空字面量占位);`插槽` 表的「示例」列是对应的 `<template #name>` 片段。想直接改原始代码,用上面的「用法示例 / 插槽用法」块。
|
|
1129
|
+
>
|
|
1130
|
+
> 同一次生成还会写出 `apps/playground/src/data/component-api.json`,playground 的 **UI 组件使用手册**(`/#/manual`)页直接渲染它 —— 可检索、可复制 `import`,内容与本章一致。
|
|
1131
|
+
|
|
1132
|
+
### 组件索引
|
|
1133
|
+
|
|
1134
|
+
| 组件 | 入口 | props | 事件 | 插槽 | 暴露 |
|
|
1135
|
+
| -------------------- | ------------------- | ----- | ---- | ---- | ---- |
|
|
1136
|
+
| `ZlAction` | 主入口 | 0 | 0 | 0 | 0 |
|
|
1137
|
+
| `ZlActionList` | 主入口 | 6 | 1 | 1 | 0 |
|
|
1138
|
+
| `ZlAddSub` | 主入口 | 2 | 1 | 1 | 0 |
|
|
1139
|
+
| `ZlAppLayout` | 主入口 | 1 | 0 | 1 | 0 |
|
|
1140
|
+
| `ZlAppMenu` | 主入口 | 3 | 1 | 0 | 0 |
|
|
1141
|
+
| `ZlAppSlogan` | 主入口 | 3 | 0 | 0 | 0 |
|
|
1142
|
+
| `ZlAutoTooltip` | 主入口 | 0 | 0 | 1 | 0 |
|
|
1143
|
+
| `ZlAvatar` | 主入口 | 3 | 0 | 0 | 0 |
|
|
1144
|
+
| `ZlAvatarGroup` | 主入口 | 3 | 0 | 0 | 0 |
|
|
1145
|
+
| `ZlCard` | 主入口 | 1 | 0 | 8 | 0 |
|
|
1146
|
+
| `ZlCardPage` | 主入口 | 6 | 1 | 3 | 3 |
|
|
1147
|
+
| `ZlCheckAll` | 主入口 | 2 | 1 | 0 | 0 |
|
|
1148
|
+
| `ZlCheckboxTag` | 主入口 | 7 | 1 | 1 | 0 |
|
|
1149
|
+
| `ZlCopy` | 主入口 | 2 | 0 | 2 | 0 |
|
|
1150
|
+
| `ZlDescription` | 主入口 | 5 | 0 | 1 | 0 |
|
|
1151
|
+
| `ZlDictTag` | 主入口 | 6 | 0 | 0 | 0 |
|
|
1152
|
+
| `ZlDrawer` | 主入口 | 6 | 1 | 2 | 0 |
|
|
1153
|
+
| `ZlDynamicComponent` | 主入口 | 3 | 2 | 0 | 0 |
|
|
1154
|
+
| `ZlPdfViewer` | 主入口 | 2 | 0 | 0 | 0 |
|
|
1155
|
+
| `ZlLogin` | 主入口 | 2 | 0 | 2 | 0 |
|
|
1156
|
+
| `ZlLoginForm` | 主入口 | 1 | 0 | 1 | 0 |
|
|
1157
|
+
| `ZlEmpty` | 主入口 | 2 | 0 | 0 | 0 |
|
|
1158
|
+
| `ZlForm` | 主入口 | 2 | 0 | 3 | 0 |
|
|
1159
|
+
| `ZlFormChild` | 主入口 | 1 | 0 | 0 | 0 |
|
|
1160
|
+
| `ZlGridItem` | 主入口 | 1 | 0 | 1 | 0 |
|
|
1161
|
+
| `ZlGrid` | 主入口 | 9 | 0 | 2 | 0 |
|
|
1162
|
+
| `ZlHorizontalTable` | 主入口 | 4 | 0 | 1 | 0 |
|
|
1163
|
+
| `ZlIcon` | 主入口 | 1 | 0 | 1 | 0 |
|
|
1164
|
+
| `ZlI18nProvider` | 主入口 | 0 | 0 | 1 | 0 |
|
|
1165
|
+
| `ZlIconHover` | 主入口 | 0 | 0 | 0 | 0 |
|
|
1166
|
+
| `ZlIconLabel` | 主入口 | 1 | 1 | 1 | 0 |
|
|
1167
|
+
| `ZlCornerTag` | 主入口 | 3 | 0 | 1 | 0 |
|
|
1168
|
+
| `ZlLayoutSwitch` | 主入口 | 2 | 1 | 0 | 0 |
|
|
1169
|
+
| `ZlPagination` | 主入口 | 3 | 3 | 0 | 0 |
|
|
1170
|
+
| `ZlPermission` | 主入口 | 1 | 0 | 1 | 0 |
|
|
1171
|
+
| `ZlPopconfirm` | 主入口 | 4 | 2 | 3 | 0 |
|
|
1172
|
+
| `ZlRadioTag` | 主入口 | 3 | 1 | 1 | 0 |
|
|
1173
|
+
| `ZlSearch` | 主入口 | 5 | 2 | 2 | 3 |
|
|
1174
|
+
| `ZlSearchTable` | 主入口 | 5 | 1 | 3 | 4 |
|
|
1175
|
+
| `ZlSection` | 主入口 | 4 | 0 | 3 | 0 |
|
|
1176
|
+
| `ZlSorter` | 主入口 | 2 | 2 | 1 | 0 |
|
|
1177
|
+
| `ZlSorterList` | 主入口 | 2 | 1 | 0 | 0 |
|
|
1178
|
+
| `ZlSwitch` | 主入口 | 6 | 1 | 2 | 0 |
|
|
1179
|
+
| `ZlTable` | 主入口 | 6 | 3 | 3 | 0 |
|
|
1180
|
+
| `ZlTabs` | 主入口 | 4 | 0 | 3 | 0 |
|
|
1181
|
+
| `ZlTag` | 主入口 | 15 | 4 | 1 | 0 |
|
|
1182
|
+
| `ZlText` | 主入口 | 1 | 0 | 1 | 0 |
|
|
1183
|
+
| `ZlTitle` | 主入口 | 5 | 0 | 3 | 0 |
|
|
1184
|
+
| `ZlUpload` | 主入口 | 11 | 1 | 1 | 0 |
|
|
1185
|
+
| `ZlTree` | 主入口 | 5 | 0 | 3 | 0 |
|
|
1186
|
+
| `ZlTreeSelect` | 主入口 | 6 | 1 | 0 | 0 |
|
|
1187
|
+
| `ZlChart` | 子入口 chart | 2 | 0 | 0 | 1 |
|
|
1188
|
+
| `ZlEditor` | 子入口 editor | 3 | 1 | 0 | 0 |
|
|
1189
|
+
| `ZlSqlEditor` | 子入口 editor | 4 | 1 | 0 | 0 |
|
|
1190
|
+
| `ZlFilePreview` | 子入口 file-preview | 1 | 0 | 0 | 0 |
|
|
1191
|
+
| `ZlFileViewer` | 子入口 file-preview | 1 | 0 | 0 | 0 |
|
|
1192
|
+
|
|
1193
|
+
> 说明列为 `—` 表示该属性在源码里没写 `/** */` 注释(当前 133/189 个);补完注释重跑 `pnpm docs:api` 即可同步。
|
|
1194
|
+
|
|
1195
|
+
### 14.1 主入口组件(`@zl-ui-kit/components`)
|
|
1196
|
+
|
|
1197
|
+
#### `ZlAction`
|
|
1198
|
+
|
|
1199
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlAction/index.vue`</sub>
|
|
1200
|
+
|
|
1201
|
+
**简介**:操作列与操作列表
|
|
1202
|
+
|
|
1203
|
+
**用法示例**
|
|
1204
|
+
|
|
1205
|
+
```vue
|
|
1206
|
+
<script setup lang="ts">
|
|
1207
|
+
import { ZlAction } from '@zl-ui-kit/components'
|
|
1208
|
+
</script>
|
|
1209
|
+
|
|
1210
|
+
<template>
|
|
1211
|
+
<ZlAction />
|
|
1212
|
+
</template>
|
|
1213
|
+
```
|
|
1214
|
+
|
|
1215
|
+
> 把 `$attrs` 透传给 `ZlActionList`,未列出的属性会继续下传
|
|
1216
|
+
|
|
1217
|
+
> 纯容器组件:不接收 props,也无自定义事件/插槽/暴露方法。
|
|
1218
|
+
|
|
1219
|
+
**完整示例**:见 §7 表单与交互组件 › ZlAction / ZlActionList —— 操作列与操作列表
|
|
1220
|
+
|
|
1221
|
+
#### `ZlActionList`
|
|
1222
|
+
|
|
1223
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlAction/List.vue`</sub>
|
|
1224
|
+
|
|
1225
|
+
**简介**:操作列与操作列表
|
|
1226
|
+
|
|
1227
|
+
**接口概览**:6 props · 1 事件 · 1 插槽
|
|
1228
|
+
|
|
1229
|
+
**用法示例**
|
|
1230
|
+
|
|
1231
|
+
```vue
|
|
1232
|
+
<script setup lang="ts">
|
|
1233
|
+
import { ZlActionList } from '@zl-ui-kit/components'
|
|
1234
|
+
</script>
|
|
1235
|
+
|
|
1236
|
+
<template>
|
|
1237
|
+
<ZlActionList :list-count="2" />
|
|
1238
|
+
</template>
|
|
1239
|
+
```
|
|
1240
|
+
|
|
1241
|
+
**插槽用法**
|
|
1242
|
+
|
|
1243
|
+
```vue
|
|
1244
|
+
<template>
|
|
1245
|
+
<ZlActionList>
|
|
1246
|
+
<template #more>…</template>
|
|
1247
|
+
</ZlActionList>
|
|
1248
|
+
</template>
|
|
1249
|
+
```
|
|
1250
|
+
|
|
1251
|
+
**props**
|
|
1252
|
+
|
|
1253
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
1254
|
+
| ------------- | -------------------------------- | ---------- | ---- | ----------------------- | ------------------------------------ |
|
|
1255
|
+
| `actions` | `ActionItem[]` | `() => []` | 否 | `:actions="actions"` | — |
|
|
1256
|
+
| `actionArgs` | `any[]` | `() => []` | 否 | `:action-args="[]"` | — |
|
|
1257
|
+
| `visibleArgs` | `any[]` | `() => []` | 否 | `:visible-args="[]"` | — |
|
|
1258
|
+
| `listCount` | `number` | `2` | 否 | `:list-count="1"` | 直接展示的操作数,超出收入"更多"下拉 |
|
|
1259
|
+
| `iconMore` | `boolean \| Record<string, any>` | — | 否 | `:icon-more="iconMore"` | — |
|
|
1260
|
+
| `separator` | `boolean` | — | 否 | `separator` | — |
|
|
1261
|
+
|
|
1262
|
+
**事件(emits)**
|
|
1263
|
+
|
|
1264
|
+
| 事件 | 参数 | 说明 |
|
|
1265
|
+
| -------- | ------------------- | ---- |
|
|
1266
|
+
| `action` | `ActionItem, any[]` | — |
|
|
1267
|
+
|
|
1268
|
+
**插槽(slots)**
|
|
1269
|
+
|
|
1270
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
1271
|
+
| ------ | ---------- | ------------------------------ | ---- |
|
|
1272
|
+
| `more` | — | `<template #more>…</template>` | — |
|
|
1273
|
+
|
|
1274
|
+
**完整示例**:见 §7 表单与交互组件 › ZlAction / ZlActionList —— 操作列与操作列表
|
|
1275
|
+
|
|
1276
|
+
#### `ZlAddSub`
|
|
1277
|
+
|
|
1278
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlAddSub/index.vue`</sub>
|
|
1279
|
+
|
|
1280
|
+
**接口概览**:2 props · 1 事件 · 1 插槽
|
|
1281
|
+
|
|
1282
|
+
**用法示例**
|
|
1283
|
+
|
|
1284
|
+
```vue
|
|
1285
|
+
<script setup lang="ts">
|
|
1286
|
+
import { ZlAddSub } from '@zl-ui-kit/components'
|
|
1287
|
+
</script>
|
|
1288
|
+
|
|
1289
|
+
<template>
|
|
1290
|
+
<ZlAddSub :model-value="['示例项']" />
|
|
1291
|
+
</template>
|
|
1292
|
+
```
|
|
1293
|
+
|
|
1294
|
+
> 示例中的 `modelValue` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
1295
|
+
|
|
1296
|
+
**插槽用法**
|
|
1297
|
+
|
|
1298
|
+
```vue
|
|
1299
|
+
<template>
|
|
1300
|
+
<ZlAddSub>
|
|
1301
|
+
<template #add="{ index }">…</template>
|
|
1302
|
+
</ZlAddSub>
|
|
1303
|
+
</template>
|
|
1304
|
+
```
|
|
1305
|
+
|
|
1306
|
+
**props**
|
|
1307
|
+
|
|
1308
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
1309
|
+
| ------------ | ----------------- | ---------- | ---- | --------------------------- | -------------- |
|
|
1310
|
+
| `model` | `any[]` | `() => []` | 否 | `v-model:model="value"` | — |
|
|
1311
|
+
| `defaultVal` | `any[] \| string` | `() => []` | 否 | `:default-val="defaultVal"` | 新增项的默认值 |
|
|
1312
|
+
|
|
1313
|
+
**事件(emits)**
|
|
1314
|
+
|
|
1315
|
+
| 事件 | 参数 | 说明 |
|
|
1316
|
+
| -------------- | ------- | ---- |
|
|
1317
|
+
| `update:model` | `any[]` | — |
|
|
1318
|
+
|
|
1319
|
+
**插槽(slots)**
|
|
1320
|
+
|
|
1321
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
1322
|
+
| ----- | ---------- | ----------------------------------------- | ---- |
|
|
1323
|
+
| `add` | `index` | `<template #add="{ index }">…</template>` | — |
|
|
1324
|
+
|
|
1325
|
+
**完整示例**:见 §7 表单与交互组件 › ZlRadioTag / ZlCheckboxTag / ZlCheckAll / ZlSorter / ZlAddSub / ZlLayoutSwitch
|
|
1326
|
+
|
|
1327
|
+
#### `ZlAppLayout`
|
|
1328
|
+
|
|
1329
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlAppLayout/index.vue`</sub>
|
|
1330
|
+
|
|
1331
|
+
**接口概览**:1 props · 1 插槽
|
|
1332
|
+
|
|
1333
|
+
**用法示例**
|
|
1334
|
+
|
|
1335
|
+
```vue
|
|
1336
|
+
<script setup lang="ts">
|
|
1337
|
+
import { ZlAppLayout } from '@zl-ui-kit/components'
|
|
1338
|
+
</script>
|
|
1339
|
+
|
|
1340
|
+
<template>
|
|
1341
|
+
<ZlAppLayout />
|
|
1342
|
+
</template>
|
|
1343
|
+
```
|
|
1344
|
+
|
|
1345
|
+
**插槽用法**
|
|
1346
|
+
|
|
1347
|
+
```vue
|
|
1348
|
+
<template>
|
|
1349
|
+
<ZlAppLayout>
|
|
1350
|
+
<template #default>…</template>
|
|
1351
|
+
</ZlAppLayout>
|
|
1352
|
+
</template>
|
|
1353
|
+
```
|
|
1354
|
+
|
|
1355
|
+
**props**
|
|
1356
|
+
|
|
1357
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
1358
|
+
| -------- | ---------------------------- | -------------- | ---- | --------------------- | ---- |
|
|
1359
|
+
| `layout` | `'horizontal' \| 'vertical'` | `'horizontal'` | 否 | `layout="horizontal"` | — |
|
|
1360
|
+
|
|
1361
|
+
> 选项式组件(`defineComponent`),props 定义在 `props: {}` 中
|
|
1362
|
+
> 把 `$attrs` 透传给内部组件,未列出的属性会继续下传
|
|
1363
|
+
|
|
1364
|
+
**插槽(slots)**
|
|
1365
|
+
|
|
1366
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
1367
|
+
| --------- | ---------- | --------------------------------- | ------------------------------------------- |
|
|
1368
|
+
| `default` | — | `<template #default>…</template>` | 整个 `slots` 对象原样透传,插槽由子组件决定 |
|
|
1369
|
+
|
|
1370
|
+
**完整示例**:见 §8 布局与权限 › ZlAppLayout / ZlAppMenu
|
|
1371
|
+
|
|
1372
|
+
#### `ZlAppMenu`
|
|
1373
|
+
|
|
1374
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlAppMenu/AppMenu.vue`</sub>
|
|
1375
|
+
|
|
1376
|
+
**接口概览**:3 props · 1 事件
|
|
1377
|
+
|
|
1378
|
+
**用法示例**
|
|
1379
|
+
|
|
1380
|
+
```vue
|
|
1381
|
+
<script setup lang="ts">
|
|
1382
|
+
import { ZlAppMenu } from '@zl-ui-kit/components'
|
|
1383
|
+
</script>
|
|
1384
|
+
|
|
1385
|
+
<template>
|
|
1386
|
+
<ZlAppMenu :menus="menus" />
|
|
1387
|
+
</template>
|
|
1388
|
+
```
|
|
1389
|
+
|
|
1390
|
+
> 示例中的 `menus` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
1391
|
+
|
|
1392
|
+
**props**
|
|
1393
|
+
|
|
1394
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
1395
|
+
| ----------- | ---------------------------- | ------------ | ---- | ------------------- | ----------------------------------- |
|
|
1396
|
+
| `collapsed` | `boolean` | `false` | 否 | `collapsed` | — |
|
|
1397
|
+
| `layout` | `'vertical' \| 'horizontal'` | `'vertical'` | 否 | `layout="vertical"` | el-menu 模式:vertical / horizontal |
|
|
1398
|
+
| `menus` | `MenuItem[]` | `() => []` | 否 | `:menus="menus"` | — |
|
|
1399
|
+
|
|
1400
|
+
**事件(emits)**
|
|
1401
|
+
|
|
1402
|
+
| 事件 | 参数 | 说明 |
|
|
1403
|
+
| ----------------- | ---------- | ---- |
|
|
1404
|
+
| `menu-item-click` | `MenuItem` | — |
|
|
1405
|
+
|
|
1406
|
+
**完整示例**:见 §8 布局与权限 › ZlAppLayout / ZlAppMenu
|
|
1407
|
+
|
|
1408
|
+
#### `ZlAppSlogan`
|
|
1409
|
+
|
|
1410
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlAppSlogan/index.vue`</sub>
|
|
1411
|
+
|
|
1412
|
+
**简介**:应用标识(Logo + 标题):侧栏折叠时可用 `collapsed` 只显示图标
|
|
1413
|
+
|
|
1414
|
+
**接口概览**:3 props
|
|
1415
|
+
|
|
1416
|
+
**用法示例**
|
|
1417
|
+
|
|
1418
|
+
```vue
|
|
1419
|
+
<script setup lang="ts">
|
|
1420
|
+
import { ZlAppSlogan } from '@zl-ui-kit/components'
|
|
1421
|
+
</script>
|
|
1422
|
+
|
|
1423
|
+
<template>
|
|
1424
|
+
<ZlAppSlogan title="ZL UI 组件库" />
|
|
1425
|
+
</template>
|
|
1426
|
+
```
|
|
1427
|
+
|
|
1428
|
+
**props**
|
|
1429
|
+
|
|
1430
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
1431
|
+
| ----------- | --------- | ------ | ---- | ------------------------------------- | ---- |
|
|
1432
|
+
| `collapsed` | `boolean` | — | 否 | `collapsed` | — |
|
|
1433
|
+
| `logo` | `string` | — | 否 | `logo="https://example.com/logo.png"` | — |
|
|
1434
|
+
| `title` | `string` | — | 否 | `title="标题"` | — |
|
|
1435
|
+
|
|
1436
|
+
#### `ZlAutoTooltip`
|
|
1437
|
+
|
|
1438
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlAutoTooltip/index.vue`</sub>
|
|
1439
|
+
|
|
1440
|
+
**简介**:文本溢出自动 tooltip:内容超出容器宽度时才出提示,未溢出不出
|
|
1441
|
+
|
|
1442
|
+
**接口概览**:1 插槽
|
|
1443
|
+
|
|
1444
|
+
**用法示例**
|
|
1445
|
+
|
|
1446
|
+
```vue
|
|
1447
|
+
<script setup lang="ts">
|
|
1448
|
+
import { ZlAutoTooltip } from '@zl-ui-kit/components'
|
|
1449
|
+
</script>
|
|
1450
|
+
|
|
1451
|
+
<template>
|
|
1452
|
+
<ZlAutoTooltip> 超长文本自动省略并悬浮提示:zl-ui 是 Vue3 + Element Plus 组件库 </ZlAutoTooltip>
|
|
1453
|
+
</template>
|
|
1454
|
+
```
|
|
1455
|
+
|
|
1456
|
+
**插槽用法**
|
|
1457
|
+
|
|
1458
|
+
```vue
|
|
1459
|
+
<template>
|
|
1460
|
+
<ZlAutoTooltip>
|
|
1461
|
+
<template #default>…</template>
|
|
1462
|
+
</ZlAutoTooltip>
|
|
1463
|
+
</template>
|
|
1464
|
+
```
|
|
1465
|
+
|
|
1466
|
+
**插槽(slots)**
|
|
1467
|
+
|
|
1468
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
1469
|
+
| --------- | ---------- | --------------------------------- | ---- |
|
|
1470
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
1471
|
+
|
|
1472
|
+
#### `ZlAvatar`
|
|
1473
|
+
|
|
1474
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlAvatar/index.vue`</sub>
|
|
1475
|
+
|
|
1476
|
+
**接口概览**:3 props
|
|
1477
|
+
|
|
1478
|
+
**用法示例**
|
|
1479
|
+
|
|
1480
|
+
```vue
|
|
1481
|
+
<script setup lang="ts">
|
|
1482
|
+
import { ZlAvatar } from '@zl-ui-kit/components'
|
|
1483
|
+
</script>
|
|
1484
|
+
|
|
1485
|
+
<template>
|
|
1486
|
+
<ZlAvatar label="湛" size="40px" />
|
|
1487
|
+
</template>
|
|
1488
|
+
```
|
|
1489
|
+
|
|
1490
|
+
**props**
|
|
1491
|
+
|
|
1492
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
1493
|
+
| ---------- | -------- | -------- | ---- | -------------------------------------------- | ---------------- |
|
|
1494
|
+
| `imageUrl` | `string` | — | 否 | `image-url="https://example.com/avatar.png"` | — |
|
|
1495
|
+
| `label` | `string` | — | 否 | `label="标签"` | — |
|
|
1496
|
+
| `size` | `string` | `'20px'` | 否 | `size="24px"` | 尺寸(CSS 长度) |
|
|
1497
|
+
|
|
1498
|
+
#### `ZlAvatarGroup`
|
|
1499
|
+
|
|
1500
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlAvatar/Group.vue`</sub>
|
|
1501
|
+
|
|
1502
|
+
**接口概览**:3 props
|
|
1503
|
+
|
|
1504
|
+
**用法示例**
|
|
1505
|
+
|
|
1506
|
+
```vue
|
|
1507
|
+
<script setup lang="ts">
|
|
1508
|
+
import { ZlAvatarGroup } from '@zl-ui-kit/components'
|
|
1509
|
+
</script>
|
|
1510
|
+
|
|
1511
|
+
<template>
|
|
1512
|
+
<ZlAvatarGroup :list="list" size="32px" />
|
|
1513
|
+
</template>
|
|
1514
|
+
```
|
|
1515
|
+
|
|
1516
|
+
> 示例中的 `list` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
1517
|
+
|
|
1518
|
+
**props**
|
|
1519
|
+
|
|
1520
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
1521
|
+
| ------- | --------------------------------------- | -------------------------------------------------- | ---- | -------------- | ----------------------------------- |
|
|
1522
|
+
| `list` | `Array<Record<string, any>>` | — | 是 | `:list="list"` | — |
|
|
1523
|
+
| `props` | `{ imageUrl?: string; label?: string }` | `() => ({ imageUrl: 'imageUrl', label: 'label' })` | 否 | `:props="{}"` | 字段映射(imageUrl/label 的取值键) |
|
|
1524
|
+
| `size` | `string` | — | 否 | `size="24px"` | — |
|
|
1525
|
+
|
|
1526
|
+
#### `ZlCard`
|
|
1527
|
+
|
|
1528
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlCard/index.vue`</sub>
|
|
1529
|
+
|
|
1530
|
+
**简介**:卡片容器:默认带悬停阴影(`hoverable`),内容走默认插槽
|
|
1531
|
+
|
|
1532
|
+
**接口概览**:1 props · 8 插槽
|
|
1533
|
+
|
|
1534
|
+
**用法示例**
|
|
1535
|
+
|
|
1536
|
+
```vue
|
|
1537
|
+
<script setup lang="ts">
|
|
1538
|
+
import { ZlCard } from '@zl-ui-kit/components'
|
|
1539
|
+
</script>
|
|
1540
|
+
|
|
1541
|
+
<template>
|
|
1542
|
+
<ZlCard style="max-width: 360px">
|
|
1543
|
+
<template #title>数据库资源</template>
|
|
1544
|
+
<template #subtitle>副标题描述文案</template>
|
|
1545
|
+
</ZlCard>
|
|
1546
|
+
</template>
|
|
1547
|
+
```
|
|
1548
|
+
|
|
1549
|
+
**插槽用法**
|
|
1550
|
+
|
|
1551
|
+
```vue
|
|
1552
|
+
<template>
|
|
1553
|
+
<ZlCard>
|
|
1554
|
+
<template #icon>…</template>
|
|
1555
|
+
<template #title>…</template>
|
|
1556
|
+
<template #title-append>…</template>
|
|
1557
|
+
<template #subtitle>…</template>
|
|
1558
|
+
<template #default>…</template>
|
|
1559
|
+
<template #footer-prepend>…</template>
|
|
1560
|
+
<template #footer>…</template>
|
|
1561
|
+
<template #extra>…</template>
|
|
1562
|
+
</ZlCard>
|
|
1563
|
+
</template>
|
|
1564
|
+
```
|
|
1565
|
+
|
|
1566
|
+
**props**
|
|
1567
|
+
|
|
1568
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
1569
|
+
| ----------- | --------- | ------ | ---- | -------------------- | ---- |
|
|
1570
|
+
| `hoverable` | `boolean` | `true` | 否 | `:hoverable="false"` | — |
|
|
1571
|
+
|
|
1572
|
+
**插槽(slots)**
|
|
1573
|
+
|
|
1574
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
1575
|
+
| ---------------- | ---------- | ---------------------------------------- | ---- |
|
|
1576
|
+
| `icon` | — | `<template #icon>…</template>` | — |
|
|
1577
|
+
| `title` | — | `<template #title>…</template>` | — |
|
|
1578
|
+
| `title-append` | — | `<template #title-append>…</template>` | — |
|
|
1579
|
+
| `subtitle` | — | `<template #subtitle>…</template>` | — |
|
|
1580
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
1581
|
+
| `footer-prepend` | — | `<template #footer-prepend>…</template>` | — |
|
|
1582
|
+
| `footer` | — | `<template #footer>…</template>` | — |
|
|
1583
|
+
| `extra` | — | `<template #extra>…</template>` | — |
|
|
1584
|
+
|
|
1585
|
+
#### `ZlCardPage`
|
|
1586
|
+
|
|
1587
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlCardPage/index.vue`</sub>
|
|
1588
|
+
|
|
1589
|
+
**简介**:直接传 service
|
|
1590
|
+
|
|
1591
|
+
**接口概览**:6 props · 1 事件 · 3 插槽 · 3 暴露
|
|
1592
|
+
|
|
1593
|
+
**用法示例**
|
|
1594
|
+
|
|
1595
|
+
```vue
|
|
1596
|
+
<script setup lang="ts">
|
|
1597
|
+
import { ZlCardPage } from '@zl-ui-kit/components'
|
|
1598
|
+
</script>
|
|
1599
|
+
|
|
1600
|
+
<template>
|
|
1601
|
+
<ZlCardPage :request="mockPageRequest" card-min-width="180px" />
|
|
1602
|
+
</template>
|
|
1603
|
+
```
|
|
1604
|
+
|
|
1605
|
+
> 示例中的 `request` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
1606
|
+
|
|
1607
|
+
**插槽用法**
|
|
1608
|
+
|
|
1609
|
+
```vue
|
|
1610
|
+
<template>
|
|
1611
|
+
<ZlCardPage>
|
|
1612
|
+
<template #search-actions>…</template>
|
|
1613
|
+
<template #default="{ data }">…</template>
|
|
1614
|
+
<!-- 动态插槽:名字运行时取自 search-${slot} -->
|
|
1615
|
+
</ZlCardPage>
|
|
1616
|
+
</template>
|
|
1617
|
+
```
|
|
1618
|
+
|
|
1619
|
+
**props**
|
|
1620
|
+
|
|
1621
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
1622
|
+
| -------------- | ----------------------------------------------------------------------------------------------------------------------------- | ---------- | ---- | --------------------------- | --------------------------------- |
|
|
1623
|
+
| `immediate` | `boolean` | `true` | 否 | `:immediate="false"` | — |
|
|
1624
|
+
| `request` | `\| ((...args: any[]) => Promise<any>) \| { service: (...args: any[]) => Promise<any>; options?: Record<string, any> }` | — | 是 | `:request="async () => {}"` | 请求函数,或 { service, options } |
|
|
1625
|
+
| `queryItems` | `SearchItem[]` | `() => []` | 否 | `:query-items="queryItems"` | — |
|
|
1626
|
+
| `pagination` | `Record<string, any> \| boolean` | `true` | 否 | `:pagination="{}"` | — |
|
|
1627
|
+
| `itemKey` | `string` | `'id'` | 否 | `item-key="id"` | — |
|
|
1628
|
+
| `cardMinWidth` | `string` | — | 否 | `card-min-width="280px"` | — |
|
|
1629
|
+
|
|
1630
|
+
**事件(emits)**
|
|
1631
|
+
|
|
1632
|
+
| 事件 | 参数 | 说明 |
|
|
1633
|
+
| -------------- | ---- | ---- |
|
|
1634
|
+
| `search-reset` | — | — |
|
|
1635
|
+
|
|
1636
|
+
**插槽(slots)**
|
|
1637
|
+
|
|
1638
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
1639
|
+
| ------------------ | ------------------------------ | -------------------------------------------------- | ---------------------------- |
|
|
1640
|
+
| `search-actions` | — | `<template #search-actions>…</template>` | — |
|
|
1641
|
+
| `[search-${slot}]` | `v-bind="scope"` 展开 | `<template #[search-${slot}]="scope">…</template>` | 动态插槽:名字由该表达式决定 |
|
|
1642
|
+
| `default` | `v-bind="{ data: item }"` 展开 | `<template #default="{ data }">…</template>` | — |
|
|
1643
|
+
|
|
1644
|
+
**暴露(defineExpose)**
|
|
1645
|
+
|
|
1646
|
+
| 名称 | 说明 |
|
|
1647
|
+
| --------- | ---- |
|
|
1648
|
+
| `refresh` | — |
|
|
1649
|
+
| `params` | — |
|
|
1650
|
+
| `search` | — |
|
|
1651
|
+
|
|
1652
|
+
**完整示例**:见 §6 数据型组件 + useRequest 体系(核心) › ② ZlCardPage —— 直接传 service
|
|
1653
|
+
|
|
1654
|
+
#### `ZlCheckAll`
|
|
1655
|
+
|
|
1656
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlCheckAll/index.vue`</sub>
|
|
1657
|
+
|
|
1658
|
+
**简介**:全选开关:勾选/取消全部(支持半选态),选项可带 disabled
|
|
1659
|
+
|
|
1660
|
+
**接口概览**:2 props · 1 事件
|
|
1661
|
+
|
|
1662
|
+
**用法示例**
|
|
1663
|
+
|
|
1664
|
+
```vue
|
|
1665
|
+
<script setup lang="ts">
|
|
1666
|
+
import { ZlCheckAll } from '@zl-ui-kit/components'
|
|
1667
|
+
</script>
|
|
1668
|
+
|
|
1669
|
+
<template>
|
|
1670
|
+
<ZlCheckAll :model-value="modelValue" />
|
|
1671
|
+
</template>
|
|
1672
|
+
```
|
|
1673
|
+
|
|
1674
|
+
> 示例中的 `modelValue` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
1675
|
+
|
|
1676
|
+
**props**
|
|
1677
|
+
|
|
1678
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
1679
|
+
| --------- | ------------------------- | ---------- | ---- | ----------------------- | ---- |
|
|
1680
|
+
| `options` | `CheckAllOption[]` | `() => []` | 否 | `:options="options"` | — |
|
|
1681
|
+
| `model` | `Array<string \| number>` | `() => []` | 否 | `v-model:model="value"` | — |
|
|
1682
|
+
|
|
1683
|
+
**事件(emits)**
|
|
1684
|
+
|
|
1685
|
+
| 事件 | 参数 | 说明 |
|
|
1686
|
+
| -------------- | ------------------------- | ---- |
|
|
1687
|
+
| `update:model` | `Array<string \| number>` | — |
|
|
1688
|
+
|
|
1689
|
+
**完整示例**:见 §7 表单与交互组件 › ZlRadioTag / ZlCheckboxTag / ZlCheckAll / ZlSorter / ZlAddSub / ZlLayoutSwitch
|
|
1690
|
+
|
|
1691
|
+
#### `ZlCheckboxTag`
|
|
1692
|
+
|
|
1693
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlCheckboxTag/index.vue`</sub>
|
|
1694
|
+
|
|
1695
|
+
**接口概览**:7 props · 1 事件 · 1 插槽
|
|
1696
|
+
|
|
1697
|
+
**用法示例**
|
|
1698
|
+
|
|
1699
|
+
```vue
|
|
1700
|
+
<script setup lang="ts">
|
|
1701
|
+
import { ZlCheckboxTag } from '@zl-ui-kit/components'
|
|
1702
|
+
</script>
|
|
1703
|
+
|
|
1704
|
+
<template>
|
|
1705
|
+
<ZlCheckboxTag v-model="value" />
|
|
1706
|
+
</template>
|
|
1707
|
+
```
|
|
1708
|
+
|
|
1709
|
+
**插槽用法**
|
|
1710
|
+
|
|
1711
|
+
```vue
|
|
1712
|
+
<template>
|
|
1713
|
+
<ZlCheckboxTag>
|
|
1714
|
+
<template #default="{ item, checked }">…</template>
|
|
1715
|
+
</ZlCheckboxTag>
|
|
1716
|
+
</template>
|
|
1717
|
+
```
|
|
1718
|
+
|
|
1719
|
+
**props**
|
|
1720
|
+
|
|
1721
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
1722
|
+
| ------------ | ------------------------------- | ---------- | ---- | -------------------- | -------------------------------------------- |
|
|
1723
|
+
| `modelValue` | `any` | — | 否 | `v-model="value"` | `v-model` 绑定的值(`defineModel` 隐式声明) |
|
|
1724
|
+
| `options` | `CheckboxTagOption[]` | `() => []` | 否 | `:options="options"` | — |
|
|
1725
|
+
| `single` | `boolean` | — | 否 | `single` | 单选模式(值为单值) |
|
|
1726
|
+
| `rounded` | `boolean` | `true` | 否 | `:rounded="false"` | — |
|
|
1727
|
+
| `bordered` | `boolean` | `true` | 否 | `:bordered="false"` | — |
|
|
1728
|
+
| `fill` | `boolean` | `true` | 否 | `:fill="false"` | — |
|
|
1729
|
+
| `size` | `'mini' \| 'small' \| 'medium'` | `'small'` | 否 | `size="mini"` | — |
|
|
1730
|
+
|
|
1731
|
+
**事件(emits)**
|
|
1732
|
+
|
|
1733
|
+
| 事件 | 参数 | 说明 |
|
|
1734
|
+
| ------------------- | ----- | -------------- |
|
|
1735
|
+
| `update:modelValue` | `any` | `v-model` 更新 |
|
|
1736
|
+
|
|
1737
|
+
**插槽(slots)**
|
|
1738
|
+
|
|
1739
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
1740
|
+
| --------- | ------------------------------------------------------------- | ----------------------------------------------------- | ---- |
|
|
1741
|
+
| `default` | `v-bind="{ item, checked: checkedSet.has(item.value) }"` 展开 | `<template #default="{ item, checked }">…</template>` | — |
|
|
1742
|
+
|
|
1743
|
+
**完整示例**:见 §7 表单与交互组件 › ZlRadioTag / ZlCheckboxTag / ZlCheckAll / ZlSorter / ZlAddSub / ZlLayoutSwitch
|
|
1744
|
+
|
|
1745
|
+
#### `ZlCopy`
|
|
1746
|
+
|
|
1747
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlCopy/index.vue`</sub>
|
|
1748
|
+
|
|
1749
|
+
**简介**:一键复制
|
|
1750
|
+
|
|
1751
|
+
**接口概览**:2 props · 2 插槽
|
|
1752
|
+
|
|
1753
|
+
**用法示例**
|
|
1754
|
+
|
|
1755
|
+
```vue
|
|
1756
|
+
<script setup lang="ts">
|
|
1757
|
+
import { ZlCopy } from '@zl-ui-kit/components'
|
|
1758
|
+
</script>
|
|
1759
|
+
|
|
1760
|
+
<template>
|
|
1761
|
+
<ZlCopy text="被复制的文本内容" />
|
|
1762
|
+
</template>
|
|
1763
|
+
```
|
|
1764
|
+
|
|
1765
|
+
**插槽用法**
|
|
1766
|
+
|
|
1767
|
+
```vue
|
|
1768
|
+
<template>
|
|
1769
|
+
<ZlCopy>
|
|
1770
|
+
<template #default>…</template>
|
|
1771
|
+
<template #trigger="{ copy }">…</template>
|
|
1772
|
+
</ZlCopy>
|
|
1773
|
+
</template>
|
|
1774
|
+
```
|
|
1775
|
+
|
|
1776
|
+
**props**
|
|
1777
|
+
|
|
1778
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
1779
|
+
| ---------- | -------- | ------ | ---- | ---------------------- | ---- |
|
|
1780
|
+
| `text` | `string` | — | 否 | `text="文本"` | — |
|
|
1781
|
+
| `copyText` | `string` | — | 否 | `copy-text="复制内容"` | — |
|
|
1782
|
+
|
|
1783
|
+
**插槽(slots)**
|
|
1784
|
+
|
|
1785
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
1786
|
+
| --------- | ---------- | -------------------------------------------- | ---- |
|
|
1787
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
1788
|
+
| `trigger` | `copy` | `<template #trigger="{ copy }">…</template>` | — |
|
|
1789
|
+
|
|
1790
|
+
**完整示例**:见 §5 通用展示组件 › ZlCopy — 一键复制
|
|
1791
|
+
|
|
1792
|
+
#### `ZlDescription`
|
|
1793
|
+
|
|
1794
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlDescription/index.vue`</sub>
|
|
1795
|
+
|
|
1796
|
+
**接口概览**:5 props · 1 插槽
|
|
1797
|
+
|
|
1798
|
+
**用法示例**
|
|
1799
|
+
|
|
1800
|
+
```vue
|
|
1801
|
+
<script setup lang="ts">
|
|
1802
|
+
import { ZlDescription } from '@zl-ui-kit/components'
|
|
1803
|
+
</script>
|
|
1804
|
+
|
|
1805
|
+
<template>
|
|
1806
|
+
<ZlDescription :items="items" :data="{ name: '订单-1024', type: 'API', count: 32 }" secondary />
|
|
1807
|
+
</template>
|
|
1808
|
+
```
|
|
1809
|
+
|
|
1810
|
+
> 示例中的 `items`、`data` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
1811
|
+
|
|
1812
|
+
**插槽用法**
|
|
1813
|
+
|
|
1814
|
+
```vue
|
|
1815
|
+
<template>
|
|
1816
|
+
<ZlDescription>
|
|
1817
|
+
<!-- 动态插槽:名字运行时取自 item.key -->
|
|
1818
|
+
</ZlDescription>
|
|
1819
|
+
</template>
|
|
1820
|
+
```
|
|
1821
|
+
|
|
1822
|
+
**props**
|
|
1823
|
+
|
|
1824
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
1825
|
+
| -------------- | ----------------------------------------------------------------- | -------------------------------------- | ---- | --------------------------- | -------------------------------------------------------------------- |
|
|
1826
|
+
| `items` | `DescriptionItem[]` | — | 是 | `:items="items"` | — |
|
|
1827
|
+
| `data` | `Record<string, any>` | `() => ({})` | 否 | `:data="{}"` | — |
|
|
1828
|
+
| `emptyChecker` | `(value: any, key: string, data: Record<string, any>) => boolean` | `(val: any) => !val && !isNumber(val)` | 否 | `:empty-checker="() => {}"` | — |
|
|
1829
|
+
| `emptyText` | `string` | — | 否 | `empty-text="暂无数据"` | 空值占位文案(缺省走 i18n zl.description.empty,未接入时兜底"暂无") |
|
|
1830
|
+
| `secondary` | `boolean` | — | 否 | `secondary` | — |
|
|
1831
|
+
|
|
1832
|
+
**插槽(slots)**
|
|
1833
|
+
|
|
1834
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
1835
|
+
| ------------ | ---------- | ------------------------------------ | ---------------------------- |
|
|
1836
|
+
| `[item.key]` | — | `<template #[item.key]>…</template>` | 动态插槽:名字由该表达式决定 |
|
|
1837
|
+
|
|
1838
|
+
#### `ZlDictTag`
|
|
1839
|
+
|
|
1840
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlDictTag/index.vue`</sub>
|
|
1841
|
+
|
|
1842
|
+
**简介**:字典标签
|
|
1843
|
+
|
|
1844
|
+
**接口概览**:6 props
|
|
1845
|
+
|
|
1846
|
+
**用法示例**
|
|
1847
|
+
|
|
1848
|
+
```vue
|
|
1849
|
+
<script setup lang="ts">
|
|
1850
|
+
import { ZlDictTag } from '@zl-ui-kit/components'
|
|
1851
|
+
</script>
|
|
1852
|
+
|
|
1853
|
+
<template>
|
|
1854
|
+
<ZlDictTag dict-key="resourceType" value="1" :dict="dict" />
|
|
1855
|
+
</template>
|
|
1856
|
+
```
|
|
1857
|
+
|
|
1858
|
+
> 示例中的 `dict` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
1859
|
+
|
|
1860
|
+
**props**
|
|
1861
|
+
|
|
1862
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
1863
|
+
| ---------- | ------------------------------------------------------------------------- | ------- | ---- | ------------------- | ------------------------------------------------------------------------------------------------- |
|
|
1864
|
+
| `dictKey` | `string` | — | 是 | `dict-key="gender"` | 字典键(对应全局字典缓存的键;外部直传数据也以该键写入共享缓存) |
|
|
1865
|
+
| `dict` | `DictItem[]` | — | 否 | `:dict="dict"` | 外部直传字典数据:无需依赖全局数据源即可翻译。格式同 DictItem[]({ label, value, icon?, type? }) |
|
|
1866
|
+
| `corner` | `boolean \| 'top-left' \| 'top-right' \| 'bottom-left' \| 'bottom-right'` | `false` | 否 | `corner="top-left"` | — |
|
|
1867
|
+
| `value` | `string` | — | 否 | `value="1"` | — |
|
|
1868
|
+
| `simple` | `boolean` | — | 否 | `simple` | — |
|
|
1869
|
+
| `hideIcon` | `boolean` | — | 否 | `hide-icon` | — |
|
|
1870
|
+
|
|
1871
|
+
> 把 `$attrs` 透传给 `zl-corner-tag`,未列出的属性会继续下传
|
|
1872
|
+
|
|
1873
|
+
**完整示例**:见 §5 通用展示组件 › ZlDictTag — 字典标签
|
|
1874
|
+
|
|
1875
|
+
#### `ZlDrawer`
|
|
1876
|
+
|
|
1877
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlDrawer/index.vue`</sub>
|
|
1878
|
+
|
|
1879
|
+
**接口概览**:6 props · 1 事件 · 2 插槽
|
|
1880
|
+
|
|
1881
|
+
**用法示例**
|
|
1882
|
+
|
|
1883
|
+
```vue
|
|
1884
|
+
<script setup lang="ts">
|
|
1885
|
+
import { ZlDrawer } from '@zl-ui-kit/components'
|
|
1886
|
+
</script>
|
|
1887
|
+
|
|
1888
|
+
<template>
|
|
1889
|
+
<ZlDrawer v-model:visible="value" title="抽屉标题" />
|
|
1890
|
+
</template>
|
|
1891
|
+
```
|
|
1892
|
+
|
|
1893
|
+
**插槽用法**
|
|
1894
|
+
|
|
1895
|
+
```vue
|
|
1896
|
+
<template>
|
|
1897
|
+
<ZlDrawer>
|
|
1898
|
+
<template #default>…</template>
|
|
1899
|
+
<template #footer>…</template>
|
|
1900
|
+
</ZlDrawer>
|
|
1901
|
+
</template>
|
|
1902
|
+
```
|
|
1903
|
+
|
|
1904
|
+
**props**
|
|
1905
|
+
|
|
1906
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
1907
|
+
| ----------------------- | --------------------------------------------------- | ------- | ---- | ----------------------------------- | -------------------------------------------- |
|
|
1908
|
+
| `visible` | `boolean` | `false` | 否 | `v-model:visible="value"` | `v-model` 绑定的值(`defineModel` 隐式声明) |
|
|
1909
|
+
| `onCancel` | `() => boolean \| void \| Promise<boolean \| void>` | — | 否 | `:on-cancel="async () => {}"` | — |
|
|
1910
|
+
| `onOk` | `() => void \| Promise<void>` | — | 否 | `:on-ok="async () => {}"` | — |
|
|
1911
|
+
| `autoCloseAfterConfirm` | `boolean` | `true` | 否 | `:auto-close-after-confirm="false"` | — |
|
|
1912
|
+
| `readonly` | `boolean` | — | 否 | `readonly` | — |
|
|
1913
|
+
| `loading` | `boolean` | — | 否 | `loading` | — |
|
|
1914
|
+
|
|
1915
|
+
**事件(emits)**
|
|
1916
|
+
|
|
1917
|
+
| 事件 | 参数 | 说明 |
|
|
1918
|
+
| ---------------- | --------- | -------------- |
|
|
1919
|
+
| `update:visible` | `boolean` | `v-model` 更新 |
|
|
1920
|
+
|
|
1921
|
+
**插槽(slots)**
|
|
1922
|
+
|
|
1923
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
1924
|
+
| --------- | ---------- | --------------------------------- | ---- |
|
|
1925
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
1926
|
+
| `footer` | — | `<template #footer>…</template>` | — |
|
|
1927
|
+
|
|
1928
|
+
**完整示例**:见 §7 表单与交互组件 › ZlDrawer / ZlPopconfirm / ZlSwitch
|
|
1929
|
+
|
|
1930
|
+
#### `ZlDynamicComponent`
|
|
1931
|
+
|
|
1932
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlDynamicComponent/index.vue`</sub>
|
|
1933
|
+
|
|
1934
|
+
**接口概览**:3 props · 2 事件
|
|
1935
|
+
|
|
1936
|
+
**用法示例**
|
|
1937
|
+
|
|
1938
|
+
```vue
|
|
1939
|
+
<script setup lang="ts">
|
|
1940
|
+
import { ZlDynamicComponent } from '@zl-ui-kit/components'
|
|
1941
|
+
</script>
|
|
1942
|
+
|
|
1943
|
+
<template>
|
|
1944
|
+
<ZlDynamicComponent :model="{ keyword: '' }" :component="component" />
|
|
1945
|
+
</template>
|
|
1946
|
+
```
|
|
1947
|
+
|
|
1948
|
+
> 示例中的 `model`、`component` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
1949
|
+
|
|
1950
|
+
**props**
|
|
1951
|
+
|
|
1952
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
1953
|
+
| ----------- | ---------------------------------- | ----------------------------------- | ---- | ----------------- | ---- |
|
|
1954
|
+
| `model` | `Record<string, any>` | `() => ({})` | 否 | `:model="{}"` | — |
|
|
1955
|
+
| `value` | `[String, Number, Array, Boolean]` | `null` | 否 | `:value="value"` | — |
|
|
1956
|
+
| `component` | `Record<string, any>` | `() => ({ component: 'el-input' })` | 否 | `:component="{}"` | — |
|
|
1957
|
+
|
|
1958
|
+
> 选项式组件(`defineComponent`),props 定义在 `props: {}` 中
|
|
1959
|
+
|
|
1960
|
+
**事件(emits)**
|
|
1961
|
+
|
|
1962
|
+
| 事件 | 参数 | 说明 |
|
|
1963
|
+
| ------------------- | ---- | ---- |
|
|
1964
|
+
| `update:modelValue` | — | — |
|
|
1965
|
+
| `input` | — | — |
|
|
1966
|
+
|
|
1967
|
+
**完整示例**:见 §7 表单与交互组件 › ZlTabs / ZlDynamicComponent / ZlGrid
|
|
1968
|
+
|
|
1969
|
+
#### `ZlPdfViewer`
|
|
1970
|
+
|
|
1971
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlPdfViewer/index.vue`</sub>
|
|
1972
|
+
|
|
1973
|
+
**简介**:PDF 预览:用浏览器原生 object 渲染,无重型依赖(所以留在主入口)
|
|
1974
|
+
|
|
1975
|
+
**接口概览**:2 props
|
|
1976
|
+
|
|
1977
|
+
**用法示例**
|
|
1978
|
+
|
|
1979
|
+
```vue
|
|
1980
|
+
<script setup lang="ts">
|
|
1981
|
+
import { ZlPdfViewer } from '@zl-ui-kit/components'
|
|
1982
|
+
</script>
|
|
1983
|
+
|
|
1984
|
+
<template>
|
|
1985
|
+
<ZlPdfViewer :width="420" />
|
|
1986
|
+
</template>
|
|
1987
|
+
```
|
|
1988
|
+
|
|
1989
|
+
**props**
|
|
1990
|
+
|
|
1991
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
1992
|
+
| ------- | ------------------ | ------ | ---- | ------------------------------------ | ---- |
|
|
1993
|
+
| `url` | `string` | — | 否 | `url="https://example.com/file.pdf"` | — |
|
|
1994
|
+
| `width` | `number \| string` | — | 否 | `:width="width"` | — |
|
|
1995
|
+
|
|
1996
|
+
#### `ZlLogin`
|
|
1997
|
+
|
|
1998
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlLogin/index.vue`</sub>
|
|
1999
|
+
|
|
2000
|
+
**接口概览**:2 props · 2 插槽
|
|
2001
|
+
|
|
2002
|
+
**用法示例**
|
|
2003
|
+
|
|
2004
|
+
```vue
|
|
2005
|
+
<script setup lang="ts">
|
|
2006
|
+
import { ZlLogin } from '@zl-ui-kit/components'
|
|
2007
|
+
</script>
|
|
2008
|
+
|
|
2009
|
+
<template>
|
|
2010
|
+
<ZlLogin :config="{ title: 'ZL 统一登录' }" :on-submit="() => {}" />
|
|
2011
|
+
</template>
|
|
2012
|
+
```
|
|
2013
|
+
|
|
2014
|
+
> 示例中的 `config`、`onSubmit` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
2015
|
+
|
|
2016
|
+
**插槽用法**
|
|
2017
|
+
|
|
2018
|
+
```vue
|
|
2019
|
+
<template>
|
|
2020
|
+
<ZlLogin>
|
|
2021
|
+
<template #slogan>…</template>
|
|
2022
|
+
<template #default>…</template>
|
|
2023
|
+
</ZlLogin>
|
|
2024
|
+
</template>
|
|
2025
|
+
```
|
|
2026
|
+
|
|
2027
|
+
**props**
|
|
2028
|
+
|
|
2029
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
2030
|
+
| ---------- | ------------------------------------------------------ | ------------ | ---- | ----------------------------- | ---- |
|
|
2031
|
+
| `onSubmit` | `(form: Record<string, any>) => Promise<void> \| void` | — | 否 | `:on-submit="async () => {}"` | — |
|
|
2032
|
+
| `config` | `ZlLoginConfig` | `() => ({})` | 否 | `:config="config"` | — |
|
|
2033
|
+
|
|
2034
|
+
**插槽(slots)**
|
|
2035
|
+
|
|
2036
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
2037
|
+
| --------- | ---------- | --------------------------------- | ---- |
|
|
2038
|
+
| `slogan` | — | `<template #slogan>…</template>` | — |
|
|
2039
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
2040
|
+
|
|
2041
|
+
#### `ZlLoginForm`
|
|
2042
|
+
|
|
2043
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlLogin/components/LoginForm.vue`</sub>
|
|
2044
|
+
|
|
2045
|
+
**简介**:登录表单(账号 + 密码 + 可选滑块校验),提交经 `onSubmit` 回调交给宿主
|
|
2046
|
+
|
|
2047
|
+
**接口概览**:1 props · 1 插槽
|
|
2048
|
+
|
|
2049
|
+
**用法示例**
|
|
2050
|
+
|
|
2051
|
+
```vue
|
|
2052
|
+
<script setup lang="ts">
|
|
2053
|
+
import { ZlLoginForm } from '@zl-ui-kit/components'
|
|
2054
|
+
</script>
|
|
2055
|
+
|
|
2056
|
+
<template>
|
|
2057
|
+
<ZlLoginForm :on-submit="() => {}" />
|
|
2058
|
+
</template>
|
|
2059
|
+
```
|
|
2060
|
+
|
|
2061
|
+
> 示例中的 `onSubmit` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
2062
|
+
|
|
2063
|
+
**插槽用法**
|
|
2064
|
+
|
|
2065
|
+
```vue
|
|
2066
|
+
<template>
|
|
2067
|
+
<ZlLoginForm>
|
|
2068
|
+
<template #action>…</template>
|
|
2069
|
+
</ZlLoginForm>
|
|
2070
|
+
</template>
|
|
2071
|
+
```
|
|
2072
|
+
|
|
2073
|
+
**props**
|
|
2074
|
+
|
|
2075
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
2076
|
+
| ---------- | ------------------------------------------------------ | ------ | ---- | ----------------------------- | ---- |
|
|
2077
|
+
| `onSubmit` | `(form: Record<string, any>) => Promise<void> \| void` | — | 否 | `:on-submit="async () => {}"` | — |
|
|
2078
|
+
|
|
2079
|
+
**插槽(slots)**
|
|
2080
|
+
|
|
2081
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
2082
|
+
| -------- | ---------- | -------------------------------- | ---- |
|
|
2083
|
+
| `action` | — | `<template #action>…</template>` | — |
|
|
2084
|
+
|
|
2085
|
+
#### `ZlEmpty`
|
|
2086
|
+
|
|
2087
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlEmpty/index.vue`</sub>
|
|
2088
|
+
|
|
2089
|
+
**简介**:空状态
|
|
2090
|
+
|
|
2091
|
+
**接口概览**:2 props
|
|
2092
|
+
|
|
2093
|
+
**用法示例**
|
|
2094
|
+
|
|
2095
|
+
```vue
|
|
2096
|
+
<script setup lang="ts">
|
|
2097
|
+
import { ZlEmpty } from '@zl-ui-kit/components'
|
|
2098
|
+
</script>
|
|
2099
|
+
|
|
2100
|
+
<template>
|
|
2101
|
+
<ZlEmpty />
|
|
2102
|
+
</template>
|
|
2103
|
+
```
|
|
2104
|
+
|
|
2105
|
+
**props**
|
|
2106
|
+
|
|
2107
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
2108
|
+
| ------- | -------- | ------ | ---- | --------------------------------------- | ------------------------------------------- |
|
|
2109
|
+
| `image` | `string` | — | 否 | `image="https://example.com/empty.png"` | 自定义空状态图片(缺省用内置轻量 SVG 线稿) |
|
|
2110
|
+
| `text` | `string` | `''` | 否 | `text="文本"` | 空状态文案(缺省走 i18n,未接入时兜底中文) |
|
|
2111
|
+
|
|
2112
|
+
**完整示例**:见 §5 通用展示组件 › ZlEmpty — 空状态
|
|
2113
|
+
|
|
2114
|
+
#### `ZlForm`
|
|
2115
|
+
|
|
2116
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlForm/index.vue`</sub>
|
|
2117
|
+
|
|
2118
|
+
**简介**:schema 驱动
|
|
2119
|
+
|
|
2120
|
+
**接口概览**:2 props · 3 插槽
|
|
2121
|
+
|
|
2122
|
+
**用法示例**
|
|
2123
|
+
|
|
2124
|
+
```vue
|
|
2125
|
+
<script setup lang="ts">
|
|
2126
|
+
import { ZlForm } from '@zl-ui-kit/components'
|
|
2127
|
+
</script>
|
|
2128
|
+
|
|
2129
|
+
<template>
|
|
2130
|
+
<ZlForm :model="model" :items="items" label-width="80px" style="max-width: 420px" />
|
|
2131
|
+
</template>
|
|
2132
|
+
```
|
|
2133
|
+
|
|
2134
|
+
> 示例中的 `model`、`items` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
2135
|
+
|
|
2136
|
+
**插槽用法**
|
|
2137
|
+
|
|
2138
|
+
```vue
|
|
2139
|
+
<template>
|
|
2140
|
+
<ZlForm>
|
|
2141
|
+
<template #label="{ label, item }">…</template>
|
|
2142
|
+
<template #default>…</template>
|
|
2143
|
+
<!-- 动态插槽:名字运行时取自 item.model -->
|
|
2144
|
+
</ZlForm>
|
|
2145
|
+
</template>
|
|
2146
|
+
```
|
|
2147
|
+
|
|
2148
|
+
**props**
|
|
2149
|
+
|
|
2150
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
2151
|
+
| ------- | --------------------- | ---------- | ---- | ---------------- | ---- |
|
|
2152
|
+
| `items` | `FormItem[]` | `() => []` | 否 | `:items="items"` | — |
|
|
2153
|
+
| `model` | `Record<string, any>` | — | 否 | `:model="{}"` | — |
|
|
2154
|
+
|
|
2155
|
+
> 把 `$attrs` 透传给 `el-form`,未列出的属性会继续下传
|
|
2156
|
+
|
|
2157
|
+
**插槽(slots)**
|
|
2158
|
+
|
|
2159
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
2160
|
+
| -------------- | ------------------------------------------- | --------------------------------------------------------- | ---------------------------- |
|
|
2161
|
+
| `label` | `v-bind="{ label: item.label, item }"` 展开 | `<template #label="{ label, item }">…</template>` | — |
|
|
2162
|
+
| `[item.model]` | `model` / `field` | `<template #[item.model]="{ model, field }">…</template>` | 动态插槽:名字由该表达式决定 |
|
|
2163
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
2164
|
+
|
|
2165
|
+
**完整示例**:见 §7 表单与交互组件 › ZlForm —— schema 驱动
|
|
2166
|
+
|
|
2167
|
+
#### `ZlFormChild`
|
|
2168
|
+
|
|
2169
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlForm/ZlFormChild.vue`</sub>
|
|
2170
|
+
|
|
2171
|
+
**接口概览**:1 props
|
|
2172
|
+
|
|
2173
|
+
**用法示例**
|
|
2174
|
+
|
|
2175
|
+
```vue
|
|
2176
|
+
<script setup lang="ts">
|
|
2177
|
+
import { ZlFormChild } from '@zl-ui-kit/components'
|
|
2178
|
+
</script>
|
|
2179
|
+
|
|
2180
|
+
<template>
|
|
2181
|
+
<ZlFormChild :item="item" />
|
|
2182
|
+
</template>
|
|
2183
|
+
```
|
|
2184
|
+
|
|
2185
|
+
> 示例中的 `item` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
2186
|
+
|
|
2187
|
+
**props**
|
|
2188
|
+
|
|
2189
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
2190
|
+
| ------ | --------------------- | ------ | ---- | ------------ | ---- |
|
|
2191
|
+
| `item` | `Record<string, any>` | — | 是 | `:item="{}"` | — |
|
|
2192
|
+
|
|
2193
|
+
> 选项式组件(`defineComponent`),props 定义在 `props: {}` 中
|
|
2194
|
+
|
|
2195
|
+
#### `ZlGridItem`
|
|
2196
|
+
|
|
2197
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlGrid/ZlGridItem.vue`</sub>
|
|
2198
|
+
|
|
2199
|
+
**简介**:单个描述项:由 `ZlGrid` 内部渲染,一般不单独使用
|
|
2200
|
+
|
|
2201
|
+
**接口概览**:1 props · 1 插槽
|
|
2202
|
+
|
|
2203
|
+
**用法示例**
|
|
2204
|
+
|
|
2205
|
+
```vue
|
|
2206
|
+
<script setup lang="ts">
|
|
2207
|
+
import { ZlGridItem } from '@zl-ui-kit/components'
|
|
2208
|
+
</script>
|
|
2209
|
+
|
|
2210
|
+
<template>
|
|
2211
|
+
<ZlGridItem :item="item" />
|
|
2212
|
+
</template>
|
|
2213
|
+
```
|
|
2214
|
+
|
|
2215
|
+
> 示例中的 `item` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
2216
|
+
|
|
2217
|
+
**插槽用法**
|
|
2218
|
+
|
|
2219
|
+
```vue
|
|
2220
|
+
<template>
|
|
2221
|
+
<ZlGridItem>
|
|
2222
|
+
<template #default>…</template>
|
|
2223
|
+
</ZlGridItem>
|
|
2224
|
+
</template>
|
|
2225
|
+
```
|
|
2226
|
+
|
|
2227
|
+
**props**
|
|
2228
|
+
|
|
2229
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
2230
|
+
| ------ | --------------------------------------------------------------------------------- | ------ | ---- | -------------- | ---- |
|
|
2231
|
+
| `item` | `IGridItem & { text?: any; size?: number \| 'auto'; dict?: Record<string, any> }` | — | 是 | `:item="item"` | — |
|
|
2232
|
+
|
|
2233
|
+
**插槽(slots)**
|
|
2234
|
+
|
|
2235
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
2236
|
+
| --------- | ---------- | --------------------------------- | ---- |
|
|
2237
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
2238
|
+
|
|
2239
|
+
#### `ZlGrid`
|
|
2240
|
+
|
|
2241
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlGrid/index.vue`</sub>
|
|
2242
|
+
|
|
2243
|
+
**接口概览**:9 props · 2 插槽
|
|
2244
|
+
|
|
2245
|
+
**用法示例**
|
|
2246
|
+
|
|
2247
|
+
```vue
|
|
2248
|
+
<script setup lang="ts">
|
|
2249
|
+
import { ZlGrid } from '@zl-ui-kit/components'
|
|
2250
|
+
</script>
|
|
2251
|
+
|
|
2252
|
+
<template>
|
|
2253
|
+
<ZlGrid :data="data" :cols="2" border :grid="grid" />
|
|
2254
|
+
</template>
|
|
2255
|
+
```
|
|
2256
|
+
|
|
2257
|
+
> 示例中的 `data`、`grid` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
2258
|
+
|
|
2259
|
+
**插槽用法**
|
|
2260
|
+
|
|
2261
|
+
```vue
|
|
2262
|
+
<template>
|
|
2263
|
+
<ZlGrid>
|
|
2264
|
+
<template #default>…</template>
|
|
2265
|
+
<!-- 动态插槽:名字运行时取自 item.key -->
|
|
2266
|
+
</ZlGrid>
|
|
2267
|
+
</template>
|
|
2268
|
+
```
|
|
2269
|
+
|
|
2270
|
+
**props**
|
|
2271
|
+
|
|
2272
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
2273
|
+
| --------------- | ----------------------------------------------------------------- | ------------ | ---- | --------------------------- | ------------------------------------------------------------- |
|
|
2274
|
+
| `data` | `Record<string, any>` | `() => ({})` | 否 | `:data="{}"` | — |
|
|
2275
|
+
| `grid` | `IGridItem[]` | `() => []` | 否 | `:grid="grid"` | — |
|
|
2276
|
+
| `cols` | `number` | `3` | 否 | `:cols="1"` | — |
|
|
2277
|
+
| `border` | `boolean` | — | 否 | `border` | — |
|
|
2278
|
+
| `emptyChecker` | `(value: any, key: string, data: Record<string, any>) => boolean` | — | 否 | `:empty-checker="() => {}"` | — |
|
|
2279
|
+
| `labelWidth` | `string \| number` | `'auto'` | 否 | `:label-width="labelWidth"` | — |
|
|
2280
|
+
| `labelSuffix` | `string` | — | 否 | `label-suffix=":"` | — |
|
|
2281
|
+
| `labelPosition` | `'left' \| 'top' \| 'right'` | `'left'` | 否 | `label-position="left"` | — |
|
|
2282
|
+
| `emptyText` | `string` | — | 否 | `empty-text="暂无数据"` | 空值占位文案(缺省走 i18n zl.grid.empty,未接入时兜底"暂无") |
|
|
2283
|
+
|
|
2284
|
+
**插槽(slots)**
|
|
2285
|
+
|
|
2286
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
2287
|
+
| ------------ | ---------- | ------------------------------------ | ---------------------------- |
|
|
2288
|
+
| `[item.key]` | — | `<template #[item.key]>…</template>` | 动态插槽:名字由该表达式决定 |
|
|
2289
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
2290
|
+
|
|
2291
|
+
**完整示例**:见 §7 表单与交互组件 › ZlTabs / ZlDynamicComponent / ZlGrid
|
|
2292
|
+
|
|
2293
|
+
#### `ZlHorizontalTable`
|
|
2294
|
+
|
|
2295
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlHorizontalTable/index.vue`</sub>
|
|
2296
|
+
|
|
2297
|
+
**接口概览**:4 props · 1 插槽
|
|
2298
|
+
|
|
2299
|
+
**用法示例**
|
|
2300
|
+
|
|
2301
|
+
```vue
|
|
2302
|
+
<script setup lang="ts">
|
|
2303
|
+
import { ZlHorizontalTable } from '@zl-ui-kit/components'
|
|
2304
|
+
</script>
|
|
2305
|
+
|
|
2306
|
+
<template>
|
|
2307
|
+
<ZlHorizontalTable :items="items" :span="12" />
|
|
2308
|
+
</template>
|
|
2309
|
+
```
|
|
2310
|
+
|
|
2311
|
+
> 示例中的 `items` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
2312
|
+
|
|
2313
|
+
**插槽用法**
|
|
2314
|
+
|
|
2315
|
+
```vue
|
|
2316
|
+
<template>
|
|
2317
|
+
<ZlHorizontalTable>
|
|
2318
|
+
<!-- 动态插槽:名字运行时取自 item.slot -->
|
|
2319
|
+
</ZlHorizontalTable>
|
|
2320
|
+
</template>
|
|
2321
|
+
```
|
|
2322
|
+
|
|
2323
|
+
**props**
|
|
2324
|
+
|
|
2325
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
2326
|
+
| ------------ | ----------------------- | ---------- | ---- | --------------------- | ---- |
|
|
2327
|
+
| `items` | `HorizontalTableItem[]` | `() => []` | 否 | `:items="items"` | — |
|
|
2328
|
+
| `span` | `number \| string` | `24` | 否 | `:span="span"` | — |
|
|
2329
|
+
| `labelWidth` | `string` | `'88px'` | 否 | `label-width="100px"` | — |
|
|
2330
|
+
| `labelAlign` | `string` | `'center'` | 否 | `label-align="left"` | — |
|
|
2331
|
+
|
|
2332
|
+
**插槽(slots)**
|
|
2333
|
+
|
|
2334
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
2335
|
+
| ------------- | -------------------- | -------------------------------------------- | ---------------------------- |
|
|
2336
|
+
| `[item.slot]` | `v-bind="item"` 展开 | `<template #[item.slot]="item">…</template>` | 动态插槽:名字由该表达式决定 |
|
|
2337
|
+
|
|
2338
|
+
**完整示例**:见 §8 布局与权限 › ZlHorizontalTable
|
|
2339
|
+
|
|
2340
|
+
#### `ZlIcon`
|
|
2341
|
+
|
|
2342
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlIcon/index.vue`</sub>
|
|
2343
|
+
|
|
2344
|
+
**接口概览**:1 props · 1 插槽
|
|
2345
|
+
|
|
2346
|
+
**用法示例**
|
|
2347
|
+
|
|
2348
|
+
```vue
|
|
2349
|
+
<script setup lang="ts">
|
|
2350
|
+
import { ZlIcon } from '@zl-ui-kit/components'
|
|
2351
|
+
</script>
|
|
2352
|
+
|
|
2353
|
+
<template>
|
|
2354
|
+
<ZlIcon icon="zl:bug" />
|
|
2355
|
+
</template>
|
|
2356
|
+
```
|
|
2357
|
+
|
|
2358
|
+
**插槽用法**
|
|
2359
|
+
|
|
2360
|
+
```vue
|
|
2361
|
+
<template>
|
|
2362
|
+
<ZlIcon>
|
|
2363
|
+
<template #default>…</template>
|
|
2364
|
+
</ZlIcon>
|
|
2365
|
+
</template>
|
|
2366
|
+
```
|
|
2367
|
+
|
|
2368
|
+
**props**
|
|
2369
|
+
|
|
2370
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
2371
|
+
| ------ | -------- | ------ | ---- | ------------------ | --------------------------------------------------------------- |
|
|
2372
|
+
| `icon` | `string` | — | 是 | `icon="zl:search"` | 图标:zl:xxx(本地图标集)/ http(s) 地址 / 本地 svg sprite 名称 |
|
|
2373
|
+
|
|
2374
|
+
**插槽(slots)**
|
|
2375
|
+
|
|
2376
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
2377
|
+
| --------- | ---------- | --------------------------------- | ---- |
|
|
2378
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
2379
|
+
|
|
2380
|
+
#### `ZlI18nProvider`
|
|
2381
|
+
|
|
2382
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlI18nProvider/index.vue`</sub>
|
|
2383
|
+
|
|
2384
|
+
**简介**:国际化根容器:将全局数据里的 Element Plus 语言包(elLocaleMessages) 经 <el-config-provider> 绑定到 Element Plus,使分页/日期选择器等内置组件 随应用语言切换而本地化。 用法:在应用根(或子树根)包裹一次即可。 <ZlI18nProvider> <A…
|
|
2385
|
+
|
|
2386
|
+
**接口概览**:1 插槽
|
|
2387
|
+
|
|
2388
|
+
**用法示例**
|
|
2389
|
+
|
|
2390
|
+
```vue
|
|
2391
|
+
<script setup lang="ts">
|
|
2392
|
+
import { ZlI18nProvider } from '@zl-ui-kit/components'
|
|
2393
|
+
</script>
|
|
2394
|
+
|
|
2395
|
+
<template>
|
|
2396
|
+
<ZlI18nProvider />
|
|
2397
|
+
</template>
|
|
2398
|
+
```
|
|
2399
|
+
|
|
2400
|
+
**插槽用法**
|
|
2401
|
+
|
|
2402
|
+
```vue
|
|
2403
|
+
<template>
|
|
2404
|
+
<ZlI18nProvider>
|
|
2405
|
+
<template #default>…</template>
|
|
2406
|
+
</ZlI18nProvider>
|
|
2407
|
+
</template>
|
|
2408
|
+
```
|
|
2409
|
+
|
|
2410
|
+
**插槽(slots)**
|
|
2411
|
+
|
|
2412
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
2413
|
+
| --------- | ---------- | --------------------------------- | ---- |
|
|
2414
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
2415
|
+
|
|
2416
|
+
#### `ZlIconHover`
|
|
2417
|
+
|
|
2418
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlIconHover/index.vue`</sub>
|
|
2419
|
+
|
|
2420
|
+
**简介**:悬停变色的图标:内部复用 `ZlIconLabel`,仅换配色
|
|
2421
|
+
|
|
2422
|
+
**用法示例**
|
|
2423
|
+
|
|
2424
|
+
```vue
|
|
2425
|
+
<script setup lang="ts">
|
|
2426
|
+
import { ZlIconHover } from '@zl-ui-kit/components'
|
|
2427
|
+
</script>
|
|
2428
|
+
|
|
2429
|
+
<template>
|
|
2430
|
+
<ZlIconHover icon="zl:setting"> 悬浮操作 </ZlIconHover>
|
|
2431
|
+
</template>
|
|
2432
|
+
```
|
|
2433
|
+
|
|
2434
|
+
> 纯容器组件:不接收 props,也无自定义事件/插槽/暴露方法。
|
|
2435
|
+
|
|
2436
|
+
#### `ZlIconLabel`
|
|
2437
|
+
|
|
2438
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlIconLabel/index.vue`</sub>
|
|
2439
|
+
|
|
2440
|
+
**接口概览**:1 props · 1 事件 · 1 插槽
|
|
2441
|
+
|
|
2442
|
+
**用法示例**
|
|
2443
|
+
|
|
2444
|
+
```vue
|
|
2445
|
+
<script setup lang="ts">
|
|
2446
|
+
import { ZlIconLabel } from '@zl-ui-kit/components'
|
|
2447
|
+
</script>
|
|
2448
|
+
|
|
2449
|
+
<template>
|
|
2450
|
+
<ZlIconLabel icon="zl:database"> 图标 + 文字 </ZlIconLabel>
|
|
2451
|
+
</template>
|
|
2452
|
+
```
|
|
2453
|
+
|
|
2454
|
+
**插槽用法**
|
|
2455
|
+
|
|
2456
|
+
```vue
|
|
2457
|
+
<template>
|
|
2458
|
+
<ZlIconLabel>
|
|
2459
|
+
<template #default>…</template>
|
|
2460
|
+
</ZlIconLabel>
|
|
2461
|
+
</template>
|
|
2462
|
+
```
|
|
2463
|
+
|
|
2464
|
+
**props**
|
|
2465
|
+
|
|
2466
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
2467
|
+
| ------------- | --------- | ------- | ---- | -------------- | ------------------------ |
|
|
2468
|
+
| `darkSurface` | `boolean` | `false` | 否 | `dark-surface` | 深色表面(悬浮背景更深) |
|
|
2469
|
+
|
|
2470
|
+
> 把 `$attrs` 透传给 `zl-icon`,未列出的属性会继续下传
|
|
2471
|
+
|
|
2472
|
+
**事件(emits)**
|
|
2473
|
+
|
|
2474
|
+
| 事件 | 参数 | 说明 |
|
|
2475
|
+
| ------- | ------------ | ---- |
|
|
2476
|
+
| `click` | `MouseEvent` | — |
|
|
2477
|
+
|
|
2478
|
+
**插槽(slots)**
|
|
2479
|
+
|
|
2480
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
2481
|
+
| --------- | ---------- | --------------------------------- | ---- |
|
|
2482
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
2483
|
+
|
|
2484
|
+
#### `ZlCornerTag`
|
|
2485
|
+
|
|
2486
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlTag/ZlCornerTag.vue`</sub>
|
|
2487
|
+
|
|
2488
|
+
**简介**:角落标签:贴在容器四个角(`position`),常用于「新」「热」等标记
|
|
2489
|
+
|
|
2490
|
+
**接口概览**:3 props · 1 插槽
|
|
2491
|
+
|
|
2492
|
+
**用法示例**
|
|
2493
|
+
|
|
2494
|
+
```vue
|
|
2495
|
+
<script setup lang="ts">
|
|
2496
|
+
import { ZlCornerTag } from '@zl-ui-kit/components'
|
|
2497
|
+
</script>
|
|
2498
|
+
|
|
2499
|
+
<template>
|
|
2500
|
+
<ZlCornerTag color="purple"> 角标 </ZlCornerTag>
|
|
2501
|
+
</template>
|
|
2502
|
+
```
|
|
2503
|
+
|
|
2504
|
+
**插槽用法**
|
|
2505
|
+
|
|
2506
|
+
```vue
|
|
2507
|
+
<template>
|
|
2508
|
+
<ZlCornerTag>
|
|
2509
|
+
<template #default>…</template>
|
|
2510
|
+
</ZlCornerTag>
|
|
2511
|
+
</template>
|
|
2512
|
+
```
|
|
2513
|
+
|
|
2514
|
+
**props**
|
|
2515
|
+
|
|
2516
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
2517
|
+
| ---------- | -------------------------------------------------------------- | ------------- | ---- | --------------------- | ---- |
|
|
2518
|
+
| `icon` | `string` | — | 否 | `icon="zl:search"` | — |
|
|
2519
|
+
| `color` | `string` | — | 否 | `color="#409eff"` | — |
|
|
2520
|
+
| `position` | `'top-left' \| 'top-right' \| 'bottom-left' \| 'bottom-right'` | `'top-right'` | 否 | `position="top-left"` | — |
|
|
2521
|
+
|
|
2522
|
+
**插槽(slots)**
|
|
2523
|
+
|
|
2524
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
2525
|
+
| --------- | ---------- | --------------------------------- | ---- |
|
|
2526
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
2527
|
+
|
|
2528
|
+
#### `ZlLayoutSwitch`
|
|
2529
|
+
|
|
2530
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlLayoutSwitch/index.vue`</sub>
|
|
2531
|
+
|
|
2532
|
+
**简介**:布局切换:在网格视图(grid)与表格视图(table)之间切换
|
|
2533
|
+
|
|
2534
|
+
**接口概览**:2 props · 1 事件
|
|
2535
|
+
|
|
2536
|
+
**用法示例**
|
|
2537
|
+
|
|
2538
|
+
```vue
|
|
2539
|
+
<script setup lang="ts">
|
|
2540
|
+
import { ZlLayoutSwitch } from '@zl-ui-kit/components'
|
|
2541
|
+
</script>
|
|
2542
|
+
|
|
2543
|
+
<template>
|
|
2544
|
+
<ZlLayoutSwitch v-model="value" />
|
|
2545
|
+
</template>
|
|
2546
|
+
```
|
|
2547
|
+
|
|
2548
|
+
**props**
|
|
2549
|
+
|
|
2550
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
2551
|
+
| ------------ | ------------------- | -------- | ---- | ----------------- | -------------------------------------------- |
|
|
2552
|
+
| `modelValue` | `'grid' \| 'table'` | — | 否 | `v-model="value"` | `v-model` 绑定的值(`defineModel` 隐式声明) |
|
|
2553
|
+
| `value` | `'grid' \| 'table'` | `'grid'` | 否 | `value="grid"` | — |
|
|
2554
|
+
|
|
2555
|
+
**事件(emits)**
|
|
2556
|
+
|
|
2557
|
+
| 事件 | 参数 | 说明 |
|
|
2558
|
+
| ------------------- | ------------------- | -------------- |
|
|
2559
|
+
| `update:modelValue` | `'grid' \| 'table'` | `v-model` 更新 |
|
|
2560
|
+
|
|
2561
|
+
**完整示例**:见 §7 表单与交互组件 › ZlRadioTag / ZlCheckboxTag / ZlCheckAll / ZlSorter / ZlAddSub / ZlLayoutSwitch
|
|
2562
|
+
|
|
2563
|
+
#### `ZlPagination`
|
|
2564
|
+
|
|
2565
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlPagination/index.vue`</sub>
|
|
2566
|
+
|
|
2567
|
+
**简介**:自行 usePaginationRequest
|
|
2568
|
+
|
|
2569
|
+
**接口概览**:3 props · 3 事件
|
|
2570
|
+
|
|
2571
|
+
**用法示例**
|
|
2572
|
+
|
|
2573
|
+
```vue
|
|
2574
|
+
<script setup lang="ts">
|
|
2575
|
+
import { ZlPagination } from '@zl-ui-kit/components'
|
|
2576
|
+
</script>
|
|
2577
|
+
|
|
2578
|
+
<template>
|
|
2579
|
+
<ZlPagination :total="120" :page-num="1" :page-size="30" />
|
|
2580
|
+
</template>
|
|
2581
|
+
```
|
|
2582
|
+
|
|
2583
|
+
**props**
|
|
2584
|
+
|
|
2585
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
2586
|
+
| ------------- | ------------ | ------ | ---- | ----------------------------- | ---------------------------------- |
|
|
2587
|
+
| `pageNum` | `(未声明)` | — | 否 | `:page-num="pageNum"` | 运行时从 `$attrs` 读取,无类型约束 |
|
|
2588
|
+
| `pageSize` | `(未声明)` | — | 否 | `:page-size="pageSize"` | 运行时从 `$attrs` 读取,无类型约束 |
|
|
2589
|
+
| `currentPage` | `(未声明)` | — | 否 | `:current-page="currentPage"` | 运行时从 `$attrs` 读取,无类型约束 |
|
|
2590
|
+
|
|
2591
|
+
> 本组件不声明 props,入参由 `$attrs` 动态读取
|
|
2592
|
+
|
|
2593
|
+
**事件(emits)**
|
|
2594
|
+
|
|
2595
|
+
| 事件 | 参数 | 说明 |
|
|
2596
|
+
| ------------------ | --------------------------------------- | ---------------------------------- |
|
|
2597
|
+
| `change` | `{ pageNum: number; pageSize: number }` | — |
|
|
2598
|
+
| `page-change` | `number` | 仅页码变化(区别于 pageSize 变化) |
|
|
2599
|
+
| `page-size-change` | `number` | 仅每页条数变化 |
|
|
2600
|
+
|
|
2601
|
+
**完整示例**:见 §6 数据型组件 + useRequest 体系(核心) › ③ ZlTable + ZlPagination —— 自行 usePaginationRequest
|
|
2602
|
+
|
|
2603
|
+
#### `ZlPermission`
|
|
2604
|
+
|
|
2605
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlPermission/index.vue`</sub>
|
|
2606
|
+
|
|
2607
|
+
**接口概览**:1 props · 1 插槽
|
|
2608
|
+
|
|
2609
|
+
**用法示例**
|
|
2610
|
+
|
|
2611
|
+
```vue
|
|
2612
|
+
<script setup lang="ts">
|
|
2613
|
+
import { ZlPermission } from '@zl-ui-kit/components'
|
|
2614
|
+
</script>
|
|
2615
|
+
|
|
2616
|
+
<template>
|
|
2617
|
+
<ZlPermission permission="table:edit:*" />
|
|
2618
|
+
</template>
|
|
2619
|
+
```
|
|
2620
|
+
|
|
2621
|
+
**插槽用法**
|
|
2622
|
+
|
|
2623
|
+
```vue
|
|
2624
|
+
<template>
|
|
2625
|
+
<ZlPermission>
|
|
2626
|
+
<template #default>…</template>
|
|
2627
|
+
</ZlPermission>
|
|
2628
|
+
</template>
|
|
2629
|
+
```
|
|
2630
|
+
|
|
2631
|
+
**props**
|
|
2632
|
+
|
|
2633
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
2634
|
+
| ------------ | -------------------- | ------ | ---- | ------------------ | ---------------------------------------- |
|
|
2635
|
+
| `permission` | `string \| string[]` | — | 是 | `:permission="[]"` | 权限键(三段式,可传多个任一命中即显示) |
|
|
2636
|
+
|
|
2637
|
+
**插槽(slots)**
|
|
2638
|
+
|
|
2639
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
2640
|
+
| --------- | ---------- | --------------------------------- | ---- |
|
|
2641
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
2642
|
+
|
|
2643
|
+
**完整示例**:见 §8 布局与权限 › ZlPermission
|
|
2644
|
+
|
|
2645
|
+
#### `ZlPopconfirm`
|
|
2646
|
+
|
|
2647
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlPopconfirm/index.vue`</sub>
|
|
2648
|
+
|
|
2649
|
+
**简介**:气泡确认框:点击触发气泡二次确认,文案可被 i18n 覆盖
|
|
2650
|
+
|
|
2651
|
+
**接口概览**:4 props · 2 事件 · 3 插槽
|
|
2652
|
+
|
|
2653
|
+
**用法示例**
|
|
2654
|
+
|
|
2655
|
+
```vue
|
|
2656
|
+
<script setup lang="ts">
|
|
2657
|
+
import { ZlPopconfirm } from '@zl-ui-kit/components'
|
|
2658
|
+
</script>
|
|
2659
|
+
|
|
2660
|
+
<template>
|
|
2661
|
+
<ZlPopconfirm title="确认删除?" content="删除后不可恢复" />
|
|
2662
|
+
</template>
|
|
2663
|
+
```
|
|
2664
|
+
|
|
2665
|
+
**插槽用法**
|
|
2666
|
+
|
|
2667
|
+
```vue
|
|
2668
|
+
<template>
|
|
2669
|
+
<ZlPopconfirm>
|
|
2670
|
+
<template #default>…</template>
|
|
2671
|
+
<template #title>…</template>
|
|
2672
|
+
<template #content>…</template>
|
|
2673
|
+
</ZlPopconfirm>
|
|
2674
|
+
</template>
|
|
2675
|
+
```
|
|
2676
|
+
|
|
2677
|
+
**props**
|
|
2678
|
+
|
|
2679
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
2680
|
+
| ------------------- | -------- | ------ | ---- | -------------------------------------- | ---- |
|
|
2681
|
+
| `title` | `string` | — | 否 | `title="标题"` | — |
|
|
2682
|
+
| `content` | `string` | — | 否 | `content="删除后不可恢复,是否继续?"` | — |
|
|
2683
|
+
| `confirmButtonText` | `string` | — | 否 | `confirm-button-text="确定"` | — |
|
|
2684
|
+
| `cancelButtonText` | `string` | — | 否 | `cancel-button-text="取消"` | — |
|
|
2685
|
+
|
|
2686
|
+
> 把 `$attrs` 透传给 `el-popover`,未列出的属性会继续下传
|
|
2687
|
+
|
|
2688
|
+
**事件(emits)**
|
|
2689
|
+
|
|
2690
|
+
| 事件 | 参数 | 说明 |
|
|
2691
|
+
| --------- | ---- | ---- |
|
|
2692
|
+
| `confirm` | — | — |
|
|
2693
|
+
| `cancel` | — | — |
|
|
2694
|
+
|
|
2695
|
+
**插槽(slots)**
|
|
2696
|
+
|
|
2697
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
2698
|
+
| --------- | ---------- | --------------------------------- | ---- |
|
|
2699
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
2700
|
+
| `title` | — | `<template #title>…</template>` | — |
|
|
2701
|
+
| `content` | — | `<template #content>…</template>` | — |
|
|
2702
|
+
|
|
2703
|
+
**完整示例**:见 §7 表单与交互组件 › ZlDrawer / ZlPopconfirm / ZlSwitch
|
|
2704
|
+
|
|
2705
|
+
#### `ZlRadioTag`
|
|
2706
|
+
|
|
2707
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlRadioTag/index.vue`</sub>
|
|
2708
|
+
|
|
2709
|
+
**简介**:单选标签组:以标签形式做单选,选项支持图标与 disabled
|
|
2710
|
+
|
|
2711
|
+
**接口概览**:3 props · 1 事件 · 1 插槽
|
|
2712
|
+
|
|
2713
|
+
**用法示例**
|
|
2714
|
+
|
|
2715
|
+
```vue
|
|
2716
|
+
<script setup lang="ts">
|
|
2717
|
+
import { ZlRadioTag } from '@zl-ui-kit/components'
|
|
2718
|
+
</script>
|
|
2719
|
+
|
|
2720
|
+
<template>
|
|
2721
|
+
<ZlRadioTag v-model="value" />
|
|
2722
|
+
</template>
|
|
2723
|
+
```
|
|
2724
|
+
|
|
2725
|
+
**插槽用法**
|
|
2726
|
+
|
|
2727
|
+
```vue
|
|
2728
|
+
<template>
|
|
2729
|
+
<ZlRadioTag>
|
|
2730
|
+
<template #default="{ item, checked }">…</template>
|
|
2731
|
+
</ZlRadioTag>
|
|
2732
|
+
</template>
|
|
2733
|
+
```
|
|
2734
|
+
|
|
2735
|
+
**props**
|
|
2736
|
+
|
|
2737
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
2738
|
+
| ------------ | ------------------------------- | ---------- | ---- | -------------------- | -------------------------------------------- |
|
|
2739
|
+
| `modelValue` | `string \| number \| undefined` | — | 否 | `v-model="value"` | `v-model` 绑定的值(`defineModel` 隐式声明) |
|
|
2740
|
+
| `options` | `RadioTagOption[]` | `() => []` | 否 | `:options="options"` | — |
|
|
2741
|
+
| `size` | `'mini' \| 'small' \| 'medium'` | `'small'` | 否 | `size="mini"` | — |
|
|
2742
|
+
|
|
2743
|
+
**事件(emits)**
|
|
2744
|
+
|
|
2745
|
+
| 事件 | 参数 | 说明 |
|
|
2746
|
+
| ------------------- | ------------------------------- | -------------- |
|
|
2747
|
+
| `update:modelValue` | `string \| number \| undefined` | `v-model` 更新 |
|
|
2748
|
+
|
|
2749
|
+
**插槽(slots)**
|
|
2750
|
+
|
|
2751
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
2752
|
+
| --------- | ------------------------------------------------------- | ----------------------------------------------------- | ---- |
|
|
2753
|
+
| `default` | `v-bind="{ item, checked: model === item.value }"` 展开 | `<template #default="{ item, checked }">…</template>` | — |
|
|
2754
|
+
|
|
2755
|
+
**完整示例**:见 §7 表单与交互组件 › ZlRadioTag / ZlCheckboxTag / ZlCheckAll / ZlSorter / ZlAddSub / ZlLayoutSwitch
|
|
2756
|
+
|
|
2757
|
+
#### `ZlSearch`
|
|
2758
|
+
|
|
2759
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlSearch/index.vue`</sub>
|
|
2760
|
+
|
|
2761
|
+
**简介**:查询条:表单项按容器宽度自适应排列(auto-fill 网格),放不下的项自动隐藏, 并在「查询」左侧给出展开按钮(点击后在查询条上层展开全量表单,再点收起)。
|
|
2762
|
+
|
|
2763
|
+
**接口概览**:5 props · 2 事件 · 2 插槽 · 3 暴露
|
|
2764
|
+
|
|
2765
|
+
**用法示例**
|
|
2766
|
+
|
|
2767
|
+
```vue
|
|
2768
|
+
<script setup lang="ts">
|
|
2769
|
+
import { ZlSearch } from '@zl-ui-kit/components'
|
|
2770
|
+
</script>
|
|
2771
|
+
|
|
2772
|
+
<template>
|
|
2773
|
+
<ZlSearch :items="items" />
|
|
2774
|
+
</template>
|
|
2775
|
+
```
|
|
2776
|
+
|
|
2777
|
+
> 示例中的 `items` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
2778
|
+
|
|
2779
|
+
**插槽用法**
|
|
2780
|
+
|
|
2781
|
+
```vue
|
|
2782
|
+
<template>
|
|
2783
|
+
<ZlSearch>
|
|
2784
|
+
<template #actions>…</template>
|
|
2785
|
+
<!-- 动态插槽:名字运行时取自 slot -->
|
|
2786
|
+
</ZlSearch>
|
|
2787
|
+
</template>
|
|
2788
|
+
```
|
|
2789
|
+
|
|
2790
|
+
**props**
|
|
2791
|
+
|
|
2792
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
2793
|
+
| ------------ | --------------------- | ----------- | ---- | -------------------- | -------------------------------------------------------------------------------------------- |
|
|
2794
|
+
| `items` | `SearchItem[]` | `() => []` | 否 | `:items="items"` | 查询项定义(SearchItem[]),按数组顺序排列 |
|
|
2795
|
+
| `model` | `Record<string, any>` | — | 否 | `:model="{}"` | 表单数据。传入时组件直接读写该对象(受控); 不传则用内部副本,`params` / 标签行仍可正常工作 |
|
|
2796
|
+
| `immediate` | `boolean` | `true` | 否 | `:immediate="false"` | 挂载后立即执行一次查询(默认 true) |
|
|
2797
|
+
| `disabled` | `boolean` | `false` | 否 | `disabled` | 禁用全部查询项 |
|
|
2798
|
+
| `showLabels` | `boolean` | `undefined` | 否 | `show-labels` | 是否展示「筛选条件」标签行;不传时按「是否发生溢出」自动判定 |
|
|
2799
|
+
|
|
2800
|
+
**事件(emits)**
|
|
2801
|
+
|
|
2802
|
+
| 事件 | 参数 | 说明 |
|
|
2803
|
+
| -------- | --------------------- | ---------------------------------------- |
|
|
2804
|
+
| `search` | `Record<string, any>` | 查询:回传经 `toParams` 合并后的参数对象 |
|
|
2805
|
+
| `reset` | — | 重置:表单已恢复初始值并重新查询之后触发 |
|
|
2806
|
+
|
|
2807
|
+
**插槽(slots)**
|
|
2808
|
+
|
|
2809
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
2810
|
+
| --------- | --------------------- | ---------------------------------------- | ---------------------------- |
|
|
2811
|
+
| `[slot]` | `v-bind="scope"` 展开 | `<template #[slot]="scope">…</template>` | 动态插槽:名字由该表达式决定 |
|
|
2812
|
+
| `actions` | — | `<template #actions>…</template>` | — |
|
|
2813
|
+
|
|
2814
|
+
**暴露(defineExpose)**
|
|
2815
|
+
|
|
2816
|
+
| 名称 | 说明 |
|
|
2817
|
+
| -------- | ---- |
|
|
2818
|
+
| `params` | — |
|
|
2819
|
+
| `search` | — |
|
|
2820
|
+
| `reset` | — |
|
|
2821
|
+
|
|
2822
|
+
**完整示例**:见 §6 数据型组件 + useRequest 体系(核心) › ④ ZlSearch 触发 run(params)
|
|
2823
|
+
|
|
2824
|
+
#### `ZlSearchTable`
|
|
2825
|
+
|
|
2826
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlSearchTable/index.vue`</sub>
|
|
2827
|
+
|
|
2828
|
+
**简介**:直接传 service
|
|
2829
|
+
|
|
2830
|
+
**接口概览**:5 props · 1 事件 · 3 插槽 · 4 暴露
|
|
2831
|
+
|
|
2832
|
+
**用法示例**
|
|
2833
|
+
|
|
2834
|
+
```vue
|
|
2835
|
+
<script setup lang="ts">
|
|
2836
|
+
import { ZlSearchTable } from '@zl-ui-kit/components'
|
|
2837
|
+
</script>
|
|
2838
|
+
|
|
2839
|
+
<template>
|
|
2840
|
+
<ZlSearchTable
|
|
2841
|
+
:request="mockPageRequest"
|
|
2842
|
+
:columns="tableColumns"
|
|
2843
|
+
:query-items="queryItems"
|
|
2844
|
+
:pagination="{ pageSize: 5 }"
|
|
2845
|
+
height="320"
|
|
2846
|
+
/>
|
|
2847
|
+
</template>
|
|
2848
|
+
```
|
|
2849
|
+
|
|
2850
|
+
> 示例中的 `request`、`columns`、`queryItems`、`pagination` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
2851
|
+
|
|
2852
|
+
**插槽用法**
|
|
2853
|
+
|
|
2854
|
+
```vue
|
|
2855
|
+
<template>
|
|
2856
|
+
<ZlSearchTable>
|
|
2857
|
+
<template #search-actions>…</template>
|
|
2858
|
+
<!-- 动态插槽:名字运行时取自 slot.slot -->
|
|
2859
|
+
<!-- 动态插槽:名字运行时取自 slot -->
|
|
2860
|
+
</ZlSearchTable>
|
|
2861
|
+
</template>
|
|
2862
|
+
```
|
|
2863
|
+
|
|
2864
|
+
**props**
|
|
2865
|
+
|
|
2866
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
2867
|
+
| ------------ | ----------------------------------------------------------------------------------------------------------------------------- | ---------- | ---- | --------------------------- | --------------------------------------------------------------- |
|
|
2868
|
+
| `immediate` | `boolean` | `true` | 否 | `:immediate="false"` | — |
|
|
2869
|
+
| `request` | `\| ((...args: any[]) => Promise<any>) \| { service: (...args: any[]) => Promise<any>; options?: Record<string, any> }` | — | 是 | `:request="async () => {}"` | 请求函数,或 { service, options }(usePageableRequest options) |
|
|
2870
|
+
| `columns` | `TableColumn[]` | `() => []` | 否 | `:columns="columns"` | — |
|
|
2871
|
+
| `queryItems` | `SearchItem[]` | `() => []` | 否 | `:query-items="queryItems"` | — |
|
|
2872
|
+
| `pagination` | `Record<string, any> \| boolean` | — | 否 | `:pagination="{}"` | — |
|
|
2873
|
+
|
|
2874
|
+
> 把 `$attrs` 透传给 `ZlTable`,未列出的属性会继续下传
|
|
2875
|
+
|
|
2876
|
+
**事件(emits)**
|
|
2877
|
+
|
|
2878
|
+
| 事件 | 参数 | 说明 |
|
|
2879
|
+
| -------------- | ---- | ---- |
|
|
2880
|
+
| `search-reset` | — | — |
|
|
2881
|
+
|
|
2882
|
+
**插槽(slots)**
|
|
2883
|
+
|
|
2884
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
2885
|
+
| ---------------- | --------------------- | --------------------------------------------- | ---------------------------- |
|
|
2886
|
+
| `search-actions` | — | `<template #search-actions>…</template>` | — |
|
|
2887
|
+
| `[slot.slot]` | `v-bind="scope"` 展开 | `<template #[slot.slot]="scope">…</template>` | 动态插槽:名字由该表达式决定 |
|
|
2888
|
+
| `[slot]` | `v-bind="scope"` 展开 | `<template #[slot]="scope">…</template>` | 动态插槽:名字由该表达式决定 |
|
|
2889
|
+
|
|
2890
|
+
**暴露(defineExpose)**
|
|
2891
|
+
|
|
2892
|
+
| 名称 | 说明 |
|
|
2893
|
+
| --------- | ---- |
|
|
2894
|
+
| `refresh` | — |
|
|
2895
|
+
| `params` | — |
|
|
2896
|
+
| `search` | — |
|
|
2897
|
+
| `table` | — |
|
|
2898
|
+
|
|
2899
|
+
**完整示例**:见 §6 数据型组件 + useRequest 体系(核心) › ① ZlSearchTable —— 直接传 service
|
|
2900
|
+
|
|
2901
|
+
#### `ZlSection`
|
|
2902
|
+
|
|
2903
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlSection/index.vue`</sub>
|
|
2904
|
+
|
|
2905
|
+
**接口概览**:4 props · 3 插槽
|
|
2906
|
+
|
|
2907
|
+
**用法示例**
|
|
2908
|
+
|
|
2909
|
+
```vue
|
|
2910
|
+
<script setup lang="ts">
|
|
2911
|
+
import { ZlSection } from '@zl-ui-kit/components'
|
|
2912
|
+
</script>
|
|
2913
|
+
|
|
2914
|
+
<template>
|
|
2915
|
+
<ZlSection title="分区标题" icon="bug" block />
|
|
2916
|
+
</template>
|
|
2917
|
+
```
|
|
2918
|
+
|
|
2919
|
+
**插槽用法**
|
|
2920
|
+
|
|
2921
|
+
```vue
|
|
2922
|
+
<template>
|
|
2923
|
+
<ZlSection>
|
|
2924
|
+
<template #title-prepend>…</template>
|
|
2925
|
+
<template #actions>…</template>
|
|
2926
|
+
<template #default>…</template>
|
|
2927
|
+
</ZlSection>
|
|
2928
|
+
</template>
|
|
2929
|
+
```
|
|
2930
|
+
|
|
2931
|
+
**props**
|
|
2932
|
+
|
|
2933
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
2934
|
+
| ------------- | --------- | ------ | ---- | ------------------ | ------------------------------ |
|
|
2935
|
+
| `icon` | `string` | — | 否 | `icon="zl:search"` | 标题图标名(zl: 前缀自动补全) |
|
|
2936
|
+
| `title` | `string` | — | 否 | `title="标题"` | — |
|
|
2937
|
+
| `block` | `boolean` | — | 否 | `block` | 块状布局(内容区滚动) |
|
|
2938
|
+
| `blockHidden` | `boolean` | — | 否 | `block-hidden` | 块状布局且隐藏溢出 |
|
|
2939
|
+
|
|
2940
|
+
**插槽(slots)**
|
|
2941
|
+
|
|
2942
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
2943
|
+
| --------------- | ---------- | --------------------------------------- | ---- |
|
|
2944
|
+
| `title-prepend` | — | `<template #title-prepend>…</template>` | — |
|
|
2945
|
+
| `actions` | — | `<template #actions>…</template>` | — |
|
|
2946
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
2947
|
+
|
|
2948
|
+
#### `ZlSorter`
|
|
2949
|
+
|
|
2950
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlSorter/index.vue`</sub>
|
|
2951
|
+
|
|
2952
|
+
**简介**:单字段排序:点一次升序、再点降序、第三次取消(`v-model` 为 '' | 'asc' | 'desc')
|
|
2953
|
+
|
|
2954
|
+
**接口概览**:2 props · 2 事件 · 1 插槽
|
|
2955
|
+
|
|
2956
|
+
**用法示例**
|
|
2957
|
+
|
|
2958
|
+
```vue
|
|
2959
|
+
<script setup lang="ts">
|
|
2960
|
+
import { ZlSorter } from '@zl-ui-kit/components'
|
|
2961
|
+
</script>
|
|
2962
|
+
|
|
2963
|
+
<template>
|
|
2964
|
+
<ZlSorter label="名称" v-model="value" />
|
|
2965
|
+
</template>
|
|
2966
|
+
```
|
|
2967
|
+
|
|
2968
|
+
**插槽用法**
|
|
2969
|
+
|
|
2970
|
+
```vue
|
|
2971
|
+
<template>
|
|
2972
|
+
<ZlSorter>
|
|
2973
|
+
<template #default>…</template>
|
|
2974
|
+
</ZlSorter>
|
|
2975
|
+
</template>
|
|
2976
|
+
```
|
|
2977
|
+
|
|
2978
|
+
**props**
|
|
2979
|
+
|
|
2980
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
2981
|
+
| ------------ | ----------------------- | ------ | ---- | ----------------- | -------------------------------------------- |
|
|
2982
|
+
| `modelValue` | `'' \| 'asc' \| 'desc'` | — | 否 | `v-model="value"` | `v-model` 绑定的值(`defineModel` 隐式声明) |
|
|
2983
|
+
| `label` | `string` | — | 否 | `label="标签"` | — |
|
|
2984
|
+
|
|
2985
|
+
**事件(emits)**
|
|
2986
|
+
|
|
2987
|
+
| 事件 | 参数 | 说明 |
|
|
2988
|
+
| ------------------- | ----------------------- | -------------- |
|
|
2989
|
+
| `update:modelValue` | `'' \| 'asc' \| 'desc'` | `v-model` 更新 |
|
|
2990
|
+
| `change` | `'' \| 'asc' \| 'desc'` | — |
|
|
2991
|
+
|
|
2992
|
+
**插槽(slots)**
|
|
2993
|
+
|
|
2994
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
2995
|
+
| --------- | ---------- | --------------------------------- | ---- |
|
|
2996
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
2997
|
+
|
|
2998
|
+
**完整示例**:见 §7 表单与交互组件 › ZlRadioTag / ZlCheckboxTag / ZlCheckAll / ZlSorter / ZlAddSub / ZlLayoutSwitch
|
|
2999
|
+
|
|
3000
|
+
#### `ZlSorterList`
|
|
3001
|
+
|
|
3002
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlSorter/ZlSorterList.vue`</sub>
|
|
3003
|
+
|
|
3004
|
+
**简介**:多字段排序列表:把若干个 `ZlSorter` 组织成一组,可单选/多选
|
|
3005
|
+
|
|
3006
|
+
**接口概览**:2 props · 1 事件
|
|
3007
|
+
|
|
3008
|
+
**用法示例**
|
|
3009
|
+
|
|
3010
|
+
```vue
|
|
3011
|
+
<script setup lang="ts">
|
|
3012
|
+
import { ZlSorterList } from '@zl-ui-kit/components'
|
|
3013
|
+
</script>
|
|
3014
|
+
|
|
3015
|
+
<template>
|
|
3016
|
+
<ZlSorterList :model-value="{ name: 'asc' }" :sorters="sorters" />
|
|
3017
|
+
</template>
|
|
3018
|
+
```
|
|
3019
|
+
|
|
3020
|
+
> 示例中的 `modelValue`、`sorters` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
3021
|
+
|
|
3022
|
+
**props**
|
|
3023
|
+
|
|
3024
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
3025
|
+
| ---------- | -------------- | ---------- | ---- | -------------------- | ---- |
|
|
3026
|
+
| `sorters` | `SorterItem[]` | `() => []` | 否 | `:sorters="sorters"` | — |
|
|
3027
|
+
| `multiple` | `boolean` | `false` | 否 | `multiple` | — |
|
|
3028
|
+
|
|
3029
|
+
**事件(emits)**
|
|
3030
|
+
|
|
3031
|
+
| 事件 | 参数 | 说明 |
|
|
3032
|
+
| -------- | ------------------------------------- | ---- |
|
|
3033
|
+
| `change` | `Record<string, any>, string, string` | — |
|
|
3034
|
+
|
|
3035
|
+
#### `ZlSwitch`
|
|
3036
|
+
|
|
3037
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlSwitch/index.vue`</sub>
|
|
3038
|
+
|
|
3039
|
+
**简介**:开关:值可为 boolean/string/number,支持 checkedText/uncheckedText 文案
|
|
3040
|
+
|
|
3041
|
+
**接口概览**:6 props · 1 事件 · 2 插槽
|
|
3042
|
+
|
|
3043
|
+
**用法示例**
|
|
3044
|
+
|
|
3045
|
+
```vue
|
|
3046
|
+
<script setup lang="ts">
|
|
3047
|
+
import { ZlSwitch } from '@zl-ui-kit/components'
|
|
3048
|
+
</script>
|
|
3049
|
+
|
|
3050
|
+
<template>
|
|
3051
|
+
<ZlSwitch model-value="1" checked-value="1" unchecked-value="0" checked-text="开启" unchecked-text="关闭" />
|
|
3052
|
+
</template>
|
|
3053
|
+
```
|
|
3054
|
+
|
|
3055
|
+
**插槽用法**
|
|
3056
|
+
|
|
3057
|
+
```vue
|
|
3058
|
+
<template>
|
|
3059
|
+
<ZlSwitch>
|
|
3060
|
+
<template #checked>…</template>
|
|
3061
|
+
<template #unchecked>…</template>
|
|
3062
|
+
</ZlSwitch>
|
|
3063
|
+
</template>
|
|
3064
|
+
```
|
|
3065
|
+
|
|
3066
|
+
**props**
|
|
3067
|
+
|
|
3068
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
3069
|
+
| ---------------- | ----------------------------- | ------- | ---- | ----------------------------------- | ---- |
|
|
3070
|
+
| `modelValue` | `boolean \| string \| number` | — | 否 | `v-model="value"` | — |
|
|
3071
|
+
| `defaultChecked` | `boolean` | `false` | 否 | `default-checked` | — |
|
|
3072
|
+
| `checkedValue` | `boolean \| string \| number` | `true` | 否 | `:checked-value="checkedValue"` | — |
|
|
3073
|
+
| `uncheckedValue` | `boolean \| string \| number` | `false` | 否 | `:unchecked-value="uncheckedValue"` | — |
|
|
3074
|
+
| `checkedText` | `string` | — | 否 | `checked-text="开"` | — |
|
|
3075
|
+
| `uncheckedText` | `string` | — | 否 | `unchecked-text="关"` | — |
|
|
3076
|
+
|
|
3077
|
+
> 把 `$attrs` 透传给 `el-switch`,未列出的属性会继续下传
|
|
3078
|
+
|
|
3079
|
+
**事件(emits)**
|
|
3080
|
+
|
|
3081
|
+
| 事件 | 参数 | 说明 |
|
|
3082
|
+
| ------------------- | ----------------------------- | ---- |
|
|
3083
|
+
| `update:modelValue` | `boolean \| string \| number` | — |
|
|
3084
|
+
|
|
3085
|
+
**插槽(slots)**
|
|
3086
|
+
|
|
3087
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
3088
|
+
| ----------- | ---------- | ----------------------------------- | ---- |
|
|
3089
|
+
| `checked` | — | `<template #checked>…</template>` | — |
|
|
3090
|
+
| `unchecked` | — | `<template #unchecked>…</template>` | — |
|
|
3091
|
+
|
|
3092
|
+
**完整示例**:见 §7 表单与交互组件 › ZlDrawer / ZlPopconfirm / ZlSwitch
|
|
3093
|
+
|
|
3094
|
+
#### `ZlTable`
|
|
3095
|
+
|
|
3096
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlTable/index.vue`</sub>
|
|
3097
|
+
|
|
3098
|
+
**简介**:自行 usePaginationRequest
|
|
3099
|
+
|
|
3100
|
+
**接口概览**:6 props · 3 事件 · 3 插槽
|
|
3101
|
+
|
|
3102
|
+
**用法示例**
|
|
3103
|
+
|
|
3104
|
+
```vue
|
|
3105
|
+
<script setup lang="ts">
|
|
3106
|
+
import { ZlTable } from '@zl-ui-kit/components'
|
|
3107
|
+
</script>
|
|
3108
|
+
|
|
3109
|
+
<template>
|
|
3110
|
+
<ZlTable :columns="tableColumns" :data="tableData" :pagination="{ total: tableData.length }" />
|
|
3111
|
+
</template>
|
|
3112
|
+
```
|
|
3113
|
+
|
|
3114
|
+
> 示例中的 `columns`、`data`、`pagination` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
3115
|
+
|
|
3116
|
+
**插槽用法**
|
|
3117
|
+
|
|
3118
|
+
```vue
|
|
3119
|
+
<template>
|
|
3120
|
+
<ZlTable>
|
|
3121
|
+
<template #expand="scope">…</template>
|
|
3122
|
+
<!-- 动态插槽:名字运行时取自 column.headerSlotName -->
|
|
3123
|
+
<!-- 动态插槽:名字运行时取自 column.slotName -->
|
|
3124
|
+
</ZlTable>
|
|
3125
|
+
</template>
|
|
3126
|
+
```
|
|
3127
|
+
|
|
3128
|
+
**props**
|
|
3129
|
+
|
|
3130
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
3131
|
+
| -------------- | -------------------------------- | -------- | ---- | -------------------- | ---------------------------------------------------------------------------- |
|
|
3132
|
+
| `columns` | `TableColumn[]` | — | 是 | `:columns="columns"` | — |
|
|
3133
|
+
| `data` | `any[] \| Record<string, any>` | — | 是 | `:data="data"` | 数组(本地数据)或 { [dataKey]: rows, pageNum, pageSize, total }(分页数据) |
|
|
3134
|
+
| `dataKey` | `string` | `'rows'` | 否 | `data-key="rows"` | — |
|
|
3135
|
+
| `expandAction` | `boolean` | `false` | 否 | `expand-action` | actions 列宽加宽(参考实现 expandAction 语义) |
|
|
3136
|
+
| `pagination` | `Record<string, any> \| boolean` | — | 否 | `:pagination="{}"` | — |
|
|
3137
|
+
| `loading` | `boolean` | `false` | 否 | `loading` | 表格 loading(作用于表格区) |
|
|
3138
|
+
|
|
3139
|
+
> 把 `$attrs` 透传给 `el-table`,未列出的属性会继续下传
|
|
3140
|
+
|
|
3141
|
+
**事件(emits)**
|
|
3142
|
+
|
|
3143
|
+
| 事件 | 参数 | 说明 |
|
|
3144
|
+
| ------------------- | --------------------------------------- | ---- |
|
|
3145
|
+
| `pagination-change` | `{ pageNum: number; pageSize: number }` | — |
|
|
3146
|
+
| `page-change` | `number` | — |
|
|
3147
|
+
| `page-size-change` | `number` | — |
|
|
3148
|
+
|
|
3149
|
+
**插槽(slots)**
|
|
3150
|
+
|
|
3151
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
3152
|
+
| ------------------------- | --------------------- | --------------------------------------------------------- | ---------------------------- |
|
|
3153
|
+
| `expand` | `v-bind="scope"` 展开 | `<template #expand="scope">…</template>` | — |
|
|
3154
|
+
| `[column.headerSlotName]` | `v-bind="scope"` 展开 | `<template #[column.headerSlotName]="scope">…</template>` | 动态插槽:名字由该表达式决定 |
|
|
3155
|
+
| `[column.slotName]` | `v-bind="scope"` 展开 | `<template #[column.slotName]="scope">…</template>` | 动态插槽:名字由该表达式决定 |
|
|
3156
|
+
|
|
3157
|
+
**完整示例**:见 §6 数据型组件 + useRequest 体系(核心) › ③ ZlTable + ZlPagination —— 自行 usePaginationRequest
|
|
3158
|
+
|
|
3159
|
+
#### `ZlTabs`
|
|
3160
|
+
|
|
3161
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlTabs/index.vue`</sub>
|
|
3162
|
+
|
|
3163
|
+
**接口概览**:4 props · 3 插槽
|
|
3164
|
+
|
|
3165
|
+
**用法示例**
|
|
3166
|
+
|
|
3167
|
+
```vue
|
|
3168
|
+
<script setup lang="ts">
|
|
3169
|
+
import { ZlTabs } from '@zl-ui-kit/components'
|
|
3170
|
+
</script>
|
|
3171
|
+
|
|
3172
|
+
<template>
|
|
3173
|
+
<ZlTabs :tabs="tabs">
|
|
3174
|
+
<template #a>页签 A 内容</template>
|
|
3175
|
+
<template #b>页签 B 内容</template>
|
|
3176
|
+
</ZlTabs>
|
|
3177
|
+
</template>
|
|
3178
|
+
```
|
|
3179
|
+
|
|
3180
|
+
> 示例中的 `tabs` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
3181
|
+
|
|
3182
|
+
**插槽用法**
|
|
3183
|
+
|
|
3184
|
+
```vue
|
|
3185
|
+
<template>
|
|
3186
|
+
<ZlTabs>
|
|
3187
|
+
<template #default>…</template>
|
|
3188
|
+
<template #extra>…</template>
|
|
3189
|
+
<!-- 动态插槽:名字运行时取自 key -->
|
|
3190
|
+
</ZlTabs>
|
|
3191
|
+
</template>
|
|
3192
|
+
```
|
|
3193
|
+
|
|
3194
|
+
**props**
|
|
3195
|
+
|
|
3196
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
3197
|
+
| --------- | --------- | ---------- | ---- | ------------------- | ---- |
|
|
3198
|
+
| `tabs` | `any[]` | `() => []` | 否 | `:tabs="[]"` | — |
|
|
3199
|
+
| `border` | `boolean` | `true` | 否 | `:border="false"` | — |
|
|
3200
|
+
| `fit` | `boolean` | — | 否 | `fit` | — |
|
|
3201
|
+
| `darkNav` | `boolean` | `true` | 否 | `:dark-nav="false"` | — |
|
|
3202
|
+
|
|
3203
|
+
> 选项式组件(`defineComponent`),props 定义在 `props: {}` 中
|
|
3204
|
+
> 把 `$attrs` 透传给内部组件,未列出的属性会继续下传
|
|
3205
|
+
|
|
3206
|
+
**插槽(slots)**
|
|
3207
|
+
|
|
3208
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
3209
|
+
| --------- | ---------- | --------------------------------- | ---------------------------- |
|
|
3210
|
+
| `[key]` | — | `<template #[key]>…</template>` | 动态插槽:名字由该表达式决定 |
|
|
3211
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
3212
|
+
| `extra` | — | `<template #extra>…</template>` | — |
|
|
3213
|
+
|
|
3214
|
+
**完整示例**:见 §7 表单与交互组件 › ZlTabs / ZlDynamicComponent / ZlGrid
|
|
3215
|
+
|
|
3216
|
+
#### `ZlTag`
|
|
3217
|
+
|
|
3218
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlTag/index.vue`</sub>
|
|
3219
|
+
|
|
3220
|
+
**简介**:标签
|
|
3221
|
+
|
|
3222
|
+
**接口概览**:15 props · 4 事件 · 1 插槽
|
|
3223
|
+
|
|
3224
|
+
**用法示例**
|
|
3225
|
+
|
|
3226
|
+
```vue
|
|
3227
|
+
<script setup lang="ts">
|
|
3228
|
+
import { ZlTag } from '@zl-ui-kit/components'
|
|
3229
|
+
</script>
|
|
3230
|
+
|
|
3231
|
+
<template>
|
|
3232
|
+
<ZlTag color="blue" bordered> blue 边框 </ZlTag>
|
|
3233
|
+
</template>
|
|
3234
|
+
```
|
|
3235
|
+
|
|
3236
|
+
**插槽用法**
|
|
3237
|
+
|
|
3238
|
+
```vue
|
|
3239
|
+
<template>
|
|
3240
|
+
<ZlTag>
|
|
3241
|
+
<template #default>…</template>
|
|
3242
|
+
</ZlTag>
|
|
3243
|
+
</template>
|
|
3244
|
+
```
|
|
3245
|
+
|
|
3246
|
+
**props**
|
|
3247
|
+
|
|
3248
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
3249
|
+
| ----------------- | ------------------------------- | ----------- | ---- | -------------------------- | ---- |
|
|
3250
|
+
| `size` | `'mini' \| 'small' \| 'medium'` | `undefined` | 否 | `size="mini"` | — |
|
|
3251
|
+
| `color` | `string` | `undefined` | 否 | `color="#409eff"` | — |
|
|
3252
|
+
| `bordered` | `boolean` | `false` | 否 | `bordered` | — |
|
|
3253
|
+
| `fill` | `boolean` | `false` | 否 | `fill` | — |
|
|
3254
|
+
| `disabled` | `boolean` | `false` | 否 | `disabled` | — |
|
|
3255
|
+
| `icon` | `string` | `undefined` | 否 | `icon="zl:search"` | — |
|
|
3256
|
+
| `dotIcon` | `boolean` | `false` | 否 | `dot-icon` | — |
|
|
3257
|
+
| `iconColor` | `string` | `undefined` | 否 | `icon-color="#409eff"` | — |
|
|
3258
|
+
| `closable` | `boolean` | `false` | 否 | `closable` | — |
|
|
3259
|
+
| `visible` | `boolean \| undefined` | `undefined` | 否 | `v-model:visible="value"` | — |
|
|
3260
|
+
| `defaultVisible` | `boolean` | `true` | 否 | `:default-visible="false"` | — |
|
|
3261
|
+
| `selectable` | `boolean` | `false` | 否 | `selectable` | — |
|
|
3262
|
+
| `selected` | `boolean \| undefined` | `undefined` | 否 | `v-model:selected="value"` | — |
|
|
3263
|
+
| `defaultSelected` | `boolean` | `false` | 否 | `default-selected` | — |
|
|
3264
|
+
| `rounded` | `boolean` | `false` | 否 | `rounded` | — |
|
|
3265
|
+
|
|
3266
|
+
**事件(emits)**
|
|
3267
|
+
|
|
3268
|
+
| 事件 | 参数 | 说明 |
|
|
3269
|
+
| ----------------- | ------------ | ---- |
|
|
3270
|
+
| `close` | `MouseEvent` | — |
|
|
3271
|
+
| `update:visible` | `boolean` | — |
|
|
3272
|
+
| `update:selected` | `boolean` | — |
|
|
3273
|
+
| `select` | `boolean` | — |
|
|
3274
|
+
|
|
3275
|
+
**插槽(slots)**
|
|
3276
|
+
|
|
3277
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
3278
|
+
| --------- | ---------- | --------------------------------- | ---- |
|
|
3279
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
3280
|
+
|
|
3281
|
+
**完整示例**:见 §5 通用展示组件 › ZlTag — 标签
|
|
3282
|
+
|
|
3283
|
+
#### `ZlText`
|
|
3284
|
+
|
|
3285
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlText/index.vue`</sub>
|
|
3286
|
+
|
|
3287
|
+
**简介**:纯文本展示:默认渲染 `modelValue`,也可用默认插槽覆盖内容
|
|
3288
|
+
|
|
3289
|
+
**接口概览**:1 props · 1 插槽
|
|
3290
|
+
|
|
3291
|
+
**用法示例**
|
|
3292
|
+
|
|
3293
|
+
```vue
|
|
3294
|
+
<script setup lang="ts">
|
|
3295
|
+
import { ZlText } from '@zl-ui-kit/components'
|
|
3296
|
+
</script>
|
|
3297
|
+
|
|
3298
|
+
<template>
|
|
3299
|
+
<ZlText model-value="文本内容" />
|
|
3300
|
+
</template>
|
|
3301
|
+
```
|
|
3302
|
+
|
|
3303
|
+
**插槽用法**
|
|
3304
|
+
|
|
3305
|
+
```vue
|
|
3306
|
+
<template>
|
|
3307
|
+
<ZlText>
|
|
3308
|
+
<template #default>…</template>
|
|
3309
|
+
</ZlText>
|
|
3310
|
+
</template>
|
|
3311
|
+
```
|
|
3312
|
+
|
|
3313
|
+
**props**
|
|
3314
|
+
|
|
3315
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
3316
|
+
| ------------ | ----------------------------- | ------ | ---- | --------------------------- | ---- |
|
|
3317
|
+
| `modelValue` | `string \| number \| boolean` | — | 否 | `:model-value="modelValue"` | — |
|
|
3318
|
+
|
|
3319
|
+
**插槽(slots)**
|
|
3320
|
+
|
|
3321
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
3322
|
+
| --------- | ---------- | --------------------------------- | ---- |
|
|
3323
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
3324
|
+
|
|
3325
|
+
#### `ZlTitle`
|
|
3326
|
+
|
|
3327
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlTitle/index.vue`</sub>
|
|
3328
|
+
|
|
3329
|
+
**简介**:区块标题
|
|
3330
|
+
|
|
3331
|
+
**接口概览**:5 props · 3 插槽
|
|
3332
|
+
|
|
3333
|
+
**用法示例**
|
|
3334
|
+
|
|
3335
|
+
```vue
|
|
3336
|
+
<script setup lang="ts">
|
|
3337
|
+
import { ZlTitle } from '@zl-ui-kit/components'
|
|
3338
|
+
</script>
|
|
3339
|
+
|
|
3340
|
+
<template>
|
|
3341
|
+
<ZlTitle title="页面标题" description="标题描述文案" tooltip="标题提示" />
|
|
3342
|
+
</template>
|
|
3343
|
+
```
|
|
3344
|
+
|
|
3345
|
+
**插槽用法**
|
|
3346
|
+
|
|
3347
|
+
```vue
|
|
3348
|
+
<template>
|
|
3349
|
+
<ZlTitle>
|
|
3350
|
+
<template #default>…</template>
|
|
3351
|
+
<template #description>…</template>
|
|
3352
|
+
<template #extra>…</template>
|
|
3353
|
+
</ZlTitle>
|
|
3354
|
+
</template>
|
|
3355
|
+
```
|
|
3356
|
+
|
|
3357
|
+
**props**
|
|
3358
|
+
|
|
3359
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
3360
|
+
| ------------- | -------------------------------- | ------ | ---- | ---------------------- | ---- |
|
|
3361
|
+
| `title` | `string` | — | 否 | `title="标题"` | — |
|
|
3362
|
+
| `description` | `string` | — | 否 | `description="副标题"` | — |
|
|
3363
|
+
| `marker` | `boolean` | `true` | 否 | `:marker="false"` | — |
|
|
3364
|
+
| `tooltip` | `string` | — | 否 | `tooltip="提示内容"` | — |
|
|
3365
|
+
| `size` | `'small' \| 'medium' \| 'large'` | — | 否 | `size="small"` | — |
|
|
3366
|
+
|
|
3367
|
+
**插槽(slots)**
|
|
3368
|
+
|
|
3369
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
3370
|
+
| ------------- | ---------- | ------------------------------------- | ---- |
|
|
3371
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
3372
|
+
| `description` | — | `<template #description>…</template>` | — |
|
|
3373
|
+
| `extra` | — | `<template #extra>…</template>` | — |
|
|
3374
|
+
|
|
3375
|
+
**完整示例**:见 §5 通用展示组件 › ZlTitle — 区块标题
|
|
3376
|
+
|
|
3377
|
+
#### `ZlUpload`
|
|
3378
|
+
|
|
3379
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlUpload/index.vue`</sub>
|
|
3380
|
+
|
|
3381
|
+
**简介**:传上传 service
|
|
3382
|
+
|
|
3383
|
+
**接口概览**:11 props · 1 事件 · 1 插槽
|
|
3384
|
+
|
|
3385
|
+
**用法示例**
|
|
3386
|
+
|
|
3387
|
+
```vue
|
|
3388
|
+
<script setup lang="ts">
|
|
3389
|
+
import { ZlUpload } from '@zl-ui-kit/components'
|
|
3390
|
+
</script>
|
|
3391
|
+
|
|
3392
|
+
<template>
|
|
3393
|
+
<ZlUpload :request="mockUpload" accept=".png,.jpg,.pdf" :max-size="5" :limit="3" style="max-width: 420px" />
|
|
3394
|
+
</template>
|
|
3395
|
+
```
|
|
3396
|
+
|
|
3397
|
+
> 示例中的 `request` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
3398
|
+
|
|
3399
|
+
**插槽用法**
|
|
3400
|
+
|
|
3401
|
+
```vue
|
|
3402
|
+
<template>
|
|
3403
|
+
<ZlUpload>
|
|
3404
|
+
<template #default>…</template>
|
|
3405
|
+
</ZlUpload>
|
|
3406
|
+
</template>
|
|
3407
|
+
```
|
|
3408
|
+
|
|
3409
|
+
**props**
|
|
3410
|
+
|
|
3411
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
3412
|
+
| -------------------- | --------------------------------------------------------------- | -------- | ---- | ----------------------------------------- | -------------------------------------------- |
|
|
3413
|
+
| `request` | `(form: FormData, config: Record<string, any>) => Promise<any>` | — | 否 | `:request="async () => {}"` | 自定义上传函数(form, config)→ Promise |
|
|
3414
|
+
| `modelValue` | `string \| any[]` | `''` | 否 | `v-model="value"` | `v-model` 绑定的值(`defineModel` 隐式声明) |
|
|
3415
|
+
| `accept` | `string` | — | 否 | `accept=".png,.jpg,.pdf"` | — |
|
|
3416
|
+
| `maxSize` | `number` | — | 否 | `:max-size="1"` | 单文件大小上限(MB) |
|
|
3417
|
+
| `limit` | `number` | — | 否 | `:limit="1"` | — |
|
|
3418
|
+
| `tip` | `string` | — | 否 | `tip="支持批量上传,单个文件不超过 10MB"` | — |
|
|
3419
|
+
| `separator` | `string` | `';'` | 否 | `separator=","` | 多路径分隔符(modelValue 为字符串时) |
|
|
3420
|
+
| `responseUrlKey` | `string` | `'meta'` | 否 | `response-url-key="url"` | 响应中文件地址的取值键 |
|
|
3421
|
+
| `showDownloadButton` | `boolean` | `true` | 否 | `:show-download-button="false"` | — |
|
|
3422
|
+
| `showTip` | `boolean` | `true` | 否 | `:show-tip="false"` | — |
|
|
3423
|
+
| `verifySpace` | `boolean` | `false` | 否 | `verify-space` | 校验文件名不得含空格 |
|
|
3424
|
+
|
|
3425
|
+
**事件(emits)**
|
|
3426
|
+
|
|
3427
|
+
| 事件 | 参数 | 说明 |
|
|
3428
|
+
| ------------------- | ----- | -------------- |
|
|
3429
|
+
| `update:modelValue` | `any` | `v-model` 更新 |
|
|
3430
|
+
|
|
3431
|
+
**插槽(slots)**
|
|
3432
|
+
|
|
3433
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
3434
|
+
| --------- | ---------- | --------------------------------- | ---- |
|
|
3435
|
+
| `default` | — | `<template #default>…</template>` | — |
|
|
3436
|
+
|
|
3437
|
+
**完整示例**:见 §6 数据型组件 + useRequest 体系(核心) › ⑥ ZlUpload —— 传上传 service
|
|
3438
|
+
|
|
3439
|
+
#### `ZlTree`
|
|
3440
|
+
|
|
3441
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlTree/index.vue`</sub>
|
|
3442
|
+
|
|
3443
|
+
**简介**:useRequest 绑定 data
|
|
3444
|
+
|
|
3445
|
+
**接口概览**:5 props · 3 插槽
|
|
3446
|
+
|
|
3447
|
+
**用法示例**
|
|
3448
|
+
|
|
3449
|
+
```vue
|
|
3450
|
+
<script setup lang="ts">
|
|
3451
|
+
import { ZlTree } from '@zl-ui-kit/components'
|
|
3452
|
+
</script>
|
|
3453
|
+
|
|
3454
|
+
<template>
|
|
3455
|
+
<ZlTree :data="treeData" :field-names="fieldNames" />
|
|
3456
|
+
</template>
|
|
3457
|
+
```
|
|
3458
|
+
|
|
3459
|
+
> 示例中的 `data`、`fieldNames` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
3460
|
+
|
|
3461
|
+
**插槽用法**
|
|
3462
|
+
|
|
3463
|
+
```vue
|
|
3464
|
+
<template>
|
|
3465
|
+
<ZlTree>
|
|
3466
|
+
<template #search-extra>…</template>
|
|
3467
|
+
<template #title="{ node, data }">…</template>
|
|
3468
|
+
<!-- 动态插槽:名字运行时取自 slot -->
|
|
3469
|
+
</ZlTree>
|
|
3470
|
+
</template>
|
|
3471
|
+
```
|
|
3472
|
+
|
|
3473
|
+
**props**
|
|
3474
|
+
|
|
3475
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
3476
|
+
| ------------------ | ----------------------------------------------------- | -------------------------------------------------------------- | ---- | ------------------------------ | ------------------------------------------------------- |
|
|
3477
|
+
| `fieldNames` | `{ key?: string; title?: string; children?: string }` | `() => ({ key: 'key', title: 'title', children: 'children' })` | 否 | `:field-names="{}"` | 字段映射(arco fieldNames 兼容:title→label、children) |
|
|
3478
|
+
| `inputSearchProps` | `Record<string, any>` | — | 否 | `:input-search-props="{}"` | 搜索框透传(el-input 属性) |
|
|
3479
|
+
| `filterTreeNode` | `(value: string, data: any) => boolean` | — | 否 | `:filter-tree-node="() => {}"` | 自定义过滤函数(缺省按 title 包含匹配) |
|
|
3480
|
+
| `disableFilter` | `boolean` | — | 否 | `disable-filter` | 关闭搜索框 |
|
|
3481
|
+
| `loading` | `boolean` | — | 否 | `loading` | — |
|
|
3482
|
+
|
|
3483
|
+
**插槽(slots)**
|
|
3484
|
+
|
|
3485
|
+
| 插槽 | 作用域参数 | 示例 | 说明 |
|
|
3486
|
+
| -------------- | ------------------------------ | ------------------------------------------------ | ---------------------------- |
|
|
3487
|
+
| `search-extra` | — | `<template #search-extra>…</template>` | — |
|
|
3488
|
+
| `title` | `v-bind="{ node, data }"` 展开 | `<template #title="{ node, data }">…</template>` | — |
|
|
3489
|
+
| `[slot]` | `v-bind="scope"` 展开 | `<template #[slot]="scope">…</template>` | 动态插槽:名字由该表达式决定 |
|
|
3490
|
+
|
|
3491
|
+
**完整示例**:见 §6 数据型组件 + useRequest 体系(核心) › ⑦ ZlTree —— useRequest 绑定 data
|
|
3492
|
+
|
|
3493
|
+
#### `ZlTreeSelect`
|
|
3494
|
+
|
|
3495
|
+
<sub>入口 `@zl-ui-kit/components` · 源码 `packages/components/src/components/ZlTreeSelect/index.vue`</sub>
|
|
3496
|
+
|
|
3497
|
+
**接口概览**:6 props · 1 事件
|
|
3498
|
+
|
|
3499
|
+
**用法示例**
|
|
3500
|
+
|
|
3501
|
+
```vue
|
|
3502
|
+
<script setup lang="ts">
|
|
3503
|
+
import { ZlTreeSelect } from '@zl-ui-kit/components'
|
|
3504
|
+
</script>
|
|
3505
|
+
|
|
3506
|
+
<template>
|
|
3507
|
+
<ZlTreeSelect :origin-tree-data="treeData" v-model="value" />
|
|
3508
|
+
</template>
|
|
3509
|
+
```
|
|
3510
|
+
|
|
3511
|
+
> 示例中的 `originTreeData` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
3512
|
+
|
|
3513
|
+
**props**
|
|
3514
|
+
|
|
3515
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
3516
|
+
| ------------------- | ----------------------------------------------------- | -------------------------------------------------------------- | ---- | ------------------------ | ------------------------------------------------ |
|
|
3517
|
+
| `modelValue` | `any` | — | 否 | `v-model="value"` | `v-model` 绑定的值(`defineModel` 隐式声明) |
|
|
3518
|
+
| `originTreeData` | `any[]` | — | 是 | `:origin-tree-data="[]"` | 树数据 |
|
|
3519
|
+
| `allName` | `string` | — | 否 | `all-name="全部"` | "全部"节点名(启用全选控制条) |
|
|
3520
|
+
| `labelInValue` | `boolean` | `false` | 否 | `label-in-value` | 返回 {label, value} 对象数组(缺省返回键值数组) |
|
|
3521
|
+
| `fieldNames` | `{ key?: string; title?: string; children?: string }` | `() => ({ key: 'key', title: 'title', children: 'children' })` | 否 | `:field-names="{}"` | — |
|
|
3522
|
+
| `treeCheckStrictly` | `boolean` | `false` | 否 | `tree-check-strictly` | 父子不关联 |
|
|
3523
|
+
|
|
3524
|
+
> 把 `$attrs` 透传给 `el-tree-select`,未列出的属性会继续下传
|
|
3525
|
+
|
|
3526
|
+
**事件(emits)**
|
|
3527
|
+
|
|
3528
|
+
| 事件 | 参数 | 说明 |
|
|
3529
|
+
| ------------------- | ----- | -------------- |
|
|
3530
|
+
| `update:modelValue` | `any` | `v-model` 更新 |
|
|
3531
|
+
|
|
3532
|
+
### 14.2 子路径入口组件(重型依赖,需单独安装)
|
|
3533
|
+
|
|
3534
|
+
#### `ZlChart`
|
|
3535
|
+
|
|
3536
|
+
<sub>入口 `@zl-ui-kit/components/chart` · 源码 `packages/components/src/components/ZlChart/index.vue` · ⚠️ 不在主入口,需从子路径 import,并自行安装对应 peer 依赖</sub>
|
|
3537
|
+
|
|
3538
|
+
**简介**:useDataRequest 解包后构建 option
|
|
3539
|
+
|
|
3540
|
+
**接口概览**:2 props · 1 暴露
|
|
3541
|
+
|
|
3542
|
+
**用法示例**
|
|
3543
|
+
|
|
3544
|
+
```vue
|
|
3545
|
+
<script setup lang="ts">
|
|
3546
|
+
import { ZlChart } from '@zl-ui-kit/components/chart'
|
|
3547
|
+
</script>
|
|
3548
|
+
|
|
3549
|
+
<template>
|
|
3550
|
+
<ZlChart :series="series" :x-axis="xAxis" :y-axis="{ type: 'value' }" style="width: 520px; height: 260px" />
|
|
3551
|
+
</template>
|
|
3552
|
+
```
|
|
3553
|
+
|
|
3554
|
+
> 示例中的 `series`、`xAxis`、`yAxis` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
3555
|
+
|
|
3556
|
+
**props**
|
|
3557
|
+
|
|
3558
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
3559
|
+
| -------- | --------------------------------------------------- | ------ | ---- | -------------- | ---------------------------------------------------------------------------------------------------------------- |
|
|
3560
|
+
| `series` | `Record<string, any> \| Array<Record<string, any>>` | — | 否 | `:series="{}"` | 系列(单对象或数组);其余图表配置经 attrs 透传(title/xAxis/yAxis/tooltip 等,可用 src/utils/echarts 工具构造) |
|
|
3561
|
+
| `theme` | `string` | — | 否 | `theme="dark"` | 主题名:先 `import 'echarts/theme/v5'` 之类注册主题,再传 `theme="v5"`。升级到 echarts 6 后想保持 v5 观感时用 |
|
|
3562
|
+
|
|
3563
|
+
**暴露(defineExpose)**
|
|
3564
|
+
|
|
3565
|
+
| 名称 | 说明 |
|
|
3566
|
+
| ------- | ---- |
|
|
3567
|
+
| `clear` | — |
|
|
3568
|
+
|
|
3569
|
+
**完整示例**:见 §6 数据型组件 + useRequest 体系(核心) › ⑧ ZlChart —— useDataRequest 解包后构建 option
|
|
3570
|
+
|
|
3571
|
+
#### `ZlEditor`
|
|
3572
|
+
|
|
3573
|
+
<sub>入口 `@zl-ui-kit/components/editor` · 源码 `packages/components/src/components/ZlEditor/index.vue` · ⚠️ 不在主入口,需从子路径 import,并自行安装对应 peer 依赖</sub>
|
|
3574
|
+
|
|
3575
|
+
**简介**:monaco worker 配置与首屏治理
|
|
3576
|
+
|
|
3577
|
+
**接口概览**:3 props · 1 事件
|
|
3578
|
+
|
|
3579
|
+
**用法示例**
|
|
3580
|
+
|
|
3581
|
+
```vue
|
|
3582
|
+
<script setup lang="ts">
|
|
3583
|
+
import { ZlEditor } from '@zl-ui-kit/components/editor'
|
|
3584
|
+
</script>
|
|
3585
|
+
|
|
3586
|
+
<template>
|
|
3587
|
+
<ZlEditor language="javascript" v-model="value" />
|
|
3588
|
+
</template>
|
|
3589
|
+
```
|
|
3590
|
+
|
|
3591
|
+
**props**
|
|
3592
|
+
|
|
3593
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
3594
|
+
| ------------ | --------------------- | -------------- | ---- | ----------------------- | -------------------------------------------- |
|
|
3595
|
+
| `modelValue` | `string` | `''` | 否 | `v-model="value"` | `v-model` 绑定的值(`defineModel` 隐式声明) |
|
|
3596
|
+
| `language` | `string` | `'javascript'` | 否 | `language="javascript"` | — |
|
|
3597
|
+
| `options` | `Record<string, any>` | `() => ({})` | 否 | `:options="{}"` | — |
|
|
3598
|
+
|
|
3599
|
+
**事件(emits)**
|
|
3600
|
+
|
|
3601
|
+
| 事件 | 参数 | 说明 |
|
|
3602
|
+
| ------------------- | -------- | -------------- |
|
|
3603
|
+
| `update:modelValue` | `string` | `v-model` 更新 |
|
|
3604
|
+
|
|
3605
|
+
**完整示例**:见 §9 文件与编辑 › 9.1 ZlEditor:monaco worker 配置与首屏治理
|
|
3606
|
+
|
|
3607
|
+
#### `ZlSqlEditor`
|
|
3608
|
+
|
|
3609
|
+
<sub>入口 `@zl-ui-kit/components/editor` · 源码 `packages/components/src/components/ZlEditor/ZlSqlEditor.vue` · ⚠️ 不在主入口,需从子路径 import,并自行安装对应 peer 依赖</sub>
|
|
3610
|
+
|
|
3611
|
+
**接口概览**:4 props · 1 事件
|
|
3612
|
+
|
|
3613
|
+
**用法示例**
|
|
3614
|
+
|
|
3615
|
+
```vue
|
|
3616
|
+
<script setup lang="ts">
|
|
3617
|
+
import { ZlSqlEditor } from '@zl-ui-kit/components/editor'
|
|
3618
|
+
</script>
|
|
3619
|
+
|
|
3620
|
+
<template>
|
|
3621
|
+
<ZlSqlEditor v-model="value" />
|
|
3622
|
+
</template>
|
|
3623
|
+
```
|
|
3624
|
+
|
|
3625
|
+
**props**
|
|
3626
|
+
|
|
3627
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
3628
|
+
| ----------------- | ------------------ | ---------- | ---- | ------------------------------- | -------------------------------------------- |
|
|
3629
|
+
| `modelValue` | `string` | — | 否 | `v-model="value"` | `v-model` 绑定的值(`defineModel` 隐式声明) |
|
|
3630
|
+
| `tableSchemas` | `SqlTableSchema[]` | `() => []` | 否 | `:table-schemas="tableSchemas"` | 表结构(补全提示) |
|
|
3631
|
+
| `customKeywords` | `string[]` | `() => []` | 否 | `:custom-keywords="[]"` | — |
|
|
3632
|
+
| `customFunctions` | `string[]` | `() => []` | 否 | `:custom-functions="[]"` | — |
|
|
3633
|
+
|
|
3634
|
+
> 把 `$attrs` 透传给 `ZlEditor`,未列出的属性会继续下传
|
|
3635
|
+
|
|
3636
|
+
**事件(emits)**
|
|
3637
|
+
|
|
3638
|
+
| 事件 | 参数 | 说明 |
|
|
3639
|
+
| ------------------- | -------- | -------------- |
|
|
3640
|
+
| `update:modelValue` | `string` | `v-model` 更新 |
|
|
3641
|
+
|
|
3642
|
+
#### `ZlFilePreview`
|
|
3643
|
+
|
|
3644
|
+
<sub>入口 `@zl-ui-kit/components/file-preview` · 源码 `packages/components/src/components/ZlFilePreview/index.vue` · ⚠️ 不在主入口,需从子路径 import,并自行安装对应 peer 依赖</sub>
|
|
3645
|
+
|
|
3646
|
+
**接口概览**:1 props
|
|
3647
|
+
|
|
3648
|
+
**用法示例**
|
|
3649
|
+
|
|
3650
|
+
```vue
|
|
3651
|
+
<script setup lang="ts">
|
|
3652
|
+
import { ZlFilePreview } from '@zl-ui-kit/components/file-preview'
|
|
3653
|
+
</script>
|
|
3654
|
+
|
|
3655
|
+
<template>
|
|
3656
|
+
<ZlFilePreview :url="inlineImage" />
|
|
3657
|
+
</template>
|
|
3658
|
+
```
|
|
3659
|
+
|
|
3660
|
+
> 示例中的 `url` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
3661
|
+
|
|
3662
|
+
**props**
|
|
3663
|
+
|
|
3664
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
3665
|
+
| ----- | -------- | ------ | ---- | ------------------------------------ | ---- |
|
|
3666
|
+
| `url` | `string` | — | 否 | `url="https://example.com/file.pdf"` | — |
|
|
3667
|
+
|
|
3668
|
+
#### `ZlFileViewer`
|
|
3669
|
+
|
|
3670
|
+
<sub>入口 `@zl-ui-kit/components/file-preview` · 源码 `packages/components/src/components/ZlFileViewer/index.vue` · ⚠️ 不在主入口,需从子路径 import,并自行安装对应 peer 依赖</sub>
|
|
3671
|
+
|
|
3672
|
+
**接口概览**:1 props
|
|
3673
|
+
|
|
3674
|
+
**用法示例**
|
|
3675
|
+
|
|
3676
|
+
```vue
|
|
3677
|
+
<script setup lang="ts">
|
|
3678
|
+
import { ZlFileViewer } from '@zl-ui-kit/components/file-preview'
|
|
3679
|
+
</script>
|
|
3680
|
+
|
|
3681
|
+
<template>
|
|
3682
|
+
<ZlFileViewer :file-type="'image'" :src="inlineImage" style="width: 200px" />
|
|
3683
|
+
</template>
|
|
3684
|
+
```
|
|
3685
|
+
|
|
3686
|
+
> 示例中的 `src` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
|
|
3687
|
+
|
|
3688
|
+
**props**
|
|
3689
|
+
|
|
3690
|
+
| 属性 | 类型 | 默认值 | 必填 | 示例 | 说明 |
|
|
3691
|
+
| ---------- | ------------------------------------------------ | -------- | ---- | ------------------ | ---- |
|
|
3692
|
+
| `fileType` | `'word' \| 'pdf' \| 'excel' \| 'ppt' \| 'image'` | `'word'` | 否 | `file-type="word"` | — |
|
|
3693
|
+
|
|
3694
|
+
> 把 `$attrs` 透传给 `VueOfficePdf`,未列出的属性会继续下传
|
|
3695
|
+
|
|
3696
|
+
### 14.3 公共类型声明(schema 用)
|
|
3697
|
+
|
|
3698
|
+
> 这些类型从 `packages/components/src/index.ts` 导出,宿主的 `columns` / `schema` / `actions` 等入参都按它们书写。启用 `strict` 时可直接获得类型提示。
|
|
3699
|
+
|
|
3700
|
+
#### `ActionItem`
|
|
3701
|
+
|
|
3702
|
+
<sub>源码 `packages/components/src/components/ZlAction/types.ts`</sub>
|
|
3703
|
+
|
|
3704
|
+
操作项模型(ZlActionList / ZlTable actions 列共用)
|
|
3705
|
+
|
|
3706
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
3707
|
+
| ------------ | ----------------------------- | ---- | --------------------------------------------------- |
|
|
3708
|
+
| `label` | `string` | 是 | 操作文案 |
|
|
3709
|
+
| `icon` | `string` | 否 | 图标(`zl:` 前缀走 ZlIcon,其余按 iconify/EP 规则) |
|
|
3710
|
+
| `iconProps` | `Record<string, any>` | 否 | 传给图标组件的 props |
|
|
3711
|
+
| `iconClass` | `string` | 否 | 图标自定义类名 |
|
|
3712
|
+
| `tooltip` | `boolean` | 否 | 是否用 tooltip 包住文案(文字过长时) |
|
|
3713
|
+
| `disabled` | `boolean` | 否 | 禁用(点击无响应) |
|
|
3714
|
+
| `divided` | `boolean` | 否 | 与下一项之间显示分割线 |
|
|
3715
|
+
| `permission` | `string \| string[]` | 否 | 权限键(三段式,经 usePermission 校验) |
|
|
3716
|
+
| `visible` | `(...args: any[]) => boolean` | 否 | 显隐判定(接收 visibleArgs) |
|
|
3717
|
+
| `handler` | `(...args: any[]) => void` | 否 | 点击处理(接收 actionArgs) |
|
|
3718
|
+
|
|
3719
|
+
#### `IComponent`
|
|
3720
|
+
|
|
3721
|
+
<sub>源码 `packages/components/src/components/ZlDynamicComponent/types.ts`</sub>
|
|
3722
|
+
|
|
3723
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
3724
|
+
| ----------- | ------------------------------------------------------------------------------- | ---- | ---- |
|
|
3725
|
+
| `component` | `string \| any` | 是 | — |
|
|
3726
|
+
| `class` | `string \| Record<string, boolean> \| Array<string \| Record<string, boolean>>` | 否 | — |
|
|
3727
|
+
| `style` | `string \| Record<string, boolean> \| Array<string \| Record<string, boolean>>` | 否 | — |
|
|
3728
|
+
| `model` | `string` | 否 | — |
|
|
3729
|
+
| `props` | `Record<string, any>` | 否 | — |
|
|
3730
|
+
| `domProps` | `Record<string, any>` | 否 | — |
|
|
3731
|
+
| `on` | `Record<string, (...args: any[]) => any>` | 否 | — |
|
|
3732
|
+
| `nativeOn` | `Record<string, (...args: any[]) => any>` | 否 | — |
|
|
3733
|
+
| `slots` | `IComponentSlot[]` | 否 | — |
|
|
3734
|
+
| `children` | `string \| VNode \| Array<string \| VNode>` | 否 | — |
|
|
3735
|
+
| `refInFor` | `boolean` | 否 | — |
|
|
3736
|
+
|
|
3737
|
+
#### `IComponentSlot`
|
|
3738
|
+
|
|
3739
|
+
<sub>源码 `packages/components/src/components/ZlDynamicComponent/types.ts`</sub>
|
|
3740
|
+
|
|
3741
|
+
> 继承自 `IComponent`:下表只列自有字段,父类型字段同样可用。
|
|
3742
|
+
|
|
3743
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
3744
|
+
| ------ | -------- | ---- | ---- |
|
|
3745
|
+
| `name` | `string` | 否 | — |
|
|
3746
|
+
|
|
3747
|
+
#### `VForSlot`
|
|
3748
|
+
|
|
3749
|
+
<sub>源码 `packages/components/src/components/ZlDynamicComponent/types.ts`</sub>
|
|
3750
|
+
|
|
3751
|
+
> 继承自 `IComponentSlot`:下表只列自有字段,父类型字段同样可用。
|
|
3752
|
+
|
|
3753
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
3754
|
+
| ------ | -------- | ---- | ---- |
|
|
3755
|
+
| `type` | `'vFor'` | 是 | — |
|
|
3756
|
+
| `data` | `Item[]` | 是 | — |
|
|
3757
|
+
|
|
3758
|
+
#### `VModelSlot`
|
|
3759
|
+
|
|
3760
|
+
<sub>源码 `packages/components/src/components/ZlDynamicComponent/types.ts`</sub>
|
|
3761
|
+
|
|
3762
|
+
> 继承自 `IComponentSlot`:下表只列自有字段,父类型字段同样可用。
|
|
3763
|
+
|
|
3764
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
3765
|
+
| ------ | ---------- | ---- | ---- |
|
|
3766
|
+
| `type` | `'vModel'` | 是 | — |
|
|
3767
|
+
|
|
3768
|
+
#### `IGridItem`
|
|
3769
|
+
|
|
3770
|
+
<sub>源码 `packages/components/src/components/ZlGrid/types.ts`</sub>
|
|
3771
|
+
|
|
3772
|
+
ZlGrid 子项 schema
|
|
3773
|
+
|
|
3774
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
3775
|
+
| ---------- | ---------------------------------------------------------------------------------- | ---- | ---------------------------------------------------------------------------- |
|
|
3776
|
+
| `label` | `string` | 是 | 字段标签 |
|
|
3777
|
+
| `key` | `string` | 是 | 取值字段名(同时作为插槽名 `#key`) |
|
|
3778
|
+
| `size` | `number \| 'auto'` | 否 | 跨列数('auto' 占满剩余列) |
|
|
3779
|
+
| `getValue` | `(data: Record<string, any>, key: string, item: IGridItem) => any` | 否 | 自定义取值(缺省按 key 从 data 取) |
|
|
3780
|
+
| `visible` | `boolean \| ((value: unknown, key: string, data: Record<string, any>) => boolean)` | 否 | 显隐判定 |
|
|
3781
|
+
| `dict` | `string \| { dictKey: string; simple?: boolean; showType?: boolean }` | 否 | 字典:字典 key,或 `{ dictKey, simple, showType }` 配置(走 ZlDictTag 翻译) |
|
|
3782
|
+
| `slot` | `boolean` | 否 | 是否启用具名插槽(#key)渲染 |
|
|
3783
|
+
| `ellipsis` | `number \| boolean` | 否 | 溢出省略行数(悬浮提示) |
|
|
3784
|
+
|
|
3785
|
+
#### `TableColumn`
|
|
3786
|
+
|
|
3787
|
+
<sub>源码 `packages/components/src/types.ts`</sub>
|
|
3788
|
+
|
|
3789
|
+
表格列定义:label/prop(或 dataIndex)/slot/actions/columnSlot + el-table-column 其余属性
|
|
3790
|
+
|
|
3791
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
3792
|
+
| ------------- | --------------------- | ---- | -------------------------------------------------- |
|
|
3793
|
+
| `label` | `string` | 否 | 列标题(优先于 title) |
|
|
3794
|
+
| `title` | `string` | 否 | 列标题(兼容 arco/antd 写法,label 缺省时生效) |
|
|
3795
|
+
| `prop` | `string` | 否 | 取值字段名(优先于 dataIndex) |
|
|
3796
|
+
| `dataIndex` | `string` | 否 | 取值字段名(兼容 arco/antd 写法,prop 缺省时生效) |
|
|
3797
|
+
| `slot` | `string \| boolean` | 否 | 单元格插槽名(缺省用 prop) |
|
|
3798
|
+
| `columnSlot` | `boolean` | 否 | 启用表头插槽(header-{prop}) |
|
|
3799
|
+
| `actions` | `ActionItem[]` | 否 | 操作列(渲染 ZlActionList) |
|
|
3800
|
+
| `actionProps` | `Record<string, any>` | 否 | 透传给操作列 ZlActionList 的 props |
|
|
3801
|
+
|
|
3802
|
+
#### `FormItem`
|
|
3803
|
+
|
|
3804
|
+
<sub>源码 `packages/components/src/types.ts`</sub>
|
|
3805
|
+
|
|
3806
|
+
表单项 schema(ZlForm / ZlSearch 共用)
|
|
3807
|
+
|
|
3808
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
3809
|
+
| --------------- | ---------------------------------------------------------------------- | ---- | --------------------------------------------------- |
|
|
3810
|
+
| `model` | `string` | 是 | 字段名(必填) |
|
|
3811
|
+
| `label` | `string` | 否 | 标签文案(缺省用 model) |
|
|
3812
|
+
| `component` | `string \| any` | 否 | 动态组件名/组件对象(如 'el-input'、ElSelect) |
|
|
3813
|
+
| `props` | `Record<string, any>` | 否 | 组件 props(自动包装 update:modelValue 回写 model) |
|
|
3814
|
+
| `slots` | `Record<string, any>` | 否 | 组件插槽 |
|
|
3815
|
+
| `defaultValue` | `any` | 否 | 默认值 |
|
|
3816
|
+
| `slot` | `boolean` | 否 | 是否启用具名插槽(#model)自定义渲染 |
|
|
3817
|
+
| `formItemProps` | `Record<string, any>` | 否 | el-form-item 其余属性(rules 等) |
|
|
3818
|
+
| `tooltip` | `string` | 否 | 标签旁的问号提示文案 |
|
|
3819
|
+
| `visible` | `boolean \| ((model: Record<string, any>, item: FormItem) => boolean)` | 否 | 显隐控制:布尔值或判定函数 |
|
|
3820
|
+
|
|
3821
|
+
#### `SearchItem`
|
|
3822
|
+
|
|
3823
|
+
<sub>源码 `packages/components/src/types.ts`</sub>
|
|
3824
|
+
|
|
3825
|
+
搜索项 schema(ZlSearch / ZlSearchTable)
|
|
3826
|
+
|
|
3827
|
+
> 继承自 `FormItem`:下表只列自有字段,父类型字段同样可用。
|
|
3828
|
+
|
|
3829
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
3830
|
+
| ---------- | --------------------------------------------------------------- | ---- | -------------------------------------- |
|
|
3831
|
+
| `toLabel` | `(value: any) => any` | 否 | 值 → 条件标签文本 |
|
|
3832
|
+
| `toParams` | `(value: any, acc: Record<string, any>) => Record<string, any>` | 否 | 值 → 查询参数(返回对象合并入 params) |
|
|
3833
|
+
|
|
3834
|
+
<!-- API:END -->
|