UNPKG

amis

Version:

一种MIS页面生成工具

718 lines (717 loc) 23.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var isPlainObject = require("lodash/isPlainObject"); var isEqual = require("lodash/isEqual"); var lodashIsObject = require("lodash/isObject"); var uniq = require("lodash/uniq"); var tpl_1 = require("./tpl"); var autobind_decorator_1 = require("autobind-decorator"); var qs_1 = tslib_1.__importDefault(require("qs")); // 方便取值的时候能够把上层的取到,但是获取的时候不会全部把所有的数据获取到。 function createObject(superProps, props, properties) { if (superProps && Object.isFrozen(superProps)) { superProps = cloneObject(superProps); } var obj = superProps ? Object.create(superProps, tslib_1.__assign(tslib_1.__assign({}, properties), { __super: { value: superProps, writable: false, enumerable: false } })) : Object.create(Object.prototype, properties); props && Object.keys(props).forEach(function (key) { return (obj[key] = props[key]); }); return obj; } exports.createObject = createObject; function cloneObject(from) { var obj = from && from.__super ? Object.create(from.__super, { __super: { value: from.__super, writable: false, enumerable: false } }) : Object.create(Object.prototype); from && Object.keys(from).forEach(function (key) { return (obj[key] = from[key]); }); return obj; } exports.cloneObject = cloneObject; function extendObject(to, from) { var obj = cloneObject(to); from && Object.keys(from).forEach(function (key) { return (obj[key] = from[key]); }); return obj; } exports.extendObject = extendObject; function syncDataFromSuper(data, superObject, prevSuperObject, force, store) { var obj = tslib_1.__assign({}, data); var keys = Object.keys(obj); // 如果是 form store,则从父级同步 formItem 种东西。 if (store && store.storeType === 'FormStore') { keys = uniq(store.items.map(function (item) { return item.name; })); force = false; } if (superObject || prevSuperObject) { keys.forEach(function (key) { if (((superObject && typeof superObject[key] !== 'undefined') || (prevSuperObject && typeof prevSuperObject[key] !== 'undefined')) && (force || (prevSuperObject && !superObject) || (!prevSuperObject && superObject) || prevSuperObject[key] !== superObject[key])) { obj[key] = superObject[key]; } }); } return obj; } exports.syncDataFromSuper = syncDataFromSuper; /** * 生成 8 位随机数字。 * * @return {string} 8位随机数字 */ function guid() { function s4() { return Math.floor((1 + Math.random()) * 0x10000) .toString(16) .substring(1); } return s4() + s4() + s4(); } exports.guid = guid; function findIndex(arr, detect) { for (var i = 0, len = arr.length; i < len; i++) { if (detect(arr[i], i)) { return i; } } return -1; } exports.findIndex = findIndex; function getVariable(data, key, canAccessSuper) { if (canAccessSuper === void 0) { canAccessSuper = true; } if (!data || !key) { return undefined; } else if (canAccessSuper ? key in data : data.hasOwnProperty(key)) { return data[key]; } return key .split('.') .reduce(function (obj, key) { return obj && typeof obj === 'object' && (canAccessSuper ? key in obj : obj.hasOwnProperty(key)) ? obj[key] : undefined; }, data); } exports.getVariable = getVariable; function setVariable(data, key, value) { data = data || {}; if (key in data) { data[key] = value; return; } var parts = key.split('.'); var last = parts.pop(); while (parts.length) { var key_1 = parts.shift(); if (isPlainObject(data[key_1])) { data = data[key_1] = tslib_1.__assign({}, data[key_1]); } else if (data[key_1]) { // throw new Error(`目标路径不是纯对象,不能覆盖`); // 强行转成对象 data[key_1] = {}; data = data[key_1]; } else { data[key_1] = {}; data = data[key_1]; } } data[last] = value; } exports.setVariable = setVariable; function deleteVariable(data, key) { if (!data) { return; } else if (data.hasOwnProperty(key)) { delete data[key]; return; } var parts = key.split('.'); var last = parts.pop(); while (parts.length) { var key_2 = parts.shift(); if (isPlainObject(data[key_2])) { data = data[key_2] = tslib_1.__assign({}, data[key_2]); } else if (data[key_2]) { throw new Error("\u76EE\u6807\u8DEF\u5F84\u4E0D\u662F\u7EAF\u5BF9\u8C61\uFF0C\u4E0D\u80FD\u4FEE\u6539"); } else { break; } } if (data && data.hasOwnProperty && data.hasOwnProperty(last)) { delete data[last]; } } exports.deleteVariable = deleteVariable; function hasOwnProperty(data, key) { var parts = key.split('.'); while (parts.length) { var key_3 = parts.shift(); if (!isObject(data) || !data.hasOwnProperty(key_3)) { return false; } data = data[key_3]; } return true; } exports.hasOwnProperty = hasOwnProperty; function noop() { } exports.noop = noop; function anyChanged(attrs, from, to, strictMode) { if (strictMode === void 0) { strictMode = true; } return (typeof attrs === 'string' ? attrs.split(/\s*,\s*/) : attrs).some(function (key) { return strictMode ? from[key] !== to[key] : from[key] != to[key]; }); } exports.anyChanged = anyChanged; function rmUndefined(obj) { var newObj = {}; if (typeof obj !== 'object') { return obj; } var keys = Object.keys(obj); keys.forEach(function (key) { if (obj[key] !== undefined) { newObj[key] = obj[key]; } }); return newObj; } exports.rmUndefined = rmUndefined; function isObjectShallowModified(prev, next, strictMode, ignoreUndefined) { if (strictMode === void 0) { strictMode = true; } if (ignoreUndefined === void 0) { ignoreUndefined = false; } if (null == prev || null == next || typeof prev !== 'object' || typeof next !== 'object') { return strictMode ? prev !== next : prev != next; } if (ignoreUndefined) { prev = rmUndefined(prev); next = rmUndefined(next); } var keys = Object.keys(prev); var nextKeys = Object.keys(next); if (keys.length !== nextKeys.length || keys.join(',') !== nextKeys.join(',')) { return true; } for (var i = keys.length - 1; i >= 0; i--) { var key = keys[i]; if (strictMode ? next[key] !== prev[key] : isObjectShallowModified(next[key], prev[key], false, ignoreUndefined)) { return true; } } return false; } exports.isObjectShallowModified = isObjectShallowModified; function isArrayChilrenModified(prev, next, strictMode) { if (strictMode === void 0) { strictMode = true; } if (!Array.isArray(prev) || !Array.isArray(next)) { return strictMode ? prev !== next : prev != next; } if (prev.length !== next.length) { return true; } for (var i = prev.length - 1; i >= 0; i--) { if (strictMode ? prev[i] !== next[i] : prev[i] != next[i]) { return true; } } return false; } exports.isArrayChilrenModified = isArrayChilrenModified; // 即将抛弃 function makeColumnClassBuild(steps, classNameTpl) { if (classNameTpl === void 0) { classNameTpl = 'col-sm-$value'; } var count = 12; var step = Math.floor(count / steps); return function (schema) { if (schema.columnClassName && /\bcol-(?:xs|sm|md|lg)-(\d+)\b/.test(schema.columnClassName)) { var flex = parseInt(RegExp.$1, 10); count -= flex; steps--; step = Math.floor(count / steps); return schema.columnClassName; } else if (schema.columnClassName) { count -= step; steps--; return schema.columnClassName; } count -= step; steps--; return classNameTpl.replace('$value', '' + step); }; } exports.makeColumnClassBuild = makeColumnClassBuild; function isVisible(schema, data) { return !(schema.hidden || schema.visible === false || (schema.hiddenOn && tpl_1.evalExpression(schema.hiddenOn, data) === true) || (schema.visibleOn && tpl_1.evalExpression(schema.visibleOn, data) === false)); } exports.isVisible = isVisible; function isDisabled(schema, data) { return schema.disabled || (schema.disabledOn && tpl_1.evalExpression(schema.disabledOn, data)); } exports.isDisabled = isDisabled; function makeHorizontalDeeper(horizontal, count) { if (count > 1 && /\bcol-(xs|sm|md|lg)-(\d+)\b/.test(horizontal.left)) { var flex = parseInt(RegExp.$2, 10) * count; return { leftFixed: horizontal.leftFixed, left: flex, right: 12 - flex, offset: flex }; } else if (count > 1 && typeof horizontal.left === 'number') { var flex = horizontal.left * count; return { leftFixed: horizontal.leftFixed, left: flex, right: 12 - flex, offset: flex }; } return horizontal; } exports.makeHorizontalDeeper = makeHorizontalDeeper; function promisify(fn) { var promisified = function () { try { var ret_1 = fn.apply(null, arguments); if (ret_1 && ret_1.then) { return ret_1; } else if (typeof ret_1 === 'function') { // thunk support return new Promise(function (resolve, reject) { return ret_1(function (error, value) { return (error ? reject(error) : resolve(value)); }); }); } return Promise.resolve(ret_1); } catch (e) { Promise.reject(e); } }; promisified.raw = fn; return promisified; } exports.promisify = promisify; function getScrollParent(node) { if (node == null) { return null; } var style = getComputedStyle(node); var text = style.getPropertyValue('overflow') + style.getPropertyValue('overflow-x') + style.getPropertyValue('overflow-y'); if (/auto|scroll/.test(text) || node.nodeName === 'BODY') { return node; } return getScrollParent(node.parentNode); } exports.getScrollParent = getScrollParent; /** * Deep diff between two object, using lodash * @param {Object} object Object compared * @param {Object} base Object to compare with * @return {Object} Return a new object who represent the diff */ function difference(object, base) { function changes(object, base) { var keys = uniq(Object.keys(object).concat(Object.keys(base))); var result = {}; keys.forEach(function (key) { var a = object[key]; var b = base[key]; if (isEqual(a, b)) { return; } if (!object.hasOwnProperty(key)) { result[key] = undefined; } else if (Array.isArray(a) && Array.isArray(b)) { // todo 数组要不要深入分析?我看先别了。 result[key] = a; } else if (lodashIsObject(a) && lodashIsObject(b)) { result[key] = changes(a, b); } else { result[key] = a; } }); return result; } return changes(object, base); } exports.difference = difference; exports.padArr = function (arr, size) { if (size === void 0) { size = 4; } var ret = []; var pool = arr.concat(); var from = 0; while (pool.length) { var host = ret[from] || (ret[from] = []); if (host.length >= size) { from += 1; continue; } host.push(pool.shift()); } return ret; }; function __uri(id) { return id; } exports.__uri = __uri; function isObject(obj) { var typename = typeof obj; return (obj && typename !== 'string' && typename !== 'number' && typename !== 'boolean' && typename !== 'function' && !Array.isArray(obj)); } exports.isObject = isObject; // xs < 768px // sm >= 768px // md >= 992px // lg >= 1200px function isBreakpoint(str) { if (typeof str !== 'string') { return !!str; } var breaks = str.split(/\s*,\s*|\s+/); if (window.matchMedia) { return breaks.some(function (item) { return item === '*' || (item === 'xs' && matchMedia("screen and (max-width: 767px)").matches) || (item === 'sm' && matchMedia("screen and (min-width: 768px) and (max-width: 991px)").matches) || (item === 'md' && matchMedia("screen and (min-width: 992px) and (max-width: 1199px)").matches) || (item === 'lg' && matchMedia("screen and (min-width: 1200px)").matches); }); } else { var width_1 = window.innerWidth; return breaks.some(function (item) { return item === '*' || (item === 'xs' && width_1 < 768) || (item === 'sm' && width_1 >= 768 && width_1 < 992) || (item === 'md' && width_1 >= 992 && width_1 < 1200) || (item === 'lg' && width_1 >= 1200); }); } } exports.isBreakpoint = isBreakpoint; function until(fn, when, getCanceler, interval) { var _this = this; if (interval === void 0) { interval = 5000; } var timer; var stoped = false; return new Promise(function (resolve, reject) { var cancel = function () { clearTimeout(timer); stoped = true; }; var check = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { var ret, e_1; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, , 3]); return [4 /*yield*/, fn()]; case 1: ret = _a.sent(); if (stoped) { return [2 /*return*/]; } else if (when(ret)) { stoped = true; resolve(ret); } else { timer = setTimeout(check, interval); } return [3 /*break*/, 3]; case 2: e_1 = _a.sent(); reject(e_1); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); }; check(); getCanceler && getCanceler(cancel); }); } exports.until = until; function omitControls(controls, omitItems) { return controls.filter(function (control) { return !~omitItems.indexOf(control.name || control._name); }); } exports.omitControls = omitControls; function isEmpty(thing) { if (isObject(thing) && Object.keys(thing).length) { return false; } return true; } exports.isEmpty = isEmpty; /** * 基于时间戳的 uuid * * @returns uniqueId */ exports.uuid = function () { return (+new Date()).toString(36); }; /** * 类似于 arr.map 方法,此方法主要针对类似下面示例的树形结构。 * [ * { * children: [] * }, * // 其他成员 * ] * * @param {Tree} tree 树形数据 * @param {Function} iterator 处理函数,返回的数据会被替换成新的。 * @return {Tree} 返回处理过的 tree */ function mapTree(tree, iterator, level, depthFirst, paths) { if (level === void 0) { level = 1; } if (depthFirst === void 0) { depthFirst = false; } if (paths === void 0) { paths = []; } return tree.map(function (item, index) { if (depthFirst) { var children = item.children ? mapTree(item.children, iterator, level + 1, depthFirst, paths.concat(item)) : undefined; children && (item = tslib_1.__assign(tslib_1.__assign({}, item), { children: children })); item = iterator(item, index, level, paths) || tslib_1.__assign({}, item); return item; } item = iterator(item, index, level, paths) || tslib_1.__assign({}, item); if (item.children && item.children.splice) { item.children = mapTree(item.children, iterator, level + 1, depthFirst, paths.concat(item)); } return item; }); } exports.mapTree = mapTree; function eachTree(tree, iterator, level) { if (level === void 0) { level = 1; } tree.map(function (item, index) { iterator(item, index, level); if (item.children && item.children.splice) { eachTree(item.children, iterator, level + 1); } }); } exports.eachTree = eachTree; function findTree(tree, iterator, level) { if (level === void 0) { level = 1; } var result = null; everyTree(tree, function (item, key, level) { if (iterator(item, key, level)) { result = item; return false; } return true; }); return result; } exports.findTree = findTree; function filterTree(tree, iterator, level) { if (level === void 0) { level = 1; } return tree.filter(function (item, index) { if (!iterator(item, index, level)) { return false; } if (item.children && item.children.splice) { item.children = filterTree(item.children, iterator, level + 1); } return true; }); } exports.filterTree = filterTree; function everyTree(tree, iterator, level) { if (level === void 0) { level = 1; } return tree.every(function (item, index) { var value = iterator(item, index, level); if (value && item.children && item.children.splice) { return everyTree(item.children, iterator, level + 1); } return value; }); } exports.everyTree = everyTree; function someTree(tree, iterator, level) { if (level === void 0) { level = 1; } return tree.some(function (item, index) { var value = iterator(item, index, level); if (!value && item.children && item.children.splice) { return someTree(item.children, iterator, level + 1); } return value; }); } exports.someTree = someTree; function flattenTree(tree) { var flattened = []; eachTree(tree, function (item) { return flattened.push(item); }); return flattened; } exports.flattenTree = flattenTree; function ucFirst(str) { return str ? str.substring(0, 1).toUpperCase() + str.substring(1) : ''; } exports.ucFirst = ucFirst; function lcFirst(str) { return str ? str.substring(0, 1).toLowerCase() + str.substring(1) : ''; } exports.lcFirst = lcFirst; function camel(str) { return str ? str .split(/[\s_\-]/) .map(function (item, index) { return (index === 0 ? lcFirst(item) : ucFirst(item)); }) .join('') : ''; } exports.camel = camel; function getWidthRate(value) { if (typeof value === 'string' && /\bcol\-\w+\-(\d+)\b/.test(value)) { return parseInt(RegExp.$1, 10); } return value || 0; } exports.getWidthRate = getWidthRate; function getLevelFromClassName(value, defaultValue) { if (defaultValue === void 0) { defaultValue = 'default'; } if (/\b(?:btn|text)-(link|primary|secondary|info|success|warning|danger|light|dark)\b/.test(value)) { return RegExp.$1; } return defaultValue; } exports.getLevelFromClassName = getLevelFromClassName; function pickEventsProps(props) { var ret = {}; props && Object.keys(props).forEach(function (key) { return /^on/.test(key) && (ret[key] = props[key]); }); return ret; } exports.pickEventsProps = pickEventsProps; exports.autobind = autobind_decorator_1.boundMethod; exports.bulkBindFunctions = function (context, funNames) { funNames.forEach(function (key) { return (context[key] = context[key].bind(context)); }); }; function sortArray(items, field, dir) { return items.sort(function (a, b) { var ret; var a1 = a[field]; var b1 = b[field]; if (typeof a1 === 'number' && typeof b1 === 'number') { ret = a1 < b1 ? -1 : a1 === b1 ? 0 : 1; } else { ret = String(a1).localeCompare(String(b1)); } return ret * dir; }); } exports.sortArray = sortArray; // 只判断一层, 如果层级很深,form-data 也不好表达。 function hasFile(object) { return Object.keys(object).some(function (key) { var value = object[key]; return value instanceof File || (Array.isArray(value) && value.length && value[0] instanceof File); }); } exports.hasFile = hasFile; function qsstringify(data, options) { if (options === void 0) { options = { arrayFormat: 'indices', encodeValuesOnly: true }; } return qs_1.default.stringify(data, options); } exports.qsstringify = qsstringify; function object2formData(data, options, fd) { if (options === void 0) { options = { arrayFormat: 'indices', encodeValuesOnly: true }; } if (fd === void 0) { fd = new FormData(); } var others = {}; Object.keys(data).forEach(function (key) { var value = data[key]; if (value instanceof File) { fd.append(key, value, value.name); } else if (Array.isArray(value) && value.length && value[0] instanceof File) { value.forEach(function (value) { return fd.append(key + "[]", value, value.name); }); } else { others[key] = value; } }); // 因为 key 的格式太多了,偷个懒,用 qs 来处理吧。 qsstringify(others, options) .split('&') .forEach(function (item) { var parts = item.split('='); parts[0] && fd.append(parts[0], parts[1]); }); return fd; } exports.object2formData = object2formData; function chainFunctions() { var fns = []; for (var _i = 0; _i < arguments.length; _i++) { fns[_i] = arguments[_i]; } return function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } fns.forEach(function (fn) { return fn && fn.apply(void 0, args); }); }; } exports.chainFunctions = chainFunctions; function mapObject(value, fn) { if (Array.isArray(value)) { return value.map(function (item) { return mapObject(item, fn); }); } if (isObject(value)) { var tmpValue_1 = tslib_1.__assign({}, value); Object.keys(tmpValue_1).forEach(function (key) { tmpValue_1[key] = mapObject(tmpValue_1[key], fn); }); return tmpValue_1; } return fn(value); } exports.mapObject = mapObject; //# sourceMappingURL=./utils/helper.js.map