@ttkj/avue 2.10.11 → 2.10.13

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.
@@ -0,0 +1,300 @@
1
+ import { PopoverPlacement } from 'element-ui/types/popover';
2
+ import { AvueComponentSize, Obj, DicProps as BaseDicProps, DicHttpProps } from '../global';
3
+
4
+ /** 表单项字典Props配置 */
5
+ export interface DicProps extends BaseDicProps, DicHttpProps {}
6
+
7
+ /** 组件类型: 布局(layout) 基础(basic) 表单组件(form) */
8
+ export type ComponentType = 'layout' | 'basic' | 'form';
9
+
10
+ /** 表单项数据模拟配置 */
11
+ export type ColumnMock =
12
+ | ((form: Obj) => any)
13
+ | {
14
+ /** 随机生成一个常见的姓名。 */
15
+ type: 'name';
16
+ /** 是否英文名 */
17
+ en?: boolean;
18
+ }
19
+ | {
20
+ type: 'number';
21
+ /** 整数部分的最小值。默认值为 -9007199254740992。 */
22
+ min?: number;
23
+ /** 整数部分的最大值。默认值为 9007199254740992。 */
24
+ max?: number;
25
+ /** 小数部分位数的最小值。默认值为 0。不传返回整数值 */
26
+ precision?: number;
27
+ }
28
+ | {
29
+ /** 随机生成日期时间。文档:```https://github.com/nuysoft/Mock/wiki/Date``` */
30
+ type: 'datetime';
31
+ /** 指示生成的日期字符串的格式。默认值为 yyyy-MM-dd。当now为true时,概念有所不同,具体查看文档
32
+ */
33
+ format?: string;
34
+ /** 是否为当前时间 */
35
+ now?: boolean;
36
+ }
37
+ | {
38
+ /** 随机生成一段中文文本。 */
39
+ type: 'word';
40
+ /** 指示句子中单词的最小个数。默认值为 12。 */
41
+ min?: number;
42
+ /** 指示句子中单词的最大个数。默认值为 18。 */
43
+ max?: number;
44
+ }
45
+ | {
46
+ /** 随机生成网址 */
47
+ type: 'url';
48
+ /** 是否包含"http://"。默认值为 true */
49
+ header?: boolean;
50
+ }
51
+ | {
52
+ /** 随机生成一个(中国)县。返回省市区三级 */
53
+ type: 'county';
54
+ }
55
+ | {
56
+ /** 随机生成字典值 */
57
+ type: 'dic';
58
+ };
59
+
60
+ /**
61
+ * 表单项事件参数,适用于click|blur|focus
62
+ */
63
+ export interface FormColumnEventParams {
64
+ /** 表单项值 */
65
+ value: any;
66
+ /** 鼠标点击事件$event */
67
+ event: MouseEvent;
68
+ /** 表单项列配置 */
69
+ column: AvueFormColumn;
70
+ /** 表单项列配置索引 */
71
+ columnIndex: Record<string, AvueFormColumn>;
72
+ /** 表单值 */
73
+ row: Obj;
74
+ /** dic */
75
+ dic: Obj[];
76
+ /** 当表单项含dic时,根据选中值返回对应的dic项 */
77
+ item?: Obj;
78
+ /** 表单项值的label,含dic时,为dic的label,否则为value的字符串格式 */
79
+ label: string;
80
+ /** 所在行索引,只在明细组件中生效 */
81
+ index?: number;
82
+ }
83
+
84
+ /** 表单项基本配置属性 */
85
+ export interface FormBaseColumn {
86
+ /** 列类型, 默认: 'input' */
87
+ type?: string;
88
+ /** 组件 */
89
+ component?: string;
90
+ /**
91
+ * 组件类型
92
+ * @description 自定义属性
93
+ * @since 2.9.12
94
+ */
95
+ componentType?: ComponentType;
96
+ /** 列字段(唯一不重复) */
97
+ prop?: string;
98
+ /** 深结构数据绑定取值 */
99
+ bind?: string;
100
+ /** 标题名称 */
101
+ label: string;
102
+ /** 标题名称宽度, 默认: 110 */
103
+ labelWidth?: number;
104
+ /** 表单域标签的位置,如果值为 left 或者 right 时,则需要设置 labelWidth, 默认: 'right' */
105
+ labelPosition?: 'left' | 'right' | 'top';
106
+ /** 弹窗编辑文字提示 */
107
+ tip?: string;
108
+ /**
109
+ * 辅助文字提示展示方向
110
+ * @since 2.8.2
111
+ */
112
+ tipPlacement?: PopoverPlacement;
113
+ /** 标题文字提示 */
114
+ labelTip?: string;
115
+ /**
116
+ * 标题文字提示展示方向
117
+ * @since 2.8.2
118
+ */
119
+ labelTipPlacement?: PopoverPlacement;
120
+ /** placeholder */
121
+ placeholder?: string;
122
+ /** 只读, 默认: false */
123
+ readonly?: boolean;
124
+ /** 是否可以清空选项, 默认: false */
125
+ clearable?: boolean;
126
+ /** 禁止编辑, 默认: false */
127
+ disabled?: boolean;
128
+ /** 是否详情模式, 默认: false */
129
+ detail?: boolean;
130
+ /** 校验规则 */
131
+ rules?: Obj[];
132
+ /** 控件大小 */
133
+ size?: AvueComponentSize;
134
+ /** 是否可见, 默认: true */
135
+ display?: boolean;
136
+ /** 默认值 */
137
+ value?: any;
138
+ /**
139
+ * 字段位置排序
140
+ * @description 不同版本中排序规则并不相同:`2.7.9 - 2.8.26`中,order值越小位置越靠前,其余版本值越大位置越靠前。自用版本自 `2.9.12` 改为值越小位置越靠前
141
+ */
142
+ order?: number;
143
+ /** 数据类型转化时的分隔符,配合dataType使用, 默认: ', */
144
+ separator?: string;
145
+ /** 数据类型用于数组和字符串之间的转化 */
146
+ dataType?: 'string' | 'number' | 'array';
147
+ /**
148
+ * 自定义样式
149
+ * @since 2.7.1
150
+ */
151
+ className?: string;
152
+ /**
153
+ * 自定义属性
154
+ * @description 用于设定自定义组件的prop属性值
155
+ * @since 2.3.4
156
+ */
157
+ params?: {
158
+ /** 当组件不存在时,若配置了该属性,则会将其渲染成html元素 */
159
+ html?: string;
160
+ /** 其他自定义属性 */
161
+ [x: string]: any;
162
+ };
163
+ /**
164
+ * 组件隐藏是否提交数据
165
+ * @default default
166
+ * @description 流程相关配置。说明:组件隐藏是否提交数据。注意:若流程配置为不显示,则无法获取到组件数据
167
+ */
168
+ dataSubmit?: 'default' | 'always';
169
+ /** 级联的子节点prop */
170
+ cascader?: string[];
171
+ /** 级联的默认选项序号 */
172
+ cascaderIndex?: number;
173
+ /** 表单项数据模拟 */
174
+ mock?: ColumnMock;
175
+ }
176
+
177
+ /** 表单项列宽配置 */
178
+ export interface FormColumnColOption {
179
+ /** 栅列, 默认: 12 */
180
+ span: number;
181
+ /**
182
+ * ≥768px 响应式栅格数或者栅格属性对象, 默认: 12
183
+ * @since 2.8.12
184
+ */
185
+ smSpan: ResponsiveColumn;
186
+ /**
187
+ * <768px 响应式栅格数或者栅格属性对象, 默认: 24
188
+ * @since 2.8.12
189
+ */
190
+ xsSpan: ResponsiveColumn;
191
+ /**
192
+ * 栅格左侧的间隔格数, 默认: 0
193
+ * @since 2.8.12
194
+ */
195
+ offset: number;
196
+ /** 表单项是否单独成行, 默认: false */
197
+ row: boolean;
198
+ }
199
+
200
+ /** 表单项字典配置 */
201
+ export interface FormColumnDicOption {
202
+ /**
203
+ * 字典
204
+ *
205
+ * 默认为{label, value},其中label为显示,value为取值。可通过props属性调整
206
+ */
207
+ dicData: Obj[];
208
+ /** 远程字典地址 */
209
+ dicUrl: string;
210
+ /** 字典请求方式,配合dicUrl使用 */
211
+ dicMethod: 'get' | 'GET' | 'post' | 'POST';
212
+ /** 字典请求参数,配合dicUrl使用 */
213
+ dicQuery: Obj;
214
+ /** 字典数据返回的执行函数,配合dicUrl使用 */
215
+ dicFormatter: (value: any) => Obj[];
216
+ /** 参数配置项 */
217
+ props: Partial<DicProps>;
218
+ }
219
+
220
+ /** 表单项通用事件 */
221
+ export interface FormColumnEvent<T = Obj> {
222
+ /**
223
+ * 字段控制器, 不使用箭头函数
224
+ * @param value 表单项的值
225
+ * @param form 表单值
226
+ * @example https://avuejs.com/form/form-control.html
227
+ * @since 2.8.6
228
+ */
229
+ control: (value: any, form: T) => Record<string, Partial<AvueFormColumn>>;
230
+ /**
231
+ * 点击事件
232
+ * @since 2.9.6
233
+ */
234
+ click: (params: FormColumnEventParams) => void;
235
+ /**
236
+ * 值改变事件
237
+ * @since 2.9.6
238
+ */
239
+ change: (params: Omit<FormColumnEventParams, 'event'>) => void;
240
+ /**
241
+ * 聚焦事件
242
+ * @since 2.9.6
243
+ */
244
+ focus: (params: FormColumnEventParams) => void;
245
+ /**
246
+ * 失焦事件
247
+ * @since 2.9.6
248
+ */
249
+ blur: (params: FormColumnEventParams) => void;
250
+ /**
251
+ * 回车事件
252
+ */
253
+ enter: (params: Pick<FormColumnEventParams, 'value' | 'column'>) => void;
254
+ /**
255
+ * 事件源码
256
+ * @since 2.9.12(伪)
257
+ */
258
+ _event?: Partial<Record<'click' | 'change' | 'focus' | 'blur', string>>;
259
+ /** 事件 */
260
+ event: Partial<Omit<FormColumnEvent<T>, 'control' | 'event' | 'enter'>>;
261
+ }
262
+
263
+ /** 表单项通用参数 */
264
+ export interface AvueFormBaseColumn<T>
265
+ extends FormBaseColumn,
266
+ Partial<FormColumnColOption>,
267
+ Partial<FormColumnDicOption>,
268
+ Partial<FormColumnEvent<T>> {
269
+ /** 底部操作栏栅列, 默认: 12 */
270
+ menuSpan?: number;
271
+ /**
272
+ * 表单自定义, 默认: false
273
+ * @deprecated 2.8.0
274
+ */
275
+ formslot?: boolean;
276
+ /**
277
+ * 表单标题自定义, 默认: false
278
+ * @deprecated 2.8.0
279
+ */
280
+ labelslot?: boolean;
281
+ /**
282
+ * 表单错误自定义, 默认: false
283
+ * @deprecated 2.8.0
284
+ */
285
+ errorslot?: boolean;
286
+ /**
287
+ * 组件下拉自定义, 默认: false
288
+ * @deprecated 2.8.0
289
+ */
290
+ typeslot?: boolean;
291
+ }
292
+
293
+ /**
294
+ * 表单项配置
295
+ * TODO 表单项个性化配置待完成
296
+ */
297
+ export type AvueFormColumn<T = Obj> = AvueFormBaseColumn<T> & {
298
+ /** 其他配置 */
299
+ [x: string]: any;
300
+ };
@@ -0,0 +1,65 @@
1
+ // 引入定义
2
+ import { VNode } from 'vue';
3
+ import { ElForm } from 'element-ui/types/form';
4
+ import { AvueComponent } from '../global';
5
+ import { FormOption } from './option';
6
+
7
+ /** 表单Refs */
8
+ export interface AvueFormRefs {
9
+ /** 表单组件 */
10
+ form: ElForm;
11
+ /** 表单项Ref(仅未slot插槽的表单项才有),无实际使用意义 */
12
+ [x: string]: VNode[];
13
+ }
14
+
15
+ /** 表单组件 */
16
+ export declare class AvueForm<T = Obj> extends AvueComponent {
17
+ // ========== 属性 ==========
18
+ /** 表单配置 */
19
+ readonly option: FormOption<T>;
20
+ /** 表单值 */
21
+ readonly value: Obj;
22
+ /** 表单dic数据 */
23
+ DIC: Record<string, Obj[]>;
24
+ // ========== 方法 ==========
25
+ /** 重新初始化(多数用于服务端加载或者更新网络字典) */
26
+ init(): void;
27
+ /** 初始化表单 */
28
+ dataFormat(): void;
29
+ /**
30
+ * 获取prop的ref对象
31
+ * @param prop 表单项的 prop 属性
32
+ */
33
+ getPropRef(prop: keyof AvueFormRefs): ReturnType<AvueFormRefs>;
34
+ /**
35
+ * 移除表单项的校验结果。
36
+ * @param {string | string[]} [props] 传入待移除的表单项的 prop 属性或者 prop 组成的数组,如不传则移除整个表单的校验结果
37
+ */
38
+ clearValidate(props?: string | string[]): void;
39
+ /** 对整个表单进行校验的方法,参数为一个回调函数。该回调函数会在校验结束后被调用,并传入两个参数:是否校验成功和未通过校验的字段。 */
40
+ validate(
41
+ callback: (
42
+ valid: boolean,
43
+ hide: () => void,
44
+ msg?: Record<
45
+ string,
46
+ {
47
+ /** 字段名(prop) */
48
+ field: string;
49
+ /** 错误内容 */
50
+ message: string;
51
+ }[]
52
+ >
53
+ ) => void
54
+ ): void;
55
+ /** 清空表单数据 */
56
+ resetForm(): void;
57
+ /** 提交表单数据 */
58
+ submit(): void;
59
+ /** 将表单置于提交状态 */
60
+ show(): void;
61
+ /** 将表单置于普通状态 */
62
+ hide(): void;
63
+ /** 组件Refs */
64
+ $refs: AvueFormRefs;
65
+ }
@@ -0,0 +1,167 @@
1
+ import { ResponsiveColumn } from 'element-ui/types/col';
2
+ import { AvueAlignment, AvueComponentSize, DicHttpProps } from '../global';
3
+ import { AvueFormColumn } from './column';
4
+
5
+ /** 表单组件基本配置属性 */
6
+ export interface FormBaseOption {
7
+ /** 视图类型 */
8
+ boxType: 'add' | 'edit' | 'view';
9
+ /** 是否详情模式, 默认: false */
10
+ detail: boolean;
11
+ /** 是否禁用模式, 默认: false */
12
+ disabled: boolean;
13
+ /** 是否只读模式, 默认: false */
14
+ readonly: boolean;
15
+ /** 表单宽度 */
16
+ formWidth: number | string;
17
+ /** 是否在输入框中显示校验结果反馈图标, 默认: false */
18
+ statusIcon: boolean;
19
+ /** 是否卡片效果, 默认: false */
20
+ card: boolean;
21
+ /**
22
+ * 重置时不清空的字段, 默认: []
23
+ * @since 2.7.7
24
+ */
25
+ clearExclude: string[];
26
+ /** 是否回车提交表单, 默认: false */
27
+ enter: boolean;
28
+ /** 项之间的间间距, 默认: 10 */
29
+ gutter: number;
30
+ /** 表单的label宽度, 默认: 80 */
31
+ labelWidth: string | number;
32
+ /** 表单的label位置, 默认: 'left' */
33
+ labelPosition: 'left' | 'top' | 'right';
34
+ /** 标题的后缀, 默认: ':' */
35
+ labelSuffix: string;
36
+ /** 表单全局控件的大小, 默认: 'medium' */
37
+ size: AvueComponentSize;
38
+ /** 是否以tab形式展示group, 默认: false */
39
+ tabs: boolean;
40
+ /** 栅列, 默认: 12 */
41
+ span: number;
42
+ /** 输入时是否触发表单的校验,仅对input类型表单项生效, 默认: false */
43
+ validateEvent: boolean;
44
+ /** 默认的接口请求配置 */
45
+ propsHttp: DicHttpProps;
46
+ }
47
+
48
+ /** 表单组件菜单栏配置属性 */
49
+ export interface FormMenuOption {
50
+ /** 是否显示按钮栏, 默认: true */
51
+ menuBtn: boolean;
52
+ /** 按钮栏的span, 可选值为1-24, 默认: 24 */
53
+ menuSpan: number;
54
+ /** 按钮的位置, 默认: 'center' */
55
+ menuPosition: AvueAlignment;
56
+ /** 是否显示提交按钮, 默认: true */
57
+ submitBtn: boolean;
58
+ /** 提交按钮的大小, 默认: 'medium' */
59
+ submitSize: AvueComponentSize;
60
+ /** 提交按钮的文字, 默认: '提交' */
61
+ submitText: string;
62
+ /**
63
+ * 提交按钮图标 , 默认: 'el-icon-check'
64
+ * @since v2.5.1
65
+ */
66
+ submitIcon: string;
67
+ /** 是否显示清空按钮, 默认: true */
68
+ emptyBtn?: boolean;
69
+ /** 清空按钮的大小, 默认: 'medium' */
70
+ emptySize: AvueAlignment;
71
+ /** 清空按钮的文字, 默认: '清空' */
72
+ emptyText: string;
73
+ /** 清空按钮图标, 默认: 'el-icon-delete' */
74
+ emptyIcon: string;
75
+ /** 是否显示表单打印按钮, 默认: false */
76
+ printBtn: boolean;
77
+ /**
78
+ * 是否显示模拟数据按钮, 默认: false
79
+ * @description 需要导入额外的包(一定要放到index.html中的head标签里)
80
+ * ```
81
+ * <script src="https://cdnjs.cloudflare.com/ajax/libs/Mock.js/1.0.0/mock-min.js"></script>
82
+ * ```
83
+ */
84
+ mockBtn: boolean;
85
+ }
86
+
87
+ /** 表单分组配置 */
88
+ export interface FormGroupOption<T = Obj> {
89
+ /** 分组名称 */
90
+ label: string;
91
+ /** 分组名称宽度, 默认: 90 */
92
+ labelWidth?: number;
93
+ /** 分组字段 */
94
+ prop?: string;
95
+ /** 分组图标 */
96
+ icon?: string;
97
+ /** 是否分组折叠, 默认: true */
98
+ arrow?: boolean;
99
+ /** 分组默认叠起, 默认: false */
100
+ collapse?: boolean;
101
+ /**
102
+ * ≥768px 响应式栅格数或者栅格属性对象, 默认: 12
103
+ * @since 2.8.12
104
+ */
105
+ smSpan?: ResponsiveColumn;
106
+ /**
107
+ * <768px 响应式栅格数或者栅格属性对象, 默认: 24
108
+ * @since 2.9.12
109
+ */
110
+ xsSpan?: ResponsiveColumn;
111
+ /**
112
+ * <768px 响应式栅格数或者栅格属性对象, 默认: 24
113
+ * @since 2.8.12
114
+ * @deprecated 2.9.12
115
+ */
116
+ xmSpan?: ResponsiveColumn;
117
+ /**
118
+ * 栅格左侧的间隔格数, 默认: 0
119
+ * @since 2.8.12
120
+ */
121
+ offset?: number;
122
+ /** 是否显示分组, 默认: true */
123
+ display?: boolean;
124
+ /** 分组下的字段配置 */
125
+ column: AvueFormColumn<T>[];
126
+ }
127
+
128
+ /**
129
+ * 表单项配置
130
+ * @description 表单的渲染顺序从上到下为column -> group -> footer
131
+ */
132
+ export interface FormColumnOption<T = Obj> {
133
+ /** 分组配置 */
134
+ group?: FormGroupOption<T>[];
135
+ /** 字段配置 */
136
+ column?: AvueFormColumn<T>[];
137
+ /**
138
+ * 底部字段配置
139
+ * @description 该字段等同于在group最后push一个无label分组在tabs模式下效果更糟,因此内部改版中删除该字段
140
+ * @since 2.9.9
141
+ * @deprecated 2.9.12(改)
142
+ */
143
+ footer?: AvueFormColumn<T>[];
144
+ }
145
+
146
+ /** 表单全局事件 */
147
+ export interface FormEvents {
148
+ /**
149
+ * 表单全局事件源码
150
+ * @since 2.9.12(伪)
151
+ */
152
+ _events?: {
153
+ /** 表单加载完成后执行事件字符串源码 */
154
+ didMount?: string;
155
+ };
156
+ /**
157
+ * 表单全局事件
158
+ * @since 2.9.12(伪)
159
+ */
160
+ events?: {
161
+ /** 表单加载完成后执行事件 */
162
+ didMount?: () => void;
163
+ };
164
+ }
165
+
166
+ /** 表单组件配置属性 */
167
+ export type FormOption<T = Obj> = Partial<FormBaseOption> & Partial<FormMenuOption> & FormColumnOption<T> & FormEvents;
@@ -0,0 +1,57 @@
1
+ import { ElDialog } from 'element-ui/types/dialog';
2
+ import { FormOption } from '../form/option';
3
+
4
+ export declare class DialogForm<T = Obj> {
5
+ /** 表单弹窗配置项 */
6
+ private opt: DialogFormOption;
7
+ /** 是否显示弹窗 */
8
+ private visible: boolean;
9
+ /** 弹窗配置 */
10
+ private dialog: Partial<ElDialog>;
11
+ /** 表单配置 */
12
+ private option: FormOption;
13
+ /** 表单值 */
14
+ data: T;
15
+ /** 表单提交事件 */
16
+ submit: () => void;
17
+ /**
18
+ * 表单重置事件
19
+ * @description 此处重置完后调用close关闭了弹窗
20
+ */
21
+ reset: () => void;
22
+ /**
23
+ * 显示弹窗
24
+ */
25
+ show: (option: DialogFormOption<T>) => void;
26
+ /** 表单关闭事件 */
27
+ close: () => void;
28
+ }
29
+
30
+ /** 表单弹窗 */
31
+ export declare class DialogFormPlugin {
32
+ /** 组件VM */
33
+ $root: DialogForm<T>;
34
+ /** 构建弹窗 */
35
+ initMounted: () => void;
36
+ /**
37
+ * 显示弹窗
38
+ */
39
+ show: <T = Obj>(option: DialogFormOption<T>) => void;
40
+ }
41
+
42
+ /** 表单弹窗配置项 */
43
+ export interface DialogFormOption<T = Obj> extends Partial<ElDialog> {
44
+ /** 表单配置 */
45
+ option: FormOption;
46
+ /** 表单值 */
47
+ data: T;
48
+ /** 表单提交后的回调 */
49
+ callback?: (params: {
50
+ /** 表单值 */
51
+ data: T;
52
+ /** 关闭弹窗 */
53
+ close: () => void;
54
+ /** 将表单置于普通状态 */
55
+ done: () => void;
56
+ }) => void;
57
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * 导出相关
3
+ * @description 需要引入以下包(一定要放到index.html中的head标签里)
4
+ * \<script src="https://cdn.staticfile.org/FileSaver.js/2014-11-29/FileSaver.min.js"><\/script>
5
+ * \<script src="https://cdn.staticfile.org/xlsx/0.18.2/xlsx.full.min.js"><\/script>
6
+ */
7
+
8
+ export interface Export {
9
+ /** 导出excel */
10
+ excel: (options: {
11
+ /** excel标题 */
12
+ title: string;
13
+ /** 数据列配置 */
14
+ columns: {
15
+ /** 列名称 */
16
+ label: string;
17
+ /** 列ID */
18
+ prop: string;
19
+ }[];
20
+ /** 数据 */
21
+ data: Obj[];
22
+ }) => void;
23
+ }