4
0
Fork 0
dcat-admin/resources/assets/dcat/js/extensions/Helpers.js

321 lines
7.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import debounce from './Debounce'
export default class Helpers {
constructor(Dcat) {
Dcat.helpers = this;
this.dcat = Dcat;
// 延迟触发,消除重复触发
this.debounce = debounce;
}
/**
* 获取json对象或数组的长度
*
* @param obj
* @returns {number}
*/
len(obj) {
if (typeof obj !== 'object') {
return 0;
}
let i, len = 0;
for(i in obj) {
len += 1;
}
return len;
}
/**
* 判断变量或key是否存在
*
* @param _var
* @param key
* @returns {boolean}
*/
isset(_var, key) {
let isset = (typeof _var !== 'undefined' && _var !== null);
if (typeof key === 'undefined') {
return isset;
}
return isset && typeof _var[key] !== 'undefined';
};
empty(obj, key) {
return !(this.isset(obj, key) && obj[key]);
};
/**
* 根据key获取对象的值支持获取多维数据
*
* @param arr
* @param key
* @param def
* @returns {null|*}
*/
get(arr, key, def) {
def = null;
if (this.len(arr) < 1) {
return def;
}
key = String(key).split('.');
for (var i = 0; i < key.length; i++) {
if (this.isset(arr, key[i])) {
arr = arr[key[i]];
} else {
return def;
}
}
return arr;
}
/**
* 判断key是否存在
*
* @param arr
* @param key
* @returns {def|boolean}
*/
has(arr, key) {
if (this.len(arr) < 1) return def;
key = String(key).split('.');
for (var i = 0; i < key.length; i++) {
if (this.isset(arr, key[i])) {
arr = arr[key[i]];
} else {
return false;
}
}
return true;
}
/**
* 判断元素是否在对象中存在
*
* @param arr
* @param val
* @param strict
* @returns {boolean}
*/
inObject(arr, val, strict) {
if (this.len(arr) < 1) {
return false;
}
for (var i in arr) {
if (strict) {
if (val === arr[i]) {
return true;
}
continue
}
if (val == arr[i]) {
return true;
}
}
return false;
}
// 判断对象是否相等
equal(array, array2, strict) {
if (!array || !array2) {
return false;
}
let len1 = this.len(array),
len2 = this.len(array2), i;
if (len1 !== len2) {
return false;
}
for (i in array) {
if (! this.isset(array2, i)) {
return false;
}
if (array[i] === null && array2[i] === null) {
return true;
}
if (typeof array[i] === 'object' && typeof array2[i] === 'object') {
if (! this.equal(array[i], array2[i], strict)) {
return false;
}
continue;
}
if (strict) {
if (array[i] !== array2[i]) {
return false;
}
} else {
if (array[i] != array2[i]) {
return false;
}
}
}
return true;
}
// 字符串替换
replace(str, replace, subject) {
if (!str) {
return str;
}
return str.replace(
new RegExp(replace, "g"),
subject
);
}
/**
* 生成随机字符串
*
* @returns {string}
*/
random(len) {
return Math.random().toString(12).substr(2, len || 16)
}
// 预览图片
previewImage(src, width, title) {
let Dcat = this.dcat,
img = new Image(),
win = this.isset(window.top) ? top : window,
clientWidth = Math.ceil(win.screen.width * 0.6),
clientHeight = Math.ceil(win.screen.height * 0.8);
img.style.display = 'none';
img.style.height = 'auto';
img.style.width = width || '100%';
img.src = src;
document.body.appendChild(img);
Dcat.loading();
img.onload = function () {
Dcat.loading(false);
let srcw = this.width,
srch = this.height,
width = srcw > clientWidth ? clientWidth : srcw,
height = Math.ceil(width * (srch/srcw));
height = height > clientHeight ? clientHeight : height;
title = title || src.split('/').pop();
if (title.length > 50) {
title = title.substr(0, 50) + '...';
}
layer.open({
type: 1,
shade: 0.2,
title: false,
maxmin: false,
shadeClose: true,
closeBtn: 2,
content: $(img),
area: [width+'px', (height) + 'px'],
skin: 'layui-layer-nobg',
end: function () {
document.body.removeChild(img);
}
});
};
img.onerror = function () {
Dcat.loading(false);
Dcat.error(Dcat.lang.trans('no_preview'))
};
}
// 异步加载
asyncRender(url, done, error) {
let Dcat = this.dcat;
$.ajax(url).then(function (data) {
done(
Dcat.assets.resolveHtml(data, Dcat.triggerReady).render()
);
}, function (a, b, c) {
if (error) {
if (error(a, b, c) === false) {
return false;
}
}
Dcat.handleAjaxError(a, b, c);
})
}
/**
* 联动多个字段.
*
* @param _this
* @param options
*/
loadFields(_this, options) {
let refreshOptions = function(url, target) {
Dcat.loading();
$.ajax(url).then(function(data) {
Dcat.loading(false);
target.find("option").remove();
$.map(data, function (d) {
target.append(new Option(d[options.textField], d[options.idField], false, false));
});
$(target).val(String(target.data('value')).split(',')).trigger('change');
});
};
let promises = [],
values = [];
if (! options.values) {
$(_this).find('option:selected').each(function () {
if (String(this.value) === '0' || this.value) {
values.push(this.value)
}
});
} else {
values = options.values;
if (typeof values === 'string') {
values = [values];
}
}
if (! values.length) {
return;
}
options.fields.forEach(function(field, index){
var target = $(_this).closest(options.group).find('.' + options.fields[index]);
if (! values.length) {
return;
}
promises.push(refreshOptions(options.urls[index] + (options.urls[index].match(/\?/)?'&':'?') + "q="+ values.join(','), target));
});
$.when(promises).then(function() {});
}
}