@ynight/framework 0.0.0-stage → 0.0.1

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 (129) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +511 -2
  3. package/assets/.gitkeep +0 -0
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/assets/index.d.ts +41 -0
  6. package/dist/assets/index.d.ts.map +1 -0
  7. package/dist/assets/index.js +68 -0
  8. package/dist/assets/index.js.map +1 -0
  9. package/dist/client/common.d.ts +77 -0
  10. package/dist/client/common.d.ts.map +1 -0
  11. package/dist/client/index.d.ts +56 -0
  12. package/dist/client/index.d.ts.map +1 -0
  13. package/dist/client/index.mjs +8 -0
  14. package/dist/client/index.mjs.LICENSE.txt +8 -0
  15. package/dist/client/layout/Layout.vue.d.ts +21 -0
  16. package/dist/client/layout/Layout.vue.d.ts.map +1 -0
  17. package/dist/client/layout/SiderLayout.vue.d.ts +32 -0
  18. package/dist/client/layout/SiderLayout.vue.d.ts.map +1 -0
  19. package/dist/client/layout/SubMenu.vue.d.ts +8 -0
  20. package/dist/client/layout/SubMenu.vue.d.ts.map +1 -0
  21. package/dist/client/package.json +3 -0
  22. package/dist/client/pages/DashboardPage.vue.d.ts +4 -0
  23. package/dist/client/pages/DashboardPage.vue.d.ts.map +1 -0
  24. package/dist/client/pages/ErrorPage.vue.d.ts +9 -0
  25. package/dist/client/pages/ErrorPage.vue.d.ts.map +1 -0
  26. package/dist/client/pages/PageSkeleton.vue.d.ts +4 -0
  27. package/dist/client/pages/PageSkeleton.vue.d.ts.map +1 -0
  28. package/dist/client/pages/ProjectListPage.vue.d.ts +4 -0
  29. package/dist/client/pages/ProjectListPage.vue.d.ts.map +1 -0
  30. package/dist/client/pages/project-navigation.d.ts +21 -0
  31. package/dist/client/pages/project-navigation.d.ts.map +1 -0
  32. package/dist/client/public-components.d.ts +56 -0
  33. package/dist/client/public-components.d.ts.map +1 -0
  34. package/dist/client/runtime.d.ts +55 -0
  35. package/dist/client/runtime.d.ts.map +1 -0
  36. package/dist/client/schema-types.d.ts +129 -0
  37. package/dist/client/schema-types.d.ts.map +1 -0
  38. package/dist/client/schema.d.ts +105 -0
  39. package/dist/client/schema.d.ts.map +1 -0
  40. package/dist/client/style.css +147 -0
  41. package/dist/client/types.d.ts +195 -0
  42. package/dist/client/types.d.ts.map +1 -0
  43. package/dist/client/views/ModuleHost.vue.d.ts +8 -0
  44. package/dist/client/views/ModuleHost.vue.d.ts.map +1 -0
  45. package/dist/client/views/SchemaView.vue.d.ts +8 -0
  46. package/dist/client/views/SchemaView.vue.d.ts.map +1 -0
  47. package/dist/client/views/schema/create-form.vue.d.ts +13 -0
  48. package/dist/client/views/schema/create-form.vue.d.ts.map +1 -0
  49. package/dist/client/views/schema/detail-view.vue.d.ts +10 -0
  50. package/dist/client/views/schema/detail-view.vue.d.ts.map +1 -0
  51. package/dist/client/views/schema/search-panel.vue.d.ts +11 -0
  52. package/dist/client/views/schema/search-panel.vue.d.ts.map +1 -0
  53. package/dist/client/views/schema/table-panel.vue.d.ts +17 -0
  54. package/dist/client/views/schema/table-panel.vue.d.ts.map +1 -0
  55. package/dist/client/views/schema/update-form.vue.d.ts +14 -0
  56. package/dist/client/views/schema/update-form.vue.d.ts.map +1 -0
  57. package/dist/client/widgets/schema-form/SchemaField.vue.d.ts +18 -0
  58. package/dist/client/widgets/schema-form/SchemaField.vue.d.ts.map +1 -0
  59. package/dist/client/widgets/schema-form/complex-view/index.d.ts +11 -0
  60. package/dist/client/widgets/schema-form/complex-view/index.d.ts.map +1 -0
  61. package/dist/client/widgets/schema-form/complex-view/schema-async-search-select.vue.d.ts +39 -0
  62. package/dist/client/widgets/schema-form/complex-view/schema-async-search-select.vue.d.ts.map +1 -0
  63. package/dist/client/widgets/schema-form/complex-view/schema-dynamic-select.vue.d.ts +32 -0
  64. package/dist/client/widgets/schema-form/complex-view/schema-dynamic-select.vue.d.ts.map +1 -0
  65. package/dist/client/widgets/schema-form/complex-view/schema-tag-input.vue.d.ts +25 -0
  66. package/dist/client/widgets/schema-form/complex-view/schema-tag-input.vue.d.ts.map +1 -0
  67. package/dist/client/widgets/schema-form/complex-view/schema-upload.vue.d.ts +16 -0
  68. package/dist/client/widgets/schema-form/complex-view/schema-upload.vue.d.ts.map +1 -0
  69. package/dist/client/widgets/schema-form/hooks/use-schema-rules.d.ts +45 -0
  70. package/dist/client/widgets/schema-form/hooks/use-schema-rules.d.ts.map +1 -0
  71. package/dist/client/widgets/schema-form/index.vue.d.ts +26 -0
  72. package/dist/client/widgets/schema-form/index.vue.d.ts.map +1 -0
  73. package/dist/client/widgets/schema-form/type.d.ts +295 -0
  74. package/dist/client/widgets/schema-form/type.d.ts.map +1 -0
  75. package/dist/client/widgets/schema-form/validator.d.ts +127 -0
  76. package/dist/client/widgets/schema-form/validator.d.ts.map +1 -0
  77. package/dist/client/widgets/schema-table/index.vue.d.ts +9 -0
  78. package/dist/client/widgets/schema-table/index.vue.d.ts.map +1 -0
  79. package/dist/client/widgets/schema-table/type.d.ts +91 -0
  80. package/dist/client/widgets/schema-table/type.d.ts.map +1 -0
  81. package/dist/model/index.d.ts +75 -0
  82. package/dist/model/index.d.ts.map +1 -0
  83. package/dist/model/index.js +108 -0
  84. package/dist/model/index.js.map +1 -0
  85. package/dist/model.d.ts +13 -0
  86. package/dist/model.d.ts.map +1 -0
  87. package/dist/model.js +16 -0
  88. package/dist/model.js.map +1 -0
  89. package/dist/server/application.d.ts +33 -0
  90. package/dist/server/application.d.ts.map +1 -0
  91. package/dist/server/application.js +1082 -0
  92. package/dist/server/application.js.map +1 -0
  93. package/dist/server/base-class.d.ts +50 -0
  94. package/dist/server/base-class.d.ts.map +1 -0
  95. package/dist/server/base-class.js +66 -0
  96. package/dist/server/base-class.js.map +1 -0
  97. package/dist/server/config.d.ts +44 -0
  98. package/dist/server/config.d.ts.map +1 -0
  99. package/dist/server/config.js +231 -0
  100. package/dist/server/config.js.map +1 -0
  101. package/dist/server/context.d.ts +30 -0
  102. package/dist/server/context.d.ts.map +1 -0
  103. package/dist/server/context.js +3 -0
  104. package/dist/server/context.js.map +1 -0
  105. package/dist/server/define-routes.d.ts +29 -0
  106. package/dist/server/define-routes.d.ts.map +1 -0
  107. package/dist/server/define-routes.js +39 -0
  108. package/dist/server/define-routes.js.map +1 -0
  109. package/dist/server/define-server.d.ts +19 -0
  110. package/dist/server/define-server.d.ts.map +1 -0
  111. package/dist/server/define-server.js +23 -0
  112. package/dist/server/define-server.js.map +1 -0
  113. package/dist/server/index.d.ts +26 -0
  114. package/dist/server/index.d.ts.map +1 -0
  115. package/dist/server/index.js +35 -0
  116. package/dist/server/index.js.map +1 -0
  117. package/dist/server/legacy.d.ts +13 -0
  118. package/dist/server/legacy.d.ts.map +1 -0
  119. package/dist/server/legacy.js +15 -0
  120. package/dist/server/legacy.js.map +1 -0
  121. package/dist/server/types.d.ts +272 -0
  122. package/dist/server/types.d.ts.map +1 -0
  123. package/dist/server/types.js +3 -0
  124. package/dist/server/types.js.map +1 -0
  125. package/dist/server.d.ts +12 -0
  126. package/dist/server.d.ts.map +1 -0
  127. package/dist/server.js +15 -0
  128. package/dist/server.js.map +1 -0
  129. package/package.json +106 -3
@@ -0,0 +1,295 @@
1
+ /**
2
+ * schema-form 的对外类型声明。
3
+ *
4
+ * 该文件集中了 props / emits / slots / 暴露方法 / 回调载荷等所有公开类型,
5
+ * 业务侧在自定义渲染或扩展校验时只需从这里 import 即可。
6
+ */
7
+ import type { JsonValue } from '@ynight/contracts';
8
+ import type { SchemaFormColProps, SchemaFormFieldOption, SchemaFormSchema } from '../../schema-types';
9
+ import type { ComputedRef } from 'vue';
10
+ import type { AjvFieldError } from './validator';
11
+ /** 框架公开字段路径,不依赖 UI 库内部声明。 */
12
+ type FormItemProp = string | string[];
13
+ /**
14
+ * 表单值的对外公开形态。
15
+ *
16
+ * 字段值统一使用 JSON 可序列化值(`JsonValue`),避免在框架层面耦合具体业务类型。
17
+ */
18
+ interface FormValueInterface {
19
+ [key: string]: JsonValue;
20
+ }
21
+ /** 表单整体值类型,与 FormValueInterface 含义相同。 */
22
+ type SchemaFormValues = FormValueInterface;
23
+ /**
24
+ * el-form 属性精简声明。
25
+ *
26
+ * 这里不复用 Element Plus 的 `FormProps`,原因:
27
+ * 1. 减少对 UI 库版本升级的耦合;
28
+ * 2. 仅暴露 schema-form 关心的字段,避免误用 model / rules 等已被 schema-form
29
+ * 内部托管的属性。
30
+ */
31
+ interface SchemaFormFormProps {
32
+ /** 表单尺寸。 */
33
+ size?: 'large' | 'default' | 'small';
34
+ /** 是否全局禁用表单。 */
35
+ disabled?: boolean;
36
+ /** label 位置(左/右/上)。 */
37
+ labelPosition?: 'left' | 'right' | 'top';
38
+ /** 必填星号位置。 */
39
+ requireAsteriskPosition?: 'left' | 'right';
40
+ /** label 宽度。 */
41
+ labelWidth?: string | number;
42
+ /** label 后缀。 */
43
+ labelSuffix?: string;
44
+ /** 行内表单模式。 */
45
+ inline?: boolean;
46
+ /** 行内错误提示。 */
47
+ inlineMessage?: boolean;
48
+ /** 是否在校验状态旁显示图标。 */
49
+ statusIcon?: boolean;
50
+ /** 是否显示错误提示文字。 */
51
+ showMessage?: boolean;
52
+ /** 规则变化时是否自动校验。 */
53
+ validateOnRuleChange?: boolean;
54
+ /** 隐藏必填星号。 */
55
+ hideRequiredAsterisk?: boolean;
56
+ /** 校验失败时滚动到错误字段。 */
57
+ scrollToError?: boolean;
58
+ /** 透传给 `scrollIntoView` 的选项。 */
59
+ scrollIntoViewOptions?: boolean | ScrollIntoViewOptions;
60
+ }
61
+ /**
62
+ * el-row 属性精简声明。
63
+ *
64
+ * 字段布局默认通过 schema `option.colProps` 覆盖;这里的 rowProps 是兜底配置。
65
+ */
66
+ interface SchemaFormRowProps {
67
+ /** 自定义 row 的根标签,默认 'div'。 */
68
+ tag?: string;
69
+ /** 栅格间距。 */
70
+ gutter?: number;
71
+ /** 水平对齐方式。 */
72
+ justify?: 'start' | 'center' | 'end' | 'space-around' | 'space-between' | 'space-evenly';
73
+ /** 垂直对齐方式。 */
74
+ align?: 'top' | 'middle' | 'bottom';
75
+ }
76
+ /** Element Plus 按钮支持的 type 取值(精简版)。 */
77
+ type SchemaFormButtonType = 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'text' | '';
78
+ /**
79
+ * el-button 属性精简声明。
80
+ *
81
+ * 业务侧可在 `SchemaFormActionConfig.submitButtonProps / resetButtonProps` 中
82
+ * 按需透传给 el-button。
83
+ */
84
+ interface SchemaFormButtonProps {
85
+ /** 按钮尺寸。 */
86
+ size?: 'large' | 'default' | 'small';
87
+ /** 按钮类型。 */
88
+ type?: SchemaFormButtonType;
89
+ /** 是否禁用。 */
90
+ disabled?: boolean;
91
+ /** 是否加载中(与 SchemaForm 的 submitLoading 联动)。 */
92
+ loading?: boolean;
93
+ /** 是否朴素按钮。 */
94
+ plain?: boolean;
95
+ /** 是否文字按钮。 */
96
+ text?: boolean;
97
+ /** 是否链接按钮。 */
98
+ link?: boolean;
99
+ /** 是否显示背景色。 */
100
+ bg?: boolean;
101
+ /** 是否自动获取焦点。 */
102
+ autofocus?: boolean;
103
+ /** 是否圆角按钮。 */
104
+ round?: boolean;
105
+ /** 是否圆形按钮。 */
106
+ circle?: boolean;
107
+ /** 自定义颜色。 */
108
+ color?: string;
109
+ /** 是否深色模式。 */
110
+ dark?: boolean;
111
+ /** 是否自动在两个汉字之间插入空格。 */
112
+ autoInsertSpace?: boolean;
113
+ /** 自定义元素标签,默认 'button'。 */
114
+ tag?: string;
115
+ /** 透传未知字段,便于业务侧扩展。 */
116
+ [key: string]: unknown;
117
+ }
118
+ /**
119
+ * 操作区配置:控制提交/重置按钮的展示与文案。
120
+ *
121
+ * 全部字段均为可选,缺省值由 schema-form 内部维护。
122
+ */
123
+ interface SchemaFormActionConfig {
124
+ /** 是否显示提交按钮,默认 true。 */
125
+ submit?: boolean;
126
+ /** 是否显示重置按钮,默认 true。 */
127
+ reset?: boolean;
128
+ /** 提交按钮文案,默认"提交"。 */
129
+ submitText?: string;
130
+ /** 重置按钮文案,默认"重置"。 */
131
+ resetText?: string;
132
+ /** 透传给提交按钮的 Element Plus 属性。 */
133
+ submitButtonProps?: SchemaFormButtonProps;
134
+ /** 透传给重置按钮的 Element Plus 属性。 */
135
+ resetButtonProps?: SchemaFormButtonProps;
136
+ }
137
+ /**
138
+ * field 插槽的属性。
139
+ *
140
+ * 业务侧可通过 `field` 插槽完全接管字段渲染(用于自定义复杂控件)。
141
+ */
142
+ interface SchemaFormFieldSlotProps {
143
+ /** 字段名。 */
144
+ field: string;
145
+ /** 字段的 schema 配置。 */
146
+ item: SchemaFormSchema['properties'][string];
147
+ /** 当前字段值。 */
148
+ value: JsonValue | undefined;
149
+ /** 当前表单数据。 */
150
+ model: FormValueInterface;
151
+ /** 更新当前字段值,同时触发 v-model 和 change 事件。 */
152
+ setValue: (value: JsonValue) => void;
153
+ }
154
+ /**
155
+ * actions 插槽的属性。
156
+ *
157
+ * 业务侧可通过 `actions` 插槽自定义操作区(替代默认的提交/重置按钮)。
158
+ */
159
+ interface SchemaFormActionsSlotProps {
160
+ /** 提交按钮是否处于加载状态。 */
161
+ loading: boolean;
162
+ /** 调用表单提交。 */
163
+ submit: () => Promise<boolean>;
164
+ /** 调用表单重置。 */
165
+ reset: () => FormValueInterface;
166
+ }
167
+ /**
168
+ * schema-form 支持的插槽集合。
169
+ *
170
+ * - `field`:自定义所有字段的控件内容;
171
+ * - `actions`:自定义操作区内容。
172
+ */
173
+ interface SchemaFormSlots {
174
+ /** 自定义所有字段的控件内容。 */
175
+ field?: (props: SchemaFormFieldSlotProps) => unknown;
176
+ /** 自定义操作区内容。 */
177
+ actions?: (props: SchemaFormActionsSlotProps) => unknown;
178
+ }
179
+ /**
180
+ * schema-form 的 props 定义。
181
+ *
182
+ * 必传 `schema`,其他均为可选。`modelValue` 支持 v-model;
183
+ * `initialValues` 用于 reset 恢复;`formValue` 为兼容旧版入参已标记废弃。
184
+ */
185
+ interface SchemaFormProps {
186
+ /** 表单 schema。 */
187
+ schema: SchemaFormSchema;
188
+ /** 当前表单值,支持 v-model。 */
189
+ modelValue?: SchemaFormValues;
190
+ /** 重置时恢复的初始值。 */
191
+ initialValues?: SchemaFormValues;
192
+ /**
193
+ * 兼容旧版 formValue 入参;新代码请使用 modelValue / v-model。
194
+ * @deprecated
195
+ */
196
+ formValue?: SchemaFormValues;
197
+ /** Element Plus el-form 属性,model 和 rules 由 SchemaForm 内部管理。 */
198
+ formProps?: SchemaFormFormProps;
199
+ /** 全局 el-row 属性,字段布局可以通过 schema option.colProps 覆盖。 */
200
+ rowProps?: SchemaFormRowProps;
201
+ /** 全局字段 el-col 栅格属性;传入后会完全覆盖默认值和字段自身的 colProps。 */
202
+ colProps?: SchemaFormColProps;
203
+ /** 操作区配置;传 false 隐藏默认操作区。 */
204
+ actions?: false | SchemaFormActionConfig;
205
+ /** 提交按钮加载状态。 */
206
+ submitLoading?: boolean;
207
+ }
208
+ /**
209
+ * `change` 事件载荷:描述某个字段在某个时刻的变化。
210
+ */
211
+ interface SchemaFormChangePayload {
212
+ /** 发生变化的字段。 */
213
+ field: string;
214
+ /** 变化后的字段值。 */
215
+ value: JsonValue;
216
+ /** 变化后的表单值快照。 */
217
+ values: FormValueInterface;
218
+ }
219
+ /**
220
+ * 校验返回值。
221
+ *
222
+ * `ok` 为 true 表示通过 Element Plus 字段级 + AJV 兜底两层校验。
223
+ */
224
+ interface SchemaFormValidationResult {
225
+ /** 是否通过 Element Plus 和 AJV 的联合校验。 */
226
+ ok: boolean;
227
+ /** AJV 可序列化错误列表。 */
228
+ errors: AjvFieldError[];
229
+ }
230
+ /**
231
+ * `validation-failed` 事件载荷。
232
+ *
233
+ * 校验失败时同时给出失败时的表单值与错误列表,便于业务侧展示调试信息。
234
+ */
235
+ interface SchemaFormValidationFailedPayload {
236
+ /** 校验失败时的表单值快照。 */
237
+ values: FormValueInterface;
238
+ /** 校验错误列表。 */
239
+ errors: AjvFieldError[];
240
+ }
241
+ /**
242
+ * schema-form 的事件声明。
243
+ *
244
+ * 使用 TS 函数重载语法同时声明多个事件签名,业务侧在 `<SchemaForm @xxx="..." />` 处
245
+ * 能拿到完整的事件参数类型推断。
246
+ */
247
+ interface SchemaFormEmits {
248
+ /**
249
+ * v-model 更新事件,传出当前表单值快照。
250
+ */
251
+ (e: 'update:modelValue', values: FormValueInterface): void;
252
+ /**
253
+ * 字段值变化事件,包含变更字段、最新值及整个表单快照。
254
+ */
255
+ (e: 'change', payload: SchemaFormChangePayload): void;
256
+ /**
257
+ * 表单提交事件,传出提交时的表单值快照。
258
+ */
259
+ (e: 'submit', values: FormValueInterface): void;
260
+ /**
261
+ * 校验失败事件,包含失败时的表单值与错误列表。
262
+ */
263
+ (e: 'validation-failed', payload: SchemaFormValidationFailedPayload): void;
264
+ /**
265
+ * 表单重置事件,传出重置后的表单值(初始值)。
266
+ */
267
+ (e: 'reset', values: FormValueInterface): void;
268
+ /**
269
+ * 单字段校验结果回调,包含字段 prop、校验是否通过及错误信息。
270
+ */
271
+ (e: 'validate', prop: FormItemProp, isValid: boolean, message: string): void;
272
+ }
273
+ /**
274
+ * schema-form 通过 `defineExpose` 暴露的方法。
275
+ *
276
+ * 业务侧可通过 `ref.value.validate()` / `ref.value.submit()` 等命令式调用。
277
+ */
278
+ interface SchemaFormExposed {
279
+ /** 校验整个表单,返回联合校验结果。 */
280
+ validate: (fields?: FormItemProp) => Promise<SchemaFormValidationResult>;
281
+ /** 校验指定字段。 */
282
+ validateField: (field: string) => Promise<SchemaFormValidationResult>;
283
+ /** 校验并提交,返回是否提交成功。 */
284
+ submit: () => Promise<boolean>;
285
+ /** 恢复初始值并清除校验状态。 */
286
+ reset: () => FormValueInterface;
287
+ /** 清除全部或指定字段的校验状态。 */
288
+ clearValidate: (fields?: FormItemProp) => void;
289
+ /** 滚动到指定字段。 */
290
+ scrollToField: (field: string) => void;
291
+ /** 当前值是否与初始值不同。 */
292
+ isDirty: ComputedRef<boolean>;
293
+ }
294
+ export type { FormValueInterface, SchemaFormValues, SchemaFormColProps, SchemaFormFormProps, SchemaFormRowProps, SchemaFormButtonType, SchemaFormButtonProps, SchemaFormActionConfig, SchemaFormFieldSlotProps, SchemaFormActionsSlotProps, SchemaFormSlots, SchemaFormProps, SchemaFormChangePayload, SchemaFormValidationResult, SchemaFormValidationFailedPayload, SchemaFormEmits, SchemaFormExposed, SchemaFormFieldOption, };
295
+ //# sourceMappingURL=type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../../src/client/widgets/schema-form/type.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,6BAA6B;AAC7B,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAEtC;;;;GAIG;AACH,UAAU,kBAAkB;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAED,yCAAyC;AACzC,KAAK,gBAAgB,GAAG,kBAAkB,CAAC;AAE3C;;;;;;;GAOG;AACH,UAAU,mBAAmB;IAC3B,YAAY;IACZ,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IACrC,gBAAgB;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;IACzC,cAAc;IACd,uBAAuB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3C,gBAAgB;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,gBAAgB;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kBAAkB;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mBAAmB;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,cAAc;IACd,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,oBAAoB;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gCAAgC;IAChC,qBAAqB,CAAC,EAAE,OAAO,GAAG,qBAAqB,CAAC;CACzD;AAED;;;;GAIG;AACH,UAAU,kBAAkB;IAC1B,6BAA6B;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc;IACd,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,cAAc,GAAG,eAAe,GAAG,cAAc,CAAC;IACzF,cAAc;IACd,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACrC;AAED,uCAAuC;AACvC,KAAK,oBAAoB,GACrB,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,QAAQ,GACR,MAAM,GACN,MAAM,GACN,EAAE,CAAC;AAEP;;;;;GAKG;AACH,UAAU,qBAAqB;IAC7B,YAAY;IACZ,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IACrC,YAAY;IACZ,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,YAAY;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,cAAc;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,eAAe;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,gBAAgB;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uBAAuB;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,2BAA2B;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,UAAU,sBAAsB;IAC9B,wBAAwB;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wBAAwB;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qBAAqB;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,iBAAiB,CAAC,EAAE,qBAAqB,CAAC;IAC1C,gCAAgC;IAChC,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;CAC1C;AAED;;;;GAIG;AACH,UAAU,wBAAwB;IAChC,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,IAAI,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7C,aAAa;IACb,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,cAAc;IACd,KAAK,EAAE,kBAAkB,CAAC;IAC1B,wCAAwC;IACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CACtC;AAED;;;;GAIG;AACH,UAAU,0BAA0B;IAClC,oBAAoB;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc;IACd,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,cAAc;IACd,KAAK,EAAE,MAAM,kBAAkB,CAAC;CACjC;AAED;;;;;GAKG;AACH,UAAU,eAAe;IACvB,oBAAoB;IACpB,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,OAAO,CAAC;IACrD,gBAAgB;IAChB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,OAAO,CAAC;CAC1D;AAED;;;;;GAKG;AACH,UAAU,eAAe;IACvB,iBAAiB;IACjB,MAAM,EAAE,gBAAgB,CAAC;IACzB,wBAAwB;IACxB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,iBAAiB;IACjB,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC;;;OAGG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,+DAA+D;IAC/D,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,uDAAuD;IACvD,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,6BAA6B;IAC7B,OAAO,CAAC,EAAE,KAAK,GAAG,sBAAsB,CAAC;IACzC,gBAAgB;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,UAAU,uBAAuB;IAC/B,eAAe;IACf,KAAK,EAAE,MAAM,CAAC;IACd,eAAe;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,iBAAiB;IACjB,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED;;;;GAIG;AACH,UAAU,0BAA0B;IAClC,qCAAqC;IACrC,EAAE,EAAE,OAAO,CAAC;IACZ,oBAAoB;IACpB,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED;;;;GAIG;AACH,UAAU,iCAAiC;IACzC,mBAAmB;IACnB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,cAAc;IACd,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED;;;;;GAKG;AACH,UAAU,eAAe;IACvB;;OAEG;IACH,CAAC,CAAC,EAAE,mBAAmB,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC3D;;OAEG;IACH,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACtD;;OAEG;IACH,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAChD;;OAEG;IACH,CAAC,CAAC,EAAE,mBAAmB,EAAE,OAAO,EAAE,iCAAiC,GAAG,IAAI,CAAC;IAC3E;;OAEG;IACH,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC/C;;OAEG;IACH,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9E;AAED;;;;GAIG;AACH,UAAU,iBAAiB;IACzB,uBAAuB;IACvB,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACzE,cAAc;IACd,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACtE,sBAAsB;IACtB,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,oBAAoB;IACpB,KAAK,EAAE,MAAM,kBAAkB,CAAC;IAChC,sBAAsB;IACtB,aAAa,EAAE,CAAC,MAAM,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IAC/C,eAAe;IACf,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,mBAAmB;IACnB,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CAC/B;AAED,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,0BAA0B,EAC1B,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,0BAA0B,EAC1B,iCAAiC,EACjC,eAAe,EACf,iBAAiB,EACjB,qBAAqB,GACtB,CAAC"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * 基于 ajv 的 schema-form 校验工具。
3
+ *
4
+ * 设计要点:
5
+ * 1. SchemaProperty 上同时挂载 JSON Schema 字段(type / pattern / ...)和业务扩展字段
6
+ * (label / searchOption / option / CreateFormOption / UpdateFormOption),传给 ajv 前需要剥离。
7
+ * 2. ajv 实例化时 strict: false,避免 ajv 8 对未知 keyword 抛错(业务扩展字段已被剥离,但
8
+ * 保留白名单兜底更安全)。
9
+ * 3. validate 函数按 schema 引用缓存,避免每次 submit 都重新编译。
10
+ * 4. 兼容两种 required 形式:
11
+ * - SchemaModuleSchema 顶层 required: string[]
12
+ * - DtoSchema(schema-form 实际消费)的 option.required: boolean(JSON Schema 的 required 已下沉)
13
+ * 后者会在剥离 option 前先收集 required key,统一合并到 ajv schema 顶层的 required 数组。
14
+ */
15
+ import Ajv, { type ErrorObject, type ValidateFunction } from 'ajv';
16
+ /** 同时兼容 SchemaModuleSchema 与 DtoSchema:结构上是 { type: 'object', properties: {...} }。 */
17
+ type AnySchema = {
18
+ type?: 'object' | string;
19
+ properties: Record<string, AnySchemaProperty>;
20
+ required?: string[];
21
+ [key: string]: unknown;
22
+ };
23
+ type AnySchemaProperty = Record<string, unknown> & {
24
+ option?: {
25
+ required?: boolean;
26
+ [key: string]: unknown;
27
+ };
28
+ };
29
+ /** 校验入参 schema 的对外类型,便于业务侧在自定义校验工具中复用。 */
30
+ export type SchemaValidationSchema = AnySchema;
31
+ /**
32
+ * 把单个 property 剥离成纯 JSON Schema。供 toJsonSchema 与字段级 validator 复用。
33
+ *
34
+ * 仅保留白名单内的字段;对 `properties` / `items` 做递归剥离,确保嵌套结构也被正确处理。
35
+ *
36
+ * @param prop 原始 property(可能含业务扩展字段)。
37
+ * @returns 仅含 JSON Schema 关键字的纯 schema。
38
+ */
39
+ declare function stripProperty(prop: Record<string, unknown>): Record<string, unknown>;
40
+ /**
41
+ * ajv 实例配置:
42
+ * - `allErrors: true`:收集所有错误而非首个失败,提升一次性反馈体验;
43
+ * - `strict: false`:关闭 ajv 8 的严格模式,允许未知 keyword 透传;
44
+ * - `removeAdditional: false`:保留未知字段,便于业务侧在 schema 之外的扩展字段被服务端收到。
45
+ */
46
+ declare const ajv: Ajv;
47
+ /**
48
+ * 编译 schema 对应的 ajv validate 函数(带缓存)。
49
+ *
50
+ * @param schema 业务 schema。
51
+ * @returns ajv validate 函数。
52
+ */
53
+ declare function compileValidator(schema: AnySchema): ValidateFunction;
54
+ /**
55
+ * ajv 校验结果中可序列化的字段错误。
56
+ *
57
+ * 这是 schema-form 上层(useSchemaRules / 表单组件)实际消费的错误结构,
58
+ * 已经把 ajv 内部表示转换为"业务侧可直接渲染红字"的形态。
59
+ */
60
+ export interface AjvFieldError {
61
+ /** 对应 schema.properties 的 key(支持嵌套路径,用 . 分隔) */
62
+ field: string;
63
+ /** 错误信息(未走 i18n 时是英文原文) */
64
+ message: string;
65
+ /** ajv keyword,如 required / pattern / minimum */
66
+ keyword: string;
67
+ /** 期望值(仅 enum / const 等 keyword 携带) */
68
+ params?: Record<string, unknown>;
69
+ }
70
+ /** 通过字段路径获取字段 label 的解析器(用于错误信息本地化)。 */
71
+ type FieldLabelResolver = (field: string) => string | undefined;
72
+ /**
73
+ * 把 ajv 的原始错误数组转换为业务侧可序列化的 `AjvFieldError[]`。
74
+ *
75
+ * 处理步骤:
76
+ * 1. 调用 `localizeZh` 原地汉化错误信息;
77
+ * 2. 把 `instancePath` 中的 `/` 转换为 `.`;
78
+ * 3. 对 `required` keyword,把字段修正为"缺失字段的路径";
79
+ * 4. 用 label 替换错误信息中的字段名,让红字更易读。
80
+ *
81
+ * @param errors ajv 错误数组(可能为 null)。
82
+ * @param resolveFieldLabel 字段 label 解析器。
83
+ * @returns 业务侧可消费的字段错误列表。
84
+ */
85
+ declare function toFieldErrors(errors: ErrorObject[] | null | undefined, resolveFieldLabel?: FieldLabelResolver): AjvFieldError[];
86
+ /**
87
+ * 校验返回值。
88
+ */
89
+ export interface ValidateResult {
90
+ /** 是否校验通过。 */
91
+ ok: boolean;
92
+ /** 字段错误列表。 */
93
+ errors: AjvFieldError[];
94
+ }
95
+ /**
96
+ * 校验表单数据:返回 ok + 错误列表(用于 submit 兜底,覆盖 required / 跨字段约束)。
97
+ *
98
+ * @param schema 业务 schema。
99
+ * @param form 当前表单数据。
100
+ * @returns 校验结果。
101
+ */
102
+ declare function validateForm(schema: AnySchema, form: Record<string, unknown>): ValidateResult;
103
+ /**
104
+ * 仅校验单个字段:用于 el-form 的字段级 validator 实时红字提示。
105
+ *
106
+ * 实现上构造 `{ [key]: value }` 子集再走 ajv,再过滤出属于该字段的错误。
107
+ *
108
+ * @param schema 业务 schema。
109
+ * @param key 待校验字段名。
110
+ * @param value 待校验值。
111
+ * @returns 校验结果(只包含该字段的错误)。
112
+ */
113
+ declare function validateField(schema: AnySchema, key: string, value: unknown): ValidateResult;
114
+ /**
115
+ * 为单个 property 编译独立子 schema 的 validator。
116
+ *
117
+ * 用于 useSchemaRules 字段级校验:只校验当前字段规则,不受其他字段缺失影响,
118
+ * 错误信息也更直接(instancePath 为空,message 就是 ajv 原文)。
119
+ *
120
+ * 注意:该函数不会走 `compileValidator` 的缓存,因为单个 property 的子 schema 频繁重建成本很低。
121
+ *
122
+ * @param propertySchema 单个 property 的 schema(含业务扩展字段)。
123
+ * @returns ajv validate 函数。
124
+ */
125
+ declare function compileFieldValidator(propertySchema: AnySchemaProperty): ValidateFunction;
126
+ export { ajv, stripProperty, compileValidator, compileFieldValidator, toFieldErrors, validateForm, validateField, };
127
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../../src/client/widgets/schema-form/validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,GAAG,EAAE,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,KAAK,CAAC;AAInE,sFAAsF;AACtF,KAAK,SAAS,GAAG;IACf,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,KAAK,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACjD,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;CACzD,CAAC;AAEF,0CAA0C;AAC1C,MAAM,MAAM,sBAAsB,GAAG,SAAS,CAAC;AAwD/C;;;;;;;GAOG;AACH,iBAAS,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoB7E;AA6DD;;;;;GAKG;AACH,QAAA,MAAM,GAAG,KAIP,CAAC;AAWH;;;;;GAKG;AACH,iBAAS,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,gBAAgB,CAO7D;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,wCAAwC;AACxC,KAAK,kBAAkB,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;AA6BhE;;;;;;;;;;;;GAYG;AACH,iBAAS,aAAa,CACpB,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,GAAG,SAAS,EACxC,iBAAiB,CAAC,EAAE,kBAAkB,GACrC,aAAa,EAAE,CAmCjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,cAAc;IACd,EAAE,EAAE,OAAO,CAAC;IACZ,cAAc;IACd,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED;;;;;;GAMG;AACH,iBAAS,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,CAOtF;AAED;;;;;;;;;GASG;AACH,iBAAS,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,cAAc,CASrF;AAED;;;;;;;;;;GAUG;AACH,iBAAS,qBAAqB,CAAC,cAAc,EAAE,iBAAiB,GAAG,gBAAgB,CAGlF;AAED,OAAO,EACL,GAAG,EACH,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,aAAa,GACd,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { OperateParams, SchemaTableExposed, SchemaTableProps } from './type';
2
+ declare const __VLS_export: import("vue").DefineComponent<SchemaTableProps, SchemaTableExposed, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
3
+ operate: (arg: OperateParams<Record<string, unknown>>) => any;
4
+ }, string, import("vue").PublicProps, Readonly<SchemaTableProps> & Readonly<{
5
+ onOperate?: (arg: OperateParams<Record<string, unknown>>) => any;
6
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
9
+ //# sourceMappingURL=index.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.vue.d.ts","sourceRoot":"","sources":["../../../../src/client/widgets/schema-table/index.vue"],"names":[],"mappings":"AAsQA,OAAO,KAAK,EACV,aAAa,EAEb,kBAAkB,EAClB,gBAAgB,EAEjB,MAAM,QAAQ,CAAC;AA2ahB,QAAA,MAAM,YAAY;;;;kFAIhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * schema-table 的对外类型声明。
3
+ *
4
+ * 该文件集中了 props / emits / 暴露方法 / 操作回调载荷等所有公开类型,
5
+ * 业务侧在自定义表格渲染或对接操作按钮时只需从这里 import 即可。
6
+ */
7
+ import type { TableSchema } from '../../common';
8
+ import type { FormValueInterface } from '../schema-form/type';
9
+ import { EventKey, type SchemaComponentName } from '@ynight/contracts';
10
+ /**
11
+ * 操作按钮配置。
12
+ *
13
+ * - `eventKey`:枚举值,标识按钮触发的事件类型(弹窗、跳转、删除等);
14
+ * - `eventOption`:事件携带的参数(路由 params / query / body / 弹窗组件名)。
15
+ *
16
+ * `[key: string]: unknown` 用于透传业务侧自定义字段(如权限点、图标等)。
17
+ */
18
+ interface SchemaTableButton {
19
+ /** 按钮展示文案。 */
20
+ label: string;
21
+ /** 事件枚举,决定触发行为。 */
22
+ eventKey: EventKey;
23
+ /** 事件附带参数。 */
24
+ eventOption: {
25
+ /** 路由 params 占位(用于替换动态段)。 */
26
+ params?: Record<string, string>;
27
+ /** 路由 query 参数。 */
28
+ query?: Record<string, string>;
29
+ /** 提交给接口的 body 参数(字符串模板,支持 `${row.xxx}` 占位)。 */
30
+ body?: Record<string, string>;
31
+ /** 触发的业务组件名(如 CreateForm / UpdateForm / DetailView)。 */
32
+ comName?: SchemaComponentName;
33
+ };
34
+ /** 透传未知字段,便于业务侧扩展。 */
35
+ [key: string]: unknown;
36
+ }
37
+ /**
38
+ * `operate` 事件载荷。
39
+ *
40
+ * 业务侧在 `@operate` 回调中可拿到按钮配置与所在行数据,进而分发到不同的事件处理函数。
41
+ */
42
+ interface OperateParams<T = Record<string, unknown>> {
43
+ /** 当前被点击的按钮配置。 */
44
+ btnConfig: SchemaTableButton;
45
+ /** 当前行数据(业务类型由业务侧通过泛型指定)。 */
46
+ rowData: T;
47
+ }
48
+ /**
49
+ * schema-table 的 props 定义。
50
+ *
51
+ * 必传 `schema` 与 `buttons`,`api` / `searchValue` 用于对接后端接口与搜索条件。
52
+ */
53
+ interface SchemaTableProps {
54
+ /** schema 配置 */
55
+ schema: TableSchema;
56
+ /** 表格数据源 api */
57
+ api?: string;
58
+ /** buttons 操作按钮配置 */
59
+ buttons: SchemaTableButton[];
60
+ /** 搜索表单内容 */
61
+ searchValue: FormValueInterface;
62
+ }
63
+ /**
64
+ * schema-table 的事件声明。
65
+ *
66
+ * 当前主要事件是 `operate`——表格把"按钮 + 行数据"原样上抛,
67
+ * 由业务侧决定具体行为(弹窗 / 跳转 / 删除等)。
68
+ */
69
+ interface SchemaTableEmits {
70
+ /** 操作按钮点击事件,回调为按钮配置与所在行数据。 */
71
+ (e: 'operate', arg: OperateParams): void;
72
+ }
73
+ /** 表格数据数组类型,每行为一个通用对象。 */
74
+ type TableData = Record<string, unknown>[];
75
+ /**
76
+ * schema-table 通过 `defineExpose` 暴露的方法。
77
+ *
78
+ * 业务侧可通过 `ref.value.initData()` 等命令式调用,用于在外部触发表格刷新等场景。
79
+ */
80
+ interface SchemaTableExposed {
81
+ /** 重新初始化表格数据(清空+重载)。 */
82
+ initData: () => void;
83
+ /** 重新加载表格数据(保留当前页码)。 */
84
+ loadTableData: () => void;
85
+ /** 显示表格 loading 状态。 */
86
+ showLoading: () => void;
87
+ /** 隐藏表格 loading 状态。 */
88
+ hideLoading: () => void;
89
+ }
90
+ export type { TableData, SchemaTableButton, OperateParams, SchemaTableProps, SchemaTableEmits, SchemaTableExposed, };
91
+ //# sourceMappingURL=type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../../src/client/widgets/schema-table/type.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAEvE;;;;;;;GAOG;AACH,UAAU,iBAAiB;IACzB,cAAc;IACd,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc;IACd,WAAW,EAAE;QACX,6BAA6B;QAC7B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,mBAAmB;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,gDAAgD;QAChD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9B,wDAAwD;QACxD,OAAO,CAAC,EAAE,mBAAmB,CAAC;KAC/B,CAAC;IACF,sBAAsB;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,UAAU,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjD,kBAAkB;IAClB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,6BAA6B;IAC7B,OAAO,EAAE,CAAC,CAAC;CACZ;AAED;;;;GAIG;AACH,UAAU,gBAAgB;IACxB,gBAAgB;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,gBAAgB;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,aAAa;IACb,WAAW,EAAE,kBAAkB,CAAC;CACjC;AAED;;;;;GAKG;AACH,UAAU,gBAAgB;IACxB,8BAA8B;IAC9B,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAAC;CAC1C;AAED,0BAA0B;AAC1B,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;AAE3C;;;;GAIG;AACH,UAAU,kBAAkB;IAC1B,wBAAwB;IACxB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,wBAAwB;IACxB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,uBAAuB;IACvB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,uBAAuB;IACvB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GACnB,CAAC"}
@@ -0,0 +1,75 @@
1
+ import type { BusinessControls, EmptyBusinessControls, IModel, JsonValue, MenuItemType, SchemaModuleConfig } from '@ynight/contracts';
2
+ /**
3
+ * 模型入口只转出 DSL、通用查询工具和项目 DTO,避免泄漏签名实现。
4
+ *
5
+ * - 工具:EventKey / MenuType / ModuleType / SchemaComponentName / SchemaFormControlType
6
+ * - 工具函数:transQueryToString
7
+ * - 类型:BusinessControls / IModel / MenuItemType / ComponentConfigMap / 各类控件配置 …
8
+ * - 类型:ProjectDto / ModelDto
9
+ *
10
+ * 业务侧应通过 `@ynight/framework/model` 引入上述符号,避免直接依赖 `@ynight/contracts`。
11
+ */
12
+ export { EventKey, MenuType, ModuleType, SchemaComponentName, SchemaFormControlType, transQueryToString, } from '@ynight/contracts';
13
+ export type { BusinessControls, EmptyBusinessControls, JsonObject, JsonPrimitive, JsonValue, IModel, MenuItemType, ModuleItem, SiderModuleConfig, PathModuleConfig, ButtonConfig, ComponentName, TableColumnConfig, CreateFormConfig, UpdateFormConfig, DetailViewConfig, ComponentRuntimeConfig, ComponentConfigMap, ComponentPropertyConfig, SchemaProperty, SchemaModuleSchema, SchemaModuleConfig, SchemaFormFieldConfig, SchemaFormFieldConfigBase, CustomFormFieldConfig, DynamicSelectConfig, AsyncSearchSelectConfig, TagInputConfig, ChoiceOption, ChoiceValue, FieldValue, CascaderOption, ProjectDto, ModelDto, } from '@ynight/contracts';
14
+ /**
15
+ * 控件契约:声明某自定义控件的 props 应满足的 JSON Schema。
16
+ * - 框架会在 model 装载阶段使用 Ajv 对每个控件实例进行 props 校验
17
+ * - 仅 propsSchema 一个字段,对应 component.config.props
18
+ */
19
+ export interface ControlContract {
20
+ propsSchema: Record<string, JsonValue>;
21
+ }
22
+ /**
23
+ * 控件契约索引:key 为控件名,value 为契约定义。
24
+ * 通过 {@link defineControlContracts} 创建,享受类型提示。
25
+ */
26
+ export type ControlContracts<TControls extends BusinessControls> = {
27
+ [K in keyof TControls & string]: ControlContract;
28
+ };
29
+ /**
30
+ * 标注控件契约对象,仅做类型断言(identity)。
31
+ * 业务侧应将控件 propsSchema 集合声明为该函数返回值,以获得完整类型提示。
32
+ */
33
+ export declare function defineControlContracts<TControls extends BusinessControls>(contracts: ControlContracts<TControls>): ControlContracts<TControls>;
34
+ /**
35
+ * 标注业务模型(IModel)对象,仅做类型断言(identity)。
36
+ *
37
+ * 设计目的:
38
+ * 1. 让业务侧在写模型字面量时获得完整字段补全;
39
+ * 2. 通过可选的 `__controls` 把业务自定义控件类型透传给后续钩子;
40
+ * 3. 与 defineControlContracts 配合,可以让 schema 字段中的 control 类型受 IModel 推断约束。
41
+ */
42
+ export declare function defineModel<TControls extends BusinessControls = EmptyBusinessControls>(model: IModel<TControls>): IModel<TControls> & {
43
+ readonly __controls?: TControls;
44
+ };
45
+ /** 内部别名:把 MenuItemType 与泛型控件类型绑定,便于下方工厂函数复用。 */
46
+ type MenuItem<TControls extends BusinessControls = EmptyBusinessControls> = MenuItemType<TControls>;
47
+ /**
48
+ * 声明一个"自定义模块"菜单项。
49
+ * 适用场景:业务方提供独立路由 + 页面(iframe 之外、能跨项目的页面)。
50
+ * - key:菜单唯一标识(也用于 dashboard URL key)
51
+ * - name:展示名称
52
+ * - path:原始访问路径,用于 History 路由短链重定向
53
+ */
54
+ export declare function custom<TControls extends BusinessControls = EmptyBusinessControls>(key: string, name: string, path: string): MenuItem<TControls>;
55
+ /**
56
+ * 声明一个 iframe 模块菜单项。
57
+ * 适用场景:在管理后台内嵌第三方页面;path 为第三方页面 URL。
58
+ */
59
+ export declare function iframe<TControls extends BusinessControls = EmptyBusinessControls>(key: string, name: string, path: string): MenuItem<TControls>;
60
+ /**
61
+ * 声明菜单分组(仅用于侧边栏分组,自身不对应一个页面)。
62
+ * 子菜单为空时整组不会渲染。
63
+ */
64
+ export declare function group<TControls extends BusinessControls = EmptyBusinessControls>(key: string, name: string, subMenu: MenuItem<TControls>[]): MenuItem<TControls>;
65
+ /**
66
+ * 声明一个 sider(侧边栏)模块菜单项。
67
+ * 内部 menu 即侧边栏上的子菜单项;与 group 的差别在于 sider 自身也对应一个可访问的页面。
68
+ */
69
+ export declare function sider<TControls extends BusinessControls = EmptyBusinessControls>(key: string, name: string, menu: MenuItem<TControls>[]): MenuItem<TControls>;
70
+ /**
71
+ * 声明一个 schema 驱动的模块菜单项。
72
+ * 适用场景:表格式 CRUD 页面;具体组件、表单、按钮配置由 moduleConfig 提供。
73
+ */
74
+ export declare function schema<TControls extends BusinessControls = EmptyBusinessControls>(key: string, name: string, moduleConfig: SchemaModuleConfig<TControls>): MenuItem<TControls>;
75
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"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"}