Blame view

node_modules/uview-ui/components/u-form/u-form.vue 3.77 KB
c7add6cf   “wangming”   初始版本开发完毕
1
  <template>

25852764   unknown   s
2
  	<view class="u-form"><slot /></view>

c7add6cf   “wangming”   初始版本开发完毕
3
4
5
  </template>

  

  <script>

c7add6cf   “wangming”   初始版本开发完毕
6
  	/**

25852764   unknown   s
7
  	 * form 表单

c7add6cf   “wangming”   初始版本开发完毕
8
  	 * @description 此组件一般用于表单场景,可以配置Input输入框,Select弹出框,进行表单验证等。

25852764   unknown   s
9
10
11
12
13
14
15
16
17
18
  	 * @tutorial http://uviewui.com/components/form.html

  	 * @property {Object} model 表单数据对象

  	 * @property {Boolean} border-bottom 是否显示表单域的下划线边框

  	 * @property {String} label-position 表单域提示文字的位置,left-左侧,top-上方

  	 * @property {String Number} label-width 提示文字的宽度,单位rpx(默认90

  	 * @property {Object} label-style lable的样式,对象形式

  	 * @property {String} label-align lable的对齐方式

  	 * @property {Object} rules 通过ref设置,见官网说明

  	 * @property {Array} error-type 错误的提示方式,数组形式,见上方说明(默认['message'])

  	 * @example <u-form :model="form" ref="uForm"></u-form>

c7add6cf   “wangming”   初始版本开发完毕
19
  	 */

25852764   unknown   s
20
21
22
23
24
25
26
27
28
29
  

  export default {

  	name: 'u-form',

  	props: {

  		// 当前form的需要验证字段的集合

  		model: {

  			type: Object,

  			default() {

  				return {};

  			}

c7add6cf   “wangming”   初始版本开发完毕
30
  		},

25852764   unknown   s
31
32
33
34
35
36
37
38
39
40
41
42
43
44
  		// 验证规则

  		// rules: {

  		// 	type: [Object, Function, Array],

  		// 	default() {

  		// 		return {};

  		// 	}

  		// },

  		// 有错误时的提示方式,message-提示信息,border-如果input设置了边框,变成呈红色,

  		// border-bottom-下边框呈现红色,none-无提示

  		errorType: {

  			type: Array,

  			default() {

  				return ['message', 'toast']

  			}

c7add6cf   “wangming”   初始版本开发完毕
45
  		},

25852764   unknown   s
46
47
48
49
  		// 是否显示表单域的下划线边框

  		borderBottom: {

  			type: Boolean,

  			default: true

c7add6cf   “wangming”   初始版本开发完毕
50
  		},

25852764   unknown   s
51
52
53
54
  		// label的位置,left-左边,top-上边

  		labelPosition: {

  			type: String,

  			default: 'left'

c7add6cf   “wangming”   初始版本开发完毕
55
  		},

25852764   unknown   s
56
57
58
59
  		// label的宽度,单位rpx

  		labelWidth: {

  			type: [String, Number],

  			default: 90

c7add6cf   “wangming”   初始版本开发完毕
60
  		},

25852764   unknown   s
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
  		// lable字体的对齐方式

  		labelAlign: {

  			type: String,

  			default: 'left'

  		},

  		// lable的样式,对象形式

  		labelStyle: {

  			type: Object,

  			default() {

  				return {}

  			}

  		},

  	},

  	provide() {

  		return {

  			uForm: this

  		};

  	},

  	data() {

  		return {

  			rules: {}

  		};

  	},

  	created() {

  		// 存储当前form下的所有u-form-item的实例

  		// 不能定义在data中,否则微信小程序会造成循环引用而报错

  		this.fields = [];

  	},

  	methods: {

  		setRules(rules) {

  			this.rules = rules;

  		},

  		// 清空所有u-form-item组件的内容,本质上是调用了u-form-item组件中的resetField()方法

  		resetFields() {

  			this.fields.map(field => {

  				field.resetField();

  			});

  		},

  		// 校验全部数据

  		validate(callback) {

  			return new Promise(resolve => {

  				// 对所有的u-form-item进行校验

  				let valid = true; // 默认通过

  				let count = 0; // 用于标记是否检查完毕

  				let errorArr = []; // 存放错误信息

  				this.fields.map(field => {

  					// 调用每一个u-form-item实例的validation的校验方法

  					field.validation('', error => {

  						// 如果任意一个u-form-item校验不通过,就意味着整个表单不通过

  						if (error) {

  							valid = false;

  							errorArr.push(error);

c7add6cf   “wangming”   初始版本开发完毕
113
  						}

25852764   unknown   s
114
115
116
117
118
119
  						// 当历遍了所有的u-form-item时,调用promise的then方法

  						if (++count === this.fields.length) {

  							resolve(valid); // 进入promise的then方法

  							// 判断是否设置了toast的提示方式,只提示最前面的表单域的第一个错误信息

  							if(this.errorType.indexOf('none') === -1 && this.errorType.indexOf('toast') >= 0 && errorArr.length) {

  								this.$u.toast(errorArr[0]);

c7add6cf   “wangming”   初始版本开发完毕
120
  							}

25852764   unknown   s
121
122
123
  							// 调用回调方法

  							if (typeof callback == 'function') callback(valid);

  						}

c7add6cf   “wangming”   初始版本开发完毕
124
125
  					});

  				});

25852764   unknown   s
126
127
128
129
  			});

  		}

  	}

  };

c7add6cf   “wangming”   初始版本开发完毕
130
131
  </script>

  

25852764   unknown   s
132
133
  <style scoped lang="scss">

  @import "../../libs/css/style.components.scss";

c7add6cf   “wangming”   初始版本开发完毕
134
  </style>