UNPKG

dareway-rui

Version:

670 lines (571 loc) 21.3 kB
'use strict'; var _interopRequireDefault = require('@babel/runtime/helpers/interopRequireDefault'); Object.defineProperty(exports, '__esModule', { value: true }); exports.isMultiSelectionMode = isMultiSelectionMode; exports.calculateColumnReadonly = calculateColumnReadonly; exports.getColumnsCodeInfo = getColumnsCodeInfo; exports.getEditableColumnsNames = getEditableColumnsNames; exports.isCodeColumn = isCodeColumn; exports.getColumn = getColumn; exports.getColumnNameList = getColumnNameList; exports.getRequiredColumnNameList = getRequiredColumnNameList; exports.getMaskedStringColumnInfoList = getMaskedStringColumnInfoList; exports.getLovColumnNameList = getLovColumnNameList; exports.getColumnEmptyValueMap = getColumnEmptyValueMap; exports.getColumnCodeMapAll = getColumnCodeMapAll; exports.checkRowNumType = checkRowNumType; exports.checkRowNumRange = checkRowNumRange; exports.checkColumnDefined = checkColumnDefined; exports.checkCodeColumn = checkCodeColumn; exports.shouldUpdateCols = shouldUpdateCols; exports.parseTitle = parseTitle; exports.parseCols = parseCols; exports.normalizeRowData = normalizeRowData; exports.normalizeCellData = normalizeCellData; var _objectSpread2 = _interopRequireDefault(require('@babel/runtime/helpers/objectSpread')); var _toConsumableArray2 = _interopRequireDefault(require('@babel/runtime/helpers/toConsumableArray')); var _typeof2 = _interopRequireDefault(require('@babel/runtime/helpers/typeof')); var _react = _interopRequireDefault(require('react')); var _util = require('../../util'); var _dataNormalizeHelper = require('../../taglib/form/dataNormalizeHelper'); var _util2 = require('../common/util'); var _date = require('../mask/date'); var _GridConstants = require('./GridConstants'); var _fragment = require('../fragment'); var _MsgBox = _interopRequireDefault(require('../../util/MsgBox')); var _CardMask = _interopRequireDefault(require('../../taglib/mask/string/CardMask')); var _YzbmMask = _interopRequireDefault(require('../../taglib/mask/string/YzbmMask')); /** * 取 Grid 状态数据接口 */ function isMultiSelectionMode(selectionMode) { if (selectionMode && selectionMode !== 'multi' && selectionMode !== 'single') { throw new Error( 'Grid \u6807\u7B7E\u5C5E\u6027 selectionMode \u7684\u6B63\u786E\u53D6\u503C\u4E3A multi \u6216 single\uFF0C\u5F53\u524D\u503C\u4E3A\u3010'.concat( selectionMode, '\u3011\uFF0C\u8BF7\u68C0\u67E5!' ) ); } return selectionMode === 'multi'; } /** * 计算列只读状态 * * GridReadonly ColumnReadonly readonly * √ √ √ * √ × √ * × √ √ * × × × */ function calculateColumnReadonly(gridReadonly, columnReadonly) { var readonly = null; if (gridReadonly) { readonly = true; } else if (columnReadonly) { readonly = true; } else { readonly = false; } return readonly; } /** * 分析 Grid 各 Column 的 code 配置信息(不包含arrayCode) */ function getColumnsCodeInfo(cols) { var o = []; for (var i = 0; i < cols.length; i++) { var _cols$i = cols[i], code = _cols$i.code, name = _cols$i.name, prefix = _cols$i.prefix; if (code) { o.push(code.toUpperCase()); } } return o; } function getEditableColumnsNames(cols, gridReadonly) { var o = []; for (var i = 0; i < cols.length; i++) { var _cols$i2 = cols[i], name = _cols$i2.name, readonly = _cols$i2.readonly, hidden = _cols$i2.hidden; if (hidden) { continue; } var isReadonly = calculateColumnReadonly(gridReadonly, readonly); if (!isReadonly) { o.push(name); } } return o; } function isCodeColumn(cols, colName) { var col = getColumn(cols, colName); var TAG_TYPE = col.TAG_TYPE; return ( TAG_TYPE === _GridConstants.TAG_TYPE_DROPDOWN_COLUMN || TAG_TYPE === _GridConstants.TAG_TYPE_MULTISELECT_COLUMN ); } function getColumn(cols, columnName) { var cname = columnName.toLowerCase(); return cols.find(function(_ref) { var name = _ref.name; return name == cname; }); } function getColumnNameList(cols) { return cols.map(function(_ref2) { var name = _ref2.name; return name; }); } function getRequiredColumnNameList(cols) { return cols .filter(function(_ref3) { var required = _ref3.required; return required; }) .map(function(_ref4) { var name = _ref4.name; return name; }); } function getMaskedStringColumnInfoList(cols) { return cols .filter(function(_ref5) { var mask = _ref5.mask, TAG_TYPE = _ref5.TAG_TYPE; return mask && TAG_TYPE === _GridConstants.TAG_TYPE_STRING_COLUMN; }) .map(function(_ref6) { var name = _ref6.name, mask = _ref6.mask, head = _ref6.head; return { name: name, head: head, mask: mask }; }); } function getLovColumnNameList(cols) { return cols .filter(function(_ref7) { var lovJS = _ref7.lovJS; return lovJS; }) .map(function(_ref8) { var name = _ref8.name; return name; }); } function getColumnEmptyValueMap(cols) { var all = cols.reduce(function(acc, cur, index) { var name = cur.name, TAG_EMPTY_VALUE = cur.TAG_EMPTY_VALUE; acc[name] = TAG_EMPTY_VALUE; return acc; }, {}); return all; } function getColumnCodeMapAll(cols) { var all = cols.reduce(function(acc, cur, index) { var name = cur.name, codeMap = cur.codeMap; if (codeMap) { acc[name] = codeMap; } return acc; }, {}); return all; } /** * 参数合法性校验接口 */ function checkRowNumType(rowNum, fnName) { if (typeof rowNum != 'number') { throw new Error( '' .concat(fnName, ' \u5165\u53C2 rowNum\u3010') .concat(rowNum, '\u3011\u4E0D\u662F\u6570\u503C\u7C7B\u578B\uFF0C\u8BF7\u68C0\u67E5!') ); } } function checkRowNumRange(rowNum, data, fnName) { var rowCount = data.length; if (rowNum <= 0 || rowNum > rowCount) { throw new Error( '' .concat(fnName, ' \u5165\u53C2 rowNum \u3010') .concat(rowNum, '\u3011\u8D85\u51FA\u8303\u56F4\uFF0C Grid\u53EA\u6709\u3010') .concat(rowCount, '\u3011\u884C\uFF0C\u8BF7\u68C0\u67E5!') ); } } function checkColumnDefined(cols, columnName, fnName) { // 入参合法性校验 if (!columnName || typeof columnName !== 'string') { throw new Error( '' .concat( fnName, ' \u5165\u53C2 columnName \u5FC5\u987B\u4E3A\u975E\u7A7A string \u7C7B\u578B\uFF0C\u5F53\u524D\u4F20\u5165\u3010' ) .concat(columnName, ':') .concat((0, _typeof2.default)(columnName), '\u3011\uFF0C\u8BF7\u68C0\u67E5!') ); } // 列定义是否存在 var columnNameList = getColumnNameList(cols); var colName = columnName.toLowerCase(); if (columnNameList.indexOf(colName) == -1) { throw new Error( '' .concat(fnName, '\uFF0CGrid \u4E2D\u4E0D\u5B58\u5728 name \u4E3A \u3010') .concat(columnName, '\u3011\u7684\u5217\uFF0C\u8BF7\u68C0\u67E5\uFF01') ); } } function checkCodeColumn(cols, columnName, fnName) { var col = getColumn(cols, columnName); var TAG_TYPE = col.TAG_TYPE; if ( TAG_TYPE !== _GridConstants.TAG_TYPE_DROPDOWN_COLUMN && TAG_TYPE !== _GridConstants.TAG_TYPE_MULTISELECT_COLUMN ) { throw new Error( '' .concat( fnName, ' \u53EA\u80FD\u5728 DropdownColumn\u3001MultiSelectColumn \u7C7B\u578B\u5217\u8C03\u7528\uFF0C\u3010' ) .concat(columnName, '\u3011\u662F\u3010') .concat(TAG_TYPE, '\u3011\u7C7B\u578B\u5217\uFF0C\u8BF7\u68C0\u67E5!') ); } } /** * 标签解析类接口 */ function shouldUpdateCols(cols, newProps) { var newCols = parseCols(newProps); if (cols.length != newCols.length) { return newCols; } return false; } function parseTitle(props) { var title = null; _react.default.Children.forEach(props.children, function(element) { if (!_react.default.isValidElement(element)) { return; } if (element.type.isGridTitle) { title = element.type.tagDefineGenerator(element.props); return true; } }); return title; } function parseCols(props) { var cols = []; _react.default.Children.forEach(props.children, function(columnsOrTitle) { if (!_react.default.isValidElement(columnsOrTitle)) { return; } if (columnsOrTitle.type.isGridColumns) { cols = parseColumns(columnsOrTitle.props); cols = parseColumnWidthConfig(columnsOrTitle.props, cols); } }); return cols; } function parseColumns(props) { var cols = []; _react.default.Children.forEach(props.children, function(column) { if (!_react.default.isValidElement(column)) { return; } //兼容React.fragment if (column.type === _fragment.Fragment) { var frags = parseColumns(column.props); cols.push.apply(cols, (0, _toConsumableArray2.default)(frags)); return; } if (!column.type.isGridColumn) { throw new Error( 'GridColumns \u6807\u7B7E\u4E0B\u4E0D\u80FD\u5C06\u3010'.concat( column.type, '\u3011\u4F5C\u4E3A\u5B50\u6807\u7B7E\uFF0C\u8BF7\u68C0\u67E5!' ) ); } if (!column.type.tagDefineGenerator) { throw new Error( 'GridColumns \u4E0B\u7684\u5B50\u6807\u7B7E\u672A\u5B9E\u73B0 tagDefineGenerator \u63A5\u53E3\uFF0C'.concat( column.type, '\uFF0C\u8BF7\u68C0\u67E5!' ) ); } // 校验标签属性 // TODO 这里要全员校验..不能遗漏 if (column.type.propsValidator) { column.type.propsValidator(column.props); } cols.push(column.type.tagDefineGenerator(column.props)); }); return cols; } function parseColumnWidthConfig(props, cols) { var widthConfigStr = props.widthConfig ? props.widthConfig : ''; var widthConfig = widthConfigStr.split(',').map(function(e) { return { name: e.split(':')[0], width: e.split(':')[1] }; }); if (widthConfig.length < 1) { return cols; } var colsWithWidthConfig = cols.map(function(col) { if (!'name' in col) { return col; } // filter correct col var widthInfo = widthConfig.filter(function(ele) { if (ele.name == col.name) { return true; } return false; }); if (!widthInfo || widthInfo.length < 1) { return col; } return (0, _objectSpread2.default)({}, col, { width: Number(widthInfo[0].width) }); }); return colsWithWidthConfig; } /*** * 数据转换接口 */ function normalizeRowData(cols, rowData, rowNum) { // 滤掉 columnNameList 中的按钮列 var columnNameList = getColumnNameList(cols).filter(function(colName) { var col = getColumn(cols, colName); var TAG_TYPE = col.TAG_TYPE; return TAG_TYPE !== _GridConstants.TAG_TYPE_BUTTONS_COLUMN; }); var rowKey = (0, _util.uuid)(), colName = null, value = null, convertResult = null; var resultRowData = {}; //创建Grid行的唯一标志 rowData[_GridConstants.ROW_UNIQUE_KEY_COLUMN_NAME] = rowKey; resultRowData[_GridConstants.ROW_UNIQUE_KEY_COLUMN_NAME] = rowKey; //多选模式 数据标识 if (rowData[_GridConstants.MULTI_MODE_COLUMN_NAME] == undefined) { rowData[_GridConstants.MULTI_MODE_COLUMN_NAME] = false; resultRowData[_GridConstants.MULTI_MODE_COLUMN_NAME] = false; } else { resultRowData[_GridConstants.MULTI_MODE_COLUMN_NAME] = rowData[_GridConstants.MULTI_MODE_COLUMN_NAME]; } for (var j = 0; j < columnNameList.length; j++) { colName = columnNameList[j]; value = rowData[colName]; convertResult = normalizeCellData(cols, colName, value); rowData[colName] = convertResult; resultRowData[colName] = convertResult; } return resultRowData; } function normalizeCellData(cols, colName, value) { // 取列 var col = getColumn(cols, colName); var TAG_EMPTY_VALUE = col.TAG_EMPTY_VALUE, TAG_ACCEPT_DATA_TYPES = col.TAG_ACCEPT_DATA_TYPES, TAG_OUTPUT_DATA_TYPE = col.TAG_OUTPUT_DATA_TYPE; // 空值 if (value == null || value === '') { return TAG_EMPTY_VALUE; } // 数据类型,标签无法接受 var valueDataType = (0, _typeof2.default)(value); if (TAG_ACCEPT_DATA_TYPES.indexOf(valueDataType) == -1) { throw new Error( 'Grid\u5217\u3010' .concat(colName, '\u3011\u53EF\u63A5\u53D7\u7684\u6570\u636E\u7C7B\u578B\u4E3A\u3010') .concat(TAG_ACCEPT_DATA_TYPES.join(','), '\u3011,\u5B9E\u9645\u4F20\u5165\u503C\u3010') .concat(value, '\u3011\u7684\u7C7B\u578B\u4E3A\u3010') .concat(valueDataType, '\u3011\uFF0C\u8BF7\u68C0\u67E5\uFF01') ); } // 数据转换 if (TAG_OUTPUT_DATA_TYPE == 'date') { var sourceMask = col.sourceMask, mask = col.mask; return normalizeDate(value, mask, sourceMask, colName); } else if (TAG_OUTPUT_DATA_TYPE == 'checkbox') { return normalizeCheckbox(value, colName); } else if (TAG_OUTPUT_DATA_TYPE == 'number') { var nullable = col.nullable, zeroDisplayAs0 = col.zeroDisplayAs0, _mask = col.mask, maxLength = col.maxLength; return (0, _dataNormalizeHelper.normalizeNumberData)( value, nullable, zeroDisplayAs0, _mask, maxLength, 'NumberColumn.fillData(data)' ); } else if (TAG_OUTPUT_DATA_TYPE == 'boolean') { return normalizeBoolean(value, colName); } else if (TAG_OUTPUT_DATA_TYPE == 'string') { var _maxLength = col.maxLength, _mask2 = col.mask; return normalizeString(value, _maxLength, _mask2, colName); } else { throw new Error( '\u8C8C\u4F3C\u8DD1\u5230\u4E86\u4E00\u4E2A\u5947\u5999\u7684\u5206\u652F..'.concat( TAG_OUTPUT_DATA_TYPE, '..\u7C7B\u578B\u8F6C\u6362\u4E0D\u4E86!' ) ); } } function normalizeDate(value, mask, sourceMask, debugMsg) { if (!(value instanceof Date || typeof value === 'string')) { throw new Error( '\u5217\u3010' .concat( debugMsg, '\u3011\u53EA\u63A5\u53D7\u3010string\u3001Date\u3011\u7C7B\u578B\u6570\u636E,\u5F53\u524D\u4F20\u5165\u503C\u3010' ) .concat(value, ' >> ') .concat((0, _typeof2.default)(value), '\u3011\uFF01') ); } if (typeof value === 'string') { if (!sourceMask) { throw new Error( '\u5217\u3010'.concat(debugMsg, '\u3011\u6CA1\u914D\u7F6E sourceMask\uFF0C\u8BF7\u68C0\u67E5\uFF01') ); } if (!_util.DateUtil.checkDate(value, sourceMask)) { throw new Error( '\u5217\u3010' .concat(debugMsg, '\u3011\u914D\u7F6E\u7684 sourceMask\u3010') .concat(sourceMask, '\u3011\u4E0E\u3010') .concat(value, '\u3011\u4E0D\u5339\u914D\uFF0C\u8BF7\u68C0\u67E5\uFF01') ); } return (0, _date.normalizeDate)(value, mask, sourceMask); } else if (value instanceof Date) { return (0, _date.normalizeDate)(value, mask, sourceMask); } else { throw new Error( '\u5217\u3010' .concat(debugMsg, '\u3011\u7684\u6570\u636E ') .concat(value, ' \u4E0D\u80FD\u8F6C\u6362\u4E3A Date \u7C7B\u578B\uFF0C\u8BF7\u68C0\u67E5!') ); } } function normalizeBoolean(value, debugMsg) { if (!(typeof value === 'boolean' || typeof value === 'string')) { throw new Error( '\u5217\u3010' .concat( debugMsg, '\u3011\u53EA\u63A5\u53D7\u3010string\u3001boolean\u3011\u7C7B\u578B\u6570\u636E,\u5F53\u524D\u4F20\u5165\u503C\u3010' ) .concat(value, ' >> ') .concat((0, _typeof2.default)(value), '\u3011\uFF01') ); } if (typeof value == 'boolean') { return value; } else if (typeof value == 'string') { if (value === 'true') { return true; } else if (value === 'false') { return false; } else { throw new Error( '\u5217\u3010' .concat(debugMsg, '\u3011\u7684\u6570\u636E ') .concat(value, ' \u4E0D\u80FD\u8F6C\u6362\u4E3A boolean \u7C7B\u578B\uFF0C\u8BF7\u68C0\u67E5!') ); } } else { throw new Error( '\u5217\u3010' .concat(debugMsg, '\u3011\u7684\u6570\u636E ') .concat(value, ' \u4E0D\u80FD\u8F6C\u6362\u4E3A boolean \u7C7B\u578B\uFF0C\u8BF7\u68C0\u67E5!') ); } } function normalizeString(value, maxLength, mask, colName) { var v = String(value); if (mask) { // checkValid if (mask === 'card' && !_CardMask.default.checkValid(v)) { var errormsg = '\u8EAB\u4EFD\u8BC1\u53F7\u7801\u3010'.concat( value, '\u3011\u4E0D\u6B63\u786E\uFF0C\u8BF7\u68C0\u67E5!' ); _MsgBox.default.error(errormsg); } else if (mask === 'yzbm' && !_YzbmMask.default.checkValid(v)) { var _errormsg = '\u90AE\u653F\u7F16\u7801\u3010'.concat( value, '\u3011\u4E0D\u6B63\u786E\uFF0C\u8BF7\u68C0\u67E5!' ); _MsgBox.default.error(_errormsg); } // format if (mask === 'card') { return _CardMask.default.format(v); } else if (mask === 'yzbm') { return _YzbmMask.default.format(v); } } else { return (0, _util2.filterValueByMaxLength)(v, maxLength); } } function normalizeCheckbox(value, debugMsg) { if (typeof value == 'boolean') { if (value === true) { return '1'; } else { return '0'; } } else if (typeof value == 'string') { if (value !== '1' && value !== '0' && value !== 'false' && value !== 'true') { throw new Error( '\u5217\u3010' .concat(debugMsg, '\u3011\u7684\u6570\u636E ') .concat(value, ' \u4E0D\u80FD\u8F6C\u6362\u4E3A Checkbox \u7C7B\u578B\uFF0C\u8BF7\u68C0\u67E5!') ); } if (value === 'true' || value === '1') { return '1'; } else { return '0'; } } else if (typeof value == 'number') { if (value !== 1 && value !== 0) { throw new Error( '\u5217\u3010' .concat(debugMsg, '\u3011\u7684\u6570\u636E ') .concat(value, ' \u4E0D\u80FD\u8F6C\u6362\u4E3A Checkbox \u7C7B\u578B\uFF0C\u8BF7\u68C0\u67E5!') ); } return String(value); } else { throw new Error( '\u5217\u3010' .concat(debugMsg, '\u3011\u7684\u6570\u636E ') .concat(value, ' \u4E0D\u80FD\u8F6C\u6362\u4E3A Checkbox \u7C7B\u578B\uFF0C\u8BF7\u68C0\u67E5!') ); } } //@ sourceMappingURL=utils.js.map