From c9c263dc43ad90f95f24a036cee9e6b47afb596c Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期六, 21 十二月 2024 18:44:20 +0800
Subject: [PATCH] 新建盐城德森项目

---
 uni_modules/uni-forms/components/uni-forms/uni-forms.vue |  944 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 472 insertions(+), 472 deletions(-)

diff --git a/uni_modules/uni-forms/components/uni-forms/uni-forms.vue b/uni_modules/uni-forms/components/uni-forms/uni-forms.vue
index d8b4e66..dff823b 100644
--- a/uni_modules/uni-forms/components/uni-forms/uni-forms.vue
+++ b/uni_modules/uni-forms/components/uni-forms/uni-forms.vue
@@ -1,472 +1,472 @@
-<template>
-	<view class="uni-forms" :class="{ 'uni-forms--top': !border }">
-		<form @submit.stop="submitForm" @reset="resetForm">
-			<slot></slot>
-		</form>
-	</view>
-</template>
-
-<script>
-	// #ifndef VUE3
-	import Vue from 'vue';
-	Vue.prototype.binddata = function(name, value, formName) {
-		if (formName) {
-			this.$refs[formName].setValue(name, value);
-		} else {
-			let formVm;
-			for (let i in this.$refs) {
-				const vm = this.$refs[i];
-				if (vm && vm.$options && vm.$options.name === 'uniForms') {
-					formVm = vm;
-					break;
-				}
-			}
-			if (!formVm) return console.error('褰撳墠 uni-froms 缁勪欢缂哄皯 ref 灞炴��');
-			formVm.setValue(name, value);
-		}
-	};
-	// #endif
-
-
-
-	import Validator from './validate.js';
-	/**
-	 * Forms 琛ㄥ崟
-	 * @description 鐢辫緭鍏ユ銆侀�夋嫨鍣ㄣ�佸崟閫夋銆佸閫夋绛夋帶浠剁粍鎴愶紝鐢ㄤ互鏀堕泦銆佹牎楠屻�佹彁浜ゆ暟鎹�
-	 * @tutorial https://ext.dcloud.net.cn/plugin?id=2773
-	 * @property {Object} rules	琛ㄥ崟鏍¢獙瑙勫垯
-	 * @property {String} validateTrigger = [bind|submit]	鏍¢獙瑙﹀彂鍣ㄦ柟寮� 榛樿 submit
-	 * @value bind		鍙戠敓鍙樺寲鏃惰Е鍙�
-	 * @value submit	鎻愪氦鏃惰Е鍙�
-	 * @property {String} labelPosition = [top|left]	label 浣嶇疆 榛樿 left
-	 * @value top		椤堕儴鏄剧ず label
-	 * @value left	宸︿晶鏄剧ず label
-	 * @property {String} labelWidth	label 瀹藉害锛岄粯璁� 65px
-	 * @property {String} labelAlign = [left|center|right]	label 灞呬腑鏂瑰紡  榛樿 left
-	 * @value left		label 宸︿晶鏄剧ず
-	 * @value center	label 灞呬腑
-	 * @value right		label 鍙充晶瀵归綈
-	 * @property {String} errShowType = [undertext|toast|modal]	鏍¢獙閿欒淇℃伅鎻愮ず鏂瑰紡
-	 * @value undertext	閿欒淇℃伅鍦ㄥ簳閮ㄦ樉绀�
-	 * @value toast			閿欒淇℃伅toast鏄剧ず
-	 * @value modal			閿欒淇℃伅modal鏄剧ず
-	 * @event {Function} submit	鎻愪氦鏃惰Е鍙�
-	 */
-
-	export default {
-		name: 'uniForms',
-		components: {},
-		emits:['input','reset','validate','submit'],
-		props: {
-			// 鍗冲皢寮冪敤
-			value: {
-				type: Object,
-				default () {
-					return {};
-				}
-			},
-			// 鏇挎崲 value 灞炴��
-			modelValue: {
-				type: Object,
-				default () {
-					return {};
-				}
-			},
-			// 琛ㄥ崟鏍¢獙瑙勫垯
-			rules: {
-				type: Object,
-				default () {
-					return {};
-				}
-			},
-			// 鏍¢獙瑙﹀彂鍣ㄦ柟寮忥紝榛樿 鍏抽棴
-			validateTrigger: {
-				type: String,
-				default: ''
-			},
-			// label 浣嶇疆锛屽彲閫夊�� top/left
-			labelPosition: {
-				type: String,
-				default: 'left'
-			},
-			// label 瀹藉害锛屽崟浣� px
-			labelWidth: {
-				type: [String, Number],
-				default: ''
-			},
-			// label 灞呬腑鏂瑰紡锛屽彲閫夊�� left/center/right
-			labelAlign: {
-				type: String,
-				default: 'left'
-			},
-			errShowType: {
-				type: String,
-				default: 'undertext'
-			},
-			border: {
-				type: Boolean,
-				default: false
-			}
-		},
-		data() {
-			return {
-				formData: {}
-			};
-		},
-		computed: {
-			dataValue() {
-				if (JSON.stringify(this.modelValue) === '{}') {
-					return this.value
-				} else {
-					return this.modelValue
-				}
-			}
-		},
-		watch: {
-			rules(newVal) {
-				// 濡傛灉瑙勫垯鍙戠敓鍙樺寲锛岃鍒濆鍖栫粍浠�
-				this.init(newVal);
-			},
-			labelPosition() {
-				this.childrens.forEach(vm => {
-					vm.init()
-				})
-			}
-		},
-		created() {
-			// #ifdef VUE3
-			let getbinddata = getApp().$vm.$.appContext.config.globalProperties.binddata
-			if (!getbinddata) {
-				getApp().$vm.$.appContext.config.globalProperties.binddata = function(name, value, formName) {
-					if (formName) {
-						this.$refs[formName].setValue(name, value);
-					} else {
-						let formVm;
-						for (let i in this.$refs) {
-							const vm = this.$refs[i];
-							if (vm && vm.$options && vm.$options.name === 'uniForms') {
-								formVm = vm;
-								break;
-							}
-						}
-						if (!formVm) return console.error('褰撳墠 uni-froms 缁勪欢缂哄皯 ref 灞炴��');
-						formVm.setValue(name, value);
-					}
-				}
-			}
-			// #endif
-
-			// 瀛樻斁watch 鐩戝惉鏁扮粍
-			this.unwatchs = [];
-			// 瀛樻斁瀛愮粍浠舵暟缁�
-			this.childrens = [];
-			// 瀛樻斁 easyInput 缁勪欢
-			this.inputChildrens = [];
-			// 瀛樻斁 dataCheckbox 缁勪欢
-			this.checkboxChildrens = [];
-			// 瀛樻斁瑙勫垯
-			this.formRules = [];
-			this.init(this.rules);
-		},
-		// mounted() {
-		// 	this.init(this.rules)
-		// },
-		methods: {
-			init(formRules) {
-				// 鍒ゆ柇鏄惁鏈夎鍒�
-				if (Object.keys(formRules).length === 0) {
-					this.formData = this.dataValue
-					return
-				};
-				this.formRules = formRules;
-				this.validator = new Validator(formRules);
-				this.registerWatch();
-			},
-			// 鐩戝惉 watch
-			registerWatch() {
-				// 鍙栨秷鐩戝惉,閬垮厤澶氭璋冪敤 init 閲嶅鎵ц $watch
-				this.unwatchs.forEach(v => v());
-				this.childrens.forEach((v) => {
-					v.init()
-				})
-				// watch 姣忎釜灞炴�� 锛岄渶瑕佺煡閬撳叿浣撻偅涓睘鎬у彂鍙樺寲
-				Object.keys(this.dataValue).forEach(key => {
-					let watch = this.$watch(
-						'dataValue.' + key,
-						value => {
-							if (!value) return
-							// 濡傛灉鏄璞� 锛屽垯骞抽摵鍐呭
-							if (value.toString() === '[object Object]') {
-								for (let i in value) {
-									let name = `${key}[${i}]`;
-									this.formData[name] = this._getValue(name, value[i]);
-								}
-							} else {
-								this.formData[key] = this._getValue(key, value);
-							}
-						},
-						{
-							deep: true,
-							immediate: true
-						}
-					);
-					this.unwatchs.push(watch);
-				});
-			},
-			/**
-			 * 鍏紑缁欑敤鎴蜂娇鐢�
-			 * 璁剧疆鏍¢獙瑙勫垯
-			 * @param {Object} formRules
-			 */
-			setRules(formRules) {
-				this.init(formRules);
-			},
-			/**
-			 * 鍏紑缁欑敤鎴蜂娇鐢�
-			 * 璁剧疆鑷畾涔夎〃鍗曠粍浠� value 鍊�
-			 *  @param {String} name 瀛楁鍚嶇О
-			 *  @param {String} value 瀛楁鍊�
-			 */
-			setValue(name, value, callback) {
-				let example = this.childrens.find(child => child.name === name);
-				if (!example) return null;
-				value = this._getValue(example.name, value);
-				this.formData[name] = value;
-				example.val = value;
-				return example.triggerCheck(value, callback);
-			},
-
-			/**
-			 * 琛ㄥ崟閲嶇疆
-			 * @param {Object} event
-			 */
-			resetForm(event) {
-				this.childrens.forEach(item => {
-					item.errMsg = '';
-					const inputComp = this.inputChildrens.find(child => child.rename === item.name);
-					if (inputComp) {
-						inputComp.errMsg = '';
-						// fix by mehaotian 涓嶈Е鍙戝叾浠栫粍浠剁殑 setValue
-						inputComp.is_reset = true
-						inputComp.$emit('input', inputComp.multiple ? [] : '');
-						inputComp.$emit('update:modelValue', inputComp.multiple ? [] : '');
-					}
-				});
-
-				this.childrens.forEach(item => {
-					if (item.name) {
-						this.formData[item.name] = this._getValue(item.name, '');
-					}
-				});
-
-				this.$emit('reset', event);
-			},
-
-			/**
-			 * 瑙﹀彂琛ㄥ崟鏍¢獙锛岄�氳繃 @validate 鑾峰彇
-			 * @param {Object} validate
-			 */
-			validateCheck(validate) {
-				if (validate === null) validate = null;
-				this.$emit('validate', validate);
-			},
-			/**
-			 * 鏍¢獙鎵�鏈夋垨鑰呴儴鍒嗚〃鍗�
-			 */
-			async validateAll(invalidFields, type, keepitem, callback) {
-				let childrens = []
-				for (let i in invalidFields) {
-					const item = this.childrens.find(v => v.name === i)
-					if (item) {
-						childrens.push(item)
-					}
-				}
-
-				if (!callback && typeof keepitem === 'function') {
-					callback = keepitem;
-				}
-
-				let promise;
-				if (!callback && typeof callback !== 'function' && Promise) {
-					promise = new Promise((resolve, reject) => {
-						callback = function(valid, invalidFields) {
-							!valid ? resolve(invalidFields) : reject(valid);
-						};
-					});
-				}
-
-				let results = [];
-				let newFormData = {};
-				if (this.validator) {
-					for (let key in childrens) {
-						const child = childrens[key];
-						let name = child.isArray ? child.arrayField : child.name;
-						if (child.isArray) {
-							if (child.name.indexOf('[') !== -1 && child.name.indexOf(']') !== -1) {
-								const fieldData = child.name.split('[');
-								const fieldName = fieldData[0];
-								const fieldValue = fieldData[1].replace(']', '');
-								if (!newFormData[fieldName]) {
-									newFormData[fieldName] = {};
-								}
-								newFormData[fieldName][fieldValue] = this._getValue(name, invalidFields[name]);
-							}
-						} else {
-							newFormData[name] = this._getValue(name, invalidFields[name]);
-						}
-						const result = await child.triggerCheck(invalidFields[name], true);
-						if (result) {
-							results.push(result);
-							if (this.errShowType === 'toast' || this.errShowType === 'modal') break;
-						}
-					}
-				} else {
-					newFormData = invalidFields
-				}
-				if (Array.isArray(results)) {
-					if (results.length === 0) results = null;
-				}
-
-				if (Array.isArray(keepitem)) {
-					keepitem.forEach(v => {
-						newFormData[v] = this.dataValue[v];
-					});
-				}
-
-				if (type === 'submit') {
-					this.$emit('submit', {
-						detail: {
-							value: newFormData,
-							errors: results
-						}
-					});
-				} else {
-					this.$emit('validate', results);
-				}
-
-				callback && typeof callback === 'function' && callback(results, newFormData);
-
-				if (promise && callback) {
-					return promise;
-				} else {
-					return null;
-				}
-			},
-			submitForm() {},
-			/**
-			 * 澶栭儴璋冪敤鏂规硶
-			 * 鎵嬪姩鎻愪氦鏍¢獙琛ㄥ崟
-			 * 瀵规暣涓〃鍗曡繘琛屾牎楠岀殑鏂规硶锛屽弬鏁颁负涓�涓洖璋冨嚱鏁般��
-			 */
-			submit(keepitem, callback, type) {
-				for (let i in this.dataValue) {
-					const itemData = this.childrens.find(v => v.name === i);
-					if (itemData) {
-						if (this.formData[i] === undefined) {
-							this.formData[i] = this._getValue(i, this.dataValue[i]);
-						}
-					}
-				}
-				if (!type) {
-					console.warn('submit 鏂规硶鍗冲皢搴熷純锛岃浣跨敤validate鏂规硶浠f浛锛�');
-				}
-				return this.validateAll(this.formData, 'submit', keepitem, callback);
-			},
-
-			/**
-			 * 澶栭儴璋冪敤鏂规硶
-			 * 鏍¢獙琛ㄥ崟
-			 * 瀵规暣涓〃鍗曡繘琛屾牎楠岀殑鏂规硶锛屽弬鏁颁负涓�涓洖璋冨嚱鏁般��
-			 */
-			validate(keepitem, callback) {
-				return this.submit(keepitem, callback, true);
-			},
-
-			/**
-			 * 閮ㄥ垎琛ㄥ崟鏍¢獙
-			 * @param {Object} props
-			 * @param {Object} cb
-			 */
-			validateField(props, callback) {
-				props = [].concat(props);
-				let invalidFields = {};
-				this.childrens.forEach(item => {
-					if (props.indexOf(item.name) !== -1) {
-						invalidFields = Object.assign({}, invalidFields, {
-							[item.name]: this.formData[item.name]
-						});
-					}
-				});
-				return this.validateAll(invalidFields, 'submit', [], callback);
-			},
-
-			/**
-			 * 瀵规暣涓〃鍗曡繘琛岄噸缃紝灏嗘墍鏈夊瓧娈靛�奸噸缃负鍒濆鍊煎苟绉婚櫎鏍¢獙缁撴灉
-			 */
-			resetFields() {
-				this.resetForm();
-			},
-
-			/**
-			 * 绉婚櫎琛ㄥ崟椤圭殑鏍¢獙缁撴灉銆備紶鍏ュ緟绉婚櫎鐨勮〃鍗曢」鐨� prop 灞炴�ф垨鑰� prop 缁勬垚鐨勬暟缁勶紝濡備笉浼犲垯绉婚櫎鏁翠釜琛ㄥ崟鐨勬牎楠岀粨鏋�
-			 */
-			clearValidate(props) {
-				props = [].concat(props);
-				this.childrens.forEach(item => {
-					const inputComp = this.inputChildrens.find(child => child.rename === item.name);
-					if (props.length === 0) {
-						item.errMsg = '';
-						if (inputComp) {
-							inputComp.errMsg = '';
-						}
-					} else {
-						if (props.indexOf(item.name) !== -1) {
-							item.errMsg = '';
-							if (inputComp) {
-								inputComp.errMsg = '';
-							}
-						}
-					}
-				});
-			},
-			/**
-			 * 鎶� value 杞崲鎴愭寚瀹氱殑绫诲瀷
-			 * @param {Object} key
-			 * @param {Object} value
-			 */
-			_getValue(key, value) {
-				const rules = (this.formRules[key] && this.formRules[key].rules) || [];
-				const isRuleNum = rules.find(val => val.format && this.type_filter(val.format));
-				const isRuleBool = rules.find(val => (val.format && val.format === 'boolean') || val.format === 'bool');
-				// 杈撳叆鍊间负 number
-				if (isRuleNum) {
-					value = isNaN(value) ? value : value === '' || value === null ? null : Number(value);
-				}
-				// 绠�鍗曞垽鏂湡鍋囧��
-				if (isRuleBool) {
-					value = !value ? false : true;
-				}
-				return value;
-			},
-			/**
-			 * 杩囨护鏁板瓧绫诲瀷
-			 * @param {Object} format
-			 */
-			type_filter(format) {
-				return format === 'int' || format === 'double' || format === 'number' || format === 'timestamp';
-			}
-		}
-	};
-</script>
-
-<style lang="scss" >
-	.uni-forms {
-		// overflow: hidden;
-		// padding: 10px 15px;
-	}
-
-	.uni-forms--top {
-		// padding: 10px 15px;
-		// padding-top: 22px;
-	}
-</style>
+<template>
+	<view class="uni-forms" :class="{ 'uni-forms--top': !border }">
+		<form @submit.stop="submitForm" @reset="resetForm">
+			<slot></slot>
+		</form>
+	</view>
+</template>
+
+<script>
+	// #ifndef VUE3
+	import Vue from 'vue';
+	Vue.prototype.binddata = function(name, value, formName) {
+		if (formName) {
+			this.$refs[formName].setValue(name, value);
+		} else {
+			let formVm;
+			for (let i in this.$refs) {
+				const vm = this.$refs[i];
+				if (vm && vm.$options && vm.$options.name === 'uniForms') {
+					formVm = vm;
+					break;
+				}
+			}
+			if (!formVm) return console.error('褰撳墠 uni-froms 缁勪欢缂哄皯 ref 灞炴��');
+			formVm.setValue(name, value);
+		}
+	};
+	// #endif
+
+
+
+	import Validator from './validate.js';
+	/**
+	 * Forms 琛ㄥ崟
+	 * @description 鐢辫緭鍏ユ銆侀�夋嫨鍣ㄣ�佸崟閫夋銆佸閫夋绛夋帶浠剁粍鎴愶紝鐢ㄤ互鏀堕泦銆佹牎楠屻�佹彁浜ゆ暟鎹�
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=2773
+	 * @property {Object} rules	琛ㄥ崟鏍¢獙瑙勫垯
+	 * @property {String} validateTrigger = [bind|submit]	鏍¢獙瑙﹀彂鍣ㄦ柟寮� 榛樿 submit
+	 * @value bind		鍙戠敓鍙樺寲鏃惰Е鍙�
+	 * @value submit	鎻愪氦鏃惰Е鍙�
+	 * @property {String} labelPosition = [top|left]	label 浣嶇疆 榛樿 left
+	 * @value top		椤堕儴鏄剧ず label
+	 * @value left	宸︿晶鏄剧ず label
+	 * @property {String} labelWidth	label 瀹藉害锛岄粯璁� 65px
+	 * @property {String} labelAlign = [left|center|right]	label 灞呬腑鏂瑰紡  榛樿 left
+	 * @value left		label 宸︿晶鏄剧ず
+	 * @value center	label 灞呬腑
+	 * @value right		label 鍙充晶瀵归綈
+	 * @property {String} errShowType = [undertext|toast|modal]	鏍¢獙閿欒淇℃伅鎻愮ず鏂瑰紡
+	 * @value undertext	閿欒淇℃伅鍦ㄥ簳閮ㄦ樉绀�
+	 * @value toast			閿欒淇℃伅toast鏄剧ず
+	 * @value modal			閿欒淇℃伅modal鏄剧ず
+	 * @event {Function} submit	鎻愪氦鏃惰Е鍙�
+	 */
+
+	export default {
+		name: 'uniForms',
+		components: {},
+		emits:['input','reset','validate','submit'],
+		props: {
+			// 鍗冲皢寮冪敤
+			value: {
+				type: Object,
+				default () {
+					return {};
+				}
+			},
+			// 鏇挎崲 value 灞炴��
+			modelValue: {
+				type: Object,
+				default () {
+					return {};
+				}
+			},
+			// 琛ㄥ崟鏍¢獙瑙勫垯
+			rules: {
+				type: Object,
+				default () {
+					return {};
+				}
+			},
+			// 鏍¢獙瑙﹀彂鍣ㄦ柟寮忥紝榛樿 鍏抽棴
+			validateTrigger: {
+				type: String,
+				default: ''
+			},
+			// label 浣嶇疆锛屽彲閫夊�� top/left
+			labelPosition: {
+				type: String,
+				default: 'left'
+			},
+			// label 瀹藉害锛屽崟浣� px
+			labelWidth: {
+				type: [String, Number],
+				default: ''
+			},
+			// label 灞呬腑鏂瑰紡锛屽彲閫夊�� left/center/right
+			labelAlign: {
+				type: String,
+				default: 'left'
+			},
+			errShowType: {
+				type: String,
+				default: 'undertext'
+			},
+			border: {
+				type: Boolean,
+				default: false
+			}
+		},
+		data() {
+			return {
+				formData: {}
+			};
+		},
+		computed: {
+			dataValue() {
+				if (JSON.stringify(this.modelValue) === '{}') {
+					return this.value
+				} else {
+					return this.modelValue
+				}
+			}
+		},
+		watch: {
+			rules(newVal) {
+				// 濡傛灉瑙勫垯鍙戠敓鍙樺寲锛岃鍒濆鍖栫粍浠�
+				this.init(newVal);
+			},
+			labelPosition() {
+				this.childrens.forEach(vm => {
+					vm.init()
+				})
+			}
+		},
+		created() {
+			// #ifdef VUE3
+			let getbinddata = getApp().$vm.$.appContext.config.globalProperties.binddata
+			if (!getbinddata) {
+				getApp().$vm.$.appContext.config.globalProperties.binddata = function(name, value, formName) {
+					if (formName) {
+						this.$refs[formName].setValue(name, value);
+					} else {
+						let formVm;
+						for (let i in this.$refs) {
+							const vm = this.$refs[i];
+							if (vm && vm.$options && vm.$options.name === 'uniForms') {
+								formVm = vm;
+								break;
+							}
+						}
+						if (!formVm) return console.error('褰撳墠 uni-froms 缁勪欢缂哄皯 ref 灞炴��');
+						formVm.setValue(name, value);
+					}
+				}
+			}
+			// #endif
+
+			// 瀛樻斁watch 鐩戝惉鏁扮粍
+			this.unwatchs = [];
+			// 瀛樻斁瀛愮粍浠舵暟缁�
+			this.childrens = [];
+			// 瀛樻斁 easyInput 缁勪欢
+			this.inputChildrens = [];
+			// 瀛樻斁 dataCheckbox 缁勪欢
+			this.checkboxChildrens = [];
+			// 瀛樻斁瑙勫垯
+			this.formRules = [];
+			this.init(this.rules);
+		},
+		// mounted() {
+		// 	this.init(this.rules)
+		// },
+		methods: {
+			init(formRules) {
+				// 鍒ゆ柇鏄惁鏈夎鍒�
+				if (Object.keys(formRules).length === 0) {
+					this.formData = this.dataValue
+					return
+				};
+				this.formRules = formRules;
+				this.validator = new Validator(formRules);
+				this.registerWatch();
+			},
+			// 鐩戝惉 watch
+			registerWatch() {
+				// 鍙栨秷鐩戝惉,閬垮厤澶氭璋冪敤 init 閲嶅鎵ц $watch
+				this.unwatchs.forEach(v => v());
+				this.childrens.forEach((v) => {
+					v.init()
+				})
+				// watch 姣忎釜灞炴�� 锛岄渶瑕佺煡閬撳叿浣撻偅涓睘鎬у彂鍙樺寲
+				Object.keys(this.dataValue).forEach(key => {
+					let watch = this.$watch(
+						'dataValue.' + key,
+						value => {
+							if (!value) return
+							// 濡傛灉鏄璞� 锛屽垯骞抽摵鍐呭
+							if (value.toString() === '[object Object]') {
+								for (let i in value) {
+									let name = `${key}[${i}]`;
+									this.formData[name] = this._getValue(name, value[i]);
+								}
+							} else {
+								this.formData[key] = this._getValue(key, value);
+							}
+						},
+						{
+							deep: true,
+							immediate: true
+						}
+					);
+					this.unwatchs.push(watch);
+				});
+			},
+			/**
+			 * 鍏紑缁欑敤鎴蜂娇鐢�
+			 * 璁剧疆鏍¢獙瑙勫垯
+			 * @param {Object} formRules
+			 */
+			setRules(formRules) {
+				this.init(formRules);
+			},
+			/**
+			 * 鍏紑缁欑敤鎴蜂娇鐢�
+			 * 璁剧疆鑷畾涔夎〃鍗曠粍浠� value 鍊�
+			 *  @param {String} name 瀛楁鍚嶇О
+			 *  @param {String} value 瀛楁鍊�
+			 */
+			setValue(name, value, callback) {
+				let example = this.childrens.find(child => child.name === name);
+				if (!example) return null;
+				value = this._getValue(example.name, value);
+				this.formData[name] = value;
+				example.val = value;
+				return example.triggerCheck(value, callback);
+			},
+
+			/**
+			 * 琛ㄥ崟閲嶇疆
+			 * @param {Object} event
+			 */
+			resetForm(event) {
+				this.childrens.forEach(item => {
+					item.errMsg = '';
+					const inputComp = this.inputChildrens.find(child => child.rename === item.name);
+					if (inputComp) {
+						inputComp.errMsg = '';
+						// fix by mehaotian 涓嶈Е鍙戝叾浠栫粍浠剁殑 setValue
+						inputComp.is_reset = true
+						inputComp.$emit('input', inputComp.multiple ? [] : '');
+						inputComp.$emit('update:modelValue', inputComp.multiple ? [] : '');
+					}
+				});
+
+				this.childrens.forEach(item => {
+					if (item.name) {
+						this.formData[item.name] = this._getValue(item.name, '');
+					}
+				});
+
+				this.$emit('reset', event);
+			},
+
+			/**
+			 * 瑙﹀彂琛ㄥ崟鏍¢獙锛岄�氳繃 @validate 鑾峰彇
+			 * @param {Object} validate
+			 */
+			validateCheck(validate) {
+				if (validate === null) validate = null;
+				this.$emit('validate', validate);
+			},
+			/**
+			 * 鏍¢獙鎵�鏈夋垨鑰呴儴鍒嗚〃鍗�
+			 */
+			async validateAll(invalidFields, type, keepitem, callback) {
+				let childrens = []
+				for (let i in invalidFields) {
+					const item = this.childrens.find(v => v.name === i)
+					if (item) {
+						childrens.push(item)
+					}
+				}
+
+				if (!callback && typeof keepitem === 'function') {
+					callback = keepitem;
+				}
+
+				let promise;
+				if (!callback && typeof callback !== 'function' && Promise) {
+					promise = new Promise((resolve, reject) => {
+						callback = function(valid, invalidFields) {
+							!valid ? resolve(invalidFields) : reject(valid);
+						};
+					});
+				}
+
+				let results = [];
+				let newFormData = {};
+				if (this.validator) {
+					for (let key in childrens) {
+						const child = childrens[key];
+						let name = child.isArray ? child.arrayField : child.name;
+						if (child.isArray) {
+							if (child.name.indexOf('[') !== -1 && child.name.indexOf(']') !== -1) {
+								const fieldData = child.name.split('[');
+								const fieldName = fieldData[0];
+								const fieldValue = fieldData[1].replace(']', '');
+								if (!newFormData[fieldName]) {
+									newFormData[fieldName] = {};
+								}
+								newFormData[fieldName][fieldValue] = this._getValue(name, invalidFields[name]);
+							}
+						} else {
+							newFormData[name] = this._getValue(name, invalidFields[name]);
+						}
+						const result = await child.triggerCheck(invalidFields[name], true);
+						if (result) {
+							results.push(result);
+							if (this.errShowType === 'toast' || this.errShowType === 'modal') break;
+						}
+					}
+				} else {
+					newFormData = invalidFields
+				}
+				if (Array.isArray(results)) {
+					if (results.length === 0) results = null;
+				}
+
+				if (Array.isArray(keepitem)) {
+					keepitem.forEach(v => {
+						newFormData[v] = this.dataValue[v];
+					});
+				}
+
+				if (type === 'submit') {
+					this.$emit('submit', {
+						detail: {
+							value: newFormData,
+							errors: results
+						}
+					});
+				} else {
+					this.$emit('validate', results);
+				}
+
+				callback && typeof callback === 'function' && callback(results, newFormData);
+
+				if (promise && callback) {
+					return promise;
+				} else {
+					return null;
+				}
+			},
+			submitForm() {},
+			/**
+			 * 澶栭儴璋冪敤鏂规硶
+			 * 鎵嬪姩鎻愪氦鏍¢獙琛ㄥ崟
+			 * 瀵规暣涓〃鍗曡繘琛屾牎楠岀殑鏂规硶锛屽弬鏁颁负涓�涓洖璋冨嚱鏁般��
+			 */
+			submit(keepitem, callback, type) {
+				for (let i in this.dataValue) {
+					const itemData = this.childrens.find(v => v.name === i);
+					if (itemData) {
+						if (this.formData[i] === undefined) {
+							this.formData[i] = this._getValue(i, this.dataValue[i]);
+						}
+					}
+				}
+				if (!type) {
+					console.warn('submit 鏂规硶鍗冲皢搴熷純锛岃浣跨敤validate鏂规硶浠f浛锛�');
+				}
+				return this.validateAll(this.formData, 'submit', keepitem, callback);
+			},
+
+			/**
+			 * 澶栭儴璋冪敤鏂规硶
+			 * 鏍¢獙琛ㄥ崟
+			 * 瀵规暣涓〃鍗曡繘琛屾牎楠岀殑鏂规硶锛屽弬鏁颁负涓�涓洖璋冨嚱鏁般��
+			 */
+			validate(keepitem, callback) {
+				return this.submit(keepitem, callback, true);
+			},
+
+			/**
+			 * 閮ㄥ垎琛ㄥ崟鏍¢獙
+			 * @param {Object} props
+			 * @param {Object} cb
+			 */
+			validateField(props, callback) {
+				props = [].concat(props);
+				let invalidFields = {};
+				this.childrens.forEach(item => {
+					if (props.indexOf(item.name) !== -1) {
+						invalidFields = Object.assign({}, invalidFields, {
+							[item.name]: this.formData[item.name]
+						});
+					}
+				});
+				return this.validateAll(invalidFields, 'submit', [], callback);
+			},
+
+			/**
+			 * 瀵规暣涓〃鍗曡繘琛岄噸缃紝灏嗘墍鏈夊瓧娈靛�奸噸缃负鍒濆鍊煎苟绉婚櫎鏍¢獙缁撴灉
+			 */
+			resetFields() {
+				this.resetForm();
+			},
+
+			/**
+			 * 绉婚櫎琛ㄥ崟椤圭殑鏍¢獙缁撴灉銆備紶鍏ュ緟绉婚櫎鐨勮〃鍗曢」鐨� prop 灞炴�ф垨鑰� prop 缁勬垚鐨勬暟缁勶紝濡備笉浼犲垯绉婚櫎鏁翠釜琛ㄥ崟鐨勬牎楠岀粨鏋�
+			 */
+			clearValidate(props) {
+				props = [].concat(props);
+				this.childrens.forEach(item => {
+					const inputComp = this.inputChildrens.find(child => child.rename === item.name);
+					if (props.length === 0) {
+						item.errMsg = '';
+						if (inputComp) {
+							inputComp.errMsg = '';
+						}
+					} else {
+						if (props.indexOf(item.name) !== -1) {
+							item.errMsg = '';
+							if (inputComp) {
+								inputComp.errMsg = '';
+							}
+						}
+					}
+				});
+			},
+			/**
+			 * 鎶� value 杞崲鎴愭寚瀹氱殑绫诲瀷
+			 * @param {Object} key
+			 * @param {Object} value
+			 */
+			_getValue(key, value) {
+				const rules = (this.formRules[key] && this.formRules[key].rules) || [];
+				const isRuleNum = rules.find(val => val.format && this.type_filter(val.format));
+				const isRuleBool = rules.find(val => (val.format && val.format === 'boolean') || val.format === 'bool');
+				// 杈撳叆鍊间负 number
+				if (isRuleNum) {
+					value = isNaN(value) ? value : value === '' || value === null ? null : Number(value);
+				}
+				// 绠�鍗曞垽鏂湡鍋囧��
+				if (isRuleBool) {
+					value = !value ? false : true;
+				}
+				return value;
+			},
+			/**
+			 * 杩囨护鏁板瓧绫诲瀷
+			 * @param {Object} format
+			 */
+			type_filter(format) {
+				return format === 'int' || format === 'double' || format === 'number' || format === 'timestamp';
+			}
+		}
+	};
+</script>
+
+<style lang="scss" >
+	.uni-forms {
+		// overflow: hidden;
+		// padding: 10px 15px;
+	}
+
+	.uni-forms--top {
+		// padding: 10px 15px;
+		// padding-top: 22px;
+	}
+</style>

--
Gitblit v1.9.1