UNPKG

@m-materials/form-item

Version:

基于antd中form表单,加入了自定义组件,以简化代码为模板。

565 lines (458 loc) 20.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports["default"] = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _comGrid = _interopRequireDefault(require("@m-materials/com-grid")); var _comTree = _interopRequireDefault(require("@m-materials/com-tree")); var _antd = require("antd"); var _zh_CN = _interopRequireDefault(require("antd/es/date-picker/locale/zh_CN")); var _lodash = _interopRequireDefault(require("lodash")); var _moment = _interopRequireDefault(require("moment")); var _react = _interopRequireWildcard(require("react")); var _CustomDatePicker = require("./CustomDatePicker"); var _excluded = ["parseName", "parseField"], _excluded2 = ["noFormControl", "span", "label", "noToolTip", "code", "hidden", "type", "rules", "validator"], _excluded3 = ["initialValue", "formLayout", "maxLength"]; function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } var RadioGroup = _antd.Radio.Group; var FormItem = _antd.Form.Item; var RangePicker = _antd.DatePicker.RangePicker, MonthPicker = _antd.DatePicker.MonthPicker; var Option = _antd.Select.Option; var currencyCodeStyleLeft = { width: '60%' }; var currencyCodeStyleRight = { width: '37%', marginLeft: '3%' }; var packageComponents = 'comGrid comList comTree'; // 标准formItem组件和平台组件参数冲突转换 function changeParams(item, type) { // 补充默认清空函数 if (item.afterSelect && !item.afterClear) { item.afterClear = function () { item.afterSelect({}); }; } if (item.reader) { item.name = item.reader.parseName && item.reader.parseName; item.field = item.reader.parseField && item.reader.parseField; if (type === 'comList') { // 根据配置的render自动计算快速搜索值 if (!item.searchProperties) { var searchProperties = []; searchProperties.push(item.reader.name); if (item.reader.description) { searchProperties.push(item.reader.description); } item.searchProperties = searchProperties; } } else if (type === 'comGrid') { // 根据配置的columns自动计算快速搜索值 if (item.columns && !item.searchProperties) { item.searchProperties = item.columns.filter(function (col) { return !col.ignoreSearch && !col.dataIndex.includes('Remark'); }).map(function (subItem) { return subItem.dataIndex; }); } // 根据配置的columns自适应计算宽度 if (item.columns && !item.width) { var needConfigWidth = true; var width = 0; for (var _iterator = _createForOfIteratorHelperLoose(item.columns), _step; !(_step = _iterator()).done;) { var subItem = _step.value; if (!subItem.width || subItem.width.toString().includes('%')) { needConfigWidth = false; break; } else { width += parseInt(subItem.width); } } if (needConfigWidth) { item.width = width; } } } var parseName = item.parseName, parseField = item.parseField, propsItem = (0, _objectWithoutPropertiesLoose2["default"])(item, _excluded); return propsItem; } return item; } // 初始化parseField的值 function initFieldValue(reader, form) { var getFieldDecorator = form.getFieldDecorator; var _reader$parseField = reader.parseField, parseField = _reader$parseField === void 0 ? [] : _reader$parseField, _reader$editData = reader.editData, editData = _reader$editData === void 0 ? {} : _reader$editData; for (var _iterator2 = _createForOfIteratorHelperLoose(parseField), _step2; !(_step2 = _iterator2()).done;) { var key = _step2.value; getFieldDecorator(key, { initialValue: _lodash["default"].get(editData, key) }); } } // 初始化parseField的值 function initFieldArrayValue(reader, form) { var getFieldDecorator = form.getFieldDecorator; var _reader$parseField2 = reader.parseField, parseField = _reader$parseField2 === void 0 ? [] : _reader$parseField2, _reader$initialField = reader.initialField, initialField = _reader$initialField === void 0 ? {} : _reader$initialField; for (var _iterator3 = _createForOfIteratorHelperLoose(parseField.entries()), _step3; !(_step3 = _iterator3()).done;) { var _step3$value = _step3.value, index = _step3$value[0], key = _step3$value[1]; getFieldDecorator(key, { initialValue: initialField[index] }); } } var StandardFormItem = /*#__PURE__*/function (_PureComponent) { (0, _inheritsLoose2["default"])(StandardFormItem, _PureComponent); function StandardFormItem() { var _this; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _PureComponent.call.apply(_PureComponent, [this].concat(args)) || this; _this.ItemConfig = {}; _this.ItemRule = []; _this.formLayoutTemp = {}; _this.itemSpan = 8; _this.defaultFormLayout = { labelCol: { span: 8 }, wrapperCol: { span: 16 } }; _this.getItem = function (item, type) { var rest = _lodash["default"].omit(item, ['newKey']); // 如果是平台组件 if (packageComponents.includes(type)) { // 对接平台组件参数转换 // 为每一个field赋值 if (rest.reader.hasOwnProperty('editData') && rest.form) { if (_lodash["default"].isArray(rest.reader.editData)) { rest.reader.initialField = rest.reader.editData; initFieldArrayValue(rest.reader, rest.form); } else { initFieldValue(rest.reader, rest.form); } } if (rest.allowClear === false) { rest.allowClear = false; } else { rest.allowClear = true; } rest = changeParams(rest, type); } else { rest = _lodash["default"].omit(item, ['rowKey', 'remotePaging', 'cascadeParams', 'afterSelect', 'doAfterSelect', 'searchProperties']); } switch (type) { case 'timePicker': return /*#__PURE__*/_react["default"].createElement(_antd.TimePicker, (0, _extends2["default"])({ style: { width: '100%' } }, rest, { locale: _zh_CN["default"] })); case 'datePicker': if (!rest.format) { rest.format = 'YYYY-MM-DD'; } return /*#__PURE__*/_react["default"].createElement(_antd.DatePicker, (0, _extends2["default"])({ style: { width: '100%' } }, rest, { locale: _zh_CN["default"] })); case 'datePickerNew': rest.onChange && (rest.originOnchange = rest.onChange); rest.onChange && delete rest.onChange; return /*#__PURE__*/_react["default"].createElement(_CustomDatePicker.CustomDatePicker, rest); case 'rangePicker': if (!rest.format) { rest.format = 'YYYY-MM-DD'; } return /*#__PURE__*/_react["default"].createElement(RangePicker, (0, _extends2["default"])({ style: { width: '100%' } }, rest, { locale: _zh_CN["default"] })); case 'monthPicker': if (!rest.format) { rest.format = 'YYYY-MM'; } return /*#__PURE__*/_react["default"].createElement(MonthPicker, (0, _extends2["default"])({ style: { width: '100%' } }, rest, { locale: _zh_CN["default"] })); case 'select': var options = [].concat(rest.options); var newOptions = options.map(function (value) { return /*#__PURE__*/_react["default"].createElement(Option, { key: value.value, value: value.value }, value.text); }); if (rest.allowClear === false) { rest.allowClear = false; } else { rest.allowClear = true; } return /*#__PURE__*/_react["default"].createElement(_antd.Select, (0, _extends2["default"])({}, rest, { style: { width: '100%' } }), newOptions); case 'radio': options = [].concat(rest.options); newOptions = options.map(function (value) { return /*#__PURE__*/_react["default"].createElement(_antd.Radio, { key: value.value, value: value.value }, value.text); }); return /*#__PURE__*/_react["default"].createElement(RadioGroup, (0, _extends2["default"])({}, rest, { style: { width: '100%' } }), newOptions); case 'inputNumber': var commonProps = { style: { width: '100%' }, min: rest.min || -9999999999999, max: rest.max || 9007199254740992, precision: rest.hasOwnProperty('precision') ? rest.precision : 2 }; // 千分位统一设置 if (rest.thousandth) { // 千分位代理onBlur方法 var onBlurPlus = function onBlurPlus(e) { var obj = {}; obj.target = {}; obj.target.value = parseInt(("" + e.target.value).replace(/\$\s?|(,*)/g, '')); rest.onBlurPlus(obj); }; rest.suffix = rest.suffix || ''; rest.onBlur && (rest.onBlur = onBlurPlus); // return <MoneyInput {...rest} {...commonProps} />; } if (rest.percent) { rest.formatter = function (value) { return value + "%"; }; rest.parser = function (value) { return value.replace('%', ''); }; } return /*#__PURE__*/_react["default"].createElement(_antd.InputNumber, (0, _extends2["default"])({}, rest, commonProps)); case 'textArea': var _rest = rest, rows = _rest.rows; return /*#__PURE__*/_react["default"].createElement(_antd.Input.TextArea, (0, _extends2["default"])({ rows: rows || 4, maxLength: 1500 }, rest)); case 'checkbox': return /*#__PURE__*/_react["default"].createElement(_antd.Checkbox, rest, rest.text); case 'input': rest.type = rest.inputType; rest.inputType && delete rest.inputType; return /*#__PURE__*/_react["default"].createElement(_antd.Input, (0, _extends2["default"])({ autoComplete: "off", maxLength: 128 || rest.maxLength }, rest)); case 'button': rest.type = rest.buttonType; rest.buttonType && delete rest.buttonType; return /*#__PURE__*/_react["default"].createElement(_antd.Button, (0, _extends2["default"])({}, rest, { style: rest.style || { width: '100%' } }), rest.text); case 'text': return /*#__PURE__*/_react["default"].createElement("span", { style: rest.style }, rest.text); case 'switch': return /*#__PURE__*/_react["default"].createElement(_antd.Switch, (0, _extends2["default"])({ size: rest.size || 'small' }, rest)); case 'comList': return /*#__PURE__*/_react["default"].createElement(ComList, (0, _extends2["default"])({}, rest, { style: rest.style || { width: '100%' } })); case 'comTree': return /*#__PURE__*/_react["default"].createElement(_comTree["default"], (0, _extends2["default"])({}, rest, { defaultValue: rest.initialValue, style: rest.style || { width: '100%' } })); case 'comGrid': return /*#__PURE__*/_react["default"].createElement(_comGrid["default"], (0, _extends2["default"])({ style: rest.style || { width: '100%' }, columns: rest.columns || [{ title: '代码', width: '50%', dataIndex: 'code' }, { title: '名称', width: '50%', dataIndex: 'name' }], searchProperties: rest.searchProperties, rowKey: rest.rowKey, defaultValue: rest.initialValue, form: rest.form }, rest)); default: } }; _this.validatorFunc = function (rule, value, callback) { var min = _this.props.min || 0; var banEQ = _this.props.banEQ; if (banEQ && (value === 0 || value) && value <= min) { callback("\u503C\u4E0D\u80FD\u5C0F\u4E8E\u7B49\u4E8E" + min + "!"); } else if (value && value < min) { callback("\u503C\u4E0D\u80FD\u5C0F\u4E8E" + min + "!"); } else { callback(); } }; _this.validatorWrap = function (rule, value, callback) { _this.props.validator(rule, value, callback); callback(); }; return _this; } var _proto = StandardFormItem.prototype; _proto.render = function render() { var _this$props = this.props, noFormControl = _this$props.noFormControl, span = _this$props.span, label = _this$props.label, noToolTip = _this$props.noToolTip, code = _this$props.code, hidden = _this$props.hidden, type = _this$props.type, rules = _this$props.rules, validator = _this$props.validator, tempItem = (0, _objectWithoutPropertiesLoose2["default"])(_this$props, _excluded2); var initialValue = tempItem.initialValue, formLayout = tempItem.formLayout, maxLength = tempItem.maxLength, item = (0, _objectWithoutPropertiesLoose2["default"])(tempItem, _excluded3); var reader = item.reader; var decoratorCode = code; // 如果是平台组件,需要接受form if (packageComponents.includes(type)) { if (!reader) { _antd.message.error(label + "\u3010" + code + "\u3011\u6CA1\u6709\u914D\u7F6Ereader\uFF0C\u8BF7\u68C0\u67E5\uFF01"); return null; } decoratorCode = reader.parseName || reader.name; } this.itemSpan = span || this.itemSpan; // 设置item的布局 this.formLayoutTemp = formLayout || this.defaultFormLayout; // 设置item的基础设置 // 设置规则 this.ItemRule = rules || this.ItemRule; // 为必填信息设置默认验证信息 if (tempItem.required) { this.ItemRule.push({ required: true, message: label + "\u7684\u4E0D\u80FD\u4E3A\u7A7A!" }); } // 设置初始值 if (type === 'datePicker') { // 时间选择器,如果是时间,如果没有加moment转换,自动加上 if (typeof initialValue === 'string') { initialValue = (0, _moment["default"])(initialValue); } } // 设置初始值 if (type === 'datePickerNew') { // 时间选择器,如果是时间,如果没有加moment转换,自动加上 if (initialValue && typeof initialValue !== 'string') { var format = item.format || 'YYYY-MM-DD hh:mm:ss'; initialValue = initialValue.format(format); } } if (type === 'checkbox' || type === 'switch') { this.ItemConfig.initialValue = !!initialValue; } else { this.ItemConfig.initialValue = initialValue; } if (type === 'inputNumber') { this.validator = validator ? this.validatorWrap : this.validatorFunc; this.ItemRule.push({ validator: this.validator }); } else if (validator) { this.ItemRule.push({ validator: this.validatorWrap }); } if (type === 'input') { if (maxLength) { this.ItemRule.push({ max: maxLength, message: label + "\u7684\u957F\u5EA6\u4E0D\u80FD\u5927\u4E8E" + maxLength + "!" }); } } this.ItemConfig.rules = this.ItemRule; if (type === 'checkbox' || type === 'switch') { this.ItemConfig.valuePropName = 'checked'; } if (item.currencyCode) { item.style = currencyCodeStyleLeft; } var needFormWrapper = true; var formContent = this.getItem(item, type); if (type === 'button' || type === 'text' || noFormControl) { needFormWrapper = false; } // 判断是否加入form控制 if (needFormWrapper) { formContent = /*#__PURE__*/_react["default"].createElement(FormItem, (0, _extends2["default"])({ name: decoratorCode, label: label }, this.formLayoutTemp, this.ItemConfig), formContent); } else { formContent = /*#__PURE__*/_react["default"].createElement("span", null, formContent); } var content = /*#__PURE__*/_react["default"].createElement(_antd.Col, { key: code + "_col", span: this.itemSpan, style: { display: hidden ? 'none' : 'block' } }, /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, formContent, item.currencyCode && /*#__PURE__*/_react["default"].createElement(_antd.Input, { disabled: true, value: item.currencyCode, style: currencyCodeStyleRight }))); return content; }; return StandardFormItem; }(_react.PureComponent); var _default = StandardFormItem; exports["default"] = _default;