fastlion-amis
Version:
一种MIS页面生成工具
605 lines (604 loc) • 26.2 kB
JavaScript
/**
*
* @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
;