/** * power * @author luoyifan * 2018-11-22 17:32:00 */ "use strict"; var sidm = 0; (function ($) { // 取消jQuery缓存 $.ajaxSetup({ cache: false }); $.yvan = $.yvan || {}; $.extend($.yvan, { version: '1.0.0', get: function (obj, exp) { if ($.type(exp) === 'string') { exp = exp.split('.'); } return exp.reduce(function (acc, key) { return acc && key in acc ? acc[key] : null; }, obj); }, set: function (obj, exp, value) { if ($.type(exp) === 'string') { exp = exp.split('.'); } for (var i = exp.length - 1; i >= 0; i--) { var c = {}; c[exp[i]] = value; value = c; } $.extend(true, obj, value); }, props: function (p1, p2) { var target = {}, i; if ($.type(p2) === 'array') { for (i = 0; i < p2.length; i++) { if (p1.hasOwnProperty(p2[i])) { target[p2[i]] = p1[p2[i]]; } } } else if ($.type(p2) === 'object') { for (var name in p2) { if (!p2.hasOwnProperty(name)) continue; target[p2[name]] = p1[name]; } } return target; }, upload: function (ajaxOpts) { var $dom = $('
'); $('body').append($dom.hide()); $dom.change(function () { var formData = new FormData($dom[0]); if (ajaxOpts.data) { for (var name in ajaxOpts.data) { if (!ajaxOpts.data.hasOwnProperty(name)) continue; formData.append(name, ajaxOpts.data[name]); } } $.yvan.ajax($.extend({}, ajaxOpts, { type: 'post', data: formData, cache: false, processData: false, contentType: false, })); $dom.remove(); }).find('input').trigger("click"); }, createId: function (prefix) { return (prefix || 'd') + '_' + (sidm++); }, getRandomNum: function (a, b) { switch (arguments.length) { case 1: return parseInt(Math.random() * a + 1); case 2: return parseInt(Math.random() * (b - a + 1) + a); default: return 0; } }, unparam: function (query) { var query_string = {}; if (query.slice(0, 1) === '#') { query = query.slice(1); } var vars = query.split("&"); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split("="); pair[0] = decodeURIComponent(pair[0]); pair[1] = decodeURIComponent(pair[1]); // If first entry with this name if (typeof query_string[pair[0]] === "undefined") { query_string[pair[0]] = pair[1]; } else if (typeof query_string[pair[0]] === "string") { var arr = [query_string[pair[0]], pair[1]]; query_string[pair[0]] = arr; } else { query_string[pair[0]].push(pair[1]); } } return query_string; }, getRandomNumByDef: function () { return this.getRandomNum(1e5, 999999); }, fillCommonProperties: function ($target, opts) { for (var name in opts) { if (!opts.hasOwnProperty(name)) continue; switch (name) { case 'xtype': $target.attr('xtype', opts[name]); break; case 'attr': for (var attrKey in opts[name]) { if (!opts[name].hasOwnProperty(attrKey)) continue; $target.attr(attrKey, opts[name][attrKey]); } break; case 'dialogId': $target.addClass('dlg_' + opts[name]); break; case 'name': $target.attr('itemId', opts[name]); break; case 'id': $target.attr('id', opts[name]); break; case 'html': $target.html(opts[name]); break; case 'class': $target.addClass(opts[name]); break; case 'css': $target.css(opts[name]); break; } } }, xtypeIsInput: function (xtype) { return ($.inArray(xtype, ['textbox', 'combobox', 'searchbox', 'datebox', 'numberbox', 'combotree', 'combotreegrid', 'combogrid', 'datetimebox', 'tagbox', 'maskedbox', 'passwordbox', 'filebox', 'numberspinner', 'hidden']) >= 0); }, copyData: function (str) { var save = function (e) { e.clipboardData.setData('text/plain', str); e.preventDefault(); document.removeEventListener('copy', save); }; document.addEventListener('copy', save); document.execCommand("copy"); }, getItems: function (item, context) { if (!item.items) return []; if ($.type(item.items) === 'array') return item.items; if ($.type(item.items) === 'function') { var r = item.items.apply(this, context); if (!r) return []; if ($.type(r) === 'array') return r; return [r]; } return [item.items]; }, formClear: function () { var jq = this; if (jq.length <= 0) return; jq.each(function (index, ele) { if (ele.tagName === 'FORM') { var $ele = $(ele); $ele.form('clear'); $ele.find('input[type="hidden"]').change(); $ele.find('input[type=select]').trigger('change'); //解决 formClear 但 searchbox 仍然会还原值的问题 $ele.find('.easyui-searchbox').each(function (a1, a2) { $(a2).data().widgetTmpValue = ''; $(a2).data().widgetValue = ''; }); } }); jq.find('form').each(function (index, form) { var $form = $(form); $form.form('clear'); $form.find('input[type="hidden"]').change(); $form.find('input[type=select]').trigger('change'); //解决 formClear 但 searchbox 仍然会还原值的问题 $(form).find('.easyui-searchbox').each(function (a1, a2) { $(a2).data().widgetTmpValue = ''; $(a2).data().widgetValue = ''; }); }); }, formSet: function (data) { var jq = this; if (jq.length <= 0) { return {}; } var r = jq.each(function (index, ele) { if (ele.tagName === 'FORM') { var $ele = $(ele); $ele.form('load', data); $ele.find('input[type="hidden"]').change(); $ele.find('input[type=select]').trigger('change'); //解决对焦之后,值会消失的问题 $(ele).find('.easyui-searchbox').each(function (a1, a2) { $(a2).data().widgetTmpValue = data[$(a2).attr('itemid')]; $(a2).data().widgetValue = data[$(a2).attr('itemid')]; }); } }); jq.find('form').each(function (index, form) { var $form = $(form); if ($form.attr('name')) { var formName = $form.attr('name'); if (data.hasOwnProperty(formName) && $.type(data[formName]) === 'object') { //子对象赋值 $form.form('load', data[formName]); $form.find('input[type="hidden"]').change(); $form.find('input[type=select]').trigger('change'); //解决对焦之后,值会消失的问题 $form.find('.easyui-searchbox').each(function (a1, a2) { $(a2).data().widgetTmpValue = data[$(a2).attr('itemid')]; $(a2).data().widgetValue = data[$(a2).attr('itemid')]; }); } } else { //没有名字,平级赋值 $form.form('load', data); $form.find('input[type="hidden"]').change(); $form.find('input[type=select]').trigger('change'); //解决对焦之后,值会消失的问题 $form.find('.easyui-searchbox').each(function (a1, a2) { $(a2).data().widgetTmpValue = data[$(a2).attr('itemid')]; $(a2).data().widgetValue = data[$(a2).attr('itemid')]; }); } }); return r; }, formGet: function (validate) { var jq = this; if (jq.length <= 0) { return {}; } var vra = []; var m = []; jq.each(function (index, ele) { if (ele.tagName === 'FORM') { var $form = $(this); if (validate) { //需要强制校验 var vr = $form.form('enableValidation').form('validate'); if (!vr) { vra.push($form); } if (vra.length > 0) { //校验失败 return vra; } } m.push({ id: '', obj: $form.serializeObject() }); } }); jq.find('form').each(function (index, form) { var $form = $(form); if (validate) { //需要强制校验 var vr = $form.form('enableValidation').form('validate'); if (!vr) { vra.push($form); } if (vra.length > 0) { //校验失败 return vra; } } if ($form.attr('name')) { m.push({ id: $form.attr('name'), obj: $form.serializeObject() }); } else { m.push({ id: '', obj: $form.serializeObject() }); } }); if (validate && vra.length > 0) { return { validate: false, validateError: vra }; } var r = {}; if (validate) { $.extend(r, { validate: true }); } for (var i = 0; i < m.length; i++) { if (m[i].id) { if (r.hasOwnProperty(m[i].id)) { $.extend(r[m[i].id], m[i].obj); } else { r[m[i].id] = m[i].obj; } } else { $.extend(r, m[i].obj); } } return r; }, postJson: function (opts) { var data = opts.data; $.yvan.ajax($.extend(opts, { type: 'post', dataType: 'json', data: JSON.stringify(data), contentType: "application/json; charset=utf-8" })); }, uploadFormData: function ($form, opts) { var vr = $form.form('enableValidation').form('validate'); if (!vr) { return; } var formData = new FormData($form[0]); formData.delete("file"); $.yvan.ajax($.extend({}, opts, { type: 'post', data: formData, cache: false, processData: false, contentType: false, })); }, uploadFile: function (formData, opts) { $.yvan.ajax($.extend({}, opts, { type: 'post', data: formData, cache: false, processData: false, contentType: false, })); }, uploadFileCheckMd5: function (formData, opts) { $.yvan.getFileMd5(formData.get('file'), function (md5) { formData.append('fileMd5', md5); $.yvan.ajax({ url: fileUrl('/file/isExist'), method: 'get', data: {fileMd5: md5, param: formData.get('param')}, success: function (data) { if (data.data === '') { $.yvan.uploadFile(formData, opts); } else { opts.success(data); } } }); }); }, getFileMd5: function (file, valueCallback) { var blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice, md5value = '', chunkSize = 2097152, // Read in chunks of 2MB chunks = Math.ceil(file.size / chunkSize), currentChunk = 0, spark = new SparkMD5.ArrayBuffer(), fileReader = new FileReader(); fileReader.onload = function (e) { console.log('read chunk nr', currentChunk + 1, 'of', chunks); spark.append(e.target.result); // Append array buffer currentChunk++; if (currentChunk < chunks) { loadNext(); } else { console.log('finished loading'); md5value = spark.end(); console.info('computed hash', md5value); // Compute hash valueCallback(md5value); } }; fileReader.onerror = function () { console.warn('oops, something went wrong.'); }; function loadNext() { var start = currentChunk * chunkSize, end = ((start + chunkSize) >= file.size) ? file.size : start + chunkSize; fileReader.readAsArrayBuffer(blobSlice.call(file, start, end)); } loadNext(); }, postForm: function ($form, opts) { var vr = $form.form('enableValidation').form('validate'); if (!vr) { return false; } //var data = $form.serializeObject(); var data = $form.formGet(); if (opts.dataProcess) { opts.dataProcess(data); } this.postJson($.extend(opts, { data: data })); }, //不验证提交Form,物资编码使用 postFormNoValidate: function ($form, opts) { // var vr = $form.form('enableValidation').form('validate'); // if (!vr) { // return false; // } //var data = $form.serializeObject(); var data = $form.formGet(); if (opts.dataProcess) { opts.dataProcess(data); } this.postJson($.extend(opts, { data: data })); }, easyuiAjax: function (opts, param, success, error) { if (!opts.url) { if ($.type(opts.bizDict) === 'string') { //数据来源于 biz 字典 success($.yvan.sysDict(opts.bizDict).combo()); return; } if ($.type(opts.sysDict) === 'string') { //数据来源于 sys 字典 success($.yvan.sysDict(opts.sysDict).combo()); return; } //其他情况 error(); return false; } if (opts.hasOwnProperty('loadCondition')) { //有ajax条件的情况 if (!opts.loadCondition(opts, param)) { error(); return false; } } $.yvan.ajax({ type: opts.method, url: opts.url, data: param, loadingMask: opts.loadingMask || false, success: function (data, textStatus, res) { if (opts.dataProcess) { opts.dataProcess.apply(this, arguments); } if (opts.pagination) { success({ total: data.pagination.count, rows: data.data }); } else { success(data.data); } }, error: function (event, xhr, options, exc) { error.apply(this, arguments); } }); } }); $.fn.extend({ progress: function (method) { if ($.type(method) === 'string') { if (method === 'close') { this.find('.loading-wrap').remove(); } else { console.error('no method: progress(' + method + ')'); } } else { if ($('.loading-wrap').length > 0) { return; } var $dom = $( '