dareway-rui
Version:
670 lines (571 loc) • 21.3 kB
JavaScript
;
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