king-design-analyzer 2.1.9 → 2.2.1
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/components/actions.json +109 -0
- package/components/advancedset.json +128 -0
- package/components/affix.json +8 -0
- package/components/aksk.json +172 -0
- package/components/anchor.json +220 -0
- package/components/anchorlink.json +111 -0
- package/components/az.json +15 -2
- package/components/badge.json +8 -0
- package/components/billtypes.json +14 -2
- package/components/breadcrumb.json +9 -1
- package/components/button.json +192 -0
- package/components/buttonlink.json +74 -0
- package/components/card.json +14 -4
- package/components/cardcol.json +142 -0
- package/components/cardcols.json +121 -0
- package/components/cardcontent.json +20 -3
- package/components/cardtabs.json +172 -0
- package/components/carousel.json +7 -0
- package/components/cascader.json +576 -368
- package/components/checkbox.json +51 -4
- package/components/cidrinput.json +140 -0
- package/components/code.json +8 -1
- package/components/collapse.json +335 -341
- package/components/colorpicker.json +217 -0
- package/components/configprovider.json +96 -0
- package/components/copy.json +7 -0
- package/components/copyhover.json +111 -0
- package/components/copyrow.json +125 -0
- package/components/datepicker.json +656 -524
- package/components/description.json +98 -0
- package/components/descriptions.json +10 -3
- package/components/diagram.json +295 -0
- package/components/dialog.json +526 -455
- package/components/divider.json +9 -1
- package/components/drawer.json +603 -558
- package/components/dropdown.json +464 -384
- package/components/duration.json +125 -0
- package/components/editable.json +66 -0
- package/components/ellipsis.json +34 -1
- package/components/filtertablefieldsdialog.json +128 -0
- package/components/flex.json +152 -0
- package/components/form.json +143 -3
- package/components/formiteminput.json +214 -0
- package/components/formitemspinner.json +213 -0
- package/components/formitemswitch.json +185 -0
- package/components/formitemtableconfigs.json +210 -0
- package/components/grid.json +7 -0
- package/components/header.json +165 -0
- package/components/icon.json +13 -1
- package/components/icontooltip.json +19 -1
- package/components/input.json +196 -8
- package/components/instancelist.json +194 -0
- package/components/instancenum.json +196 -0
- package/components/ipinput.json +117 -0
- package/components/kspstatus.json +205 -0
- package/components/kvcode.json +120 -0
- package/components/layoutcontent.json +24 -3
- package/components/layoutlistcontent.json +157 -0
- package/components/layoutpermissioncontent.json +156 -0
- package/components/layoutstandardlist.json +276 -0
- package/components/layouttabs.json +168 -0
- package/components/lazymount.json +87 -0
- package/components/lazyteleport.json +119 -0
- package/components/menu.json +11 -3
- package/components/notification.json +351 -0
- package/components/pagination.json +12 -0
- package/components/paginationplus.json +30 -3
- package/components/password.json +121 -0
- package/components/popover.json +457 -437
- package/components/projects.json +129 -0
- package/components/protable.json +99 -8
- package/components/queuevisualrange.json +110 -0
- package/components/radio.json +82 -2
- package/components/rate.json +200 -0
- package/components/region.json +14 -2
- package/components/scrollselect.json +140 -0
- package/components/search.json +221 -0
- package/components/searchinput.json +132 -0
- package/components/searchitems.json +215 -0
- package/components/searchselect.json +195 -0
- package/components/select.json +749 -666
- package/components/sidebar.json +198 -0
- package/components/skeleton.json +234 -0
- package/components/slider.json +12 -2
- package/components/spin.json +10 -2
- package/components/spinner.json +419 -429
- package/components/split.json +263 -0
- package/components/sshkeys.json +138 -0
- package/components/status.json +60 -3
- package/components/steps.json +7 -0
- package/components/switch.json +12 -3
- package/components/table.json +24 -2
- package/components/tablecolumnid.json +14 -2
- package/components/tabs.json +14 -2
- package/components/tag.json +8 -5
- package/components/timeline.json +215 -0
- package/components/timepicker.json +147 -3
- package/components/timerange.json +262 -0
- package/components/tip.json +27 -0
- package/components/tooltip.json +492 -395
- package/components/tour.json +418 -372
- package/components/transfer.json +79 -8
- package/components/tree.json +28 -5
- package/components/treeselect.json +612 -475
- package/components/upload.json +474 -473
- package/components/vdialog.json +309 -0
- package/components/vdrawer.json +335 -0
- package/components/virtuallist.json +7 -0
- package/dist/ast/index.d.mts +65 -2
- package/dist/ast/index.d.ts +65 -2
- package/dist/ast/index.js +4 -3
- package/dist/ast/index.mjs +2 -1
- package/dist/chunk-4OTQAQ6J.mjs +341 -0
- package/dist/{chunk-F26GUCGG.js → chunk-4WXOYU2N.js} +32 -9
- package/dist/chunk-6HOIRUQB.mjs +409 -0
- package/dist/chunk-DHLWNT53.js +364 -0
- package/dist/{chunk-H2ET6MMM.mjs → chunk-IPJJMPOO.mjs} +155 -66
- package/dist/{chunk-WYSRJVX4.js → chunk-JJ6AB4ZH.js} +2 -2
- package/dist/{chunk-2W6OCG2S.js → chunk-JNRGUR3O.js} +155 -67
- package/dist/chunk-KF5YBEM5.js +143 -0
- package/dist/{chunk-OJOHB64C.mjs → chunk-LRTDTFFQ.mjs} +28 -5
- package/dist/{chunk-DSWKLUIX.mjs → chunk-NZL6T22V.mjs} +1 -1
- package/dist/chunk-QC6VTSA3.mjs +117 -0
- package/dist/chunk-V5N65MRP.js +411 -0
- package/dist/full/index.d.mts +2 -0
- package/dist/full/index.d.ts +2 -0
- package/dist/full/index.js +7 -6
- package/dist/full/index.mjs +5 -4
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +14 -13
- package/dist/index.mjs +6 -5
- package/dist/metadata/index.d.mts +38 -3
- package/dist/metadata/index.d.ts +38 -3
- package/dist/metadata/index.js +26 -16
- package/dist/metadata/index.mjs +26 -15
- package/dist/resolve-BsLBxlBi.d.mts +24 -0
- package/dist/resolve-BsLBxlBi.d.ts +24 -0
- package/dist/runtime/index.d.mts +2 -0
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.js +4 -4
- package/dist/runtime/index.mjs +2 -2
- package/dist/shared/index.d.mts +10 -0
- package/dist/shared/index.d.ts +10 -0
- package/dist/shared/index.js +23 -0
- package/dist/shared/index.mjs +2 -0
- package/dist/static/index.js +5 -5
- package/dist/static/index.mjs +2 -2
- package/docs_for_llm/actions.doc.md +87 -0
- package/docs_for_llm/advancedset.doc.md +98 -0
- package/docs_for_llm/affix.doc.md +20 -7
- package/docs_for_llm/aksk.doc.md +111 -0
- package/docs_for_llm/anchor.doc.md +155 -0
- package/docs_for_llm/anchorlink.doc.md +75 -0
- package/docs_for_llm/az.doc.md +17 -11
- package/docs_for_llm/badge.doc.md +11 -5
- package/docs_for_llm/billtypes.doc.md +17 -11
- package/docs_for_llm/breadcrumb.doc.md +80 -4
- package/docs_for_llm/button.doc.md +91 -18
- package/docs_for_llm/buttonlink.doc.md +64 -0
- package/docs_for_llm/card.doc.md +58 -8
- package/docs_for_llm/cardcol.doc.md +78 -0
- package/docs_for_llm/cardcols.doc.md +84 -0
- package/docs_for_llm/cardcontent.doc.md +31 -10
- package/docs_for_llm/cardtabs.doc.md +106 -0
- package/docs_for_llm/carousel.doc.md +79 -7
- package/docs_for_llm/cascader.doc.md +106 -23
- package/docs_for_llm/checkbox.doc.md +25 -13
- package/docs_for_llm/cidrinput.doc.md +83 -0
- package/docs_for_llm/code.doc.md +22 -11
- package/docs_for_llm/collapse.doc.md +147 -14
- package/docs_for_llm/colorpicker.doc.md +104 -0
- package/docs_for_llm/configprovider.doc.md +77 -0
- package/docs_for_llm/copy.doc.md +15 -13
- package/docs_for_llm/copyhover.doc.md +59 -0
- package/docs_for_llm/copyrow.doc.md +80 -0
- package/docs_for_llm/datepicker.doc.md +66 -35
- package/docs_for_llm/description.doc.md +75 -0
- package/docs_for_llm/descriptions.doc.md +122 -10
- package/docs_for_llm/diagram.doc.md +343 -0
- package/docs_for_llm/dialog.doc.md +97 -77
- package/docs_for_llm/divider.doc.md +14 -7
- package/docs_for_llm/drawer.doc.md +114 -69
- package/docs_for_llm/dropdown.doc.md +290 -22
- package/docs_for_llm/duration.doc.md +76 -0
- package/docs_for_llm/editable.doc.md +36 -14
- package/docs_for_llm/ellipsis.doc.md +10 -5
- package/docs_for_llm/filtertablefieldsdialog.doc.md +99 -0
- package/docs_for_llm/flex.doc.md +83 -0
- package/docs_for_llm/form.doc.md +196 -18
- package/docs_for_llm/formiteminput.doc.md +128 -0
- package/docs_for_llm/formitemspinner.doc.md +105 -0
- package/docs_for_llm/formitemswitch.doc.md +113 -0
- package/docs_for_llm/formitemtableconfigs.doc.md +95 -0
- package/docs_for_llm/grid.doc.md +78 -5
- package/docs_for_llm/header.doc.md +114 -0
- package/docs_for_llm/icon.doc.md +12 -8
- package/docs_for_llm/icontooltip.doc.md +121 -0
- package/docs_for_llm/input.doc.md +199 -41
- package/docs_for_llm/instancelist.doc.md +113 -0
- package/docs_for_llm/instancenum.doc.md +95 -0
- package/docs_for_llm/ipinput.doc.md +77 -0
- package/docs_for_llm/kspstatus.doc.md +82 -0
- package/docs_for_llm/kvcode.doc.md +76 -0
- package/docs_for_llm/layoutcontent.doc.md +54 -17
- package/docs_for_llm/layoutlistcontent.doc.md +168 -0
- package/docs_for_llm/layoutpermissioncontent.doc.md +93 -0
- package/docs_for_llm/layoutstandardlist.doc.md +129 -0
- package/docs_for_llm/layouttabs.doc.md +101 -0
- package/docs_for_llm/lazymount.doc.md +82 -0
- package/docs_for_llm/lazyteleport.doc.md +85 -0
- package/docs_for_llm/menu.doc.md +139 -14
- package/docs_for_llm/message.doc.md +93 -10
- package/docs_for_llm/notification.doc.md +214 -0
- package/docs_for_llm/pagination.doc.md +30 -17
- package/docs_for_llm/paginationplus.doc.md +31 -10
- package/docs_for_llm/password.doc.md +86 -0
- package/docs_for_llm/popover.doc.md +24 -55
- package/docs_for_llm/progress.doc.md +13 -10
- package/docs_for_llm/projects.doc.md +91 -0
- package/docs_for_llm/protable.doc.md +98 -15
- package/docs_for_llm/queuevisualrange.doc.md +78 -0
- package/docs_for_llm/radio.doc.md +23 -8
- package/docs_for_llm/rate.doc.md +127 -0
- package/docs_for_llm/region.doc.md +25 -13
- package/docs_for_llm/scrollselect.doc.md +90 -0
- package/docs_for_llm/search.doc.md +120 -0
- package/docs_for_llm/searchinput.doc.md +111 -0
- package/docs_for_llm/searchitems.doc.md +116 -0
- package/docs_for_llm/searchselect.doc.md +126 -0
- package/docs_for_llm/select.doc.md +208 -49
- package/docs_for_llm/sidebar.doc.md +133 -0
- package/docs_for_llm/skeleton.doc.md +152 -0
- package/docs_for_llm/slider.doc.md +42 -22
- package/docs_for_llm/spin.doc.md +18 -6
- package/docs_for_llm/spinner.doc.md +28 -18
- package/docs_for_llm/split.doc.md +170 -0
- package/docs_for_llm/sshkeys.doc.md +88 -0
- package/docs_for_llm/status.doc.md +14 -9
- package/docs_for_llm/steps.doc.md +81 -7
- package/docs_for_llm/switch.doc.md +32 -16
- package/docs_for_llm/table.doc.md +317 -55
- package/docs_for_llm/tablecolumnid.doc.md +36 -16
- package/docs_for_llm/tabs.doc.md +117 -12
- package/docs_for_llm/tag.doc.md +167 -15
- package/docs_for_llm/timeline.doc.md +187 -0
- package/docs_for_llm/timepicker.doc.md +74 -36
- package/docs_for_llm/timerange.doc.md +157 -0
- package/docs_for_llm/tip.doc.md +50 -11
- package/docs_for_llm/tooltip.doc.md +99 -27
- package/docs_for_llm/tour.doc.md +125 -28
- package/docs_for_llm/transfer.doc.md +99 -33
- package/docs_for_llm/tree.doc.md +129 -24
- package/docs_for_llm/treeselect.doc.md +101 -44
- package/docs_for_llm/upload.doc.md +63 -32
- package/docs_for_llm/useCRUD.doc.md +49 -0
- package/docs_for_llm/useCountdown.doc.md +43 -0
- package/docs_for_llm/useDetail.doc.md +48 -0
- package/docs_for_llm/useDialog.doc.md +46 -0
- package/docs_for_llm/useEntity.doc.md +45 -0
- package/docs_for_llm/useEventListener.doc.md +44 -0
- package/docs_for_llm/useFalseUntilTruthy.doc.md +41 -0
- package/docs_for_llm/useGetCopyAuthText.doc.md +35 -0
- package/docs_for_llm/useGetUserPermission.doc.md +43 -0
- package/docs_for_llm/useGroup.doc.md +48 -0
- package/docs_for_llm/useIdEntities.doc.md +48 -0
- package/docs_for_llm/useIdEntity.doc.md +103 -0
- package/docs_for_llm/useInterval.doc.md +43 -0
- package/docs_for_llm/useLayoutStandardList.doc.md +38 -0
- package/docs_for_llm/useMessage.doc.md +46 -0
- package/docs_for_llm/useModifyCache.doc.md +37 -0
- package/docs_for_llm/useOpenDialog.doc.md +41 -0
- package/docs_for_llm/usePagination.doc.md +60 -0
- package/docs_for_llm/usePersist.doc.md +54 -0
- package/docs_for_llm/usePoll.doc.md +41 -0
- package/docs_for_llm/useRoutePlus.doc.md +34 -0
- package/docs_for_llm/useRouterPlus.doc.md +34 -0
- package/docs_for_llm/useSearch.doc.md +68 -0
- package/docs_for_llm/useShell.doc.md +43 -0
- package/docs_for_llm/useSkip.doc.md +41 -0
- package/docs_for_llm/useStorageIdEntity.doc.md +46 -0
- package/docs_for_llm/useStore.doc.md +34 -0
- package/docs_for_llm/useTable.doc.md +57 -0
- package/docs_for_llm/useTableGroup.doc.md +47 -0
- package/docs_for_llm/useTableSort.doc.md +40 -0
- package/docs_for_llm/useToState.doc.md +112 -0
- package/docs_for_llm/useUser.doc.md +38 -0
- package/docs_for_llm/useValidForm.doc.md +41 -0
- package/docs_for_llm/vdialog.doc.md +154 -0
- package/docs_for_llm/vdrawer.doc.md +148 -0
- package/docs_for_llm/virtuallist.doc.md +157 -3
- package/hooks/useCRUD.json +61 -0
- package/hooks/useCountdown.json +49 -0
- package/hooks/useDetail.json +67 -0
- package/hooks/useDialog.json +49 -0
- package/hooks/useEntity.json +61 -0
- package/hooks/useEventListener.json +61 -0
- package/hooks/useFalseUntilTruthy.json +43 -0
- package/hooks/useGetCopyAuthText.json +36 -0
- package/hooks/useGetUserPermission.json +55 -0
- package/hooks/useGroup.json +49 -0
- package/hooks/useIdEntities.json +61 -0
- package/hooks/useInterval.json +55 -0
- package/hooks/useLayoutStandardList.json +36 -0
- package/hooks/useMessage.json +73 -0
- package/hooks/useModifyCache.json +36 -0
- package/hooks/useOpenDialog.json +43 -0
- package/hooks/usePagination.json +49 -0
- package/hooks/usePersist.json +61 -0
- package/hooks/usePoll.json +43 -0
- package/hooks/useRoutePlus.json +36 -0
- package/hooks/useRouterPlus.json +36 -0
- package/hooks/useSearch.json +56 -0
- package/hooks/useShell.json +49 -0
- package/hooks/useSkip.json +43 -0
- package/hooks/useStorageIdEntity.json +67 -0
- package/hooks/useStore.json +36 -0
- package/hooks/useTable.json +49 -0
- package/hooks/useTableGroup.json +43 -0
- package/hooks/useTableSort.json +43 -0
- package/hooks/useUser.json +36 -0
- package/hooks/useValidForm.json +43 -0
- package/package.json +14 -8
- package/dist/chunk-D3Y6FGWA.js +0 -153
- package/dist/chunk-HPAUCD5I.js +0 -156
- package/dist/chunk-L4DS3EXI.mjs +0 -133
- package/dist/chunk-NZ6TLWMD.mjs +0 -151
|
@@ -12,75 +12,132 @@ import { TreeSelect } from '@king-design/vue';
|
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
## 属性 (Props)
|
|
15
|
-
| 属性名 | 类型 | 默认值 | 必填 | 说明 | 示例 |
|
|
16
|
-
| --- | --- | --- | --- | --- | --- |
|
|
17
|
-
| value | `any` | `""` | 否 | 当前选择的值,可用 v-model 双向绑定 | `<TreeSelect v-model="value"
|
|
18
|
-
| data | `TreeDataItem[]` | `undefined` | 是 | 要渲染的树形数据 | `<TreeSelect :data="treeData"
|
|
19
|
-
| multiple | `boolean` | `false` | 否 | 是否支持多选 | `<TreeSelect multiple
|
|
20
|
-
| checkbox | `boolean` | `false` | 否 | 是否展示复选框 | `<TreeSelect checkbox
|
|
21
|
-
| uncorrelated | `boolean` | `false` | 否 | 父子 checkbox 选中状态是否互不关联 | `<TreeSelect checkbox uncorrelated
|
|
22
|
-
| filterable | `boolean` | `false` | 否 | 是否支持筛选 | `<TreeSelect filterable
|
|
23
|
-
| filter | `(keywords: string, data: TreeDataItem) => boolean` | `undefined` | 否 | 自定义筛选规则函数 | `<TreeSelect filterable :filter="customFilter"
|
|
24
|
-
| load | `(node: TreeNode) => Promise<void> | void` | `undefined` | 否 | 异步加载节点数据的函数 | `<TreeSelect :load="loadData"
|
|
25
|
-
| defaultExpandAll | `boolean` | `false` | 否 | 是否默认展开所有节点 | `<TreeSelect defaultExpandAll
|
|
26
|
-
| showLine | `boolean` | `true` | 否 | 是否展示 Tree 的对齐线 | `<TreeSelect :showLine="false"
|
|
27
|
-
| disabled | `boolean` | `false` | 否 | 是否禁用 | `<TreeSelect disabled
|
|
28
|
-
|
|
|
29
|
-
|
|
|
30
|
-
|
|
|
31
|
-
|
|
|
32
|
-
|
|
|
33
|
-
|
|
|
34
|
-
|
|
|
35
|
-
|
|
|
36
|
-
|
|
|
15
|
+
| 属性名 | 类型 | 默认值 | 必填 | 说明 | 标签 | 示例 |
|
|
16
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
17
|
+
| value | `any` | `""` | 否 | 当前选择的值,可用 v-model 双向绑定 | - | `<TreeSelect v-model="value">` |
|
|
18
|
+
| data | `TreeDataItem[]` | `undefined` | 是 | 要渲染的树形数据 | - | `<TreeSelect :data="treeData">` |
|
|
19
|
+
| multiple | `boolean` | `false` | 否 | 是否支持多选 | - | `<TreeSelect multiple>` |
|
|
20
|
+
| checkbox | `boolean` | `false` | 否 | 是否展示复选框 | - | `<TreeSelect checkbox>` |
|
|
21
|
+
| uncorrelated | `boolean` | `false` | 否 | 父子 checkbox 选中状态是否互不关联 | - | `<TreeSelect checkbox uncorrelated>` |
|
|
22
|
+
| filterable | `boolean` | `false` | 否 | 是否支持筛选 | - | `<TreeSelect filterable>` |
|
|
23
|
+
| filter | `(keywords: string, data: TreeDataItem) => boolean` | `undefined` | 否 | 自定义筛选规则函数 | - | `<TreeSelect filterable :filter="customFilter">` |
|
|
24
|
+
| load | `(node: TreeNode) => Promise<void> | void` | `undefined` | 否 | 异步加载节点数据的函数 | - | `<TreeSelect :load="loadData">` |
|
|
25
|
+
| defaultExpandAll | `boolean` | `false` | 否 | 是否默认展开所有节点 | - | `<TreeSelect defaultExpandAll>` |
|
|
26
|
+
| showLine | `boolean` | `true` | 否 | 是否展示 Tree 的对齐线 | - | `<TreeSelect :showLine="false">` |
|
|
27
|
+
| disabled | `boolean` | `false` | 否 | 是否禁用 | - | `<TreeSelect disabled>` |
|
|
28
|
+
| name | `string` | `undefined` | 否 | 表单元素的 name 属性 | - | `<TreeSelect name="node">` |
|
|
29
|
+
| clearable | `boolean` | `false` | 否 | 是否可清空 | - | `<TreeSelect clearable>` |
|
|
30
|
+
| loading | `boolean` | `false` | 否 | 数据加载状态 | - | `<TreeSelect :loading="isLoading">` |
|
|
31
|
+
| size | `"large" | "default" | "small" | "mini"` | `"default"` | 否 | 尺寸 | - | `<TreeSelect size="small">` |
|
|
32
|
+
| placeholder | `string` | `"请选择"` | 否 | 占位文案 | - | `<TreeSelect placeholder="请选择节点">` |
|
|
33
|
+
| fluid | `boolean` | `false` | 否 | 是否宽度 100% | - | `<TreeSelect fluid>` |
|
|
34
|
+
| width | `number | string` | `undefined` | 否 | 指定宽度,自动添加单位 px | - | `<TreeSelect :width="300">` |
|
|
35
|
+
| container | `string | ((parentDom: Element, anchor: Node | null) => Element)` | `undefined` | 否 | 指定弹出菜单追加的位置,默认 Dialog 组件会追加到 Dialog 中,其他追加到 body | - | `<TreeSelect :container="() => document.body">` |
|
|
36
|
+
| hideIcon | `boolean` | `false` | 否 | 是否隐藏后面的图标 | - | `<TreeSelect hideIcon>` |
|
|
37
|
+
| inline | `boolean` | `false` | 否 | 是否展示内联模式 | - | `<TreeSelect inline>` |
|
|
38
|
+
| flat | `boolean` | `false` | 否 | 是否展示扁平样式 | - | `<TreeSelect flat>` |
|
|
39
|
+
| show | `boolean` | `false` | 否 | 是否展示菜单项(受控模式) | - | `<TreeSelect :show="visible">` |
|
|
40
|
+
| position | `Position | "left" | "bottom" | "right" | "top"` | `{my: 'left top+8', at: 'left bottom'}` | 否 | 菜单弹出的位置 | - | `<TreeSelect position="top">` |
|
|
41
|
+
| nowrap | `boolean` | `false` | 否 | 选中值区域是否不换行展示,适合单行紧凑布局 | - | `<TreeSelect nowrap>` |
|
|
42
|
+
| draggable | `boolean` | `false` | 否 | 多选值是否支持拖动排序 | - | `<TreeSelect multiple draggable>` |
|
|
43
|
+
| virtual | `boolean` | `false` | 否 | 是否开启虚拟列表,用于大数据量场景 | - | `<TreeSelect virtual>` |
|
|
37
44
|
|
|
38
45
|
## 事件 (Events)
|
|
39
46
|
| 事件名 | Vue事件名 | 说明 | 回调参数 | 示例 |
|
|
40
47
|
| --- | --- | --- | --- | --- |
|
|
41
|
-
| show | `@show` | 菜单弹出时触发 | `-` | `<TreeSelect @show="handleShow"
|
|
42
|
-
| hide | `@hide` | 菜单隐藏时触发 | `-` | `<TreeSelect @hide="handleHide"
|
|
43
|
-
|
|
44
|
-
### 事件处理函数示例
|
|
45
|
-
**show**:
|
|
46
|
-
```typescript
|
|
47
|
-
const handleShow = () => {
|
|
48
|
-
console.log('下拉菜单已打开');
|
|
49
|
-
};
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
**hide**:
|
|
53
|
-
```typescript
|
|
54
|
-
const handleHide = () => {
|
|
55
|
-
console.log('下拉菜单已关闭');
|
|
56
|
-
};
|
|
57
|
-
```
|
|
48
|
+
| show | `@show` | 菜单弹出时触发 | `-` | `<TreeSelect @show="handleShow">` |
|
|
49
|
+
| hide | `@hide` | 菜单隐藏时触发 | `-` | `<TreeSelect @hide="handleHide">` |
|
|
58
50
|
|
|
59
51
|
## 插槽 (Slots)
|
|
60
52
|
| 插槽名 | 说明 | 模板写法 | 示例 |
|
|
61
53
|
| --- | --- | --- | --- |
|
|
62
|
-
| value |
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
54
|
+
| value | 自定义单选模式下的已选值展示内容 | `#value="[value, label]"` | `<TreeSelect v-model="value" :data="treeData">
|
|
55
|
+
<template #value="[value, label]">
|
|
56
|
+
<span>{{ label }} ({{ value }})</span>
|
|
57
|
+
</template>
|
|
58
|
+
</TreeSelect>` |
|
|
59
|
+
| values | 自定义多选模式下的已选值展示内容 | `#values="[values, labels]"` | `<TreeSelect v-model="values" :data="treeData" multiple>
|
|
60
|
+
<template #values="[values, labels]">
|
|
61
|
+
<span>已选 {{ labels.length }} 项</span>
|
|
62
|
+
</template>
|
|
63
|
+
</TreeSelect>` |
|
|
64
|
+
| prefix | 扩展选择框前缀内容 | `#prefix` | `<TreeSelect :data="treeData">
|
|
65
|
+
<template #prefix>
|
|
66
|
+
<span class="k-icon-search"></span>
|
|
67
|
+
</template>
|
|
68
|
+
</TreeSelect>` |
|
|
69
|
+
| suffix | 扩展选择框后缀内容 | `#suffix` | `<TreeSelect :data="treeData">
|
|
70
|
+
<template #suffix>
|
|
71
|
+
<span class="suffix-tip">树</span>
|
|
72
|
+
</template>
|
|
73
|
+
</TreeSelect>` |
|
|
74
|
+
|
|
75
|
+
### 插槽参数说明
|
|
76
|
+
**value**
|
|
77
|
+
|
|
78
|
+
- 参数结构: #value="[value, label]"
|
|
79
|
+
- 参数列表: `value: K`、`label: string`
|
|
80
|
+
|
|
81
|
+
**values**
|
|
82
|
+
|
|
83
|
+
- 参数结构: #values="[values, labels]"
|
|
84
|
+
- 参数列表: `values: K[]`、`labels: string[]`
|
|
85
|
+
|
|
86
|
+
**prefix**
|
|
87
|
+
|
|
88
|
+
- 参数结构: 无参数
|
|
89
|
+
|
|
90
|
+
**suffix**
|
|
91
|
+
|
|
92
|
+
- 参数结构: 无参数
|
|
67
93
|
|
|
68
94
|
## 方法 (Methods)
|
|
69
95
|
| 方法名 | 说明 | 参数 | 返回值 |
|
|
70
96
|
| --- | --- | --- | --- |
|
|
97
|
+
| show | 主动展开下拉树面板。 | `-` | `void` |
|
|
98
|
+
| hide | 主动关闭下拉树面板。 | `-` | `void` |
|
|
99
|
+
| position | 重新计算下拉树面板的位置。 | `-` | `void` |
|
|
71
100
|
| expandAll | 展开所有节点 | `-` | `void` |
|
|
72
101
|
|
|
102
|
+
### 方法调用示例
|
|
103
|
+
**show**
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
treeSelectRef.value?.show();
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**hide**
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
treeSelectRef.value?.hide();
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**position**
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
treeSelectRef.value?.position();
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**expandAll**
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
treeSelectRef.value?.expandAll();
|
|
125
|
+
```
|
|
126
|
+
|
|
73
127
|
## 常见错误与正确用法 (Anti-Hallucination)
|
|
128
|
+
### data 中缺少 key 属性
|
|
74
129
|
> **错误用法**: `const data = [{ label: '节点1' }]; // 缺少 key`
|
|
75
130
|
> **正确写法**: `const data = [{ label: '节点1', key: 'node1' }];`
|
|
76
131
|
> **说明**: 每个节点必须有唯一的 key 属性,key 同时也是选中时的取值
|
|
77
132
|
|
|
133
|
+
### 多选时 value 类型错误
|
|
78
134
|
> **错误用法**: `const value = ref('');
|
|
79
135
|
<TreeSelect v-model="value" multiple />`
|
|
80
136
|
> **正确写法**: `const values = ref<string[]>([]);
|
|
81
137
|
<TreeSelect v-model="values" multiple />`
|
|
82
138
|
> **说明**: multiple 模式下 value 必须是数组类型
|
|
83
139
|
|
|
140
|
+
### 混淆 checkbox 和 multiple
|
|
84
141
|
> **错误用法**: `<TreeSelect checkbox multiple /> <!-- 通常不需要同时使用 -->`
|
|
85
142
|
> **正确写法**: `<TreeSelect checkbox /> <!-- checkbox 已隐含多选 -->`
|
|
86
143
|
> **说明**: checkbox 模式已经支持多选,通常不需要同时设置 multiple
|
|
@@ -12,74 +12,105 @@ import { Upload } from '@king-design/vue';
|
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
## 属性 (Props)
|
|
15
|
-
| 属性名 | 类型 | 默认值 | 必填 | 说明 | 示例 |
|
|
16
|
-
| --- | --- | --- | --- | --- | --- |
|
|
17
|
-
| action | `string` | `undefined` | 是 | 上传地址 | `<Upload action="/api/upload" />` |
|
|
18
|
-
| files | `UploadFile[]` | `[]` | 否 | 已上传和待上传的文件列表,可用 v-model:files 双向绑定 | `<Upload v-model:files="fileList" />` |
|
|
19
|
-
|
|
|
20
|
-
|
|
|
21
|
-
|
|
|
22
|
-
|
|
|
23
|
-
|
|
|
24
|
-
|
|
|
25
|
-
|
|
|
26
|
-
|
|
|
27
|
-
|
|
|
28
|
-
|
|
|
29
|
-
|
|
|
30
|
-
|
|
|
31
|
-
|
|
|
32
|
-
|
|
|
15
|
+
| 属性名 | 类型 | 默认值 | 必填 | 说明 | 标签 | 示例 |
|
|
16
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
17
|
+
| action | `string` | `undefined` | 是 | 上传地址 | - | `<Upload action="/api/upload" />` |
|
|
18
|
+
| files | `UploadFile[]` | `[]` | 否 | 已上传和待上传的文件列表,可用 v-model:files 双向绑定 | - | `<Upload v-model:files="fileList" />` |
|
|
19
|
+
| defaultFiles | `(Partial<UploadFile> & Pick<UploadFile, 'name' | 'url'>)[]` | `[]` | 否 | 默认文件列表,用于初始化已上传文件,不与 files 双向绑定 | - | `<Upload :defaultFiles="[{ name: 'demo.png', url: 'https://example.com/demo.png' }]" />` |
|
|
20
|
+
| type | `"select" | "drag" | "gallery"` | `"select"` | 否 | 组件风格 | - | `<Upload type="drag" />` |
|
|
21
|
+
| accept | `string` | `undefined` | 否 | 支持上传的文件类型 | - | `<Upload accept=".jpg, .png, .gif" />` |
|
|
22
|
+
| multiple | `boolean` | `false` | 否 | 是否支持多选文件 | - | `<Upload multiple />` |
|
|
23
|
+
| maxSize | `number` | `undefined` | 否 | 最大上传文件大小限制(kb) | - | `<Upload :maxSize="500" />` |
|
|
24
|
+
| limit | `number` | `undefined` | 否 | 最大上传文件数量限制 | - | `<Upload :limit="5" />` |
|
|
25
|
+
| autoUpload | `boolean` | `true` | 否 | 是否选择文件后自动上传 | - | `<Upload :autoUpload="false" />` |
|
|
26
|
+
| beforeUpload | `(file: UploadFile, files: UploadFile[]) => boolean | Promise<boolean>` | `undefined` | 否 | 上传前的回调函数,返回 false 取消上传,支持异步 | - | `<Upload :beforeUpload="handleBeforeUpload" />` |
|
|
27
|
+
| beforeRemove | `(file: UploadFile, files: UploadFile[]) => boolean | Promise<boolean>` | `undefined` | 否 | 删除前的回调函数,返回 false 取消删除,支持异步 | - | `<Upload :beforeRemove="handleBeforeRemove" />` |
|
|
28
|
+
| data | `object | ((file: UploadFile) => object)` | `undefined` | 否 | 上传附加的请求数据,可以是对象或函数 | - | `<Upload :data="{userId: '123'}" />` |
|
|
29
|
+
| headers | `Record<string, string>` | `undefined` | 否 | 上传的请求头 | - | `<Upload :headers="{Authorization: 'Bearer token'}" />` |
|
|
30
|
+
| name | `string` | `undefined` | 否 | 上传文件字段名 | - | `<Upload name="file" />` |
|
|
31
|
+
| withCredentials | `boolean` | `false` | 否 | 跨域请求是否允许传送 cookie | - | `<Upload withCredentials />` |
|
|
32
|
+
| directory | `boolean` | `false` | 否 | 是否支持上传文件夹 | - | `<Upload directory />` |
|
|
33
|
+
| disabled | `boolean` | `false` | 否 | 是否禁用上传 | - | `<Upload disabled />` |
|
|
33
34
|
|
|
34
35
|
## 事件 (Events)
|
|
35
36
|
| 事件名 | Vue事件名 | 说明 | 回调参数 | 示例 |
|
|
36
37
|
| --- | --- | --- | --- | --- |
|
|
37
|
-
| progress | `@progress` | 文件上传过程中触发 | `event: ProgressEvent, xhr: XMLHttpRequest, file: UploadFile, files: UploadFile[]` | `<Upload @progress="handleProgress"
|
|
38
|
-
| success | `@success` | 文件上传成功时触发 | `res: any, xhr: XMLHttpRequest, file: UploadFile, files: UploadFile[]` | `<Upload @success="handleSuccess"
|
|
39
|
-
| error | `@error` | 文件超出限制或上传失败时触发 | `err: Error | RequestError, file: File | File[] | UploadFile, files: UploadFile[]` | `<Upload @error="handleError"
|
|
38
|
+
| progress | `@progress` | 文件上传过程中触发 | `event: ProgressEvent, xhr: XMLHttpRequest, file: UploadFile, files: UploadFile[]` | `<Upload @progress="handleProgress">` |
|
|
39
|
+
| success | `@success` | 文件上传成功时触发 | `res: any, xhr: XMLHttpRequest, file: UploadFile, files: UploadFile[]` | `<Upload @success="handleSuccess">` |
|
|
40
|
+
| error | `@error` | 文件超出限制或上传失败时触发 | `err: Error | RequestError, file: File | File[] | UploadFile, files: UploadFile[]` | `<Upload @error="handleError">` |
|
|
40
41
|
|
|
41
|
-
###
|
|
42
|
-
**progress
|
|
42
|
+
### 事件参数说明
|
|
43
|
+
**progress**
|
|
44
|
+
|
|
45
|
+
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
46
|
+
| --- | --- | --- | --- | --- |
|
|
47
|
+
| event | `ProgressEvent` | 是 | - | 进度事件 |
|
|
48
|
+
| xhr | `XMLHttpRequest` | 是 | - | 请求对象 |
|
|
49
|
+
| file | `UploadFile` | 是 | - | 当前文件 |
|
|
50
|
+
| files | `UploadFile[]` | 是 | - | 所有文件列表 |
|
|
51
|
+
|
|
52
|
+
事件处理示例:
|
|
43
53
|
```typescript
|
|
44
54
|
const handleProgress = (e, xhr, file, files) => {
|
|
45
55
|
console.log('进度:', file.percent);
|
|
46
56
|
};
|
|
47
57
|
```
|
|
48
58
|
|
|
49
|
-
**success
|
|
59
|
+
**success**
|
|
60
|
+
|
|
61
|
+
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
62
|
+
| --- | --- | --- | --- | --- |
|
|
63
|
+
| res | `any` | 是 | - | 服务器响应 |
|
|
64
|
+
| xhr | `XMLHttpRequest` | 是 | - | 请求对象 |
|
|
65
|
+
| file | `UploadFile` | 是 | - | 当前文件 |
|
|
66
|
+
| files | `UploadFile[]` | 是 | - | 所有文件列表 |
|
|
67
|
+
|
|
68
|
+
事件处理示例:
|
|
50
69
|
```typescript
|
|
51
70
|
const handleSuccess = (res, xhr, file, files) => {
|
|
52
71
|
console.log('上传成功:', res);
|
|
53
72
|
};
|
|
54
73
|
```
|
|
55
74
|
|
|
56
|
-
**error
|
|
75
|
+
**error**
|
|
76
|
+
|
|
77
|
+
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
78
|
+
| --- | --- | --- | --- | --- |
|
|
79
|
+
| err | `Error | RequestError` | 是 | - | 错误信息 |
|
|
80
|
+
| file | `File | File[] | UploadFile` | 是 | - | 相关文件 |
|
|
81
|
+
| files | `UploadFile[]` | 是 | - | 所有文件列表 |
|
|
82
|
+
|
|
83
|
+
事件处理示例:
|
|
57
84
|
```typescript
|
|
58
85
|
const handleError = (err, file, files) => {
|
|
59
86
|
Message.error(err.message);
|
|
60
87
|
};
|
|
61
88
|
```
|
|
62
89
|
|
|
63
|
-
## 插槽 (Slots)
|
|
64
|
-
| 插槽名 | 说明 | 模板写法 | 示例 |
|
|
65
|
-
| --- | --- | --- | --- |
|
|
66
|
-
| content | 组件展示的内容,当没有子元素时,默认会根据type展示不同的内容 | `undefined` | - |
|
|
67
|
-
| tip | 组件展示的提示信息 | `undefined` | - |
|
|
68
|
-
|
|
69
90
|
## 方法 (Methods)
|
|
70
91
|
| 方法名 | 说明 | 参数 | 返回值 |
|
|
71
92
|
| --- | --- | --- | --- |
|
|
72
93
|
| submit | 手动上传时,调用该方法开始上传 | `-` | `void` |
|
|
73
94
|
|
|
95
|
+
### 方法调用示例
|
|
96
|
+
**submit**
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
uploadRef.value?.submit();
|
|
100
|
+
```
|
|
101
|
+
|
|
74
102
|
## 常见错误与正确用法 (Anti-Hallucination)
|
|
103
|
+
### 未设置 action 属性
|
|
75
104
|
> **错误用法**: `<Upload /> <!-- 缺少上传地址 -->`
|
|
76
105
|
> **正确写法**: `<Upload action="/api/upload" />`
|
|
77
106
|
> **说明**: 必须设置 action 属性指定上传地址
|
|
78
107
|
|
|
108
|
+
### maxSize 单位理解错误
|
|
79
109
|
> **错误用法**: `<Upload :maxSize="1024 * 1024" /> <!-- 期望 1MB,实际是 1GB -->`
|
|
80
110
|
> **正确写法**: `<Upload :maxSize="1024" /> <!-- 1MB = 1024KB -->`
|
|
81
111
|
> **说明**: maxSize 单位是 KB,1MB = 1024KB
|
|
82
112
|
|
|
113
|
+
### 设置 autoUpload 为 false 但忘记调用 submit
|
|
83
114
|
> **错误用法**: `<Upload :autoUpload="false" /> <!-- 文件不会自动上传 -->`
|
|
84
115
|
> **正确写法**: `<Upload ref="upload" :autoUpload="false" />
|
|
85
116
|
// 需要手动调用 upload.value?.submit()`
|
|
@@ -195,7 +226,7 @@ const handleError = (err: any) => {
|
|
|
195
226
|
|
|
196
227
|
手动控制上传时机
|
|
197
228
|
|
|
198
|
-
**使用的 API**: 属性: action, autoUpload, multiple
|
|
229
|
+
**使用的 API**: 属性: action, autoUpload, multiple | 方法: submit
|
|
199
230
|
|
|
200
231
|
```vue
|
|
201
232
|
<script setup lang="ts">
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# 增删行状态管理 (useCRUD)
|
|
2
|
+
|
|
3
|
+
管理数组型表单项的新增与删除能力,并根据最大最小数量约束生成可直接用于按钮禁用态的结果。
|
|
4
|
+
|
|
5
|
+
**关键词**: useCRUD, 动态表单, 新增 删除, 数组项, canAdd, canDelete
|
|
6
|
+
|
|
7
|
+
## 导入语句
|
|
8
|
+
```typescript
|
|
9
|
+
import { useCRUD } from '@ksyun-internal/versatile';
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## 参数 (Params)
|
|
13
|
+
| 参数名 | 类型 | 必填 | 说明 |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| models | `Ref<T[]>` | 是 | 当前表单项数组 |
|
|
16
|
+
| initItem | `() => T` | 是 | 新增项的初始化工厂函数 |
|
|
17
|
+
| maxInstanceNum | `number` | 否 | 最大可新增数量 |
|
|
18
|
+
| minInstanceNum | `number` | 否 | 最小保留数量 |
|
|
19
|
+
|
|
20
|
+
## 返回值
|
|
21
|
+
```typescript
|
|
22
|
+
{ canAdd: ComputedRef<{ disabled: boolean; msg: string }>; canDelete: ComputedRef<{ disabled: boolean; msg: string }>; addItem: () => void; deleteItem: (index: number) => void; }
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 常见错误与正确用法 (Anti-Hallucination)
|
|
26
|
+
### 直接复用同一个默认对象,导致新增项互相串值
|
|
27
|
+
> **错误用法**: `const defaultItem = { name: '', value: '' }; useCRUD(models, () => defaultItem);`
|
|
28
|
+
> **正确写法**: `useCRUD(models, () => ({ name: '', value: '' }));`
|
|
29
|
+
> **说明**: initItem 应返回新的对象实例,避免多个表单项共享引用。
|
|
30
|
+
|
|
31
|
+
## 使用示例
|
|
32
|
+
### 动态表单行增删
|
|
33
|
+
控制实例配置行的新增与删除
|
|
34
|
+
|
|
35
|
+
```vue
|
|
36
|
+
<script setup lang="ts">
|
|
37
|
+
import { ref } from 'vue';
|
|
38
|
+
import { useCRUD } from '@ksyun-internal/versatile';
|
|
39
|
+
|
|
40
|
+
const models = ref([{ name: '', value: '' }]);
|
|
41
|
+
const { canAdd, canDelete, addItem, deleteItem } = useCRUD(
|
|
42
|
+
models,
|
|
43
|
+
() => ({ name: '', value: '' }),
|
|
44
|
+
5,
|
|
45
|
+
1
|
|
46
|
+
);
|
|
47
|
+
</script>
|
|
48
|
+
```
|
|
49
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# 倒计时 (useCountdown)
|
|
2
|
+
|
|
3
|
+
管理秒级或自定义间隔的倒计时流程,提供 start、reset、stop 和 pause/resume 等控制能力。
|
|
4
|
+
|
|
5
|
+
**关键词**: useCountdown, 倒计时, remaining, 短信验证码, start stop, pause resume
|
|
6
|
+
|
|
7
|
+
## 导入语句
|
|
8
|
+
```typescript
|
|
9
|
+
import { useCountdown } from '@ksyun-internal/versatile';
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## 参数 (Params)
|
|
13
|
+
| 参数名 | 类型 | 必填 | 说明 |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| initialCountdown | `MaybeRefOrGetter<number>` | 是 | 初始倒计时值 |
|
|
16
|
+
| options | `UseCountdownOptions` | 否 | 倒计时配置,可设置 interval、immediate、onTick 和 onComplete |
|
|
17
|
+
|
|
18
|
+
## 返回值
|
|
19
|
+
```typescript
|
|
20
|
+
{ remaining: ShallowRef<number>; isActive: Readonly<ShallowRef<boolean>>; pause: () => void; resume: () => void; reset: (countdown?: MaybeRefOrGetter<number>) => void; stop: () => void; start: (countdown?: MaybeRefOrGetter<number>) => void; }
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 常见错误与正确用法 (Anti-Hallucination)
|
|
24
|
+
### 把 resume 当作重新开始倒计时使用
|
|
25
|
+
> **错误用法**: `resume();`
|
|
26
|
+
> **正确写法**: `start(); // 或 reset(60) 后再 start()`
|
|
27
|
+
> **说明**: resume 只用于恢复暂停中的倒计时,不会重置剩余时间。
|
|
28
|
+
|
|
29
|
+
## 使用示例
|
|
30
|
+
### 短信验证码倒计时
|
|
31
|
+
点击发送验证码后开始倒计时
|
|
32
|
+
|
|
33
|
+
```vue
|
|
34
|
+
<script setup lang="ts">
|
|
35
|
+
import { useCountdown } from '@ksyun-internal/versatile';
|
|
36
|
+
|
|
37
|
+
const { remaining, start, stop } = useCountdown(60, {
|
|
38
|
+
immediate: false,
|
|
39
|
+
onComplete: () => console.log('倒计时结束'),
|
|
40
|
+
});
|
|
41
|
+
</script>
|
|
42
|
+
```
|
|
43
|
+
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# 详情页状态守卫 (useDetail)
|
|
2
|
+
|
|
3
|
+
围绕详情页数据、网络状态和路由跳转封装守卫逻辑,适合详情页数据为空、请求异常或需要回退列表页的场景。
|
|
4
|
+
|
|
5
|
+
**关键词**: useDetail, 详情页, networkStatus, 详情守卫, 异常跳转, refetch
|
|
6
|
+
|
|
7
|
+
## 导入语句
|
|
8
|
+
```typescript
|
|
9
|
+
import { useDetail } from '@ksyun-internal/versatile';
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## 参数 (Params)
|
|
13
|
+
| 参数名 | 类型 | 必填 | 说明 |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| detailData | `Ref<T | null | undefined>` | 是 | 详情数据响应式对象 |
|
|
16
|
+
| networkStatus | `Ref<number | undefined>` | 是 | 网络状态响应式值 |
|
|
17
|
+
| routerName | `string | RouteLocationAsRelativeGeneric | RouteLocationAsPathGeneric` | 否 | 异常时回退的路由信息 |
|
|
18
|
+
| refetch | `() => void` | 否 | 重新拉取详情数据的方法 |
|
|
19
|
+
| tip | `string` | 否 | 详情不存在或异常时展示的提示文案 |
|
|
20
|
+
|
|
21
|
+
## 返回值
|
|
22
|
+
```typescript
|
|
23
|
+
void
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## 常见错误与正确用法 (Anti-Hallucination)
|
|
27
|
+
### 只传详情数据,没有把网络状态传给 hook,导致无法区分加载中和异常态
|
|
28
|
+
> **错误用法**: `useDetail(detailData);`
|
|
29
|
+
> **正确写法**: `useDetail(detailData, networkStatus, 'instance-list');`
|
|
30
|
+
> **说明**: networkStatus 是 hook 判断详情状态的重要输入。
|
|
31
|
+
|
|
32
|
+
## 使用示例
|
|
33
|
+
### 详情页请求守卫
|
|
34
|
+
在详情页请求为空或异常时统一处理跳转和重试
|
|
35
|
+
|
|
36
|
+
```vue
|
|
37
|
+
<script setup lang="ts">
|
|
38
|
+
import { ref } from 'vue';
|
|
39
|
+
import { useDetail } from '@ksyun-internal/versatile';
|
|
40
|
+
|
|
41
|
+
const detailData = ref();
|
|
42
|
+
const networkStatus = ref(7);
|
|
43
|
+
const refetch = () => console.log('retry');
|
|
44
|
+
|
|
45
|
+
useDetail(detailData, networkStatus, { name: 'instance-list' }, refetch, '实例不存在');
|
|
46
|
+
</script>
|
|
47
|
+
```
|
|
48
|
+
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# 弹窗状态管理 (useDialog)
|
|
2
|
+
|
|
3
|
+
为 VDialog 或 Dialog 表单场景封装显隐、校验、重置和确认按钮行为,减少弹窗表单模板中的重复状态代码。
|
|
4
|
+
|
|
5
|
+
**关键词**: useDialog, VDialog, 弹窗表单, dialog, validate, show hide
|
|
6
|
+
|
|
7
|
+
## 导入语句
|
|
8
|
+
```typescript
|
|
9
|
+
import { useDialog } from '@ksyun-internal/versatile';
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## 参数 (Params)
|
|
13
|
+
| 参数名 | 类型 | 必填 | 说明 |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| emit | `() => any` | 否 | 父组件传入的 emit,用于联动弹窗显隐或外部事件 |
|
|
16
|
+
| isShowParentDialog | `Ref<boolean | undefined>` | 否 | 父级弹窗显隐状态,适合嵌套弹窗场景 |
|
|
17
|
+
|
|
18
|
+
## 返回值
|
|
19
|
+
```typescript
|
|
20
|
+
{ dialogRef: Ref<Dialog | undefined>; isShowDialog: Ref<boolean>; formRef: Ref<Form | undefined>; validate: Function; validateByScroll: Function; reset: Function; handleClickOkBtn: Function; handleClickValidOkBtn: Function; show: Function; hide: Function; }
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 常见错误与正确用法 (Anti-Hallucination)
|
|
24
|
+
### 调用 validate 或 handleClickValidOkBtn,但没有把 formRef 绑定到表单
|
|
25
|
+
> **错误用法**: `<Form></Form>`
|
|
26
|
+
> **正确写法**: `<Form ref="formRef"></Form>`
|
|
27
|
+
> **说明**: 校验相关方法依赖 formRef 指向真实表单实例。
|
|
28
|
+
|
|
29
|
+
## 使用示例
|
|
30
|
+
### 弹窗表单
|
|
31
|
+
配合 VDialog 管理弹窗显隐和表单校验
|
|
32
|
+
|
|
33
|
+
```vue
|
|
34
|
+
<script setup lang="ts">
|
|
35
|
+
import { VDialog, useDialog } from '@ksyun-internal/versatile';
|
|
36
|
+
|
|
37
|
+
const { isShowDialog, formRef, show, hide, handleClickValidOkBtn } = useDialog();
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<template>
|
|
41
|
+
<VDialog v-model="isShowDialog" :ok="handleClickValidOkBtn">
|
|
42
|
+
<Form ref="formRef"></Form>
|
|
43
|
+
</VDialog>
|
|
44
|
+
</template>
|
|
45
|
+
```
|
|
46
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# 基础实体映射 (useEntity)
|
|
2
|
+
|
|
3
|
+
根据单个 ID 和基础列表做实体同步回调,适合简单的字符串或数字值映射场景。
|
|
4
|
+
|
|
5
|
+
**关键词**: useEntity, 简单实体映射, id value, 回调同步, 基础列表, 单值
|
|
6
|
+
|
|
7
|
+
## 导入语句
|
|
8
|
+
```typescript
|
|
9
|
+
import { useEntity } from '@ksyun-internal/versatile';
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## 参数 (Params)
|
|
13
|
+
| 参数名 | 类型 | 必填 | 说明 |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| id | `Ref<string | number | undefined | null>` | 是 | 当前选中的 ID |
|
|
16
|
+
| list | `Ref<string[] | number[] | undefined | null>` | 是 | 基础值列表 |
|
|
17
|
+
| emit | `(entity: string | number | null | undefined) => void` | 否 | 值变化时的回调 |
|
|
18
|
+
| isNeedDefaultValue | `boolean` | 否 | 是否需要默认值处理 |
|
|
19
|
+
|
|
20
|
+
## 返回值
|
|
21
|
+
```typescript
|
|
22
|
+
void
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 常见错误与正确用法 (Anti-Hallucination)
|
|
26
|
+
### 把 useEntity 当成返回实体 Ref 的 hook 使用
|
|
27
|
+
> **错误用法**: `const entity = useEntity(id, list);`
|
|
28
|
+
> **正确写法**: `useEntity(id, list, (entity) => { current.value = entity; });`
|
|
29
|
+
> **说明**: 该 hook 主要通过副作用回调同步值,本身不返回实体 Ref。
|
|
30
|
+
|
|
31
|
+
## 使用示例
|
|
32
|
+
### 基础值映射
|
|
33
|
+
根据当前值从列表里查找对应实体并回调给外层
|
|
34
|
+
|
|
35
|
+
```vue
|
|
36
|
+
<script setup lang="ts">
|
|
37
|
+
import { ref } from 'vue';
|
|
38
|
+
import { useEntity } from '@ksyun-internal/versatile';
|
|
39
|
+
|
|
40
|
+
const id = ref('cn-beijing-6a');
|
|
41
|
+
const list = ref(['cn-beijing-6a', 'cn-shanghai-2a']);
|
|
42
|
+
useEntity(id, list, (entity) => console.log(entity));
|
|
43
|
+
</script>
|
|
44
|
+
```
|
|
45
|
+
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# 事件监听封装 (useEventListener)
|
|
2
|
+
|
|
3
|
+
为 HTMLElement、window、document 或 Ref 目标统一注册事件监听,并支持 throttle、debounce 与原生 addEventListener 配置。
|
|
4
|
+
|
|
5
|
+
**关键词**: useEventListener, 事件监听, window resize, debounce, throttle, addEventListener
|
|
6
|
+
|
|
7
|
+
## 导入语句
|
|
8
|
+
```typescript
|
|
9
|
+
import { useEventListener } from '@ksyun-internal/versatile';
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## 参数 (Params)
|
|
13
|
+
| 参数名 | 类型 | 必填 | 说明 |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| target | `HTMLElement | Window | Document | Ref<HTMLElement | null> | (() => HTMLElement | null)` | 是 | 监听目标 |
|
|
16
|
+
| event | `string` | 是 | 事件名 |
|
|
17
|
+
| handler | `EventListenerOrEventListenerObject` | 是 | 事件处理函数 |
|
|
18
|
+
| options | `{ throttle?: number; debounce?: number; nativeOptions?: boolean | AddEventListenerOptions }` | 否 | 监听配置,支持节流、防抖和原生监听选项 |
|
|
19
|
+
|
|
20
|
+
## 返回值
|
|
21
|
+
```typescript
|
|
22
|
+
void
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 常见错误与正确用法 (Anti-Hallucination)
|
|
26
|
+
### 同时配置 throttle 和 debounce,但没有明确预期
|
|
27
|
+
> **错误用法**: `useEventListener(window, 'scroll', onScroll, { throttle: 100, debounce: 100 });`
|
|
28
|
+
> **正确写法**: `根据场景二选一:节流滚动用 throttle,输入联想用 debounce。`
|
|
29
|
+
> **说明**: 两者语义不同,建议根据业务场景明确选一种。
|
|
30
|
+
|
|
31
|
+
## 使用示例
|
|
32
|
+
### 监听窗口尺寸变化
|
|
33
|
+
在页面中节流监听 resize 事件
|
|
34
|
+
|
|
35
|
+
```vue
|
|
36
|
+
<script setup lang="ts">
|
|
37
|
+
import { useEventListener } from '@ksyun-internal/versatile';
|
|
38
|
+
|
|
39
|
+
useEventListener(window, 'resize', () => {
|
|
40
|
+
console.log('resize');
|
|
41
|
+
}, { throttle: 200 });
|
|
42
|
+
</script>
|
|
43
|
+
```
|
|
44
|
+
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# 延迟转真布尔态 (useFalseUntilTruthy)
|
|
2
|
+
|
|
3
|
+
将任意响应式值映射成布尔值,并在首次变为 truthy 前始终保持 false,适合权限、异步加载完成态和懒渲染控制。
|
|
4
|
+
|
|
5
|
+
**关键词**: useFalseUntilTruthy, false until truthy, 懒渲染, 加载完成, 布尔态, 权限准备
|
|
6
|
+
|
|
7
|
+
## 导入语句
|
|
8
|
+
```typescript
|
|
9
|
+
import { useFalseUntilTruthy } from '@ksyun-internal/versatile';
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## 参数 (Params)
|
|
13
|
+
| 参数名 | 类型 | 必填 | 说明 |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| value | `MaybeRefOrGetter<any>` | 是 | 任意响应式值、getter 或普通值 |
|
|
16
|
+
|
|
17
|
+
## 返回值
|
|
18
|
+
```typescript
|
|
19
|
+
Readonly<Ref<boolean>>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## 常见错误与正确用法 (Anti-Hallucination)
|
|
23
|
+
### 期望值在 truthy 之后再次回到 false
|
|
24
|
+
> **错误用法**: `const visible = useFalseUntilTruthy(flag); // 认为 flag 再次 false 时 visible 也会 false`
|
|
25
|
+
> **正确写法**: `如需双向切换,请直接使用 computed(() => !!flag.value)`
|
|
26
|
+
> **说明**: 这个 hook 的语义是“在首次变为 truthy 前保持 false”,不是通用的布尔映射。
|
|
27
|
+
|
|
28
|
+
## 使用示例
|
|
29
|
+
### 控制懒渲染
|
|
30
|
+
在异步数据真正可用前保持 false,避免中间闪烁
|
|
31
|
+
|
|
32
|
+
```vue
|
|
33
|
+
<script setup lang="ts">
|
|
34
|
+
import { computed } from 'vue';
|
|
35
|
+
import { useFalseUntilTruthy } from '@ksyun-internal/versatile';
|
|
36
|
+
|
|
37
|
+
const dataReady = computed(() => true);
|
|
38
|
+
const canRender = useFalseUntilTruthy(dataReady);
|
|
39
|
+
</script>
|
|
40
|
+
```
|
|
41
|
+
|