@ttkj/avue 2.10.11 → 2.10.13

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
+ }