@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.
- package/README.md +10 -1
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +1296 -1285
- package/dist/plugin/vite/initRouteMeta.cjs +1 -0
- package/dist/plugin/vite/initRouteMeta.mjs +13 -0
- package/dist/style.css +1 -1
- package/docs/.vitepress/config.mjs +10 -1
- package/docs/components/config-options.md +125 -0
- package/docs/components/dataform.md +175 -22
- package/docs/components/datatable.md +21 -39
- package/docs/components/dialog.md +155 -16
- package/docs/components/options.md +43 -14
- package/docs/components/query.md +20 -12
- package/docs/components/utils.md +118 -10
- package/docs/guide/changelog.md +81 -0
- package/docs/guide/config.md +241 -4
- package/docs/guide/quickstart.md +27 -2
- package/docs/index.md +1 -1
- package/docs/usage.md +16 -3
- package/examples/README.md +46 -0
- package/examples/index.html +14 -0
- package/examples/package.json +25 -0
- package/examples/pnpm-lock.yaml +1569 -0
- package/examples/pnpm-workspace.yaml +3 -0
- package/examples/src/AdminSystem.vue +870 -0
- package/examples/src/App.vue +330 -0
- package/examples/src/Introduction.vue +307 -0
- package/examples/src/main.js +22 -0
- package/examples/src/utils/permission.js +16 -0
- package/examples/src/utils/request.js +10 -0
- package/examples/vite.config.js +41 -0
- package/package.json +10 -4
- package/src/dialog/commonDialog.tsx +285 -0
- package/src/dialog/utils/{dialog.js → dialog.ts} +2 -0
- package/src/enum/sort.tsx +45 -0
- package/src/form/DataForm.vue +26 -52
- package/src/{index.js → index.ts} +7 -6
- package/src/list/{useList.jsx → useList.tsx} +49 -14
- package/src/options/{Options.jsx → Options.tsx} +37 -36
- package/src/options/defaultOptions.tsx +656 -0
- package/src/query/CommonQuery.vue +57 -89
- package/src/table/DataTable.vue +60 -94
- package/src/table/opr/{DataColumnCollet.jsx → DataColumnCollet.tsx} +18 -8
- package/src/table/opr/{useDataColumn.jsx → useDataColumn.tsx} +43 -48
- package/src/table/opr/{useDataColumnButton.jsx → useDataColumnButton.tsx} +13 -6
- package/src/table/opr/{useDataColumnPop.jsx → useDataColumnPop.tsx} +13 -5
- package/src/utils/{array.js → array.ts} +4 -6
- package/src/utils/{config.js → config.ts} +16 -2
- package/src/utils/{dialog.js → dialog.ts} +2 -2
- package/src/utils/{object.js → object.ts} +1 -0
- package/src/utils/{upload.js → upload.ts} +3 -3
- package/types/components.d.ts +402 -0
- package/types/index.d.ts +145 -7
- package/types/plugin/vite/initRouteMeta.d.ts +23 -0
- package/types/src.d.ts +55 -0
- package/types/vue-shim.d.ts +9 -0
- package/examples/demo.vue +0 -224
- package/src/dialog/commonDialog.jsx +0 -262
- package/src/enum/sort.jsx +0 -31
- package/src/options/defaultOptions.jsx +0 -580
- /package/src/dialog/{useCommonDialog.js → useCommonDialog.ts} +0 -0
- /package/src/directives/{auto-register.js → auto-register.ts} +0 -0
- /package/src/directives/{permission.js → permission.ts} +0 -0
- /package/src/enum/{options.js → options.ts} +0 -0
- /package/src/plugin/{index.js → index.ts} +0 -0
- /package/src/plugin/vite/{initRouteMeta.js → initRouteMeta.ts} +0 -0
- /package/src/store/utils/{index.js → index.ts} +0 -0
- /package/src/table/opr/{useQRCode.js → useQRCode.ts} +0 -0
- /package/src/table/utils/{ellipsis.js → ellipsis.ts} +0 -0
- /package/src/utils/{auth.js → auth.ts} +0 -0
- /package/src/utils/{time.js → time.ts} +0 -0
|
@@ -31,25 +31,54 @@ const option = [
|
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
## Props
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
- `
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
|
package/docs/components/query.md
CHANGED
|
@@ -73,23 +73,31 @@ function handleReset() {
|
|
|
73
73
|
```
|
|
74
74
|
|
|
75
75
|
## Props
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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
|
|
package/docs/components/utils.md
CHANGED
|
@@ -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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
+
|
package/docs/guide/config.md
CHANGED
|
@@ -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
|
|
package/docs/guide/quickstart.md
CHANGED
|
@@ -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
|
-
|
|
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:
|
|
19
|
+
details: 内置操作列创建器、筛选、虚拟滚动与省略 tooltip。
|
|
20
20
|
- title: 弹窗集成
|
|
21
21
|
details: commonDialogMethod 将表单与弹窗能力合并,减少样板代码。
|
|
22
22
|
- title: 实用工具
|