@xmszm/core 0.0.1 → 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 (77) hide show
  1. package/README.md +187 -0
  2. package/dist/index.cjs +2 -2
  3. package/dist/index.mjs +1431 -1170
  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 +91 -0
  8. package/docs/components/config-options.md +125 -0
  9. package/docs/components/dataform.md +176 -23
  10. package/docs/components/datatable.md +58 -39
  11. package/docs/components/dialog.md +158 -19
  12. package/docs/components/options.md +44 -15
  13. package/docs/components/query.md +68 -14
  14. package/docs/components/utils.md +124 -16
  15. package/docs/guide/changelog.md +81 -0
  16. package/docs/guide/config.md +415 -0
  17. package/docs/guide/demo.md +2 -2
  18. package/docs/guide/local-development.md +109 -0
  19. package/docs/guide/quickstart.md +40 -11
  20. package/docs/index.md +3 -3
  21. package/docs/usage.md +30 -6
  22. package/examples/README.md +46 -0
  23. package/examples/index.html +14 -0
  24. package/examples/package.json +25 -0
  25. package/examples/pnpm-lock.yaml +1569 -0
  26. package/examples/pnpm-workspace.yaml +3 -0
  27. package/examples/src/AdminSystem.vue +870 -0
  28. package/examples/src/App.vue +330 -0
  29. package/examples/src/Introduction.vue +307 -0
  30. package/examples/src/main.js +22 -0
  31. package/examples/src/utils/permission.js +16 -0
  32. package/examples/src/utils/request.js +10 -0
  33. package/examples/vite.config.js +41 -0
  34. package/package.json +13 -4
  35. package/src/dialog/commonDialog.tsx +285 -0
  36. package/src/dialog/useCommonDialog.ts +41 -0
  37. package/src/dialog/utils/{dialog.js → dialog.ts} +2 -0
  38. package/src/directives/auto-register.ts +57 -0
  39. package/src/directives/permission.ts +67 -0
  40. package/src/enum/sort.tsx +45 -0
  41. package/src/form/DataForm.vue +34 -52
  42. package/src/index.ts +58 -0
  43. package/src/list/{useList.jsx → useList.tsx} +49 -14
  44. package/src/options/{Options.jsx → Options.tsx} +86 -72
  45. package/src/options/defaultOptions.tsx +656 -0
  46. package/src/plugin/index.ts +20 -0
  47. package/src/query/CommonQuery.vue +65 -90
  48. package/src/table/DataTable.vue +82 -95
  49. package/src/table/opr/{DataColumnCollet.jsx → DataColumnCollet.tsx} +18 -8
  50. package/src/table/opr/useDataColumn.tsx +226 -0
  51. package/src/table/opr/{useDataColumnButton.jsx → useDataColumnButton.tsx} +13 -6
  52. package/src/table/opr/{useDataColumnPop.jsx → useDataColumnPop.tsx} +13 -5
  53. package/src/table/opr/useQRCode.ts +40 -0
  54. package/src/utils/{array.js → array.ts} +4 -6
  55. package/src/utils/config.ts +192 -0
  56. package/src/utils/dialog.ts +110 -0
  57. package/src/utils/{object.js → object.ts} +1 -0
  58. package/src/utils/upload.ts +53 -0
  59. package/types/auto-imports.d.ts +78 -0
  60. package/types/components.d.ts +402 -0
  61. package/types/index.d.ts +145 -7
  62. package/types/plugin/vite/initRouteMeta.d.ts +23 -0
  63. package/types/src.d.ts +55 -0
  64. package/types/vue-shim.d.ts +9 -0
  65. package/examples/demo.vue +0 -224
  66. package/src/dialog/commonDialog.jsx +0 -230
  67. package/src/enum/sort.jsx +0 -31
  68. package/src/index.js +0 -46
  69. package/src/options/defaultOptions.jsx +0 -580
  70. package/src/table/opr/useDataColumn.jsx +0 -196
  71. package/src/utils/upload.js +0 -46
  72. /package/src/enum/{options.js → options.ts} +0 -0
  73. /package/src/plugin/vite/{initRouteMeta.js → initRouteMeta.ts} +0 -0
  74. /package/src/store/utils/{index.js → index.ts} +0 -0
  75. /package/src/table/utils/{ellipsis.js → ellipsis.ts} +0 -0
  76. /package/src/utils/{auth.js → auth.ts} +0 -0
  77. /package/src/utils/{time.js → time.ts} +0 -0
@@ -0,0 +1,415 @@
1
+ ---
2
+ title: 初始化配置
3
+ ---
4
+
5
+ # 初始化配置
6
+
7
+ `@xmszm/core` 提供了统一的初始化配置系统,用于管理外部依赖、业务配置和自定义选项注册。
8
+
9
+ ## 配置概览
10
+
11
+ | 配置项 | 说明 | 相关文档 |
12
+ |--------|------|----------|
13
+ | `setupConfig` | 全局配置(baseURL、权限、上传等) | 见下方说明 |
14
+ | `setupOptions` | 注册自定义 Options 控件类型 | 见 [Options 注册](#options-注册) |
15
+ | `registerDialogInstance` | 注册 Dialog 实例(可选) | 见 [Dialog 配置](#dialog-配置) |
16
+
17
+ ## setupConfig - 全局配置
18
+
19
+ `setupConfig` 用于配置全局设置,包括 API 地址、权限检查、上传方法等。
20
+
21
+ 在应用启动时,使用 `setupConfig` 进行统一配置:
22
+
23
+ ```javascript
24
+ import { setupConfig } from '@xmszm/core'
25
+ import axios from 'axios'
26
+
27
+ // 初始化配置
28
+ setupConfig({
29
+ // API 基础地址(用于文件 URL 拼接)
30
+ baseURL: 'https://api.example.com',
31
+
32
+ // 权限检查函数
33
+ hasPermission: (permission) => {
34
+ // 你的权限检查逻辑
35
+ const permissions = getPermissions() // 从 store、context 等获取权限列表
36
+ return permissions.includes(permission)
37
+ },
38
+
39
+ // 上传方法
40
+ uploadMethod: (config) => {
41
+ // 你的上传实现
42
+ return axios.request(config)
43
+ }
44
+ })
45
+ ```
46
+
47
+ ## 配置项说明
48
+
49
+ ### baseURL
50
+
51
+ API 基础地址,用于 `getFileUrl` 函数拼接文件 URL。
52
+
53
+ ```javascript
54
+ import { setupConfig, getFileUrl } from '@xmszm/core'
55
+
56
+ setupConfig({
57
+ baseURL: 'https://api.example.com'
58
+ })
59
+
60
+ // 使用
61
+ const url = getFileUrl('/images/avatar.jpg')
62
+ // => 'https://api.example.com/images/avatar.jpg'
63
+ ```
64
+
65
+ ### hasPermission
66
+
67
+ 权限检查函数,用于表格操作列的权限过滤。
68
+
69
+ ```javascript
70
+ import { setupConfig } from '@xmszm/core'
71
+
72
+ setupConfig({
73
+ hasPermission: (permission) => {
74
+ // 从 Vuex/Pinia store 获取权限
75
+ const store = useStore()
76
+ return store.state.permissions.includes(permission)
77
+
78
+ // 或从 localStorage 获取
79
+ // const permissions = JSON.parse(localStorage.getItem('permissions') || '[]')
80
+ // return permissions.includes(permission)
81
+ }
82
+ })
83
+
84
+ // 在 createActionColumnJsx 中使用
85
+ const opr = createActionColumnJsx([
86
+ {
87
+ label: '编辑',
88
+ permission: 'user:edit', // 会调用 hasPermission('user:edit')
89
+ onClick: (row) => edit(row)
90
+ }
91
+ ])
92
+ ```
93
+
94
+ ### uploadMethod
95
+
96
+ 上传方法实现,用于 `customUpload` 函数。
97
+
98
+ ```javascript
99
+ import { setupConfig, customUpload } from '@xmszm/core'
100
+ import axios from 'axios'
101
+
102
+ setupConfig({
103
+ uploadMethod: (config) => {
104
+ return axios.request({
105
+ ...config,
106
+ headers: {
107
+ 'Authorization': `Bearer ${getToken()}`,
108
+ ...config.headers
109
+ }
110
+ })
111
+ }
112
+ })
113
+
114
+ // 使用
115
+ await customUpload({
116
+ url: '/upload',
117
+ method: 'POST',
118
+ data: formData
119
+ })
120
+ ```
121
+
122
+ ## 兼容旧版 API
123
+
124
+ 为了向后兼容,仍然支持旧的 API:
125
+
126
+ ```javascript
127
+ import { registryUpload } from '@xmszm/core'
128
+
129
+ // 旧版方式(仍然可用,但不推荐)
130
+ registryUpload((config) => axios.request(config))
131
+ ```
132
+
133
+ ## 获取配置
134
+
135
+ 如果需要获取当前配置:
136
+
137
+ ```javascript
138
+ import { getConfig, getBaseURL, getHasPermission, getUploadMethod } from '@xmszm/core'
139
+
140
+ // 获取所有配置
141
+ const config = getConfig()
142
+
143
+ // 获取单个配置
144
+ const baseURL = getBaseURL()
145
+ const hasPermission = getHasPermission()
146
+ const uploadMethod = getUploadMethod()
147
+ ```
148
+
149
+ ## 完整示例
150
+
151
+ ```javascript
152
+ // main.js
153
+ import { createApp } from 'vue'
154
+ import { setupConfig } from '@xmszm/core'
155
+ import App from './App.vue'
156
+ import axios from 'axios'
157
+ import { useStore } from './store'
158
+
159
+ const app = createApp(App)
160
+
161
+ // 配置库
162
+ setupConfig({
163
+ baseURL: import.meta.env.VITE_API_BASE_URL || 'http://localhost:3000',
164
+
165
+ hasPermission: (permission) => {
166
+ const store = useStore()
167
+ return store.state.user.permissions?.includes(permission) ?? false
168
+ },
169
+
170
+ uploadMethod: (config) => {
171
+ return axios.request({
172
+ ...config,
173
+ headers: {
174
+ 'Authorization': `Bearer ${localStorage.getItem('token')}`,
175
+ ...config.headers
176
+ }
177
+ })
178
+ }
179
+ })
180
+
181
+ app.mount('#app')
182
+ ```
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
+
406
+ ## 注意事项
407
+
408
+ 1. **配置时机**:建议在应用启动时(如 `main.js`)进行配置
409
+ 2. **权限检查**:如果未配置 `hasPermission`,默认返回 `true`(会显示警告)
410
+ 3. **BASE_URL**:如果未配置 `baseURL`,`getFileUrl` 会返回原始 URL(会显示警告)
411
+ 4. **上传方法**:如果未配置 `uploadMethod`,调用 `customUpload` 会抛出错误
412
+ 5. **Options 注册**:`setupOptions` 应在使用相关组件之前注册,建议在 `main.js` 中统一注册
413
+ 6. **Dialog 实例**:`registerDialogInstance` 是可选的,库会自动尝试获取,仅在特殊场景下需要手动注册
414
+ 7. **插件使用**:推荐使用 `CorePlugin` 或 `install` 自动注册指令,无需手动调用 `registerDirectives`
415
+
@@ -14,7 +14,7 @@ npm install
14
14
  ```
15
15
 
16
16
  2) 在你的宿主工程中引入该组件文件(或复制内容),确保存在以下 alias:
17
- ```js
17
+ ```javascript
18
18
  // vite / webpack 示例
19
19
  resolve: {
20
20
  alias: {
@@ -55,7 +55,7 @@ import {
55
55
  CommonQuery,
56
56
  createActionColumnJsx,
57
57
  DataTable,
58
- } from 'core'
58
+ } from '@xmszm/core'
59
59
 
60
60
  // 列表数据与查询管理
61
61
  const { pageState, listQuery } = useNaivePage(() => {
@@ -0,0 +1,109 @@
1
+ # 本地开发配置
2
+
3
+ ## npm/pnpm link 时的路径解析问题
4
+
5
+ 当使用 `npm link` 或 `pnpm link` 进行本地开发时,Vite 可能无法正确解析链接包的路径。这是因为:
6
+
7
+ 1. **符号链接解析问题**:npm/pnpm link 创建的是符号链接,Vite 的模块解析在处理符号链接时可能失败
8
+ 2. **package.json exports**:链接包的 `exports` 字段路径解析可能不生效
9
+ 3. **CSS 文件路径**:样式文件的路径解析尤其容易出问题
10
+
11
+ ## 最小化配置方案
12
+
13
+ 在测试项目的 `vite.config.js` 中添加以下配置即可:
14
+
15
+ ```javascript
16
+ import { defineConfig } from 'vite'
17
+ import vue from '@vitejs/plugin-vue'
18
+ import vueJsx from '@vitejs/plugin-vue-jsx'
19
+ import path from 'path'
20
+
21
+ export default defineConfig({
22
+ plugins: [vue(), vueJsx()],
23
+ resolve: {
24
+ alias: {
25
+ '@': path.resolve(__dirname, 'src'),
26
+ // 解决 npm/pnpm link 时的路径解析问题
27
+ '@xmszm/core': path.resolve(__dirname, '..'), // 指向库项目根目录
28
+ '@xmszm/core/dist/style.css': path.resolve(__dirname, '../dist/style.css'),
29
+ },
30
+ },
31
+ server: {
32
+ port: 3000,
33
+ open: true
34
+ }
35
+ })
36
+ ```
37
+
38
+ ## 为什么需要这个配置?
39
+
40
+ ### 问题 1: 模块无法解析
41
+
42
+ **错误信息**:
43
+ ```
44
+ Failed to resolve import "@xmszm/core" from "src/App.vue"
45
+ ```
46
+
47
+ **原因**:
48
+ - npm/pnpm link 创建的符号链接路径可能无法被 Vite 正确识别
49
+ - 链接路径如 `link:C:/Users/admin/AppData/Local/pnpm/global/5/node_modules/@xmszm/core` 可能解析失败
50
+
51
+ **解决方案**:
52
+ ```javascript
53
+ '@xmszm/core': path.resolve(__dirname, '..')
54
+ ```
55
+ 直接指向源项目根目录,绕过符号链接解析问题。
56
+
57
+ ### 问题 2: 样式文件无法解析
58
+
59
+ **错误信息**:
60
+ ```
61
+ Failed to resolve import "@xmszm/core/dist/style.css"
62
+ ```
63
+
64
+ **原因**:
65
+ - CSS 文件的路径解析在链接包中更容易失败
66
+ - `exports` 字段对 CSS 文件的处理可能不一致
67
+
68
+ **解决方案**:
69
+ ```javascript
70
+ '@xmszm/core/dist/style.css': path.resolve(__dirname, '../dist/style.css')
71
+ ```
72
+ 直接指向源项目的样式文件。
73
+
74
+ ## 生产环境使用
75
+
76
+ 在生产环境中(通过 npm 安装),**不需要**这些配置,因为:
77
+
78
+ 1. 正常安装的包路径解析没有问题
79
+ 2. `package.json` 的 `exports` 字段会正确工作
80
+ 3. Vite 可以正确解析 `node_modules` 中的包
81
+
82
+ ## 完整示例
83
+
84
+ ```javascript
85
+ // vite.config.js
86
+ import { defineConfig } from 'vite'
87
+ import vue from '@vitejs/plugin-vue'
88
+ import vueJsx from '@vitejs/plugin-vue-jsx'
89
+ import path from 'path'
90
+
91
+ export default defineConfig({
92
+ plugins: [vue(), vueJsx()],
93
+ resolve: {
94
+ alias: {
95
+ '@': path.resolve(__dirname, 'src'),
96
+ // 仅在使用 npm/pnpm link 时需要
97
+ '@xmszm/core': path.resolve(__dirname, '..'),
98
+ '@xmszm/core/dist/style.css': path.resolve(__dirname, '../dist/style.css'),
99
+ },
100
+ },
101
+ })
102
+ ```
103
+
104
+ ## 注意事项
105
+
106
+ 1. **仅本地开发需要**:这个配置只在本地开发(使用 link)时需要
107
+ 2. **相对路径**:`path.resolve(__dirname, '..')` 假设测试项目在库项目的 `test-app` 目录下
108
+ 3. **路径调整**:如果目录结构不同,需要相应调整路径
109
+
@@ -5,27 +5,47 @@ title: 快速开始
5
5
  ## 安装
6
6
 
7
7
  ```bash
8
- npm install core
8
+ npm install @xmszm/core
9
+ # 或
10
+ pnpm add @xmszm/core
11
+ # 或
12
+ yarn add @xmszm/core
9
13
  ```
10
14
 
11
15
  同时请在项目中安装(或确保已存在)以下 peer 依赖(版本可按你项目统一):
12
16
 
13
- - vue 3.x
14
- - naive-ui
15
- - vue-router
16
- - dayjs
17
- - lodash-es
18
- - @vicons/ionicons5
17
+ - `vue` >= 3.3.0
18
+ - `naive-ui` >= 2.38.0
19
+ - `vue-router` >= 4.2.0
20
+ - `dayjs` >= 1.11.0
21
+ - `lodash-es` >= 4.17.21
22
+ - `@vicons/ionicons5` >= 0.13.0
19
23
 
20
24
  > 若项目使用 `@` 路径别名,请确认在构建/运行配置中存在相同的 alias。
21
25
 
22
26
  ## 引入与基本使用
23
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
+
24
44
  ```vue
25
45
  <script setup>
26
46
  import { ref } from 'vue'
27
- import { DataForm, DataTable, commonDialogMethod } from 'core'
28
- import 'core/dist/style.css' // 如需默认样式
47
+ import { DataForm, DataTable, commonDialogMethod } from '@xmszm/core'
48
+ // 如果已在全局引入样式,这里无需重复引入
29
49
 
30
50
  const formValue = ref({})
31
51
  const formOptions = [
@@ -62,16 +82,25 @@ function openDialog() {
62
82
 
63
83
  ## 目录结构建议
64
84
 
65
- ```
85
+ ```text
66
86
  docs/ # VitePress 文档
67
87
  examples/demo.vue # 可运行的最小示例
68
88
  src/ # 组件与工具源码
69
89
  types/ # 类型定义
70
90
  ```
71
91
 
92
+ ## 初始化配置(可选)
93
+
94
+ 如果需要配置全局设置或注册自定义控件类型,详见 [初始化配置](/guide/config):
95
+
96
+ - **全局配置**:使用 `setupConfig` 配置 API 地址、权限检查、上传方法等
97
+ - **自定义控件**:使用 `setupOptions` 注册自定义 `Options` 控件类型
98
+ - **Dialog 配置**:使用 `registerDialogInstance` 注册 Dialog 实例(可选)
99
+
72
100
  ## 常见问题
73
101
 
74
102
  - 找不到 `@/utils/...`:请在宿主项目配置 `@` 别名或提供对应实现。
75
- - 样式缺失:如需库内 less 默认样式,确保引入 `core/dist/style.css`。
103
+ - 样式缺失:如需库内 less 默认样式,确保引入 `@xmszm/core/dist/style.css`。**推荐在全局入口文件(如 `main.js`)中引入,这样整个项目都可以使用默认样式,无需在每个组件中重复引入。**
76
104
  - TS 类型:库内已内置 `types/index.d.ts`,可直接获得基础提示。
105
+ - 自定义控件:可以通过 `setupOptions` 注册自定义控件类型,详见 [初始化配置](/guide/config)。
77
106
 
package/docs/index.md CHANGED
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  layout: home
3
- title: Nex Core
3
+ title: '@xmszm/core'
4
4
  hero:
5
- name: Nex Core
5
+ name: '@xmszm/core'
6
6
  text: Vue 3 + Naive UI 的表单、表格、弹窗与工具集合
7
7
  tagline: 开箱即用的配置式表单与表格方案,内置弹窗、上传、权限、路由工具。
8
8
  actions:
@@ -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: 实用工具
package/docs/usage.md CHANGED
@@ -2,18 +2,41 @@
2
2
 
3
3
  ## 安装
4
4
  ```bash
5
- npm install core
5
+ npm install @xmszm/core
6
+ # 或
7
+ pnpm add @xmszm/core
8
+ # 或
9
+ yarn add @xmszm/core
6
10
  ```
7
11
 
8
- 需要同时安装的 peer 依赖(版本可按项目统一):`vue`、`naive-ui`、`vue-router`、`dayjs`、`lodash-es`、`@vicons/ionicons5`。
12
+ 需要同时安装的 peer 依赖(版本可按项目统一):
13
+ - `vue` >= 3.3.0
14
+ - `naive-ui` >= 2.38.0
15
+ - `vue-router` >= 4.2.0
16
+ - `dayjs` >= 1.11.0
17
+ - `lodash-es` >= 4.17.21
18
+ - `@vicons/ionicons5` >= 0.13.0
19
+
9
20
  如项目使用 `@` 别名,请确保存在对应的打包/运行时配置。
10
21
 
11
22
  ## 快速开始
23
+
24
+ ### 全局引入样式(推荐)
25
+
26
+ 在项目的入口文件中全局引入样式:
27
+
28
+ ```javascript
29
+ // main.js 或 main.ts
30
+ import '@xmszm/core/dist/style.css'
31
+ ```
32
+
33
+ ### 组件中使用
34
+
12
35
  ```vue
13
36
  <script setup>
14
37
  import { ref } from 'vue'
15
- import { DataForm, DataTable, commonDialogMethod } from 'core'
16
- import 'core/dist/style.css' // 如需默认样式
38
+ import { DataForm, DataTable, commonDialogMethod } from '@xmszm/core'
39
+ // 如果已在全局引入样式,这里无需重复引入
17
40
 
18
41
  const formValue = ref({})
19
42
  const formOptions = [
@@ -50,12 +73,13 @@ function openDialog() {
50
73
 
51
74
  ## 主要导出清单
52
75
  - 组件:`DataForm`、`Options`、`CommonQuery`、`DataTable`、`OprButton`、`Pop`
53
- - 方法:`commonDialogMethod`、`createActionColumnJsx`、`initRules`
76
+ - 方法:`commonDialogMethod`、`createActionColumnJsx`、`initRules`(用于自动生成表单校验规则)
54
77
  - 工具:`toArray`、`ArrayToObject`、`ObjectToArray`、`customUpload`、`registryUpload`、`getFileUrl`
55
- - 常量:`orderEnum`、`globalLabelField`、`globalValueField`
78
+ - 常量:`globalLabelField`(默认 `'name'`)、`globalValueField`(默认 `'id'`)
56
79
  - 路由辅助:`initRouteMeta`、`useApiConfig`、`useAuthPermission`、`cellectChildenPermission`
57
80
 
58
81
  ## 常见提示
59
82
  - 若打包时报 `@/utils/...` 未找到,请在宿主项目配置 `@` 路径或提供对应实现。
83
+ - **样式引入**:推荐在全局入口文件(`main.js` 或 `main.ts`)中引入 `@xmszm/core/dist/style.css`,这样整个项目都可以使用默认样式,无需在每个组件中重复引入。
60
84
  - Vue TS 项目可直接使用内置 `types/index.d.ts` 获取基础类型提示。
61
85