123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320 |
- 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) + '...';
- }
- win.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() {});
- }
- }
|