From 92230c9a97dc9ce9df3313d11d26999c04bb6b26 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 15 七月 2025 13:12:48 +0800
Subject: [PATCH] 项目初始化

---
 src/uni_modules/uni-forms/components/uni-forms/utils.js |  293 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 293 insertions(+), 0 deletions(-)

diff --git a/src/uni_modules/uni-forms/components/uni-forms/utils.js b/src/uni_modules/uni-forms/components/uni-forms/utils.js
new file mode 100644
index 0000000..6da2421
--- /dev/null
+++ b/src/uni_modules/uni-forms/components/uni-forms/utils.js
@@ -0,0 +1,293 @@
+/**
+ * 绠�鍗曞鐞嗗璞℃嫹璐�
+ * @param {Obejct} 琚嫹璐濆璞�
+ * @@return {Object} 鎷疯礉瀵硅薄
+ */
+export const deepCopy = (val) => {
+	return JSON.parse(JSON.stringify(val))
+}
+/**
+ * 杩囨护鏁板瓧绫诲瀷
+ * @param {String} format 鏁板瓧绫诲瀷
+ * @@return {Boolean} 杩斿洖鏄惁涓烘暟瀛楃被鍨�
+ */
+export const typeFilter = (format) => {
+	return format === 'int' || format === 'double' || format === 'number' || format === 'timestamp';
+}
+
+/**
+ * 鎶� value 杞崲鎴愭寚瀹氱殑绫诲瀷锛岀敤浜庡鐞嗗垵濮嬪�硷紝鍘熷洜鏄垵濮嬪�奸渶瑕佸叆搴撲笉鑳戒负 undefined
+ * @param {String} key 瀛楁鍚�
+ * @param {any} value 瀛楁鍊�
+ * @param {Object} rules 琛ㄥ崟鏍¢獙瑙勫垯
+ */
+export const getValue = (key, value, rules) => {
+	const isRuleNumType = rules.find(val => val.format && typeFilter(val.format));
+	const isRuleBoolType = rules.find(val => (val.format && val.format === 'boolean') || val.format === 'bool');
+	// 杈撳叆绫诲瀷涓� number
+	if (!!isRuleNumType) {
+		if (!value && value !== 0) {
+			value = null
+		} else {
+			value = isNumber(Number(value)) ? Number(value) : value
+		}
+	}
+
+	// 杈撳叆绫诲瀷涓� boolean
+	if (!!isRuleBoolType) {
+		value = isBoolean(value) ? value : false
+	}
+
+	return value;
+}
+
+/**
+ * 鑾峰彇琛ㄥ崟鏁版嵁
+ * @param {String|Array} name 鐪熷疄鍚嶇О锛岄渶瑕佷娇鐢� realName 鑾峰彇
+ * @param {Object} data 鍘熷鏁版嵁
+ * @param {any} value  闇�瑕佽缃殑鍊�
+ */
+export const setDataValue = (field, formdata, value) => {
+	formdata[field] = value
+	return value || ''
+}
+
+/**
+ * 鑾峰彇琛ㄥ崟鏁版嵁
+ * @param {String|Array} field 鐪熷疄鍚嶇О锛岄渶瑕佷娇鐢� realName 鑾峰彇
+ * @param {Object} data 鍘熷鏁版嵁
+ */
+export const getDataValue = (field, data) => {
+	return objGet(data, field)
+}
+
+/**
+ * 鑾峰彇琛ㄥ崟绫诲瀷
+ * @param {String|Array} field 鐪熷疄鍚嶇О锛岄渶瑕佷娇鐢� realName 鑾峰彇
+ */
+export const getDataValueType = (field, data) => {
+	const value = getDataValue(field, data)
+	return {
+		type: type(value),
+		value
+	}
+}
+
+/**
+ * 鑾峰彇琛ㄥ崟鍙敤鐨勭湡瀹瀗ame
+ * @param {String|Array} name 琛ㄥ崟name
+ * @@return {String} 琛ㄥ崟鍙敤鐨勭湡瀹瀗ame
+ */
+export const realName = (name, data = {}) => {
+	const base_name = _basePath(name)
+	if (typeof base_name === 'object' && Array.isArray(base_name) && base_name.length > 1) {
+		const realname = base_name.reduce((a, b) => a += `#${b}`, '_formdata_')
+		return realname
+	}
+	return base_name[0] || name
+}
+
+/**
+ * 鍒ゆ柇鏄惁琛ㄥ崟鍙敤鐨勭湡瀹瀗ame
+ * @param {String|Array} name 琛ㄥ崟name
+ * @@return {String} 琛ㄥ崟鍙敤鐨勭湡瀹瀗ame
+ */
+export const isRealName = (name) => {
+	const reg = /^_formdata_#*/
+	return reg.test(name)
+}
+
+/**
+ * 鑾峰彇琛ㄥ崟鏁版嵁鐨勫師濮嬫牸寮�
+ * @@return {Object|Array} object 闇�瑕佽В鏋愮殑鏁版嵁
+ */
+export const rawData = (object = {}, name) => {
+	let newData = JSON.parse(JSON.stringify(object))
+	let formData = {}
+	for(let i in newData){
+		let path = name2arr(i)
+		objSet(formData,path,newData[i])
+	}
+	return formData
+}
+
+/**
+ * 鐪熷疄name杩樺師涓� array
+ * @param {*} name 
+ */
+export const name2arr = (name) => {
+	let field = name.replace('_formdata_#', '')
+	field = field.split('#').map(v => (isNumber(v) ? Number(v) : v))
+	return field
+}
+
+/**
+ * 瀵硅薄涓缃��
+ * @param {Object|Array} object 婧愭暟鎹�
+ * @param {String| Array} path 'a.b.c' 鎴� ['a',0,'b','c']
+ * @param {String} value 闇�瑕佽缃殑鍊�
+ */
+export const objSet = (object, path, value) => {
+	if (typeof object !== 'object') return object;
+	_basePath(path).reduce((o, k, i, _) => {
+		if (i === _.length - 1) { 
+			// 鑻ラ亶鍘嗙粨鏉熺洿鎺ヨ祴鍊�
+			o[k] = value
+			return null
+		} else if (k in o) { 
+			// 鑻ュ瓨鍦ㄥ搴旇矾寰勶紝鍒欒繑鍥炴壘鍒扮殑瀵硅薄锛岃繘琛屼笅涓�娆¢亶鍘�
+			return o[k]
+		} else { 
+			// 鑻ヤ笉瀛樺湪瀵瑰簲璺緞锛屽垯鍒涘缓瀵瑰簲瀵硅薄锛岃嫢涓嬩竴璺緞鏄暟瀛楋紝鏂板璞¤祴鍊间负绌烘暟缁勶紝鍚﹀垯璧嬪�间负绌哄璞�
+			o[k] = /^[0-9]{1,}$/.test(_[i + 1]) ? [] : {}
+			return o[k]
+		}
+	}, object)
+	// 杩斿洖object
+	return object;
+}
+
+// 澶勭悊 path锛� path鏈変笁绉嶅舰寮忥細'a[0].b.c'銆�'a.0.b.c' 鍜� ['a','0','b','c']锛岄渶瑕佺粺涓�澶勭悊鎴愭暟缁勶紝渚夸簬鍚庣画浣跨敤
+function _basePath(path) {
+	// 鑻ユ槸鏁扮粍锛屽垯鐩存帴杩斿洖
+	if (Array.isArray(path)) return path
+	// 鑻ユ湁 '[',']'锛屽垯鏇挎崲鎴愬皢 '[' 鏇挎崲鎴� '.',鍘绘帀 ']'
+	return path.replace(/\[/g, '.').replace(/\]/g, '').split('.')
+}
+
+/**
+ * 浠庡璞′腑鑾峰彇鍊�
+ * @param {Object|Array} object 婧愭暟鎹�
+ * @param {String| Array} path 'a.b.c' 鎴� ['a',0,'b','c']
+ * @param {String} defaultVal 濡傛灉鏃犳硶浠庤皟鐢ㄩ摼涓幏鍙栧�肩殑榛樿鍊�
+ */
+export const objGet = (object, path, defaultVal = 'undefined') => {
+	// 鍏堝皢path澶勭悊鎴愮粺涓�鏍煎紡
+	let newPath = _basePath(path)
+	// 閫掑綊澶勭悊锛岃繑鍥炴渶鍚庣粨鏋�
+	let val = newPath.reduce((o, k) => {
+		return (o || {})[k]
+	}, object);
+	return !val || val !== undefined ? val : defaultVal
+}
+
+
+/**
+ * 鏄惁涓� number 绫诲瀷 
+ * @param {any} num 闇�瑕佸垽鏂殑鍊�
+ * @return {Boolean} 鏄惁涓� number
+ */
+export const isNumber = (num) => {
+	return !isNaN(Number(num))
+}
+
+/**
+ * 鏄惁涓� boolean 绫诲瀷 
+ * @param {any} bool 闇�瑕佸垽鏂殑鍊�
+ * @return {Boolean} 鏄惁涓� boolean
+ */
+export const isBoolean = (bool) => {
+	return (typeof bool === 'boolean')
+}
+/**
+ * 鏄惁鏈夊繀濉瓧娈�
+ * @param {Object} rules 瑙勫垯
+ * @return {Boolean} 鏄惁鏈夊繀濉瓧娈�
+ */
+export const isRequiredField = (rules) => {
+	let isNoField = false;
+	for (let i = 0; i < rules.length; i++) {
+		const ruleData = rules[i];
+		if (ruleData.required) {
+			isNoField = true;
+			break;
+		}
+	}
+	return isNoField;
+}
+
+
+/**
+ * 鑾峰彇鏁版嵁绫诲瀷
+ * @param {Any} obj 闇�瑕佽幏鍙栨暟鎹被鍨嬬殑鍊�
+ */
+export const type = (obj) => {
+	var class2type = {};
+
+	// 鐢熸垚class2type鏄犲皠
+	"Boolean Number String Function Array Date RegExp Object Error".split(" ").map(function(item, index) {
+		class2type["[object " + item + "]"] = item.toLowerCase();
+	})
+	if (obj == null) {
+		return obj + "";
+	}
+	return typeof obj === "object" || typeof obj === "function" ?
+		class2type[Object.prototype.toString.call(obj)] || "object" :
+		typeof obj;
+}
+
+/**
+ * 鍒ゆ柇涓や釜鍊兼槸鍚︾浉绛�
+ * @param {any} a 鍊�  
+ * @param {any} b 鍊�  
+ * @return {Boolean} 鏄惁鐩哥瓑
+ */
+export const isEqual = (a, b) => {
+	//濡傛灉a鍜宐鏈潵灏卞叏绛�
+	if (a === b) {
+		//鍒ゆ柇鏄惁涓�0鍜�-0
+		return a !== 0 || 1 / a === 1 / b;
+	}
+	//鍒ゆ柇鏄惁涓簄ull鍜寀ndefined
+	if (a == null || b == null) {
+		return a === b;
+	}
+	//鎺ヤ笅鏉ュ垽鏂璦鍜宐鐨勬暟鎹被鍨�
+	var classNameA = toString.call(a),
+		classNameB = toString.call(b);
+	//濡傛灉鏁版嵁绫诲瀷涓嶇浉绛夛紝鍒欒繑鍥瀎alse
+	if (classNameA !== classNameB) {
+		return false;
+	}
+	//濡傛灉鏁版嵁绫诲瀷鐩哥瓑锛屽啀鏍规嵁涓嶅悓鏁版嵁绫诲瀷鍒嗗埆鍒ゆ柇
+	switch (classNameA) {
+		case '[object RegExp]':
+		case '[object String]':
+			//杩涜瀛楃涓茶浆鎹㈡瘮杈�
+			return '' + a === '' + b;
+		case '[object Number]':
+			//杩涜鏁板瓧杞崲姣旇緝,鍒ゆ柇鏄惁涓篘aN
+			if (+a !== +a) {
+				return +b !== +b;
+			}
+			//鍒ゆ柇鏄惁涓�0鎴�-0
+			return +a === 0 ? 1 / +a === 1 / b : +a === +b;
+		case '[object Date]':
+		case '[object Boolean]':
+			return +a === +b;
+	}
+	//濡傛灉鏄璞$被鍨�
+	if (classNameA == '[object Object]') {
+		//鑾峰彇a鍜宐鐨勫睘鎬ч暱搴�
+		var propsA = Object.getOwnPropertyNames(a),
+			propsB = Object.getOwnPropertyNames(b);
+		if (propsA.length != propsB.length) {
+			return false;
+		}
+		for (var i = 0; i < propsA.length; i++) {
+			var propName = propsA[i];
+			//濡傛灉瀵瑰簲灞炴�у搴斿�间笉鐩哥瓑锛屽垯杩斿洖false
+			if (a[propName] !== b[propName]) {
+				return false;
+			}
+		}
+		return true;
+	}
+	//濡傛灉鏄暟缁勭被鍨�
+	if (classNameA == '[object Array]') {
+		if (a.toString() == b.toString()) {
+			return true;
+		}
+		return false;
+	}
+}

--
Gitblit v1.9.3