@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
@@ -6,8 +6,8 @@ title: commonDialogMethod
6
6
 
7
7
  ## 基础用法(用函数包裹触发)
8
8
  `commonDialogMethod` 调用即会创建并打开弹窗,推荐用一个函数包裹,在需要时再触发:
9
- ```js
10
- import { commonDialogMethod } from 'core'
9
+ ```javascript
10
+ import { commonDialogMethod } from '@xmszm/core'
11
11
 
12
12
  function openEditDialog(row) {
13
13
  const { cancel, model } = commonDialogMethod(
@@ -34,27 +34,43 @@ function openEditDialog(row) {
34
34
  openEditDialog(currentRow)
35
35
  ```
36
36
 
37
- ## 参数(主要)
38
- - `title / noTitle / titleFull`:标题配置。
39
- - `options: Array` 表单项,直接传给 `DataForm`。
40
- - `mode` 与 `modeEnum`:内置 `create/add/edit/view/import/export/delete/copy/none`,`view` 会自动只读。
41
- - `labelField`:默认 `label`。
42
- - `isNo`:内容最小高度控制。
43
- - `formProps`、`contentStyle`:透传 `DataForm`。
44
- - `action`:自定义底部按钮数组或函数;不传则使用默认“取消 / 确定”。
45
- - `actionProps`:NSpace/按钮样式补充。
46
- - `interfaceFn`:点击默认“确定”时执行,入参 `(model, { close, hideLoading })`。
47
- - `interfaceFnCancel`:点击默认“取消”时执行。
48
- - `read / isRead`:只读模式。
37
+ ## 参数
38
+
39
+ | 字段名 | 必填 | 类型 | 说明 |
40
+ |--------|------|------|------|
41
+ | `title` | 否 | `string` | 弹窗标题,默认 `''` |
42
+ | `noTitle` | 否 | `boolean` | 是否隐藏标题,默认 `false` |
43
+ | `titleFull` | 否 | `Function \| string` | 自定义标题渲染函数或完整标题 |
44
+ | `options` | 否 | `Array` | 表单项配置,直接传给 `DataForm`,默认 `[]` |
45
+ | `mode` | 否 | `string` | 模式,默认 `'add'`。支持的枚举值见 [commonDialogMethod Mode 枚举](/components/config-options#commondialogmethod-mode-枚举) |
46
+ | `modeEnum` | 否 | `Object` | 自定义模式枚举,会与默认模式合并 |
47
+ | `labelField` | 否 | `string` | label 字段名,默认 `'label'` |
48
+ | `isNo` | 否 | `boolean` | 内容最小高度控制,默认 `true` |
49
+ | `formProps` | 否 | `Object` | 透传给 `DataForm` 的 `formProps`,默认 `{}` |
50
+ | `contentStyle` | 否 | `Object` | 透传给 `DataForm` 的 `contentStyle`,默认 `{}` |
51
+ | `action` | 否 | `Array \| Function` | 自定义底部按钮数组或函数;不传则使用默认“取消 / 确定” |
52
+ | `actionProps` | 否 | `Object` | NSpace/按钮样式补充,默认 `{}` |
53
+ | `interfaceFn` | 否 | `Function` | 点击默认“确定”时执行,入参 `(model, { close, hideLoading })` |
54
+ | `interfaceFnCancel` | 否 | `Function` | 点击默认“取消”时执行,入参 `(model, { close })` |
55
+ | `read` | 否 | `boolean` | 只读模式,默认 `false` |
56
+ | `isRead` | 否 | `boolean` | 只读模式(与 `read` 同义),默认 `false` |
57
+ | `valueData` | 否 | `Object` | 表单初始数据,默认 `{}` |
58
+ | `dialogProps` | 否 | `Object` | 透传给 `n-dialog` 的属性(第二个参数) |
49
59
 
50
60
  ## 返回值
51
- - `cancel()` 关闭弹窗。
52
- - `setValue(v, key?)` 设置表单数据。
53
- - `model` 响应式数据快照。
54
- - `modeEnum` 默认模式枚举。
61
+
62
+ | 字段名 | 类型 | 说明 |
63
+ |--------|------|------|
64
+ | `cancel` | `() => void` | 关闭弹窗的方法 |
65
+ | `setValue` | `(v: any, key?: string) => void` | 设置表单数据,`key` 为空时更新整个表单对象 |
66
+ | `model` | `Ref<Object>` | 响应式表单数据快照 |
67
+ | `modeEnum` | `Object` | 默认模式枚举对象 |
55
68
 
56
69
  ## 自定义动作
57
- ```js
70
+
71
+ `action` 参数支持数组或函数,数组项配置详见 [commonDialogMethod Action 配置](/components/config-options#commondialogmethod-action-配置)。
72
+
73
+ ```javascript
58
74
  commonDialogMethod({
59
75
  action: [
60
76
  { label: '关闭', mode: 'cancel' },
@@ -71,8 +87,131 @@ commonDialogMethod({
71
87
  })
72
88
  ```
73
89
 
90
+ ## useCommonDialog Hook
91
+
92
+ 在组件中使用 `commonDialogMethod` 的便捷方式,自动注册 Dialog 实例。
93
+
94
+ ### 基础用法
95
+
96
+ ```javascript
97
+ import { useCommonDialog } from '@xmszm/core'
98
+
99
+ export default {
100
+ setup() {
101
+ const openDialog = useCommonDialog()
102
+
103
+ const handleEdit = (row) => {
104
+ openDialog({
105
+ title: '编辑',
106
+ options: [
107
+ { key: 'name', label: '名称', way: 'input', required: true },
108
+ ],
109
+ valueData: row,
110
+ interfaceFn: async (data, { close }) => {
111
+ await save(data)
112
+ close()
113
+ },
114
+ })
115
+ }
116
+
117
+ return { handleEdit }
118
+ },
119
+ }
120
+ ```
121
+
122
+ ### 在 Composition API 中使用
123
+
124
+ ```javascript
125
+ import { useCommonDialog } from '@xmszm/core'
126
+
127
+ const openDialog = useCommonDialog()
128
+
129
+ function handleAdd() {
130
+ openDialog({
131
+ title: '新增',
132
+ options: formOptions,
133
+ interfaceFn: async (data, { close }) => {
134
+ await create(data)
135
+ close()
136
+ },
137
+ })
138
+ }
139
+ ```
140
+
141
+ ## Dialog 工具函数
142
+
143
+ ### createDialog
144
+
145
+ 使用 dialog 的工具函数,需要手动传入 dialog 实例。
146
+
147
+ ```javascript
148
+ import { useDialog } from 'naive-ui'
149
+ import { createDialog } from '@xmszm/core'
150
+
151
+ const dialog = useDialog()
152
+
153
+ // 创建自定义弹窗
154
+ const { destroy } = createDialog(dialog, {
155
+ title: '提示',
156
+ content: '这是一个自定义弹窗',
157
+ })
158
+ ```
159
+
160
+ ### createDialogMethods
161
+
162
+ 创建 Dialog 快捷方法(info、success、warning、error、create)。
163
+
164
+ ```javascript
165
+ import { useDialog } from 'naive-ui'
166
+ import { createDialogMethods } from '@xmszm/core'
167
+
168
+ const dialog = useDialog()
169
+ const dialogMethods = createDialogMethods(dialog)
170
+
171
+ // 使用快捷方法
172
+ dialogMethods.info({
173
+ title: '信息',
174
+ content: '这是一条信息',
175
+ })
176
+
177
+ dialogMethods.success({
178
+ title: '成功',
179
+ content: '操作成功',
180
+ })
181
+
182
+ dialogMethods.warning({
183
+ title: '警告',
184
+ content: '请注意',
185
+ })
186
+
187
+ dialogMethods.error({
188
+ title: '错误',
189
+ content: '操作失败',
190
+ })
191
+ ```
192
+
193
+ ### createDialogOptions
194
+
195
+ 创建 dialog 配置,应用主题色继承设置。通常用于自定义 Dialog 主题。
196
+
197
+ ```javascript
198
+ import { useDialog } from 'naive-ui'
199
+ import { createDialogOptions } from '@xmszm/core'
200
+
201
+ const dialog = useDialog()
202
+
203
+ const options = createDialogOptions({
204
+ title: '自定义主题',
205
+ content: '内容',
206
+ })
207
+
208
+ dialog.create(options)
209
+ ```
210
+
74
211
  ## 小贴士
75
212
  - 表单校验委托给 `DataForm`,`valid: true` 时自动调用 `formRef.valid()`。
76
213
  - 只读场景可用 `mode: 'view'`,或直接传 `read: true`。
77
214
  - 若需要自定义 header,可传 `titleFull` 为渲染函数。
215
+ - 在组件中推荐使用 `useCommonDialog` Hook,它会自动处理 Dialog 实例注册。
216
+ - `createDialog`、`createDialogMethods`、`createDialogOptions` 适用于需要更细粒度控制的场景。
78
217
 
@@ -8,7 +8,7 @@ title: Options(动态项渲染)
8
8
  ```vue
9
9
  <script setup>
10
10
  import { ref } from 'vue'
11
- import { Options } from 'core'
11
+ import { Options } from '@xmszm/core'
12
12
 
13
13
  const model = ref({})
14
14
  const formRef = ref()
@@ -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
 
@@ -8,7 +8,7 @@ title: CommonQuery
8
8
  ```vue
9
9
  <script setup>
10
10
  import { ref } from 'vue'
11
- import { CommonQuery } from 'core'
11
+ import { CommonQuery } from '@xmszm/core'
12
12
 
13
13
  const query = ref({})
14
14
  const options = [
@@ -22,28 +22,82 @@ function onSubmit() {
22
22
  </script>
23
23
 
24
24
  <template>
25
- <CommonQuery v-model:query="query" :options="options" @submit="onSubmit" />
25
+ <CommonQuery v-model:query="query" :options="options" @submit="onSubmit" @reset="onReset" />
26
+ </template>
27
+ ```
28
+
29
+ ### 完整示例(结合分页)
30
+
31
+ ```vue
32
+ <script setup>
33
+ import { reactive } from 'vue'
34
+ import { CommonQuery } from '@xmszm/core'
35
+
36
+ const listQuery = reactive({
37
+ page: 1,
38
+ pageSize: 10,
39
+ likeQuery: {
40
+ keyword: '',
41
+ type: '',
42
+ },
43
+ })
44
+
45
+ const queryOptions = [
46
+ { label: '关键词', key: 'keyword', queryType: 'likeQuery', way: 'input' },
47
+ { label: '类型', key: 'type', queryType: 'likeQuery', way: 'select', options: [
48
+ { label: '类型A', value: 'A' },
49
+ { label: '类型B', value: 'B' }
50
+ ]},
51
+ ]
52
+
53
+ function handleSearch() {
54
+ listQuery.page = 1
55
+ fetchData()
56
+ }
57
+
58
+ function handleReset() {
59
+ listQuery.likeQuery = { keyword: '', type: '' }
60
+ listQuery.page = 1
61
+ fetchData()
62
+ }
63
+ </script>
64
+
65
+ <template>
66
+ <CommonQuery
67
+ :query="listQuery"
68
+ :options="queryOptions"
69
+ @submit="handleSearch"
70
+ @reset="handleReset"
71
+ />
26
72
  </template>
27
73
  ```
28
74
 
29
75
  ## Props
30
- - `options: Array` 查询项配置,规则同 `Options`。
31
- - `query (v-model:query): Object` 查询对象。
32
- - `inlineText: boolean` 布局控制。
33
- - `selectCount: number` 默认 1。
34
- - `type: string` 按钮类型(传给 `NButton`)。
35
- - `noButton: boolean` 隐藏底部按钮区。
36
- - `btn: string[]` 默认 `['reset', 'search']`。
37
- - `size: string` 传入控件尺寸。
38
- - `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` |
39
88
 
40
89
  ## 事件
41
- - `update:query` 双向绑定。
42
- - `submit` 点击搜索或回车触发(内置 500ms 防抖)。
43
- - `reset` 重置查询模型。
90
+
91
+ | 事件名 | 类型 | 说明 |
92
+ |--------|------|------|
93
+ | `update:query` | `(query: Object) => void` | 查询对象变化时触发,用于 v-model 双向绑定 |
94
+ | `submit` | `() => void` | 点击搜索或回车触发(内置 500ms 防抖) |
95
+ | `reset` | `() => void` | 重置查询模型时触发 |
44
96
 
45
97
  ## 特性
46
98
  - 默认监听全局 Enter 键以触发搜索。
47
99
  - 为 `input`/`select` 自动绑定 `onUpdateValue`,输入即触发防抖搜索,可通过 `props.onUpdateValue` 自定义。
48
100
  - `formProps` 默认关闭校验反馈,适合轻量搜索区域。
101
+ - `options` 配置项支持 `queryType` 字段,用于指定查询参数类型,详见 [CommonQuery queryType 说明](/components/config-options#commonquery-querytype-说明)。
102
+ - `options` 中的 `way` 字段支持自定义控件类型,可通过 `setupOptions` 注册,详见 [初始化配置 - Options 注册](/guide/config#options-注册)。
49
103
 
@@ -2,13 +2,15 @@
2
2
  title: 工具与常量
3
3
  ---
4
4
 
5
- ## 操作列 / 排序 / 省略
5
+ ## 操作列 / 省略
6
6
 
7
7
  ### createActionColumnJsx
8
8
  快速生成表格操作列。
9
9
 
10
- ```js
11
- import { createActionColumnJsx } from 'core'
10
+ 配置项说明详见 [createActionColumnJsx 配置](/components/config-options#createactioncolumnjsx-配置)。
11
+
12
+ ```javascript
13
+ import { createActionColumnJsx } from '@xmszm/core'
12
14
 
13
15
  const oprColumn = createActionColumnJsx(
14
16
  [
@@ -20,31 +22,137 @@ 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
- ```js
31
- import { ellipsis } from 'core/table/utils/ellipsis'
27
+ ```javascript
28
+ import { ellipsis } from '@xmszm/core/table/utils/ellipsis'
32
29
  ```
33
30
 
34
31
  ## 上传工具
35
- ```js
36
- import { registryUpload, customUpload, getFileUrl } from 'core'
32
+ ```javascript
33
+ import { registryUpload, customUpload, getFileUrl } from '@xmszm/core'
37
34
 
38
35
  registryUpload((config) => axios.request(config)) // 注册实际上传实现
39
36
  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
+