@xmszm/core 0.0.2 → 0.0.3

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.
Files changed (71) hide show
  1. package/README.md +10 -1
  2. package/dist/index.cjs +2 -2
  3. package/dist/index.mjs +1296 -1285
  4. package/dist/plugin/vite/initRouteMeta.cjs +1 -0
  5. package/dist/plugin/vite/initRouteMeta.mjs +13 -0
  6. package/dist/style.css +1 -1
  7. package/docs/.vitepress/config.mjs +10 -1
  8. package/docs/components/config-options.md +125 -0
  9. package/docs/components/dataform.md +175 -22
  10. package/docs/components/datatable.md +21 -39
  11. package/docs/components/dialog.md +155 -16
  12. package/docs/components/options.md +43 -14
  13. package/docs/components/query.md +20 -12
  14. package/docs/components/utils.md +118 -10
  15. package/docs/guide/changelog.md +81 -0
  16. package/docs/guide/config.md +241 -4
  17. package/docs/guide/quickstart.md +27 -2
  18. package/docs/index.md +1 -1
  19. package/docs/usage.md +16 -3
  20. package/examples/README.md +46 -0
  21. package/examples/index.html +14 -0
  22. package/examples/package.json +25 -0
  23. package/examples/pnpm-lock.yaml +1569 -0
  24. package/examples/pnpm-workspace.yaml +3 -0
  25. package/examples/src/AdminSystem.vue +870 -0
  26. package/examples/src/App.vue +330 -0
  27. package/examples/src/Introduction.vue +307 -0
  28. package/examples/src/main.js +22 -0
  29. package/examples/src/utils/permission.js +16 -0
  30. package/examples/src/utils/request.js +10 -0
  31. package/examples/vite.config.js +41 -0
  32. package/package.json +10 -4
  33. package/src/dialog/commonDialog.tsx +285 -0
  34. package/src/dialog/utils/{dialog.js → dialog.ts} +2 -0
  35. package/src/enum/sort.tsx +45 -0
  36. package/src/form/DataForm.vue +26 -52
  37. package/src/{index.js → index.ts} +7 -6
  38. package/src/list/{useList.jsx → useList.tsx} +49 -14
  39. package/src/options/{Options.jsx → Options.tsx} +37 -36
  40. package/src/options/defaultOptions.tsx +656 -0
  41. package/src/query/CommonQuery.vue +57 -89
  42. package/src/table/DataTable.vue +60 -94
  43. package/src/table/opr/{DataColumnCollet.jsx → DataColumnCollet.tsx} +18 -8
  44. package/src/table/opr/{useDataColumn.jsx → useDataColumn.tsx} +43 -48
  45. package/src/table/opr/{useDataColumnButton.jsx → useDataColumnButton.tsx} +13 -6
  46. package/src/table/opr/{useDataColumnPop.jsx → useDataColumnPop.tsx} +13 -5
  47. package/src/utils/{array.js → array.ts} +4 -6
  48. package/src/utils/{config.js → config.ts} +16 -2
  49. package/src/utils/{dialog.js → dialog.ts} +2 -2
  50. package/src/utils/{object.js → object.ts} +1 -0
  51. package/src/utils/{upload.js → upload.ts} +3 -3
  52. package/types/components.d.ts +402 -0
  53. package/types/index.d.ts +145 -7
  54. package/types/plugin/vite/initRouteMeta.d.ts +23 -0
  55. package/types/src.d.ts +55 -0
  56. package/types/vue-shim.d.ts +9 -0
  57. package/examples/demo.vue +0 -224
  58. package/src/dialog/commonDialog.jsx +0 -262
  59. package/src/enum/sort.jsx +0 -31
  60. package/src/options/defaultOptions.jsx +0 -580
  61. /package/src/dialog/{useCommonDialog.js → useCommonDialog.ts} +0 -0
  62. /package/src/directives/{auto-register.js → auto-register.ts} +0 -0
  63. /package/src/directives/{permission.js → permission.ts} +0 -0
  64. /package/src/enum/{options.js → options.ts} +0 -0
  65. /package/src/plugin/{index.js → index.ts} +0 -0
  66. /package/src/plugin/vite/{initRouteMeta.js → initRouteMeta.ts} +0 -0
  67. /package/src/store/utils/{index.js → index.ts} +0 -0
  68. /package/src/table/opr/{useQRCode.js → useQRCode.ts} +0 -0
  69. /package/src/table/utils/{ellipsis.js → ellipsis.ts} +0 -0
  70. /package/src/utils/{auth.js → auth.ts} +0 -0
  71. /package/src/utils/{time.js → time.ts} +0 -0
@@ -31,25 +31,54 @@ const option = [
31
31
  ```
32
32
 
33
33
  ## Props
34
- - `option: Array` 字段配置。
35
- - `value (v-model:value): Object` 数据对象。
36
- - `read: boolean` 只读模式。
37
- - `labelField` / `valueField`:默认取全局常量 `globalLabelField` / `globalValueField`。
38
- - `formRef`: 供内部校验、重置使用。
39
- - `formProps`: 透传给外层布局。
40
- - `style`: 根容器样式。
34
+
35
+ | 字段名 | 必填 | 类型 | 说明 |
36
+ |--------|------|------|------|
37
+ | `option` | | `Array` | 字段配置数组,默认 `[]` |
38
+ | `value` / `v-model:value` | 否 | `Object` | 数据对象,支持 v-model 双向绑定,默认 `{}` |
39
+ | `read` | 否 | `boolean` | 只读模式,默认 `false` |
40
+ | `labelField` | 否 | `string` | label 字段名,默认取全局常量 `globalLabelField`(`'name'`) |
41
+ | `valueField` | 否 | `string` | value 字段名,默认取全局常量 `globalValueField`(`'id'`) |
42
+
43
+ ::: tip 全局字段常量
44
+ - `globalLabelField`:默认值为 `'name'`,用于指定选项数组中 label 字段名
45
+ - `globalValueField`:默认值为 `'id'`,用于指定选项数组中 value 字段名
46
+
47
+ 这些常量可以在组件级别通过 `labelField` 和 `valueField` props 覆盖。
48
+ :::
49
+ | `formRef` | 否 | `Object` | 表单引用,供内部校验、重置使用,默认 `{}` |
50
+ | `formProps` | 否 | `Object` | 透传给外层布局的属性,默认 `{}` |
51
+ | `style` | 否 | `Object` | 根容器样式,默认 `{}` |
41
52
 
42
53
  ## 配置字段说明
43
- - `way`: 控件类型(input/select/date/time/dateRange/radio/switch/uploadFile/image/dataTable/button 等)。
44
- - `default / prefix / suffix`: 支持函数或对象,组合渲染布局。
45
- - `props`: 透传控件的属性,支持函数,入参包含 `formRef`、`setValue`。
46
- - `formItemProps`: 透传 `NFormItem`,可控制 label/反馈/样式。
47
- - `render`: 完全自定义渲染。
48
- - `isRender`: 布尔或函数,控制是否渲染该项。
49
- - `enum`: 对象形式的枚举,将被转换为数组。
54
+
55
+ `option` 配置项使用 [Options 配置字段](/components/config-options#options-配置字段),详见配置项说明文档。
56
+
57
+ ## 自定义控件类型
58
+
59
+ `Options` 支持通过 `setupOptions` 注册自定义控件类型,详见 [初始化配置 - Options 注册](/guide/config#options-注册)。
60
+
61
+ ### 示例
62
+
63
+ ```javascript
64
+ // main.js
65
+ import { setupOptions } from '@xmszm/core'
66
+ import { NCascader } from 'naive-ui'
67
+
68
+ // 注册自定义控件
69
+ setupOptions('cascader', (item, { _value, _isRead }) => {
70
+ return <NCascader v-model:value={_value[item.key]} options={item.options} />
71
+ })
72
+
73
+ // 使用
74
+ const options = [
75
+ { key: 'region', label: '地区', way: 'cascader', options: regionData }
76
+ ]
77
+ ```
50
78
 
51
79
  ## Tips
52
80
  - `options` 内的函数会收到当前表单值与 formRef,可做动态显隐、联动控制。
53
81
  - 只读模式会在大多数字段内回显文本,而不渲染输入控件。
54
82
  - `labelSuffix`/`labelSuffixProps` 支持传入图标(示例使用 `SvgIcon`)。
83
+ - 可以通过 `setupOptions` 扩展自定义控件类型,详见 [初始化配置](/guide/config)。
55
84
 
@@ -73,23 +73,31 @@ function handleReset() {
73
73
  ```
74
74
 
75
75
  ## Props
76
- - `options: Array` 查询项配置,规则同 `Options`。
77
- - `query (v-model:query): Object` 查询对象。
78
- - `inlineText: boolean` 布局控制。
79
- - `selectCount: number` 默认 1。
80
- - `type: string` 按钮类型(传给 `NButton`)。
81
- - `noButton: boolean` 隐藏底部按钮区。
82
- - `btn: string[]` 默认 `['reset', 'search']`。
83
- - `size: string` 传入控件尺寸。
84
- - `isRead: boolean` 只读。
76
+
77
+ | 字段名 | 必填 | 类型 | 说明 |
78
+ |--------|------|------|------|
79
+ | `options` | 否 | `Array` | 查询项配置,规则同 `Options`,默认 `[]` |
80
+ | `query` / `v-model:query` | 否 | `Object` | 查询对象,支持 v-model 双向绑定,默认 `{}` |
81
+ | `inlineText` | 否 | `boolean` | 布局控制,默认 `true` |
82
+ | `selectCount` | 否 | `number` | 每行显示的查询项数量,默认 `1` |
83
+ | `type` | 否 | `string` | 按钮类型(传给 `NButton`),默认 `'primary'` |
84
+ | `noButton` | 否 | `boolean` | 是否隐藏底部按钮区,默认 `false` |
85
+ | `btn` | 否 | `string[]` | 按钮配置数组,默认 `['reset', 'search']` |
86
+ | `size` | 否 | `string` | 传入控件尺寸,默认 `'medium'` |
87
+ | `isRead` | 否 | `boolean` | 只读模式,默认 `false` |
85
88
 
86
89
  ## 事件
87
- - `update:query` 双向绑定。
88
- - `submit` 点击搜索或回车触发(内置 500ms 防抖)。
89
- - `reset` 重置查询模型。
90
+
91
+ | 事件名 | 类型 | 说明 |
92
+ |--------|------|------|
93
+ | `update:query` | `(query: Object) => void` | 查询对象变化时触发,用于 v-model 双向绑定 |
94
+ | `submit` | `() => void` | 点击搜索或回车触发(内置 500ms 防抖) |
95
+ | `reset` | `() => void` | 重置查询模型时触发 |
90
96
 
91
97
  ## 特性
92
98
  - 默认监听全局 Enter 键以触发搜索。
93
99
  - 为 `input`/`select` 自动绑定 `onUpdateValue`,输入即触发防抖搜索,可通过 `props.onUpdateValue` 自定义。
94
100
  - `formProps` 默认关闭校验反馈,适合轻量搜索区域。
101
+ - `options` 配置项支持 `queryType` 字段,用于指定查询参数类型,详见 [CommonQuery queryType 说明](/components/config-options#commonquery-querytype-说明)。
102
+ - `options` 中的 `way` 字段支持自定义控件类型,可通过 `setupOptions` 注册,详见 [初始化配置 - Options 注册](/guide/config#options-注册)。
95
103
 
@@ -2,11 +2,13 @@
2
2
  title: 工具与常量
3
3
  ---
4
4
 
5
- ## 操作列 / 排序 / 省略
5
+ ## 操作列 / 省略
6
6
 
7
7
  ### createActionColumnJsx
8
8
  快速生成表格操作列。
9
9
 
10
+ 配置项说明详见 [createActionColumnJsx 配置](/components/config-options#createactioncolumnjsx-配置)。
11
+
10
12
  ```javascript
11
13
  import { createActionColumnJsx } from '@xmszm/core'
12
14
 
@@ -20,11 +22,6 @@ const oprColumn = createActionColumnJsx(
20
22
  )
21
23
  ```
22
24
 
23
- ### orderEnum(表格内部用)
24
- - 来源:`src/enum/sort.jsx`,通过 `DataTable` 列的 `sorter` 使用。
25
- - 功能:提供升序/降序/默认三态的图标与处理函数,修改 `listQuery` 的排序字段并配合重新拉取数据。
26
- - 注意:离开 `DataTable` 排序场景单独调用无意义;详细示例见 `DataTable` 文档中的排序段落。
27
-
28
25
  ### ellipsis
29
26
  表格省略 tooltip 配置:
30
27
  ```javascript
@@ -40,11 +37,122 @@ await customUpload({ url: '/upload', data: file })
40
37
  const url = getFileUrl('/path/to/file', 200) // 拼接 OSS 样式
41
38
  ```
42
39
 
40
+ ## 二维码工具
41
+
42
+ ### useQRCode
43
+
44
+ 在组件中使用二维码弹窗的便捷 Hook。
45
+
46
+ ```javascript
47
+ import { useQRCode } from '@xmszm/core'
48
+
49
+ const showQRCode = useQRCode()
50
+
51
+ function handleShowQR(row) {
52
+ showQRCode(row, async () => {
53
+ // 返回二维码图片 URL
54
+ return await getQRCodeImage(row.id)
55
+ })
56
+ }
57
+ ```
58
+
59
+ ### createQRCode
60
+
61
+ 创建二维码弹窗的函数,需要手动传入 Dialog 实例。
62
+
63
+ ```javascript
64
+ import { useDialog } from 'naive-ui'
65
+ import { createQRCode, registerDialogInstance } from '@xmszm/core'
66
+
67
+ const dialog = useDialog()
68
+ registerDialogInstance(dialog)
69
+
70
+ // 显示二维码
71
+ await createQRCode(row, async () => {
72
+ return await getQRCodeImage(row.id)
73
+ })
74
+ ```
75
+
43
76
  ## 权限与路由
44
- - `useAuthPermission(...routeNames)` / `useApiConfig(...routeNames)`:读取路由 meta 中的 `auth` / `api`。
45
- - `cellectChildenPermission(route)`:合并子路由权限到父节点。
46
- - `initRouteMeta(routes, base?)`:补全 `meta.title`、`meta.permission`、`sourceFullPath` 等。
47
- - `handleParams(str, map)`:替换路径参数。
77
+
78
+ ### useAuthPermission / useApiConfig
79
+
80
+ 读取路由 meta 中的 `auth` / `api` 配置。
81
+
82
+ ```javascript
83
+ import { useAuthPermission, useApiConfig } from '@xmszm/core'
84
+
85
+ // 读取当前路由的 auth 配置
86
+ const auth = useAuthPermission()
87
+
88
+ // 读取指定路由的 auth 配置
89
+ const auth = useAuthPermission('userList', 'userDetail')
90
+
91
+ // 读取当前路由的 api 配置
92
+ const api = useApiConfig()
93
+ ```
94
+
95
+ ### cellectChildenPermission
96
+
97
+ 合并子路由权限到父节点。
98
+
99
+ ```javascript
100
+ import { cellectChildenPermission } from '@xmszm/core'
101
+
102
+ const route = cellectChildenPermission(routeConfig)
103
+ ```
104
+
105
+ ### initRouteMeta
106
+
107
+ 补全路由 `meta.title`、`meta.permission`、`sourceFullPath` 等。
108
+
109
+ ```javascript
110
+ import { initRouteMeta } from '@xmszm/core'
111
+
112
+ const routes = initRouteMeta(routes, '/base')
113
+ ```
114
+
115
+ ### handleParams
116
+
117
+ 替换路径参数。
118
+
119
+ ```javascript
120
+ import { handleParams } from '@xmszm/core'
121
+
122
+ const url = handleParams('/api/user/{id}', {
123
+ '{id}': userId,
124
+ })
125
+ // => '/api/user/123'
126
+ ```
127
+
128
+ ## 权限指令
129
+
130
+ ### permissionDirective (v-corePermission)
131
+
132
+ 权限指令,根据权限标识控制元素的显示/隐藏。
133
+
134
+ ```javascript
135
+ import { permissionDirective } from '@xmszm/core'
136
+
137
+ // 在 main.js 中注册
138
+ app.directive('corePermission', permissionDirective)
139
+ ```
140
+
141
+ ### 使用示例
142
+
143
+ ```vue
144
+ <template>
145
+ <!-- 单个权限 -->
146
+ <div v-corePermission="'user:edit'">编辑按钮</div>
147
+
148
+ <!-- 多个权限(任一满足即可) -->
149
+ <div v-corePermission="['user:edit', 'user:view']">需要编辑或查看权限</div>
150
+ </template>
151
+ ```
152
+
153
+ ::: tip
154
+ 指令会自动调用 `setupConfig` 中配置的 `hasPermission` 函数进行权限检查。如果未配置,默认返回 `true`(会显示警告)。
155
+ :::
48
156
 
49
157
  ## 数据工具
50
158
  - `toArray(value)`:非数组包装成数组。
@@ -0,0 +1,81 @@
1
+ ---
2
+ title: 版本历史
3
+ ---
4
+
5
+ # 版本历史
6
+
7
+ 本文档记录了 `@xmszm/core` 的所有发布版本及其更新内容。
8
+
9
+ ## 0.0.2
10
+
11
+ **发布日期**: 2025-12-12
12
+
13
+ ### 新增
14
+ - 完善文档系统,使用 VitePress 构建
15
+ - 添加初始化配置文档,支持 `setupConfig` 和 `setupOptions`
16
+ - 统一配置项说明文档
17
+
18
+ ### 改进
19
+ - 优化文档结构,统一使用表格展示组件 API
20
+ - 提取公共配置项到独立文档
21
+ - 改进代码示例和说明
22
+
23
+ ### 修复
24
+ - 修复文档中的代码高亮问题
25
+ - 修复 GitHub Pages 部署路径问题
26
+
27
+ ---
28
+
29
+ ## 0.0.1
30
+
31
+ **发布日期**: 2025-12-11
32
+
33
+ ### 新增
34
+ - 初始版本发布
35
+ - 核心组件:`DataForm`、`DataTable`、`CommonQuery`、`Options`
36
+ - 弹窗方法:`commonDialogMethod`
37
+ - 工具函数:上传、权限、路由等
38
+ - 基础样式和类型定义
39
+
40
+ ---
41
+
42
+ ## 如何查看最新版本
43
+
44
+ 你可以通过以下方式查看最新的发布版本:
45
+
46
+ ### npm
47
+
48
+ ```bash
49
+ npm view @xmszm/core version
50
+ ```
51
+
52
+ ### 查看所有版本
53
+
54
+ ```bash
55
+ npm view @xmszm/core versions
56
+ ```
57
+
58
+ ### 在 package.json 中查看
59
+
60
+ ```json
61
+ {
62
+ "dependencies": {
63
+ "@xmszm/core": "^0.0.2"
64
+ }
65
+ }
66
+ ```
67
+
68
+ ---
69
+
70
+ ## 版本说明
71
+
72
+ - **主版本号**:不兼容的 API 修改
73
+ - **次版本号**:向下兼容的功能性新增
74
+ - **修订版本号**:向下兼容的问题修正
75
+
76
+ 建议使用 `^` 前缀来安装,以自动获取兼容的更新:
77
+
78
+ ```bash
79
+ npm install @xmszm/core@^0.0.2
80
+ ```
81
+
@@ -1,10 +1,22 @@
1
- # 配置指南
1
+ ---
2
+ title: 初始化配置
3
+ ---
2
4
 
3
- ## 统一配置系统
5
+ # 初始化配置
4
6
 
5
- `@xmszm/core` 提供了统一的配置系统,用于管理外部依赖和业务配置。
7
+ `@xmszm/core` 提供了统一的初始化配置系统,用于管理外部依赖、业务配置和自定义选项注册。
6
8
 
7
- ## 初始化配置
9
+ ## 配置概览
10
+
11
+ | 配置项 | 说明 | 相关文档 |
12
+ |--------|------|----------|
13
+ | `setupConfig` | 全局配置(baseURL、权限、上传等) | 见下方说明 |
14
+ | `setupOptions` | 注册自定义 Options 控件类型 | 见 [Options 注册](#options-注册) |
15
+ | `registerDialogInstance` | 注册 Dialog 实例(可选) | 见 [Dialog 配置](#dialog-配置) |
16
+
17
+ ## setupConfig - 全局配置
18
+
19
+ `setupConfig` 用于配置全局设置,包括 API 地址、权限检查、上传方法等。
8
20
 
9
21
  在应用启动时,使用 `setupConfig` 进行统一配置:
10
22
 
@@ -169,10 +181,235 @@ setupConfig({
169
181
  app.mount('#app')
170
182
  ```
171
183
 
184
+ ## Options 注册(setupOptions) {#options-注册}
185
+
186
+ `setupOptions` 允许你注册自定义的控件类型,扩展 `Options` 组件的功能。
187
+
188
+ ### 基础用法
189
+
190
+ ```javascript
191
+ import { setupOptions } from '@xmszm/core'
192
+ import { NCascader } from 'naive-ui'
193
+
194
+ // 注册一个级联选择器控件
195
+ setupOptions('cascader', (item, { _value, _isRead, labelField, valueField }) => {
196
+ const { key, label, props, options = [] } = item
197
+
198
+ return _isRead ? (
199
+ <div>{_value[key]}</div>
200
+ ) : (
201
+ <NCascader
202
+ v-model:value={_value[key]}
203
+ options={options}
204
+ placeholder={`请选择${label}`}
205
+ {...props}
206
+ />
207
+ )
208
+ })
209
+ ```
210
+
211
+ ### 注册参数说明
212
+
213
+ | 参数 | 类型 | 说明 |
214
+ |------|------|------|
215
+ | `key` | `string` | 控件类型标识,如 `'cascader'`、`'customInput'` 等。注意:不能与内置类型重复(如 `input`、`select` 等) |
216
+ | `fn` | `Function` | 渲染函数,接收两个参数:<br/>1. `item`: 配置项对象(包含 `key`、`label`、`props`、`options` 等)<br/>2. `context`: 上下文对象 `{ _value, _isRead, labelField, valueField, _formRef }`<br/><br/>函数应返回一个 VNode 或 JSX 元素 |
217
+
218
+ ### 使用自定义控件
219
+
220
+ 注册后,在 `options` 配置中使用 `way` 字段指定你注册的类型:
221
+
222
+ ```javascript
223
+ const options = [
224
+ { key: 'region', label: '地区', way: 'cascader', options: regionOptions },
225
+ { key: 'custom', label: '自定义', way: 'customInput' },
226
+ ]
227
+ ```
228
+
229
+ ### 完整示例
230
+
231
+ ```javascript
232
+ // main.js
233
+ import { createApp } from 'vue'
234
+ import { setupOptions, setupConfig } from '@xmszm/core'
235
+ import { NCascader, NColorPicker } from 'naive-ui'
236
+ import App from './App.vue'
237
+
238
+ // 注册级联选择器控件
239
+ setupOptions('cascader', (item, { _value, _isRead }) => {
240
+ const { key, label, props, options = [] } = item
241
+ return _isRead ? (
242
+ <div>{_value[key]}</div>
243
+ ) : (
244
+ <NCascader
245
+ v-model:value={_value[key]}
246
+ options={options}
247
+ placeholder={`请选择${label}`}
248
+ {...props}
249
+ />
250
+ )
251
+ })
252
+
253
+ // 注册颜色选择器控件
254
+ setupOptions('colorPicker', (item, { _value, _isRead }) => {
255
+ const { key, props } = item
256
+ return _isRead ? (
257
+ <div style={{
258
+ width: '20px',
259
+ height: '20px',
260
+ backgroundColor: _value[key],
261
+ border: '1px solid #ccc'
262
+ }} />
263
+ ) : (
264
+ <NColorPicker
265
+ v-model:value={_value[key]}
266
+ {...props}
267
+ />
268
+ )
269
+ })
270
+
271
+ // 其他全局配置
272
+ setupConfig({
273
+ baseURL: 'https://api.example.com',
274
+ // ... 其他配置
275
+ })
276
+
277
+ const app = createApp(App)
278
+ app.mount('#app')
279
+ ```
280
+
281
+ ### 使用自定义控件
282
+
283
+ 注册后,在 `DataForm`、`CommonQuery`、`Options` 等组件的 `options` 配置中使用:
284
+
285
+ ```javascript
286
+ const formOptions = [
287
+ { key: 'region', label: '地区', way: 'cascader', options: regionData },
288
+ { key: 'theme', label: '主题色', way: 'colorPicker' },
289
+ ]
290
+ ```
291
+
292
+ ### getAllOptions / getOptions
293
+
294
+ 获取已注册的 Options 控件。
295
+
296
+ ```javascript
297
+ import { getAllOptions, getOptions } from '@xmszm/core'
298
+
299
+ // 获取所有已注册的 Options
300
+ const allOptions = getAllOptions()
301
+ // => { input: fn, select: fn, cascader: fn, ... }
302
+
303
+ // 获取指定的 Options
304
+ const specificOptions = getOptions(['input', 'select'])
305
+ // => { input: fn, select: fn }
306
+ ```
307
+
308
+ ::: tip
309
+ 这些方法主要用于调试或高级用法,一般不需要直接调用。
310
+ :::
311
+
312
+ ## Dialog 配置 {#dialog-配置}
313
+
314
+ ### registerDialogInstance
315
+
316
+ 可选配置,用于注册外部 Dialog 实例。如果不注册,库会自动尝试获取。
317
+
318
+ ```javascript
319
+ import { registerDialogInstance, useDialog } from '@xmszm/core'
320
+ import { useDialog as useNaiveDialog } from 'naive-ui'
321
+
322
+ // 在组件中注册
323
+ const dialog = useNaiveDialog()
324
+ registerDialogInstance(dialog)
325
+ ```
326
+
327
+ ### Dialog 主题配置
328
+
329
+ ```javascript
330
+ import { setupConfig } from '@xmszm/core'
331
+
332
+ setupConfig({
333
+ dialog: {
334
+ // 是否继承外部定义的主题色(默认 true)
335
+ inheritTheme: true,
336
+ // 主题色覆盖(当 inheritTheme 为 false 时使用)
337
+ themeOverrides: {
338
+ // 自定义主题色配置
339
+ }
340
+ }
341
+ })
342
+ ```
343
+
344
+ ## 插件和指令
345
+
346
+ ### CorePlugin / install
347
+
348
+ 库插件,用于注册指令等全局功能。
349
+
350
+ ```javascript
351
+ import { createApp } from 'vue'
352
+ import { CorePlugin } from '@xmszm/core'
353
+ import App from './App.vue'
354
+
355
+ const app = createApp(App)
356
+
357
+ // 使用插件(会自动注册所有指令)
358
+ app.use(CorePlugin)
359
+
360
+ app.mount('#app')
361
+ ```
362
+
363
+ 或者使用 `install` 函数:
364
+
365
+ ```javascript
366
+ import { install } from '@xmszm/core'
367
+
368
+ app.use({ install })
369
+ ```
370
+
371
+ ### registerDirectives
372
+
373
+ 手动注册所有指令到应用实例。
374
+
375
+ ```javascript
376
+ import { registerDirectives } from '@xmszm/core'
377
+
378
+ registerDirectives(app)
379
+ ```
380
+
381
+ ### autoRegisterDirectives
382
+
383
+ 尝试自动注册指令(通过 `getCurrentInstance` 获取应用实例)。
384
+
385
+ ```javascript
386
+ import { autoRegisterDirectives } from '@xmszm/core'
387
+
388
+ // 在组件中调用
389
+ autoRegisterDirectives()
390
+ ```
391
+
392
+ ### getGlobalApp
393
+
394
+ 获取全局应用实例(如果已通过 `registerDirectives` 注册)。
395
+
396
+ ```javascript
397
+ import { getGlobalApp } from '@xmszm/core'
398
+
399
+ const app = getGlobalApp()
400
+ ```
401
+
402
+ ::: tip
403
+ 通常不需要手动调用这些函数,使用 `CorePlugin` 或 `install` 即可自动注册所有指令。
404
+ :::
405
+
172
406
  ## 注意事项
173
407
 
174
408
  1. **配置时机**:建议在应用启动时(如 `main.js`)进行配置
175
409
  2. **权限检查**:如果未配置 `hasPermission`,默认返回 `true`(会显示警告)
176
410
  3. **BASE_URL**:如果未配置 `baseURL`,`getFileUrl` 会返回原始 URL(会显示警告)
177
411
  4. **上传方法**:如果未配置 `uploadMethod`,调用 `customUpload` 会抛出错误
412
+ 5. **Options 注册**:`setupOptions` 应在使用相关组件之前注册,建议在 `main.js` 中统一注册
413
+ 6. **Dialog 实例**:`registerDialogInstance` 是可选的,库会自动尝试获取,仅在特殊场景下需要手动注册
414
+ 7. **插件使用**:推荐使用 `CorePlugin` 或 `install` 自动注册指令,无需手动调用 `registerDirectives`
178
415
 
@@ -25,11 +25,27 @@ yarn add @xmszm/core
25
25
 
26
26
  ## 引入与基本使用
27
27
 
28
+ ### 全局引入样式(推荐)
29
+
30
+ 在项目的入口文件(如 `main.js` 或 `main.ts`)中全局引入样式:
31
+
32
+ ```javascript
33
+ // main.js 或 main.ts
34
+ import { createApp } from 'vue'
35
+ import App from './App.vue'
36
+ import '@xmszm/core/dist/style.css' // 全局引入样式
37
+
38
+ const app = createApp(App)
39
+ app.mount('#app')
40
+ ```
41
+
42
+ ### 组件中使用
43
+
28
44
  ```vue
29
45
  <script setup>
30
46
  import { ref } from 'vue'
31
47
  import { DataForm, DataTable, commonDialogMethod } from '@xmszm/core'
32
- import '@xmszm/core/dist/style.css' // 如需默认样式
48
+ // 如果已在全局引入样式,这里无需重复引入
33
49
 
34
50
  const formValue = ref({})
35
51
  const formOptions = [
@@ -73,9 +89,18 @@ src/ # 组件与工具源码
73
89
  types/ # 类型定义
74
90
  ```
75
91
 
92
+ ## 初始化配置(可选)
93
+
94
+ 如果需要配置全局设置或注册自定义控件类型,详见 [初始化配置](/guide/config):
95
+
96
+ - **全局配置**:使用 `setupConfig` 配置 API 地址、权限检查、上传方法等
97
+ - **自定义控件**:使用 `setupOptions` 注册自定义 `Options` 控件类型
98
+ - **Dialog 配置**:使用 `registerDialogInstance` 注册 Dialog 实例(可选)
99
+
76
100
  ## 常见问题
77
101
 
78
102
  - 找不到 `@/utils/...`:请在宿主项目配置 `@` 别名或提供对应实现。
79
- - 样式缺失:如需库内 less 默认样式,确保引入 `@xmszm/core/dist/style.css`。
103
+ - 样式缺失:如需库内 less 默认样式,确保引入 `@xmszm/core/dist/style.css`。**推荐在全局入口文件(如 `main.js`)中引入,这样整个项目都可以使用默认样式,无需在每个组件中重复引入。**
80
104
  - TS 类型:库内已内置 `types/index.d.ts`,可直接获得基础提示。
105
+ - 自定义控件:可以通过 `setupOptions` 注册自定义控件类型,详见 [初始化配置](/guide/config)。
81
106
 
package/docs/index.md CHANGED
@@ -16,7 +16,7 @@ features:
16
16
  - title: 配置化表单
17
17
  details: 通过 Options 定义字段,自动生成 rules,轻松构建复杂表单。
18
18
  - title: 表格增强
19
- details: 内置操作列创建器、排序、筛选、虚拟滚动与省略 tooltip。
19
+ details: 内置操作列创建器、筛选、虚拟滚动与省略 tooltip。
20
20
  - title: 弹窗集成
21
21
  details: commonDialogMethod 将表单与弹窗能力合并,减少样板代码。
22
22
  - title: 实用工具