UNPKG

base-ui

Version:

A component library for Better Vue developmemt

89 lines (73 loc) 2.84 kB
/** * @author wsm * @date 2017/8/24-下午5:46 * @file valid */ import {Toast} from '../Toast/Toast'; import {pickValue} from '../helper/helper'; import {isFunc} from '../../util/check'; const checkNotNull = (data) => { if (data === null || typeof data === 'undefined') return false; if (!data.toString()) return false; return true; }; class Valid { constructor($toast, ruleMap, i18n) { this.ruleMap = ruleMap; Object.assign(this, { checkOptions(data = {}, options = []) { if (!options.length) return true; return options.every((option) => { const { field = '', required = false, selectable = false, labelKey = '', label = labelKey && i18n && i18n.t(labelKey), name = label, rule = '', messageKey = '', message = messageKey && i18n && i18n.t(messageKey), validate = null } = option; const fieldData = pickValue(data, field); const nameString = isFunc(name) ? name() : name; const messageString = isFunc(message) ? message() : message; // check required let isRequired = required; if (isFunc(required)) { isRequired = required(data); } if (isRequired && !checkNotNull(fieldData)) { if (i18n && i18n.t) { $toast.error( `${selectable ? i18n.t('requireSelect') : i18n.t('requireInput')} ${nameString}` ); } else { $toast.error(`${selectable ? '请选择' : '请输入'} ${nameString}`); } return false; } // check rule if (rule && !ruleMap[rule](fieldData)) { $toast.error(messageString); return false; } // check customized rule if (validate && !validate(fieldData, field, data)) { if (messageString) $toast.error(messageString); return false; } return true; }); } }); } } export default { install(Vue, {ruleMap, i18n}) { const $toast = new Toast(Vue); const $valid = new Valid($toast, ruleMap, i18n); Object.assign(Vue.prototype, {$valid}); } };