NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/ant-design-vue/es/form-model/Form.js

204 lines
6.3 KiB
Java
Raw Normal View History

2023-09-14 14:47:11 +08:00
import _defineProperty from 'babel-runtime/helpers/defineProperty';
import _extends from 'babel-runtime/helpers/extends';
import PropTypes from '../_util/vue-types';
import classNames from 'classnames';
import { ColProps } from '../grid/Col';
import isRegExp from 'lodash/isRegExp';
import warning from '../_util/warning';
import FormItem from './FormItem';
import { initDefaultProps, getListeners } from '../_util/props-util';
import { ConfigConsumerProps } from '../config-provider/configConsumerProps';
export var FormProps = {
layout: PropTypes.oneOf(['horizontal', 'inline', 'vertical']),
labelCol: PropTypes.shape(ColProps).loose,
wrapperCol: PropTypes.shape(ColProps).loose,
colon: PropTypes.bool,
labelAlign: PropTypes.oneOf(['left', 'right']),
prefixCls: PropTypes.string,
hideRequiredMark: PropTypes.bool,
model: PropTypes.object,
rules: PropTypes.object,
validateMessages: PropTypes.any,
validateOnRuleChange: PropTypes.bool
};
export var ValidationRule = {
/** validation error message */
message: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),
/** built-in validation type, available options: https://github.com/yiminghe/async-validator#type */
type: PropTypes.string,
/** indicates whether field is required */
required: PropTypes.boolean,
/** treat required fields that only contain whitespace as errors */
whitespace: PropTypes.boolean,
/** validate the exact length of a field */
len: PropTypes.number,
/** validate the min length of a field */
min: PropTypes.number,
/** validate the max length of a field */
max: PropTypes.number,
/** validate the value from a list of possible values */
'enum': PropTypes.oneOfType([String, PropTypes.arrayOf(String)]),
/** validate from a regular expression */
pattern: PropTypes.custom(isRegExp),
/** transform a value before validation */
transform: PropTypes.func,
/** custom validate function (Note: callback must be called) */
validator: PropTypes.func
};
var Form = {
name: 'AFormModel',
props: initDefaultProps(FormProps, {
layout: 'horizontal',
hideRequiredMark: false,
colon: true,
validateOnRuleChange: false
}),
Item: FormItem,
created: function created() {
this.fields = [];
},
provide: function provide() {
return {
FormContext: this
};
},
inject: {
configProvider: { 'default': function _default() {
return ConfigConsumerProps;
} }
},
watch: {
rules: function rules() {
if (this.validateOnRuleChange) {
this.validate(function () {});
}
}
},
computed: {
vertical: function vertical() {
return this.layout === 'vertical';
}
},
methods: {
addField: function addField(field) {
if (field) {
this.fields.push(field);
}
},
removeField: function removeField(field) {
if (field.prop) {
this.fields.splice(this.fields.indexOf(field), 1);
}
},
onSubmit: function onSubmit(e) {
if (!getListeners(this).submit) {
e.preventDefault();
} else {
this.$emit('submit', e);
}
},
resetFields: function resetFields() {
if (!this.model) {
warning(false, 'FormModel', 'model is required for resetFields to work.');
return;
}
this.fields.forEach(function (field) {
field.resetField();
});
},
clearValidate: function clearValidate() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var fields = props.length ? typeof props === 'string' ? this.fields.filter(function (field) {
return props === field.prop;
}) : this.fields.filter(function (field) {
return props.indexOf(field.prop) > -1;
}) : this.fields;
fields.forEach(function (field) {
field.clearValidate();
});
},
validate: function validate(callback) {
var _this = this;
if (!this.model) {
warning(false, 'FormModel', 'model is required for resetFields to work.');
return;
}
var promise = void 0;
// if no callback, return promise
if (typeof callback !== 'function' && window.Promise) {
promise = new window.Promise(function (resolve, reject) {
callback = function callback(valid) {
valid ? resolve(valid) : reject(valid);
};
});
}
var valid = true;
var count = 0;
// 如果需要验证的fields为空调用验证时立刻返回callback
if (this.fields.length === 0 && callback) {
callback(true);
}
var invalidFields = {};
this.fields.forEach(function (field) {
field.validate('', function (message, field) {
if (message) {
valid = false;
}
invalidFields = _extends({}, invalidFields, field);
if (typeof callback === 'function' && ++count === _this.fields.length) {
callback(valid, invalidFields);
}
});
});
if (promise) {
return promise;
}
},
validateField: function validateField(props, cb) {
props = [].concat(props);
var fields = this.fields.filter(function (field) {
return props.indexOf(field.prop) !== -1;
});
if (!fields.length) {
warning(false, 'FormModel', 'please pass correct props!');
return;
}
fields.forEach(function (field) {
field.validate('', cb);
});
}
},
render: function render() {
var _classNames;
var h = arguments[0];
var customizePrefixCls = this.prefixCls,
hideRequiredMark = this.hideRequiredMark,
layout = this.layout,
onSubmit = this.onSubmit,
$slots = this.$slots;
var getPrefixCls = this.configProvider.getPrefixCls;
var prefixCls = getPrefixCls('form', customizePrefixCls);
var formClassName = classNames(prefixCls, (_classNames = {}, _defineProperty(_classNames, prefixCls + '-horizontal', layout === 'horizontal'), _defineProperty(_classNames, prefixCls + '-vertical', layout === 'vertical'), _defineProperty(_classNames, prefixCls + '-inline', layout === 'inline'), _defineProperty(_classNames, prefixCls + '-hide-required-mark', hideRequiredMark), _classNames));
return h(
'form',
{
on: {
'submit': onSubmit
},
'class': formClassName },
[$slots['default']]
);
}
};
export default Form;