/**
 * form 验证 工具类
 *
 * @author terrfly
 * @site https://www.jeepay.vip
 * @date 2022/11/25 10:58
 */

import infoBox from '@/commons/utils/infoBox.js'

const model = {
	
	
	// 正则表达式
	regexp: {
		
		// 手机号验证规则 
		mobile: /^1\d{10}$/,
		
		// 登录用户名： 字母开头 6 -18位。 
		loginUsername: /^[a-zA-Z][a-zA-Z0-9]{5,17}$/,
		
	},
	
	
	// 验证规则： 
	rules: {
		
		// showText 为空， 说明是 input的placeHoloder 直接飘红, 
		// showText 有值： 在文本框下方提示。 
		// 只有input 才有这种特殊判断。
		requiredInput: (showText, type = 'string') => {
		    return {format: type, required: true, errorMessage: showText ? ('请输入' + showText) : ' ' }
		},
		
		requiredSelect: (showText, type = 'string') => {
			return {format: type, required: true, errorMessage: '请选择' + showText }
		},
		
		requiredUpload: (showText, type = 'string') => {
			return {format: type, required: true, errorMessage: '请上传' + showText }
		},
		
		// 正则验证 ， 请注意：  该规则需要在required后面， 此处不可包含required 
		patternRule: (showText, p) => {
			return {pattern: p, errorMessage: '请输入正确的' + showText }
		},
		
		requiredInputShowToast: (showText, type = 'string') => {
		    return {format: type, required: true, errorMessage:' ', toastErrorMessage: '请输入' + showText }
		},
		
		requiredSelectShowToast: (showText, type = 'string') => {
			return {format: type, required: true, errorMessage:' ', toastErrorMessage: '请选择' + showText }
		},
		
		requiredUploadShowToast: (showText, type = 'string') => {
			return {format: type, required: true, errorMessage:' ', toastErrorMessage: '请上传' + showText }
		},
		
		patternRuleShowToast: (showText, p) => {
			return {pattern: p, errorMessage:' ', toastErrorMessage: '请输入正确的' + showText }
		},
		
	},
	
	
	// 支持  提示信息 
	// 类型如下：  
	// {
	// 	required: true,
	// 	toastErrorMessage: "请输入去去去去群",
	// 	errorMessage: ' ', // 不会显示在下部， 需要空格占位 
	// }
	validate: (form) => {
		
		return form.validate().catch(e => {
			
			if(!e || e.length <= 0){
				return Promise.reject()
			}
			
			for(let i = 0; i < e.length; i++){
				let k = e[i].key
				let rules = form.rules[k].rules
				for(let j = 0; j < rules.length; j++){
					if(rules[j].toastErrorMessage && rules[j].required){
						infoBox.showToast(rules[j].toastErrorMessage) // 仅提示一次即可 
						return Promise.reject(e)
					}
				}
			}
			return Promise.reject(e)
		})
		
	},
	
}

export default model

