@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.
- package/README.md +187 -0
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +1431 -1170
- 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 +91 -0
- package/docs/components/config-options.md +125 -0
- package/docs/components/dataform.md +176 -23
- package/docs/components/datatable.md +58 -39
- package/docs/components/dialog.md +158 -19
- package/docs/components/options.md +44 -15
- package/docs/components/query.md +68 -14
- package/docs/components/utils.md +124 -16
- package/docs/guide/changelog.md +81 -0
- package/docs/guide/config.md +415 -0
- package/docs/guide/demo.md +2 -2
- package/docs/guide/local-development.md +109 -0
- package/docs/guide/quickstart.md +40 -11
- package/docs/index.md +3 -3
- package/docs/usage.md +30 -6
- 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 +13 -4
- package/src/dialog/commonDialog.tsx +285 -0
- package/src/dialog/useCommonDialog.ts +41 -0
- package/src/dialog/utils/{dialog.js → dialog.ts} +2 -0
- package/src/directives/auto-register.ts +57 -0
- package/src/directives/permission.ts +67 -0
- package/src/enum/sort.tsx +45 -0
- package/src/form/DataForm.vue +34 -52
- package/src/index.ts +58 -0
- package/src/list/{useList.jsx → useList.tsx} +49 -14
- package/src/options/{Options.jsx → Options.tsx} +86 -72
- package/src/options/defaultOptions.tsx +656 -0
- package/src/plugin/index.ts +20 -0
- package/src/query/CommonQuery.vue +65 -90
- package/src/table/DataTable.vue +82 -95
- package/src/table/opr/{DataColumnCollet.jsx → DataColumnCollet.tsx} +18 -8
- package/src/table/opr/useDataColumn.tsx +226 -0
- package/src/table/opr/{useDataColumnButton.jsx → useDataColumnButton.tsx} +13 -6
- package/src/table/opr/{useDataColumnPop.jsx → useDataColumnPop.tsx} +13 -5
- package/src/table/opr/useQRCode.ts +40 -0
- package/src/utils/{array.js → array.ts} +4 -6
- package/src/utils/config.ts +192 -0
- package/src/utils/dialog.ts +110 -0
- package/src/utils/{object.js → object.ts} +1 -0
- package/src/utils/upload.ts +53 -0
- package/types/auto-imports.d.ts +78 -0
- 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 -230
- package/src/enum/sort.jsx +0 -31
- package/src/index.js +0 -46
- package/src/options/defaultOptions.jsx +0 -580
- package/src/table/opr/useDataColumn.jsx +0 -196
- package/src/utils/upload.js +0 -46
- /package/src/enum/{options.js → options.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/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
|
@@ -6,8 +6,8 @@ title: commonDialogMethod
|
|
|
6
6
|
|
|
7
7
|
## 基础用法(用函数包裹触发)
|
|
8
8
|
`commonDialogMethod` 调用即会创建并打开弹窗,推荐用一个函数包裹,在需要时再触发:
|
|
9
|
-
```
|
|
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
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
@@ -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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
|
package/docs/components/utils.md
CHANGED
|
@@ -2,13 +2,15 @@
|
|
|
2
2
|
title: 工具与常量
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
## 操作列 /
|
|
5
|
+
## 操作列 / 省略
|
|
6
6
|
|
|
7
7
|
### createActionColumnJsx
|
|
8
8
|
快速生成表格操作列。
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
```
|
|
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
|
-
```
|
|
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
|
-
|
|
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
|
+
|