auto-gen-crud 0.1.0 → 0.1.2
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/API.md +92 -10
- package/README.md +87 -48
- package/dist/adapters/element-plus.d.ts +1 -1
- package/dist/adapters/index.js +1 -1
- package/dist/adapters/types.d.ts +14 -0
- package/dist/components/{AutoCrud.vue.d.ts → AutoGenCrud.vue.d.ts} +33 -8
- package/dist/components/CrudModal.vue.d.ts +3 -0
- package/dist/components/DynamicForm.vue.d.ts +3 -0
- package/dist/components/DynamicTable.vue.d.ts +11 -3
- package/dist/context.d.ts +9 -9
- package/dist/core/types.d.ts +184 -14
- package/dist/generator/index.js +400 -372
- package/dist/generator/index.js.map +1 -1
- package/dist/generator/templates.d.ts +1 -1
- package/dist/generator/writer.d.ts +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.js +5 -3
- package/dist/hooks/useCrudPage.d.ts +18 -0
- package/dist/hooks/useSearchForm.d.ts +1 -1
- package/dist/{index-Dc-solHn.js → index-DQzg4GMa.js} +92 -63
- package/dist/index-DQzg4GMa.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +617 -520
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts +4 -4
- package/dist/style.css +1 -1
- package/dist/useCrudPage-CJTCLLN_.js +390 -0
- package/dist/useCrudPage-CJTCLLN_.js.map +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/request.d.ts +1 -1
- package/docs/AI_AGENT_GUIDE.md +10 -10
- package/mcp/auto-gen-crud-mcp.mjs +13 -13
- package/package.json +11 -2
- package/skills/auto-gen-crud-agent/SKILL.md +9 -9
- package/dist/index-Dc-solHn.js.map +0 -1
- package/dist/useTable-BwDSqD1q.js +0 -214
- package/dist/useTable-BwDSqD1q.js.map +0 -1
- package/mcp/auto-crud-mcp.mjs +0 -502
package/API.md
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# auto-gen-crud API
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## createAutoGenCrud
|
|
4
4
|
|
|
5
5
|
```ts
|
|
6
|
-
|
|
6
|
+
createAutoGenCrud(options?: AutoGenCrudInstallOptions)
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
用于初始化全局配置。UI 只在这里配置一次。
|
|
10
10
|
|
|
11
|
-
###
|
|
11
|
+
### AutoGenCrudInstallOptions
|
|
12
12
|
|
|
13
13
|
| 字段 | 类型 | 默认值 | 说明 |
|
|
14
14
|
| --- | --- | --- | --- |
|
|
@@ -38,6 +38,84 @@ const searchForm = useSearchForm(options)
|
|
|
38
38
|
| `addButton` | 是否显示默认新增按钮。 |
|
|
39
39
|
| `addButtonText` | 默认新增按钮文案。 |
|
|
40
40
|
|
|
41
|
+
## useCrudPage
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
const { searchForm, table, modalForm, actions } = useCrudPage({
|
|
45
|
+
context,
|
|
46
|
+
actions,
|
|
47
|
+
search,
|
|
48
|
+
table,
|
|
49
|
+
modal,
|
|
50
|
+
})
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
标准 CRUD 页面组合 hook。它内部复用 `useSearchForm`、`useTable`、`useModalForm`,并内置 `add/edit/view/reload/resetTable/closeModal` 标准动作。
|
|
54
|
+
|
|
55
|
+
### 约定
|
|
56
|
+
|
|
57
|
+
| 字段 | 说明 |
|
|
58
|
+
| --- | --- |
|
|
59
|
+
| `context` | 页面状态、权限、字典、开关。 |
|
|
60
|
+
| `actions` | 页面业务函数,例如 `getDataList`、`submit`、`delete`。 |
|
|
61
|
+
| `search` | `UseSearchFormOptions` 或返回该 options 的函数。 |
|
|
62
|
+
| `table` | `UseTableOptions` 或返回该 options 的函数。 |
|
|
63
|
+
| `modal` | `UseModalFormOptions` 或返回该 options 的函数。 |
|
|
64
|
+
|
|
65
|
+
`useCrudPage` 不解析接口返回结构,列表请求仍由业务在 `actions.getDataList` 中显式写入 `table.data` 和 `table.pagination.total`。
|
|
66
|
+
|
|
67
|
+
普通页面推荐直接传 actions 对象:
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
useCrudPage({
|
|
71
|
+
actions: {
|
|
72
|
+
submit,
|
|
73
|
+
getDataList,
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
如果业务动作需要在定义时统一接收 `searchForm/table/modalForm/context`,仍可传函数:
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
useCrudPage({
|
|
82
|
+
actions: ({ table }) => ({
|
|
83
|
+
batchDelete() {
|
|
84
|
+
console.log(table.selectedRows);
|
|
85
|
+
},
|
|
86
|
+
}),
|
|
87
|
+
});
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### 生成器 helper
|
|
91
|
+
|
|
92
|
+
生成器会在 `config/defineConfig.ts` 中用包内 `createCrudPageConfigHelpers` 绑定当前页面类型:
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
import { createCrudPageConfigHelpers } from "auto-gen-crud";
|
|
96
|
+
import type { PageActionsType, PageContextType, RowType, SearchParamsType } from "../api/types";
|
|
97
|
+
|
|
98
|
+
export const {
|
|
99
|
+
defineSearchConfig,
|
|
100
|
+
defineTableConfig,
|
|
101
|
+
defineModalConfig,
|
|
102
|
+
} = createCrudPageConfigHelpers<RowType, SearchParamsType, PageContextType, PageActionsType>();
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
业务配置文件推荐写成:
|
|
106
|
+
|
|
107
|
+
```ts
|
|
108
|
+
import { defineTableConfig } from "./defineConfig";
|
|
109
|
+
|
|
110
|
+
export const getTableConfig = defineTableConfig(({ context, actions }) => ({
|
|
111
|
+
columns: [
|
|
112
|
+
{ title: "名称", field: "name" },
|
|
113
|
+
{ title: "操作", actions: [{ key: "edit", label: "编辑", onClick: actions.edit }] },
|
|
114
|
+
],
|
|
115
|
+
getDataList: actions.getDataList,
|
|
116
|
+
}));
|
|
117
|
+
```
|
|
118
|
+
|
|
41
119
|
## useTable
|
|
42
120
|
|
|
43
121
|
```ts
|
|
@@ -49,17 +127,21 @@ const table = useTable(options)
|
|
|
49
127
|
### getDataList
|
|
50
128
|
|
|
51
129
|
```ts
|
|
52
|
-
async function getDataList(
|
|
53
|
-
const {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
130
|
+
async function getDataList() {
|
|
131
|
+
const { page, pageSize } = table.pagination;
|
|
132
|
+
const result = await queryList({
|
|
133
|
+
currentPage: page,
|
|
134
|
+
pageSize,
|
|
135
|
+
...searchForm.data,
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
table.data = result.records;
|
|
139
|
+
table.pagination.total = result.total;
|
|
58
140
|
}
|
|
59
141
|
```
|
|
60
142
|
|
|
61
143
|
设计原因:每个项目接口分页字段和返回结构都不同,所以新包不写死请求逻辑。
|
|
62
|
-
|
|
144
|
+
请求完成后由业务明确写入 `table.data` 和 `table.pagination.total`。
|
|
63
145
|
|
|
64
146
|
## useModalForm
|
|
65
147
|
|
package/README.md
CHANGED
|
@@ -18,29 +18,29 @@
|
|
|
18
18
|
默认 Element Plus:
|
|
19
19
|
|
|
20
20
|
```ts
|
|
21
|
-
import {
|
|
21
|
+
import { createAutoGenCrud } from "auto-gen-crud";
|
|
22
22
|
import "auto-gen-crud/style.css";
|
|
23
23
|
|
|
24
|
-
app.use(
|
|
24
|
+
app.use(createAutoGenCrud());
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
切换 Naive UI:
|
|
28
28
|
|
|
29
29
|
```ts
|
|
30
|
-
app.use(
|
|
30
|
+
app.use(createAutoGenCrud({ ui: "naive" }));
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
切换 Ant Design Vue:
|
|
34
34
|
|
|
35
35
|
```ts
|
|
36
|
-
app.use(
|
|
36
|
+
app.use(createAutoGenCrud({ ui: "ant-design-vue" }));
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
如果需要敏感信息解密:
|
|
40
40
|
|
|
41
41
|
```ts
|
|
42
42
|
app.use(
|
|
43
|
-
|
|
43
|
+
createAutoGenCrud({
|
|
44
44
|
decode: async value => {
|
|
45
45
|
return String(value);
|
|
46
46
|
},
|
|
@@ -55,57 +55,67 @@ app.use(
|
|
|
55
55
|
|
|
56
56
|
```vue
|
|
57
57
|
<script setup lang="ts">
|
|
58
|
-
import {
|
|
58
|
+
import { AutoGenCrud, useCrudPage, type CrudModalMode } from "auto-gen-crud";
|
|
59
59
|
|
|
60
|
-
|
|
61
|
-
columns: [
|
|
62
|
-
{ label: "名称", prop: "name", component: "input" },
|
|
63
|
-
{
|
|
64
|
-
label: "状态",
|
|
65
|
-
prop: "status",
|
|
66
|
-
component: "select",
|
|
67
|
-
options: [
|
|
68
|
-
{ label: "启用", value: 1 },
|
|
69
|
-
{ label: "禁用", value: 0 },
|
|
70
|
-
],
|
|
71
|
-
},
|
|
72
|
-
],
|
|
73
|
-
});
|
|
60
|
+
type UserRow = { id?: number; name?: string; status?: number; createdAt?: string };
|
|
74
61
|
|
|
75
|
-
const modalForm =
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
],
|
|
80
|
-
async onSubmit(data, mode) {
|
|
81
|
-
console.log("提交", mode, data);
|
|
82
|
-
modalForm.close();
|
|
83
|
-
await table.load(searchForm.data);
|
|
62
|
+
const { searchForm, table, modalForm } = useCrudPage({
|
|
63
|
+
actions: {
|
|
64
|
+
submit,
|
|
65
|
+
getDataList,
|
|
84
66
|
},
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
],
|
|
99
|
-
async getDataList({ pagination, searchData }) {
|
|
100
|
-
console.log("查询", pagination, searchData);
|
|
101
|
-
table.data = [];
|
|
102
|
-
if (table.pagination) table.pagination.total = 0;
|
|
67
|
+
search: {
|
|
68
|
+
columns: [
|
|
69
|
+
{ label: "名称", prop: "name", component: "input" },
|
|
70
|
+
{
|
|
71
|
+
label: "状态",
|
|
72
|
+
prop: "status",
|
|
73
|
+
component: "select",
|
|
74
|
+
options: [
|
|
75
|
+
{ label: "启用", value: 1 },
|
|
76
|
+
{ label: "禁用", value: 0 },
|
|
77
|
+
],
|
|
78
|
+
},
|
|
79
|
+
],
|
|
103
80
|
},
|
|
81
|
+
modal: ({ actions }) => ({
|
|
82
|
+
columns: [
|
|
83
|
+
{ label: "名称", prop: "name", component: "input", required: true },
|
|
84
|
+
{ label: "状态", prop: "status", component: "switch" },
|
|
85
|
+
],
|
|
86
|
+
onSubmit: actions.submit,
|
|
87
|
+
}),
|
|
88
|
+
table: ({ actions }) => ({
|
|
89
|
+
columns: [
|
|
90
|
+
{ title: "名称", field: "name", copy: true },
|
|
91
|
+
{ title: "创建时间", field: "createdAt", dateTime: true },
|
|
92
|
+
{
|
|
93
|
+
title: "操作",
|
|
94
|
+
actions: [
|
|
95
|
+
{ key: "edit", label: "编辑", type: "primary", onClick: actions.edit },
|
|
96
|
+
{ key: "delete", label: "删除", type: "danger", confirm: true, onClick: row => console.log(row) },
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
getDataList: actions.getDataList,
|
|
101
|
+
}),
|
|
104
102
|
});
|
|
103
|
+
|
|
104
|
+
async function submit(data: UserRow, mode: CrudModalMode) {
|
|
105
|
+
console.log("提交", mode, data);
|
|
106
|
+
modalForm.close();
|
|
107
|
+
await table.load();
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
async function getDataList() {
|
|
111
|
+
console.log("查询", table.pagination, searchForm.data);
|
|
112
|
+
table.data = [];
|
|
113
|
+
table.pagination.total = 0;
|
|
114
|
+
}
|
|
105
115
|
</script>
|
|
106
116
|
|
|
107
117
|
<template>
|
|
108
|
-
<
|
|
118
|
+
<AutoGenCrud
|
|
109
119
|
title="用户"
|
|
110
120
|
:search-form-config="searchForm"
|
|
111
121
|
:table-config="table"
|
|
@@ -132,6 +142,35 @@ npm run demo:smoke
|
|
|
132
142
|
|
|
133
143
|
可运行 demo 数据流冒烟测试,覆盖搜索条件、`useTable` 返回值接收和弹窗编辑数据隔离。
|
|
134
144
|
|
|
145
|
+
## 生成器配置形态
|
|
146
|
+
|
|
147
|
+
生成器默认使用 `useCrudPage` 组合三个基础 hook,并在 `config/defineConfig.ts` 中绑定当前页面类型;三个 helper 的公共实现由包内 `createCrudPageConfigHelpers` 维护:
|
|
148
|
+
|
|
149
|
+
```ts
|
|
150
|
+
import { createCrudPageConfigHelpers } from "auto-gen-crud";
|
|
151
|
+
import type { PageActionsType, PageContextType, RowType, SearchParamsType } from "../api/types";
|
|
152
|
+
|
|
153
|
+
export const {
|
|
154
|
+
defineSearchConfig,
|
|
155
|
+
defineTableConfig,
|
|
156
|
+
defineModalConfig,
|
|
157
|
+
} = createCrudPageConfigHelpers<RowType, SearchParamsType, PageContextType, PageActionsType>();
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
业务配置文件只需要写 helper 包裹后的 options:
|
|
161
|
+
|
|
162
|
+
```ts
|
|
163
|
+
import { defineTableConfig } from "./defineConfig";
|
|
164
|
+
|
|
165
|
+
export const getTableConfig = defineTableConfig(({ context, actions }) => ({
|
|
166
|
+
columns: [
|
|
167
|
+
{ title: "名称", field: "name" },
|
|
168
|
+
{ title: "操作", actions: [{ key: "edit", label: "编辑", onClick: actions.edit }] },
|
|
169
|
+
],
|
|
170
|
+
getDataList: actions.getDataList,
|
|
171
|
+
}));
|
|
172
|
+
```
|
|
173
|
+
|
|
135
174
|
## 独立 Vue3 消费示例
|
|
136
175
|
|
|
137
176
|
`examples/vue3-consumer` 是一个独立 Vue3 项目,用本地 tarball 安装 `auto-gen-crud`,可切换 UI adapter 验证 npm 包入口、类型声明、样式导出和路由页面渲染。
|
|
@@ -2,7 +2,7 @@ import { CrudUIAdapter } from './types';
|
|
|
2
2
|
/**
|
|
3
3
|
* Element Plus Adapter。
|
|
4
4
|
*
|
|
5
|
-
* 默认 Adapter:不传 `
|
|
5
|
+
* 默认 Adapter:不传 `createAutoGenCrud({ ui })` 时使用它。
|
|
6
6
|
* 约定使用者已在业务应用中安装并注册 Element Plus。
|
|
7
7
|
*/
|
|
8
8
|
export declare const elementPlusAdapter: CrudUIAdapter;
|
package/dist/adapters/index.js
CHANGED
package/dist/adapters/types.d.ts
CHANGED
|
@@ -23,6 +23,10 @@ export interface CrudAdapterComponents {
|
|
|
23
23
|
popconfirm: CrudAdapterComponent;
|
|
24
24
|
image: CrudAdapterComponent;
|
|
25
25
|
tooltip?: CrudAdapterComponent;
|
|
26
|
+
/** 详情只读容器组件,Element Plus 对应 ElDescriptions。 */
|
|
27
|
+
descriptions: CrudAdapterComponent;
|
|
28
|
+
/** 详情只读字段组件,Element Plus 对应 ElDescriptionsItem。 */
|
|
29
|
+
descriptionsItem: CrudAdapterComponent;
|
|
26
30
|
fields: Record<CrudFormComponent, CrudAdapterComponent>;
|
|
27
31
|
option?: CrudAdapterComponent;
|
|
28
32
|
radio?: CrudAdapterComponent;
|
|
@@ -53,9 +57,13 @@ export interface CrudFormAdapter {
|
|
|
53
57
|
getModelBinding: (component: CrudFormComponent, item: CrudFormItem) => CrudModelBinding;
|
|
54
58
|
/** 获取字段组件 props。 */
|
|
55
59
|
getFieldProps: (item: CrudFormItem, input: {
|
|
60
|
+
/** 当前字段值,由 adapter 决定绑定到 modelValue/value 等属性。 */
|
|
56
61
|
value: unknown;
|
|
62
|
+
/** 组件占位文案,已在核心层按字段类型生成默认值。 */
|
|
57
63
|
placeholder: string;
|
|
64
|
+
/** 是否禁用当前字段,查看模式和字段级 disabled 都会汇总到这里。 */
|
|
58
65
|
disabled: boolean;
|
|
66
|
+
/** 下拉、单选、多选等字段的最终选项。 */
|
|
59
67
|
options?: unknown[];
|
|
60
68
|
}) => Record<string, unknown>;
|
|
61
69
|
/** 获取表单布局样式变量。 */
|
|
@@ -75,12 +83,17 @@ export interface CrudTableAdapter {
|
|
|
75
83
|
data: T[];
|
|
76
84
|
loading: boolean;
|
|
77
85
|
rowKey?: string | ((row: T) => string | number);
|
|
86
|
+
selection?: boolean;
|
|
87
|
+
selectedRowKeys?: Array<string | number>;
|
|
88
|
+
onSelectionChange?: (rows: T[]) => void;
|
|
78
89
|
/** 纵向滚动高度,由 DynamicTable 计算后交给各 UI Adapter 映射成真实组件属性。 */
|
|
79
90
|
scrollY?: number | string;
|
|
80
91
|
scrollX?: number | string;
|
|
81
92
|
}) => Record<string, unknown>;
|
|
82
93
|
/** 获取表格列 props,用于 Element Plus 这类 TableColumn 组件。 */
|
|
83
94
|
getTableColumnProps: <T extends Record<string, unknown>>(column: CrudTableColumn<T>) => Record<string, unknown>;
|
|
95
|
+
/** 获取多选列 props,用于 Element Plus 这类子组件列模式。 */
|
|
96
|
+
getSelectionColumnProps: () => Record<string, unknown>;
|
|
84
97
|
/** 获取分页组件 props。 */
|
|
85
98
|
getPaginationProps: (pagination: CrudPagination) => Record<string, unknown>;
|
|
86
99
|
/** 获取分页事件。 */
|
|
@@ -106,6 +119,7 @@ export interface CrudRenderAdapter {
|
|
|
106
119
|
type?: CrudButtonType;
|
|
107
120
|
size?: CrudButtonSize;
|
|
108
121
|
disabled?: boolean;
|
|
122
|
+
loading?: boolean;
|
|
109
123
|
}) => Record<string, unknown>;
|
|
110
124
|
/** 映射确认框 props。 */
|
|
111
125
|
getPopconfirmProps: (input: {
|
|
@@ -1,17 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
/**
|
|
3
|
-
type __VLS_Props =
|
|
1
|
+
import { AutoGenCrudProps, CrudFormItem } from '../core/types';
|
|
2
|
+
/** AutoGenCrud 是组合容器,只负责把搜索表单、表格、弹窗表单三块配置串起来。 */
|
|
3
|
+
type __VLS_Props = AutoGenCrudProps<any, any>;
|
|
4
4
|
/** 弹窗 footer 的提交入口,最终会走 DynamicForm 校验,再触发 modalFormConfig.submit。 */
|
|
5
5
|
declare function handleModalSubmit(): Promise<void>;
|
|
6
6
|
declare function __VLS_template(): {
|
|
7
7
|
attrs: Partial<{}>;
|
|
8
8
|
slots: {
|
|
9
9
|
searchButtonToolbar?(_: {}): any;
|
|
10
|
-
tableToolbar?(_: {
|
|
10
|
+
tableToolbar?(_: {
|
|
11
|
+
table: import('..').CrudTableConfig<Record<string, unknown>>;
|
|
12
|
+
selectedRows: Record<string, unknown>[];
|
|
13
|
+
selectedRowKeys: (string | number)[];
|
|
14
|
+
}): any;
|
|
11
15
|
modalFooter?(_: {
|
|
12
16
|
modalForm: import('..').CrudModalFormConfig<any>;
|
|
13
17
|
submit: typeof handleModalSubmit;
|
|
14
18
|
close: () => void;
|
|
19
|
+
submitLoading: boolean;
|
|
15
20
|
}): any;
|
|
16
21
|
};
|
|
17
22
|
refs: {
|
|
@@ -24,6 +29,7 @@ declare function __VLS_template(): {
|
|
|
24
29
|
readonly modelValue: Record<string, unknown>;
|
|
25
30
|
readonly layout?: import('..').CrudFormLayout | undefined;
|
|
26
31
|
readonly disabled?: boolean | undefined;
|
|
32
|
+
readonly searchLoading?: boolean | undefined;
|
|
27
33
|
readonly onSubmit?: ((value: Record<string, unknown>) => any) | undefined;
|
|
28
34
|
readonly onReset?: (() => any) | undefined;
|
|
29
35
|
readonly "onUpdate:modelValue"?: ((value: Record<string, unknown>) => any) | undefined;
|
|
@@ -48,6 +54,7 @@ declare function __VLS_template(): {
|
|
|
48
54
|
modelValue: Record<string, unknown>;
|
|
49
55
|
layout?: import('..').CrudFormLayout;
|
|
50
56
|
disabled?: boolean;
|
|
57
|
+
searchLoading?: boolean;
|
|
51
58
|
}> & Readonly<{
|
|
52
59
|
onSubmit?: ((value: Record<string, unknown>) => any) | undefined;
|
|
53
60
|
onReset?: (() => any) | undefined;
|
|
@@ -64,6 +71,7 @@ declare function __VLS_template(): {
|
|
|
64
71
|
}, string, {
|
|
65
72
|
disabled: boolean;
|
|
66
73
|
formType: "search" | "modal";
|
|
74
|
+
searchLoading: boolean;
|
|
67
75
|
}, {}, string, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & {
|
|
68
76
|
beforeCreate?: (() => void) | (() => void)[];
|
|
69
77
|
created?: (() => void) | (() => void)[];
|
|
@@ -87,17 +95,19 @@ declare function __VLS_template(): {
|
|
|
87
95
|
} & Readonly<{
|
|
88
96
|
disabled: boolean;
|
|
89
97
|
formType: "search" | "modal";
|
|
98
|
+
searchLoading: boolean;
|
|
90
99
|
}> & Omit<Readonly<{
|
|
91
100
|
formType?: "search" | "modal";
|
|
92
101
|
columns: CrudFormItem[];
|
|
93
102
|
modelValue: Record<string, unknown>;
|
|
94
103
|
layout?: import('..').CrudFormLayout;
|
|
95
104
|
disabled?: boolean;
|
|
105
|
+
searchLoading?: boolean;
|
|
96
106
|
}> & Readonly<{
|
|
97
107
|
onSubmit?: ((value: Record<string, unknown>) => any) | undefined;
|
|
98
108
|
onReset?: (() => any) | undefined;
|
|
99
109
|
"onUpdate:modelValue"?: ((value: Record<string, unknown>) => any) | undefined;
|
|
100
|
-
}>, "validate" | "submit" | "reset" | "clearValidate" | ("disabled" | "formType")> & {
|
|
110
|
+
}>, "validate" | "submit" | "reset" | "clearValidate" | ("disabled" | "formType" | "searchLoading")> & {
|
|
101
111
|
validate: () => Promise<boolean>;
|
|
102
112
|
clearValidate: () => void;
|
|
103
113
|
submit: () => Promise<void>;
|
|
@@ -116,6 +126,7 @@ declare function __VLS_template(): {
|
|
|
116
126
|
readonly modelValue: Record<string, unknown>;
|
|
117
127
|
readonly layout?: import('..').CrudFormLayout | undefined;
|
|
118
128
|
readonly disabled?: boolean | undefined;
|
|
129
|
+
readonly searchLoading?: boolean | undefined;
|
|
119
130
|
readonly onSubmit?: ((value: Record<string, unknown>) => any) | undefined;
|
|
120
131
|
readonly onReset?: (() => any) | undefined;
|
|
121
132
|
readonly "onUpdate:modelValue"?: ((value: Record<string, unknown>) => any) | undefined;
|
|
@@ -140,6 +151,7 @@ declare function __VLS_template(): {
|
|
|
140
151
|
modelValue: Record<string, unknown>;
|
|
141
152
|
layout?: import('..').CrudFormLayout;
|
|
142
153
|
disabled?: boolean;
|
|
154
|
+
searchLoading?: boolean;
|
|
143
155
|
}> & Readonly<{
|
|
144
156
|
onSubmit?: ((value: Record<string, unknown>) => any) | undefined;
|
|
145
157
|
onReset?: (() => any) | undefined;
|
|
@@ -156,6 +168,7 @@ declare function __VLS_template(): {
|
|
|
156
168
|
}, string, {
|
|
157
169
|
disabled: boolean;
|
|
158
170
|
formType: "search" | "modal";
|
|
171
|
+
searchLoading: boolean;
|
|
159
172
|
}, {}, string, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & {
|
|
160
173
|
beforeCreate?: (() => void) | (() => void)[];
|
|
161
174
|
created?: (() => void) | (() => void)[];
|
|
@@ -179,17 +192,19 @@ declare function __VLS_template(): {
|
|
|
179
192
|
} & Readonly<{
|
|
180
193
|
disabled: boolean;
|
|
181
194
|
formType: "search" | "modal";
|
|
195
|
+
searchLoading: boolean;
|
|
182
196
|
}> & Omit<Readonly<{
|
|
183
197
|
formType?: "search" | "modal";
|
|
184
198
|
columns: CrudFormItem[];
|
|
185
199
|
modelValue: Record<string, unknown>;
|
|
186
200
|
layout?: import('..').CrudFormLayout;
|
|
187
201
|
disabled?: boolean;
|
|
202
|
+
searchLoading?: boolean;
|
|
188
203
|
}> & Readonly<{
|
|
189
204
|
onSubmit?: ((value: Record<string, unknown>) => any) | undefined;
|
|
190
205
|
onReset?: (() => any) | undefined;
|
|
191
206
|
"onUpdate:modelValue"?: ((value: Record<string, unknown>) => any) | undefined;
|
|
192
|
-
}>, "validate" | "submit" | "reset" | "clearValidate" | ("disabled" | "formType")> & {
|
|
207
|
+
}>, "validate" | "submit" | "reset" | "clearValidate" | ("disabled" | "formType" | "searchLoading")> & {
|
|
193
208
|
validate: () => Promise<boolean>;
|
|
194
209
|
clearValidate: () => void;
|
|
195
210
|
submit: () => Promise<void>;
|
|
@@ -213,6 +228,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
|
|
|
213
228
|
readonly modelValue: Record<string, unknown>;
|
|
214
229
|
readonly layout?: import('..').CrudFormLayout | undefined;
|
|
215
230
|
readonly disabled?: boolean | undefined;
|
|
231
|
+
readonly searchLoading?: boolean | undefined;
|
|
216
232
|
readonly onSubmit?: ((value: Record<string, unknown>) => any) | undefined;
|
|
217
233
|
readonly onReset?: (() => any) | undefined;
|
|
218
234
|
readonly "onUpdate:modelValue"?: ((value: Record<string, unknown>) => any) | undefined;
|
|
@@ -237,6 +253,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
|
|
|
237
253
|
modelValue: Record<string, unknown>;
|
|
238
254
|
layout?: import('..').CrudFormLayout;
|
|
239
255
|
disabled?: boolean;
|
|
256
|
+
searchLoading?: boolean;
|
|
240
257
|
}> & Readonly<{
|
|
241
258
|
onSubmit?: ((value: Record<string, unknown>) => any) | undefined;
|
|
242
259
|
onReset?: (() => any) | undefined;
|
|
@@ -253,6 +270,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
|
|
|
253
270
|
}, string, {
|
|
254
271
|
disabled: boolean;
|
|
255
272
|
formType: "search" | "modal";
|
|
273
|
+
searchLoading: boolean;
|
|
256
274
|
}, {}, string, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & {
|
|
257
275
|
beforeCreate?: (() => void) | (() => void)[];
|
|
258
276
|
created?: (() => void) | (() => void)[];
|
|
@@ -276,17 +294,19 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
|
|
|
276
294
|
} & Readonly<{
|
|
277
295
|
disabled: boolean;
|
|
278
296
|
formType: "search" | "modal";
|
|
297
|
+
searchLoading: boolean;
|
|
279
298
|
}> & Omit<Readonly<{
|
|
280
299
|
formType?: "search" | "modal";
|
|
281
300
|
columns: CrudFormItem[];
|
|
282
301
|
modelValue: Record<string, unknown>;
|
|
283
302
|
layout?: import('..').CrudFormLayout;
|
|
284
303
|
disabled?: boolean;
|
|
304
|
+
searchLoading?: boolean;
|
|
285
305
|
}> & Readonly<{
|
|
286
306
|
onSubmit?: ((value: Record<string, unknown>) => any) | undefined;
|
|
287
307
|
onReset?: (() => any) | undefined;
|
|
288
308
|
"onUpdate:modelValue"?: ((value: Record<string, unknown>) => any) | undefined;
|
|
289
|
-
}>, "validate" | "submit" | "reset" | "clearValidate" | ("disabled" | "formType")> & {
|
|
309
|
+
}>, "validate" | "submit" | "reset" | "clearValidate" | ("disabled" | "formType" | "searchLoading")> & {
|
|
290
310
|
validate: () => Promise<boolean>;
|
|
291
311
|
clearValidate: () => void;
|
|
292
312
|
submit: () => Promise<void>;
|
|
@@ -305,6 +325,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
|
|
|
305
325
|
readonly modelValue: Record<string, unknown>;
|
|
306
326
|
readonly layout?: import('..').CrudFormLayout | undefined;
|
|
307
327
|
readonly disabled?: boolean | undefined;
|
|
328
|
+
readonly searchLoading?: boolean | undefined;
|
|
308
329
|
readonly onSubmit?: ((value: Record<string, unknown>) => any) | undefined;
|
|
309
330
|
readonly onReset?: (() => any) | undefined;
|
|
310
331
|
readonly "onUpdate:modelValue"?: ((value: Record<string, unknown>) => any) | undefined;
|
|
@@ -329,6 +350,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
|
|
|
329
350
|
modelValue: Record<string, unknown>;
|
|
330
351
|
layout?: import('..').CrudFormLayout;
|
|
331
352
|
disabled?: boolean;
|
|
353
|
+
searchLoading?: boolean;
|
|
332
354
|
}> & Readonly<{
|
|
333
355
|
onSubmit?: ((value: Record<string, unknown>) => any) | undefined;
|
|
334
356
|
onReset?: (() => any) | undefined;
|
|
@@ -345,6 +367,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
|
|
|
345
367
|
}, string, {
|
|
346
368
|
disabled: boolean;
|
|
347
369
|
formType: "search" | "modal";
|
|
370
|
+
searchLoading: boolean;
|
|
348
371
|
}, {}, string, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & {
|
|
349
372
|
beforeCreate?: (() => void) | (() => void)[];
|
|
350
373
|
created?: (() => void) | (() => void)[];
|
|
@@ -368,17 +391,19 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
|
|
|
368
391
|
} & Readonly<{
|
|
369
392
|
disabled: boolean;
|
|
370
393
|
formType: "search" | "modal";
|
|
394
|
+
searchLoading: boolean;
|
|
371
395
|
}> & Omit<Readonly<{
|
|
372
396
|
formType?: "search" | "modal";
|
|
373
397
|
columns: CrudFormItem[];
|
|
374
398
|
modelValue: Record<string, unknown>;
|
|
375
399
|
layout?: import('..').CrudFormLayout;
|
|
376
400
|
disabled?: boolean;
|
|
401
|
+
searchLoading?: boolean;
|
|
377
402
|
}> & Readonly<{
|
|
378
403
|
onSubmit?: ((value: Record<string, unknown>) => any) | undefined;
|
|
379
404
|
onReset?: (() => any) | undefined;
|
|
380
405
|
"onUpdate:modelValue"?: ((value: Record<string, unknown>) => any) | undefined;
|
|
381
|
-
}>, "validate" | "submit" | "reset" | "clearValidate" | ("disabled" | "formType")> & {
|
|
406
|
+
}>, "validate" | "submit" | "reset" | "clearValidate" | ("disabled" | "formType" | "searchLoading")> & {
|
|
382
407
|
validate: () => Promise<boolean>;
|
|
383
408
|
clearValidate: () => void;
|
|
384
409
|
submit: () => Promise<void>;
|
|
@@ -14,6 +14,8 @@ type __VLS_Props = {
|
|
|
14
14
|
submitText?: string;
|
|
15
15
|
/** 关闭按钮文案。 */
|
|
16
16
|
cancelText?: string;
|
|
17
|
+
/** 提交按钮 loading,由 useModalForm 内部维护。 */
|
|
18
|
+
submitLoading?: boolean;
|
|
17
19
|
};
|
|
18
20
|
declare function __VLS_template(): {
|
|
19
21
|
attrs: Partial<{}>;
|
|
@@ -37,6 +39,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
|
|
|
37
39
|
cancelText: string;
|
|
38
40
|
modalType: CrudModalType;
|
|
39
41
|
submitText: string;
|
|
42
|
+
submitLoading: boolean;
|
|
40
43
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
41
44
|
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
42
45
|
export default _default;
|
|
@@ -10,6 +10,8 @@ type __VLS_Props = {
|
|
|
10
10
|
layout?: CrudFormLayout;
|
|
11
11
|
/** 是否整体禁用,查看模式会传 true。 */
|
|
12
12
|
disabled?: boolean;
|
|
13
|
+
/** 搜索按钮 loading,当前由 AutoGenCrud 复用 tableConfig.loading 传入。 */
|
|
14
|
+
searchLoading?: boolean;
|
|
13
15
|
};
|
|
14
16
|
/**
|
|
15
17
|
* 校验表单。
|
|
@@ -51,6 +53,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {
|
|
|
51
53
|
}>, {
|
|
52
54
|
disabled: boolean;
|
|
53
55
|
formType: "search" | "modal";
|
|
56
|
+
searchLoading: boolean;
|
|
54
57
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
55
58
|
formRef: unknown;
|
|
56
59
|
}, any>;
|
|
@@ -1,16 +1,23 @@
|
|
|
1
|
-
import { CrudTableConfig } from '../core/types';
|
|
1
|
+
import { CrudFormItem, CrudTableConfig } from '../core/types';
|
|
2
2
|
type __VLS_Props = {
|
|
3
3
|
/** useTable 返回的表格配置,包含列、数据、分页、加载状态和列表操作方法。 */
|
|
4
|
-
tableConfig: CrudTableConfig<
|
|
4
|
+
tableConfig: CrudTableConfig<Record<string, unknown>>;
|
|
5
|
+
/** 弹窗表单字段配置;表格会复用同 prop 字段的 options 做 code 到 label 的映射。 */
|
|
6
|
+
formColumns?: CrudFormItem[];
|
|
5
7
|
};
|
|
6
8
|
declare function __VLS_template(): {
|
|
7
9
|
attrs: Partial<{}>;
|
|
8
10
|
slots: {
|
|
9
|
-
tableToolbar?(_: {
|
|
11
|
+
tableToolbar?(_: {
|
|
12
|
+
table: CrudTableConfig<Record<string, unknown>>;
|
|
13
|
+
selectedRows: Record<string, unknown>[];
|
|
14
|
+
selectedRowKeys: (string | number)[];
|
|
15
|
+
}): any;
|
|
10
16
|
};
|
|
11
17
|
refs: {
|
|
12
18
|
tableRootRef: HTMLDivElement;
|
|
13
19
|
tableBodyRef: HTMLDivElement;
|
|
20
|
+
tableRef: unknown;
|
|
14
21
|
paginationRef: HTMLDivElement;
|
|
15
22
|
};
|
|
16
23
|
rootEl: any;
|
|
@@ -19,6 +26,7 @@ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
|
19
26
|
declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
20
27
|
tableRootRef: HTMLDivElement;
|
|
21
28
|
tableBodyRef: HTMLDivElement;
|
|
29
|
+
tableRef: unknown;
|
|
22
30
|
paginationRef: HTMLDivElement;
|
|
23
31
|
}, any>;
|
|
24
32
|
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|