UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

605 lines (604 loc) 26.2 kB
"use strict"; /** * * @param str 字符串 * @param caseSensitive 是否小大写敏感 * @returns 返回哈希值 */ Object.defineProperty(exports, "__esModule", { value: true }); exports.getNameInString = exports.openImageEnlarge = exports.cartesianProduct = exports.multiColumnSort = exports.findField = exports.exchangeType = exports.filterFn = exports.sortFn = exports.deepCalcFn = exports.calcFn = exports.translateNumber = exports.dealBigNumber = exports.dealBigMoney = exports.handlelimitSize = exports.ModleHandleClick = exports.linkJump = exports.checkDuplicateKeys = exports.getHashCode = exports.getDecimalPlaces = void 0; var tslib_1 = require("tslib"); var bignumber_js_1 = (0, tslib_1.__importDefault)(require("bignumber.js")); var lodash_1 = require("lodash"); var types_1 = require("../components/table/SecondFilter/types"); var utils_1 = require("../renderers/Lion/utils/utils"); var helper_1 = require("./helper"); var shell_1 = require("./shell"); var tools_1 = require("./shell/tools"); var tpl_1 = require("./tpl"); var tpl_builtin_1 = require("./tpl-builtin"); // type ScanAfterPort = IExpress var getDecimalPlaces = function (num) { var str = num.toString(); return str.includes('.') ? str.split('.')[1].length : 0; }; exports.getDecimalPlaces = getDecimalPlaces; //字符串哈希函数 function getHashCode(str, caseSensitive) { if (str === void 0) { str = ''; } if (!caseSensitive) { str = str.toLowerCase(); } var hash = 1315423911, i, ch; for (i = str.length - 1; i >= 0; i--) { ch = str.charCodeAt(i); hash ^= ((hash << 5) + ch + (hash >> 2)); } return (hash & 0x7FFFFFFF); } exports.getHashCode = getHashCode; /** * * @param array 数据 * @param key 主键 * @returns boolean,是否重复 */ var checkDuplicateKeys = function (array, key) { var keySet = new Set(); for (var i = 0; i < array.length; i++) { var item = array[i]; var keyValue = item[key]; if (keySet.has(keyValue)) { // 重复主键 return true; } keySet.add(keyValue); } // 没有重复主键 return false; }; exports.checkDuplicateKeys = checkDuplicateKeys; var JumpTarget; (function (JumpTarget) { JumpTarget[JumpTarget["INCLINENT"] = 1] = "INCLINENT"; JumpTarget[JumpTarget["NEWWIN"] = 4] = "NEWWIN"; })(JumpTarget || (JumpTarget = {})); // 判断是否可以跳转 var linkJump = function (linkId, data, dataDisabeExpress) { if (!linkId) return false; var isVar = /\$\{.*?\}/g.test(linkId); var expressResValid = !dataDisabeExpress || !(0, tpl_1.evalExpression)(dataDisabeExpress || '', data); if (isVar) { var startIdx = linkId.indexOf('{') + 1; var endIdx = linkId.indexOf('}'); var fieldName = linkId.substring(startIdx, endIdx); return data[fieldName] != undefined && expressResValid; } else return expressResValid; }; exports.linkJump = linkJump; // 判断跳转的方法tab/弹窗 function ModleHandleClick(props, tbth) { var _a, _b; var linkUrl = props.linkUrl, linkSize = props.linkSize, linkType = props.linkType, data = props.data, env = props.env, handleJump = props.handleJump, linkId = props.linkId, matrixId = props.matrixId, cx = props.classnames; var linkTitle = props.linkTitle; // 传入map mapping类型的特殊处理 if (((_a = props === null || props === void 0 ? void 0 : props.crudColumn) === null || _a === void 0 ? void 0 : _a.map) && (props === null || props === void 0 ? void 0 : props.crudColumn.type) === 'mapping') { data.map = props.crudColumn.map; // 变量处理 linkTitle = (0, tpl_builtin_1.tokenize)(linkTitle, data); // 因为map类型变量为了能够直接解析,会一个变量现行解析,把变量复制进去 样例: ${map["${BRAND_ID}"]} } if (linkUrl && !(0, lodash_1.isNil)(props.value)) { var drawer = tbth === null || tbth === void 0 ? void 0 : tbth.closest("." + cx('Drawer')); var title = (0, tpl_builtin_1.tokenize)(linkTitle, data); if (linkType == JumpTarget.INCLINENT && !env.onPageLink) { sessionStorage.setItem('envDataStr', JSON.stringify(env)); } var url = (0, tpl_builtin_1.tokenize)(linkUrl, data); if ((((0, helper_1.isMobile)() && matrixId && !drawer) || linkType == JumpTarget.INCLINENT || linkType == "1") && env.onPageLink) { var pageId = (0, tpl_builtin_1.tokenize)(linkId, data); var id = getHashCode(title + linkId).toString(); env.onPageLink(id, pageId, title !== null && title !== void 0 ? title : 'title', url, data, true); // 直接跳转外部页面 } else if (linkType == JumpTarget.NEWWIN) { var pageUrl = (0, tpl_builtin_1.tokenize)(linkId, data, '| url_decode'); window.open(pageUrl, '__blank'); } else { var _c = (_b = env.parseLinkUrl) === null || _b === void 0 ? void 0 : _b.call(env, url), redirectRouter = _c.redirectRouter, redirectType = _c.redirectType, redirectApp = _c.redirectApp; handleJump === null || handleJump === void 0 ? void 0 : handleJump({ linkUrl: redirectRouter, linkSize: linkSize, linkTitle: title, bodydata: data, linkAppId: redirectApp, redirectType: redirectType }); } } } exports.ModleHandleClick = ModleHandleClick; function handlelimitSize(max, min, body, showModal) { if (max !== undefined && min !== undefined) { if (min > max) { showModal === null || showModal === void 0 ? void 0 : showModal('最小值不得大于最大值'); return false; } if (body.length < min) { showModal === null || showModal === void 0 ? void 0 : showModal("\u6700\u5C11\u6DFB\u52A0" + min + "\u4E2A"); return false; } else if (body.length > max) { showModal === null || showModal === void 0 ? void 0 : showModal("\u6700\u591A\u6DFB\u52A0" + max + "\u4E2A"); return false; } } if (max !== undefined && min == undefined && body.length > max) { showModal === null || showModal === void 0 ? void 0 : showModal("\u6700\u591A\u6DFB\u52A0" + max + "\u4E2A"); return false; } if (max == undefined && min !== undefined && body.length < min) { showModal === null || showModal === void 0 ? void 0 : showModal("\u6700\u5C11\u6DFB\u52A0" + min + "\u4E2A"); return false; } return true; } exports.handlelimitSize = handlelimitSize; function dealBigMoney(n) { var fraction = ['角', '分']; var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']; var unit = [['元', '万', '亿'], ['', '拾', '佰', '仟']]; var head = n < 0 ? '欠' : ''; n = Math.abs(n); var s = ''; // 修复小数部分处理 var cents = Math.round(n * 100) % 100; // 先转换为分单位 s += (digit[Math.floor(cents / 10)] + fraction[0]).replace(/零./, ''); // 角 s += (digit[cents % 10] + fraction[1]).replace(/零./, ''); // 分 s = s || '整'; n = Math.floor(n); for (var i = 0; i < unit[0].length && n > 0; i++) { var p = ''; for (var j = 0; j < unit[1].length && n > 0; j++) { p = digit[n % 10] + unit[1][j] + p; n = Math.floor(n / 10); } s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s; } return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整'); } exports.dealBigMoney = dealBigMoney; function dealBigNumber(n) { if (n === 0) return '零'; var num = Math.abs(n); var numArr = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"); var unitArr = new Array("", "十", "百", "千", "万", "亿", "点", ""); var a = ("" + num).replace(/(^0*)/g, "").split("."), k = 0, re = ""; for (var i_1 = a[0].length - 1; i_1 >= 0; i_1--) { switch (k) { case 0: re = unitArr[7] + re; break; case 4: if (!new RegExp("0{4}//d{" + (a[0].length - i_1 - 1) + "}$") .test(a[0])) re = unitArr[4] + re; break; case 8: re = unitArr[5] + re; unitArr[7] = unitArr[5]; k = 0; break; } if (k % 4 == 2 && a[0].charAt(i_1 + 2) != '0' && a[0].charAt(i_1 + 1) == '0') { re = numArr[0] + re; } if (a[0].charAt(i_1) != '0') { re = numArr[a[0].charAt(i_1)] + unitArr[k % 4] + re; } k++; } if (a.length > 1) { re += unitArr[6]; for (var i = 0; i < a[1].length; i++) re += numArr[a[1].charAt(i)]; } if (re == '一十') re = "十"; if (re.match(/^一/) && re.length == 3) re = re.replace("一", ""); return (n < 0 ? '负' : '') + re; } exports.dealBigNumber = dealBigNumber; /** * * @param value 数值 * @param showUppercase 转换类型 * @returns 转换后的值 */ function translateNumber(value, showUppercase) { if (showUppercase === 1) { value = dealBigNumber(Number(+value)); } else if (showUppercase === 2) { value = dealBigMoney(Number(+value)); } return value; } exports.translateNumber = translateNumber; function calcFn(formula, fieldName, items) { if (!Array.isArray(items)) return 0; var tmpItems = items.filter(function (item) { return item[fieldName] != undefined; }); switch (formula) { case 'sum': return tmpItems.reduce(function (previous, current) { return new bignumber_js_1.default(previous).plus(Number(current[fieldName]) || 0).toNumber(); }, 0); case 'avg': var sum = tmpItems.reduce(function (previous, current) { return new bignumber_js_1.default(previous).plus(Number(current[fieldName]) || 0); }, 0); var count = items.length; return new bignumber_js_1.default(sum).dividedBy(count).toNumber(); case 'max': return tmpItems.reduce(function (previous, current) { return Math.max(previous, Number(current[fieldName]) || 0); }, Number.MIN_VALUE); case 'min': return tmpItems.length ? tmpItems.reduce(function (previous, current) { return Math.min(previous, Number(current[fieldName]) || 0); }, Number.MAX_VALUE) : 0; case 'count': return tmpItems.length; default: if (formula.includes('+') || formula.includes('-') || formula.includes('*') || formula.includes('/') || formula.includes('(') || formula.includes(')')) { return deepCalcFn(formula, items); } return 0; } } exports.calcFn = calcFn; function deepCalcFn(formula, items) { var str = formula; var fns = str.match(/(AVG|SUM|MAX|MIN|COUNT)/g); var params = str.match(/\((.*?)\)/g).map(function (param) { return param.replace('(', '').replace(')', ''); }); if (fns && items.length > 0) { var calculatedStr_1 = ''; fns.forEach(function (fn, index) { if (index === 0) { calculatedStr_1 += calcFn(fn.toLocaleLowerCase(), params[index], items); } else { var operator = str.match(/(\*|\+|\-|\/)/g)[index - 1]; calculatedStr_1 += "" + operator + calcFn(fn.toLocaleLowerCase(), params[index], items); } }); var res = void 0; try { res = eval(calculatedStr_1); } catch (error) { res = 0; } return res; } return 0; } exports.deepCalcFn = deepCalcFn; function sortFn(a, b, sortBy) { if (sortBy == undefined) return 0; if (typeof a === 'number' && typeof b === 'number') { return sortBy === 'asc' ? a - b : b - a; } return sortBy === 'asc' ? String(a !== null && a !== void 0 ? a : '').localeCompare(String(b !== null && b !== void 0 ? b : ''), undefined, { numeric: true, ignorePunctuation: false }) : String(b !== null && b !== void 0 ? b : '').localeCompare(String(a !== null && a !== void 0 ? a : ''), undefined, { numeric: true, ignorePunctuation: false }); } exports.sortFn = sortFn; function filterFn(items, columnName, condition, _value1, _value2, caseSensitive) { if (caseSensitive === void 0) { caseSensitive = true; } return items.filter(function (item) { // 如果转不动数字保持原来的值 var value = item[columnName]; var value1 = _value1; var value2 = _value2; // 需要才转数字 分别是 大于 小于 等于 大于等于 小于等于 var tryToTransValueToNumber = function () { // 如果转不成数字就按原值处理 if (!(0, lodash_1.isNil)(value) && !isNaN(+value)) { value = +value; if (!(0, lodash_1.isNil)(_value1) && !isNaN(+_value1)) { value1 = +_value1; } if (!(0, lodash_1.isNil)(_value2) && !isNaN(+_value2)) { value2 = +_value2; } } }; var valueToUpperCase = function () { if (!caseSensitive) { if (typeof value1 == 'string') value1 = value1.toUpperCase(); if (typeof value == 'string') value = value.toUpperCase(); } }; var tryParseExpr = function () { if (typeof value1 == 'string') { var fields = value1.match(/\[(.*?)\]/g); if (fields) { for (var _i = 0, fields_1 = fields; _i < fields_1.length; _i++) { var field = fields_1[_i]; var fieldValue = item[field.slice(1, field.length - 1)]; //typeof fieldValue == 'number' ? `${fieldValue}` : `'${fieldValue}'` value1 = value1.replaceAll(field, String(fieldValue)); } try { value1 = eval(value1.replaceAll('||', '+')); } catch (_a) { } } } }; switch (condition) { case types_1.Condition.GreaterThan: tryToTransValueToNumber(); tryParseExpr(); return value != null && (value) > (value1); case types_1.Condition.LessThan: tryToTransValueToNumber(); tryParseExpr(); return value != null && (value) < (value1); case types_1.Condition.Between: tryToTransValueToNumber(); tryParseExpr(); return (value) >= (value1) && (value) <= (value2); case types_1.Condition.Equal: valueToUpperCase(); if (typeof value1 == 'string') { if (value1.includes(',')) { return value1.split(',').some(function (v) { return value == v; }); } else if (value1.includes(',')) { return value1.split(',').some(function (v) { return value == v; }); } tryParseExpr(); } return value == value1; case types_1.Condition.NotEqual: valueToUpperCase(); if (typeof value1 == 'string') { if (value1.includes(',')) { return value1.split(',').every(function (v) { return value != v; }); } else if (value1.includes(',')) { return value1.split(',').every(function (v) { return value != v; }); } tryParseExpr(); } return value != value1; case types_1.Condition.GreaterThanOrEqual: tryToTransValueToNumber(); tryParseExpr(); return value != null && (value) >= (value1); case types_1.Condition.LessThanOrEqual: tryToTransValueToNumber(); tryParseExpr(); return value != null && (value) <= (value1); case types_1.Condition.Null: return value == null; case types_1.Condition.NotNull: return value != null; case types_1.Condition.Contain: valueToUpperCase(); if (typeof value1 == 'string') { return value1.split(',').some(function (v) { return String(value).includes(String(v)); }); } return value != null && String(value).includes(String(value1)); case types_1.Condition.NotContain: valueToUpperCase(); if (typeof value1 == 'string') { return value1.split(',').every(function (v) { return !String(value).includes(String(v)); }); } return value != null && !String(value).includes(String(value1)); case types_1.Condition.StartsWith: valueToUpperCase(); return value != null && String(value).startsWith(String(value1)); case types_1.Condition.EndsWith: valueToUpperCase(); return value != null && String(value).endsWith(String(value1)); } }); } exports.filterFn = filterFn; /** * 查看类型转为表单控件的查看类型 * @param type 类型 * @returns type: string */ function exchangeType(type) { switch (type) { case 'mapping': case 'html': case 'progress': case 'date': case 'time': case 'color': case 'datetime': return 'static-' + type; case 'number': return 'input-number'; default: return type || 'static'; } } exports.exchangeType = exchangeType; //递归遍历super对象,查找某个属性的值 function findField(obj, targetField) { // 遍历对象的每一个属性 if (obj.hasOwnProperty(targetField)) { return obj[targetField]; } else if (obj.__super && JSON.stringify(obj.__super) !== '{}') { return findField(obj.__super, targetField); } // 如果没有找到目标字段,返回 undefined return undefined; } exports.findField = findField; //多列排序 /** * @param tableData 原始数据 * @param columnProperties 排序字段 * @returns 排序后数据 obj<any>[] */ function multiColumnSort(tableData, columnProperties) { return tableData.sort(function (a, b) { for (var _i = 0, columnProperties_1 = columnProperties; _i < columnProperties_1.length; _i++) { var property = columnProperties_1[_i]; var valueA = a[property]; var valueB = b[property]; // 处理 null 和 undefined 值 if (valueA === null || valueA === undefined) { if (valueB === null || valueB === undefined) { // 如果两者都是 null 或 undefined,则认为它们相等,继续比较下一列 continue; } else { // 如果 valueA 是 null 或 undefined 而 valueB 不是,则认为 valueA 应该排在 valueB 之前 return -1; } } else if (valueB === null || valueB === undefined) { // 如果 valueB 是 null 或 undefined 而 valueA 不是,则认为 valueA 应该排在 valueB 之后 return 1; } // 正常比较非 null/undefined 的值 if (typeof valueA === "number") { var comparison = valueA - valueB; if (comparison !== 0) return comparison; } else { var comparison = valueA.localeCompare(valueB, undefined, { sensitivity: 'accent' }); if (comparison !== 0) return comparison; } } // 如果所有列都相同(包括 null/undefined 处理),则认为两个记录相等,返回0保持原顺序 return 0; }); } exports.multiColumnSort = multiColumnSort; // 计算笛卡儿积 var cartesianProduct = function () { var arrays = []; for (var _i = 0; _i < arguments.length; _i++) { arrays[_i] = arguments[_i]; } if (arrays.length === 0) return []; if (arrays.length === 1) return arrays[0].map(function (x) { return [x]; }); return exports.cartesianProduct.apply(void 0, arrays.slice(0, -1)).reduce(function (acc, val) { return acc.concat(arrays[arrays.length - 1].map(function (x) { return val.concat(x); })); }, []); }; exports.cartesianProduct = cartesianProduct; var openImageEnlarge = function (data, baseURL, onImageEnlarge, env) { var isNotImg = false; var list = data.map(function (item) { var _a, _b, _c, _d, _e; isNotImg = !(0, utils_1.isImg)(item.name); var _imgUrl = item.thumbnailAddr || (item === null || item === void 0 ? void 0 : item.addr); // 如果开始时http不进行拼接处理 var imgUrl = ((_a = _imgUrl === null || _imgUrl === void 0 ? void 0 : _imgUrl.startsWith) === null || _a === void 0 ? void 0 : _a.call(_imgUrl, "http")) ? _imgUrl : ((baseURL ? baseURL : '') + _imgUrl); var originalSrc = ((_c = (_b = item.preview) === null || _b === void 0 ? void 0 : _b.startsWith) === null || _c === void 0 ? void 0 : _c.call(_b, "http")) ? item.preview : ((baseURL ? baseURL : '') + item.preview); var downloadSrc = ((_e = (_d = item === null || item === void 0 ? void 0 : item.addr) === null || _d === void 0 ? void 0 : _d.startsWith) === null || _e === void 0 ? void 0 : _e.call(_d, "http")) ? item === null || item === void 0 ? void 0 : item.addr : ((baseURL ? baseURL : '') + (item === null || item === void 0 ? void 0 : item.addr)); return { src: isNotImg ? (0, utils_1.getMediaIcon)(item.name) : imgUrl, originalSrc: originalSrc, downloadSrc: downloadSrc, title: item.name || '', isNotImg: isNotImg }; }); if ((0, helper_1.isMobile)()) { if (shell_1.Shell.hasShell()) { if (tools_1.tools.isAndroid) { shell_1.Shell.previewFile({ urls: list.map(function (val) { return val.originalSrc; }) }); } else { var urls = list.map(function (attachment) { var url = new URL(encodeURI(attachment.originalSrc)); var search = url.search == '' ? "?fileName=" + (Date.now() + attachment.title) : url.search + "&fileName=" + (Date.now() + attachment.title); url.search = search; return url.href; }); shell_1.Shell.previewFile({ urls: urls, current: 0 }); } return; } else if (env === null || env === void 0 ? void 0 : env.previewImagesMb) { var urls = list.map(function (val) { return val.originalSrc; }); env.previewImagesMb(urls, 0); return; } } onImageEnlarge && onImageEnlarge({ src: list[0].src, originalSrc: list[0].originalSrc, index: 0, list: list }); }; exports.openImageEnlarge = openImageEnlarge; // 获取文本中的列名称 a[dd]ccccc[ee]ff 获取文本中的 dd 与 ee并返回 var getNameInString = function (valueStr) { // 文本起始位置 var index = 0; // 转化文本 var newStr = ''; // 字段转化对应表 var parseObj = {}; // 括号计数 var BracktCount = 0; // 括号中的变量名 var nameInBrackt = ''; while (valueStr[index]) { var curStr = valueStr[index]; // 如果遇到左括号计数+1 堆推入 跳过循环 if (curStr === '[') { index++; BracktCount++; continue; } // 如果遇到左括号计数-1 堆弹出 if (curStr === ']' && BracktCount) BracktCount--; // 还有括号计数的情况下 说明还在括号里面 记录变量字符串 if (BracktCount) { nameInBrackt += curStr; } else { // 如果没有括号计数但有暂存变量 增加新文本的值 if (nameInBrackt) { nameInBrackt = "[" + nameInBrackt + "]"; parseObj[nameInBrackt] = nameInBrackt[nameInBrackt] || "{$" + Object.values(parseObj).length + "}"; // 字符串变化 newStr += parseObj[nameInBrackt]; nameInBrackt = ''; } else { // 如果没有括号计数并且没有暂存变量 增加新文本的值 newStr += curStr; } } index++; } return { orginStr: valueStr, parseStr: newStr, parseObj: parseObj }; }; exports.getNameInString = getNameInString; //# sourceMappingURL=./utils/utils.js.map